Skip to content

Commit

Permalink
Always preserve expanded inherits
Browse files Browse the repository at this point in the history
This changes the formatting to take into account whether inherits
are expanded onto multiple lines already, and if so, preserves that.

This is desirable because if a user writes an inherit over
multiple lines, there's most likely an intention to add more,
which would become harder when formatted.

An example of this is inheriting from `lib`, which usually starts out
with just a single value, but usually gets more later. This would've been
contracted onto a single line before this change:

    inherit (lib)
      foo
      ;

This change conforms to the standard due to this line:

> The formatter may take the input formatting into account in some cases in order to preserve multi-line syntax elements (which would otherwise have been contracted by the rules).
  • Loading branch information
infinisil committed Jul 19, 2024
1 parent dee9c7a commit de25dc0
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/Nixfmt/Pretty.hs
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,11 @@ instance Pretty Binder where
pretty inherit
<> ( if null ids
then pretty semicolon
else line <> nest (sepBy (if length ids < 4 then line else hardline) ids <> line' <> pretty semicolon)
else line <> nest (sepBy sep ids <> line' <> pretty semicolon)
)
where
-- Only allow a single line if it's already on a single line and has few enough elements
sep = if sourceLine inherit == sourceLine semicolon && length ids < 4 then line else hardline
-- `inherit (foo) bar` statement
pretty (Inherit inherit (Just source) ids semicolon) =
group $
Expand All @@ -141,10 +144,13 @@ instance Pretty Binder where
then pretty semicolon
else
line
<> sepBy (if length ids < 4 then line else hardline) ids
<> sepBy sep ids
<> line'
<> pretty semicolon
)
where
-- Only allow a single line if it's already on a single line and has few enough elements
sep = if sourceLine inherit == sourceLine semicolon && length ids < 4 then line else hardline
-- `foo = bar`
pretty (Assignment selectors assign expr semicolon) =
group $
Expand Down

0 comments on commit de25dc0

Please sign in to comment.