Skip to content

Commit

Permalink
Fix infinite recursion when walking Abstractions
Browse files Browse the repository at this point in the history
This caused an infinite recursion when trying to minimise the
non-idempotency when running --verify on

    {
      foo
    # bar
    , baz # qux
    }:
    null
  • Loading branch information
infinisil committed Jul 12, 2024
1 parent a98ea65 commit 4aaab56
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/Nixfmt/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,12 @@ instance LanguageElement Expression where
)
(Assert _ cond _ body) -> [cond, body]
(If _ expr0 _ expr1 _ expr2) -> [expr0, expr1, expr2]
(Abstraction param _ body) -> [Abstraction param (ann TColon) (Term (Token (ann (Identifier "_")))), body]
-- If the body is just a token, it doesn't have an expression, only walk through the parameter
-- This is also the base case for the result below
(Abstraction param _ (Term (Token _))) -> walkSubprograms param
-- Otherwise, to separate the parameter from the body while keeping it a valid expression,
-- replace the body with just a token. Return the body (a valid expression on its own) separately
(Abstraction param colon body) -> [Abstraction param colon (Term (Token (ann (Identifier "_")))), body]
(Application g a) -> [g, a]
(Operation left _ right) -> [left, right]
(MemberCheck name _ sels) -> name : (sels >>= walkSubprograms)
Expand Down

0 comments on commit 4aaab56

Please sign in to comment.