Commit Graph

53 Commits (3ad71ce83cecf15beff010011e81a04a0ce487f9)

Author SHA1 Message Date
Lennart Spitzner 3ad71ce83c Hardcode more precedences 2023-04-29 12:36:11 +00:00
Lennart Spitzner 6cd83c9d39 Allow special layout for HsApp with HsDo/HsSpiceE args 2023-04-29 11:11:01 +00:00
Lennart Spitzner 209fdc74a2 Fix retaining newlines between do statements 2023-04-29 11:11:01 +00:00
Phil Hazelden 29000c990c Support promoted type applications.
Closes #370.

Up to GHC 8.10,

    foo @ 'Bar

was a valid type application. In GHC 9 it's not, which means brittany
needs to allow

    foo @'Bar

which it now does.

The reason the space was needed was to allow a promoted type variable at
the head of a type-level list. That is,

    '['Foo]

is invalid syntax, because it initially parses as the character `'['`.
So the promoted type variable was always given a separator at the
beginning, and we'd get

    '[ 'Foo]

which was valid. Now we handle this case by specifically examining the
head of a type-level list; if it's promoted we introduce spaces, so

    '[ 'Foo ]
    '[Foo]

I've added tests for this and some related cases. In doing so I noticed
that unnecessary spaces get added in front of commas in these lists; I
believe that's a separate bug, and I've written a comment explaining why
it happens, but I haven't tried to fix it.

I'm not sure when the first alternates in the `FirstLastSingleton`
and `FirstLast` branches would ever be hit, so I'm not entirely sure if
the separators are necessary there. But since `docSeparator` disappears
at the end of a line and merges with adjacent separators, they should be
harmless.
2023-04-24 15:47:42 +00:00
Lennart Spitzner ea550b401a Respect newlines after block-comments 2023-04-24 15:45:28 +00:00
Lennart Spitzner a3083729af Refactor WriteBriDoc FlushCommentsPrior code slightly 2023-04-24 15:45:28 +00:00
Lennart Spitzner e04b90e4c8 Fixup misspelled data-type name 2023-04-24 15:45:28 +00:00
Lennart Spitzner 084125eed3 Allow par-spacing for single-operator 1+n-line layout plus Tweak of OpApp 2023-04-22 19:54:24 +00:00
Lennart Spitzner 396c23191c Discard special case for non-nested OpApp 2023-04-22 19:54:24 +00:00
Lennart Spitzner 89092d994c Minor comment updates and cleanup 2023-04-22 19:54:24 +00:00
Lennart Spitzner 05e00f39f2 Simplify/Optimize Decl:layoutPatternBindFinal 2023-04-22 19:54:24 +00:00
Lennart Spitzner b1e85de95d setParSpacing for operator-expression ending in par 2023-04-22 19:54:24 +00:00
Lennart Spitzner 99dc88e2f9 Improve one HsLet layout
- Allow parSpacing for single-clause layout
- Allow par/sl layout when no where-clause was present
  (not sure why this was disabled in the first place)
2023-04-22 19:54:24 +00:00
Lennart Spitzner f18fd0c4ba Dont flatten operators without surrounding parens 2023-04-22 19:54:24 +00:00
Lennart Spitzner e9f66b3fd8 Fix comment-after-context 2023-04-22 19:54:24 +00:00
Lennart Spitzner a6ed006427 Fix restore-position after block comment 2023-04-22 19:54:24 +00:00
Lennart Spitzner f2e0044c4a Fix comments moving after "where" 2023-04-22 19:54:24 +00:00
Lennart Spitzner bad95f3670 Use dependency-injection for ToBriDoc modules
I assume this makes inlining impossible, but it enables
parallel compilation of all these modules. In my tests
this reduce wall clock time to 92%, and with more cores
the benefit should be higher.
2023-04-22 19:54:24 +00:00
Lennart Spitzner 5e1452a5f0 Fix retain comments on matches (lambda rhs etc.) 2023-04-22 19:54:24 +00:00
Lennart Spitzner 0c660e272d Refactor s/rec/go for extension compat 2023-04-22 19:54:24 +00:00
Lennart Spitzner 6a1edb38f9 Fix BDLines getSpacing computation 2023-04-22 19:54:24 +00:00
Lennart Spitzner 9b5fb89c2b Do not count warnings for considering exactprint fallback 2023-04-22 19:54:24 +00:00
Lennart Spitzner 7d4d6e77f7 Fixup annotation on error-fallback 2023-04-22 19:54:24 +00:00
Lennart Spitzner 73656eeff6 Implement fixity-aware-ops feature 2023-04-22 19:54:24 +00:00
Lennart Spitzner 4ea66b0e45 Fix double-printing of comments on certain data-decls 2023-04-22 19:54:24 +00:00
Lennart Spitzner cbfa0d6d22 Partially restore retaining-empty-lines behaviour
Currently works for do blocks, multi-line list literals, and
lambda-case cases (apart from top-level blank lines that
never got ignored).
2023-04-22 19:54:24 +00:00
Lennart Spitzner dafaa8cab8 Improve block-comment behaviour (newlines after or not) 2023-04-22 19:54:24 +00:00
Lennart Spitzner 5693be1be0 Make if-then-layout layout more consistent 2023-04-22 19:54:24 +00:00
Lennart Spitzner e92580429a Fix missing comment for MG 2023-04-22 19:54:24 +00:00
Lennart Spitzner 6f380f2be6 Change behaviour: Less par-spacing for function application 2023-04-22 19:54:24 +00:00
Lennart Spitzner 67a6ab8209 Behaviour addition: Allow par-spacing on HsApp 2023-04-22 19:54:24 +00:00
Lennart Spitzner c58bf7b845 Implement extension support - OverloadedRecordDot 2023-04-22 19:54:24 +00:00
Lennart Spitzner 278dcfc7c6 Fix block-comment delta position special case 2023-04-22 19:54:24 +00:00
Lennart Spitzner 7f5dc46798 Replace BriDoc+BriDocF with single BriDocW + type family 2023-04-22 19:54:24 +00:00
Lennart Spitzner 7db1028223 Reintroduce BDAnnotationKW in the form of BDEntryDelta 2023-04-22 19:54:24 +00:00
Lennart Spitzner 9034a2f59d Clean up WriteBriDoc monad state handling 2023-04-22 19:54:24 +00:00
Lennart Spitzner cca049b100 Clean up unused WriteBriDoc operators 2023-04-22 19:54:24 +00:00
Lennart Spitzner 7ebd61db3d Refactor+Rewrite+Adaptation for ghc-9.2 support 2023-04-22 19:54:24 +00:00
Lennart Spitzner dd8264797e Revert "Split tests into individual files"
This reverts commit 21e86adf6e.
2023-04-22 19:54:24 +00:00
Lennart Spitzner dc008800e7 Switch to butcher-2.0 2023-04-22 19:54:24 +00:00
Taylor Fausak 93a43bf28d Revert "Remove `Language.Haskell.` from module names"
This reverts commit 2fe1432631.
2022-01-13 14:16:14 +00:00
Taylor Fausak 97da38fab7 Merge remote-tracking branch 'upstream/master' into main 2022-01-11 13:48:58 +00:00
Sergey Vinokurov 3996efd5eb
Use defaultDynFlags to obtain ghc’s DynFlags
This way brittany can avoid dealing with incompatibilities in DynFlags
structure between ghc versions (e.g. different versions having
different fields).
2022-01-09 20:11:23 +00:00
Taylor Fausak 2fe1432631 Remove `Language.Haskell.` from module names 2021-11-29 12:25:00 +00:00
Taylor Fausak 7fa2a85b30 Format Brittany with Brittany
Fixes #238.
2021-11-29 02:31:50 +00:00
Taylor Fausak 21e86adf6e Split tests into individual files 2021-11-23 22:41:01 +00:00
Taylor Fausak 89a9f47b72 Ignore warnings when parsing modules 2021-11-21 23:40:15 +00:00
Taylor Fausak ab59e9acc3 Parse modules "purely", without ghc-paths 2021-11-21 22:58:07 +00:00
Taylor Fausak 8fadac8b2e Format imports 2021-11-21 13:44:06 +00:00
Taylor Fausak 8d7b46b9e9 Fix handling of comments 2021-11-07 13:01:54 +00:00