Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Line breaks ignored after infix operators. #946

Open
jonathanknowles opened this issue Dec 22, 2022 · 0 comments
Open

Line breaks ignored after infix operators. #946

jonathanknowles opened this issue Dec 22, 2022 · 0 comments
Labels
style Nitpicking and things related to purely visual aspect for formatting.

Comments

@jonathanknowles
Copy link

Describe the bug
Ormolu sometimes eats line breaks after infix operators, and replaces them with hanging indents.

To Reproduce
Run ormolu on code similar to:

test :: Spec
test =
  describe "An example specification" $
    it "An example test case" $
      [ someRatherLongExpressionToServeAsAnIlluminatingExample,
        someRatherLongExpressionToServeAsAnIlluminatingExample,
        someRatherLongExpressionToServeAsAnIlluminatingExample,
        someRatherLongExpressionToServeAsAnIlluminatingExample
      ]
        `shouldWithSomeHandwavingBeVeryApproximatelyEqualTo`
          [ someRatherLongExpressionToServeAsAnIlluminatingExample,
            someRatherLongExpressionToServeAsAnIlluminatingExample,
            someRatherLongExpressionToServeAsAnIlluminatingExample,
            someRatherLongExpressionToServeAsAnIlluminatingExample
          ]

Notice the line break after the infix operator.

Expected behaviour
The line break is preserved, and the subsequent expression is rendered to the right by one indent level.

Actual behaviour
The line break is removed, and the subsequent expression is rendered with a hanging indent:

test :: Spec
test =
  describe "An example specification" $
    it "An example test case" $
      [ someRatherLongExpressionToServeAsAnIlluminatingExample,
        someRatherLongExpressionToServeAsAnIlluminatingExample,
        someRatherLongExpressionToServeAsAnIlluminatingExample,
        someRatherLongExpressionToServeAsAnIlluminatingExample
      ]
        `shouldWithSomeHandwavingBeVeryApproximatelyEqualTo` [ someRatherLongExpressionToServeAsAnIlluminatingExample,
                                                               someRatherLongExpressionToServeAsAnIlluminatingExample,
                                                               someRatherLongExpressionToServeAsAnIlluminatingExample,
                                                               someRatherLongExpressionToServeAsAnIlluminatingExample
                                                             ]

Environment

  • OS name + version: Linux 5.4.0-135-generic #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022 x86_64 GNU/Linux
  • Version of the code: ormolu 0.5.1.0 UNKNOWN UNKNOWN using ghc-lib-parser 9.4.3.20221104

Additional context

  • We have a rather large code base (> 200,000 lines) that's formatted by hand, and we're interested in adopting an auto-formatter.
  • Our team coding standard:
    • encourages an 80-column limit.
    • discourages hanging indents, preferring line breaks and indentation over vertical alignment.

We realise that ormolu does not provide support for a column limit, but we're wondering if we can get by with manually inserting line breaks where necessary.

Many thanks!
Jonathan

@mrkkrp mrkkrp added the style Nitpicking and things related to purely visual aspect for formatting. label Dec 22, 2022
@mrkkrp mrkkrp added this to the 0.7.4.0 milestone Jan 19, 2024
@mrkkrp mrkkrp removed this from the 0.7.4.0 milestone Feb 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
style Nitpicking and things related to purely visual aspect for formatting.
Projects
None yet
Development

No branches or pull requests

2 participants