Commit Graph

189 Commits (392e5b7569f692f1cb98980b29aadaee0338c6c9)

Author SHA1 Message Date
Lennart Spitzner 77d6d5b553 Fix roundtripping of (~) constraint/type 2019-11-27 22:21:16 +01:00
Lennart Spitzner 974826f98f Fix whitespace regression on forall+constraint type sig 2019-11-08 12:11:35 +01:00
Lennart Spitzner 0795a39806 Fix infix matches with more than 2 args, fixes #219 2019-09-19 00:48:59 +02:00
Lennart Spitzner 6879436e67 Fix lambdas with lazy/bang pattern as first argument 2019-09-03 01:10:38 +02:00
Lennart Spitzner 702b993dab Fix prefix operator pattern-match invalid result 2019-09-03 00:23:58 +02:00
Lennart Spitzner 8861f16624 Fix comment handling with let-in 2019-09-02 17:04:44 +02:00
Lennart Spitzner 91d6e18aba Adapt to ghc-8.8 (deps are not ready though) 2019-09-02 17:04:44 +02:00
Lennart Spitzner f289389879 Fix comment wandering left inside instance decls 2019-08-28 14:48:11 +02:00
pepe iborra a79b5e1a4b Add support for Implicit Params
I don't know what I'm doing, but it type checks

Closes #246
2019-07-14 23:31:11 +01:00
Evan Borden 988d5b4353
Add support for OverloadedLabels
`OverloadedLabels` is a simple enough extension to parse and format. It
is becoming more common with use of `generic-lens`. Since it can be
treated as a `HsVar` its implementation only requires using `docLit`,
along with some marshalling for dealing with `FastString`.
2019-06-23 19:31:05 -05:00
Lennart Spitzner 3288ef3bd4 For funs with multiple matches, use the match id as id (fixes #234) 2019-06-16 22:51:18 +02:00
Lennart Spitzner 42f566b94a Support QuasiQuotation-splices 2019-06-12 09:17:21 +02:00
Lennart Spitzner 517eda8526 Merge pull request #216 from matt-noonan/master 2019-06-05 22:41:22 +02:00
Lennart Spitzner 4f2673a2eb
Merge pull request #215 from matt-noonan/multiline-app-with-comments
Disable single-line HsApp with argument comments.
2019-06-05 21:06:02 +02:00
Lennart Spitzner f9d70cf546 Refactor CPP slightly, Add test-cases 2019-06-05 21:05:27 +02:00
Lennart Spitzner 09a227fcce Add quick regression-test for fixed issue 2019-06-05 20:12:28 +02:00
Lennart Spitzner 059bb9402e Merge pull request #198 from ruhatch/type-synonyms 2019-06-05 15:56:50 +02:00
Lennart Spitzner 621e00bf3f Fix indentation (comments) after "if" (Fixes #167) 2018-11-14 14:53:08 +01:00
Rupert Horlick 01e31b4256
Add type fam instance formatting 2018-11-13 17:07:27 -04:00
Lennart Spitzner 2eb22e730f Add tests for empty lines around where 2018-11-04 18:13:37 +01:00
Rupert Horlick e7d8b5f1ab
Fix type synonym comments 2018-10-19 15:55:29 -04:00
Rupert Horlick e1b43531a8
Add type synonym formatting 2018-10-16 19:28:30 -04:00
Lennart Spitzner 818768cd4b
Merge pull request #187 from ruhatch/master
Add instance formatting, defaulting to ExactPrint in places
2018-10-14 00:46:53 +02:00
Lennart Spitzner 11dc30fbe1 Fix travis setup once more 2018-10-13 23:57:37 +02:00
Rupert Horlick 66fd44058d
Add instance formatting for simple case 2018-10-10 14:32:58 -04:00
Lennart Spitzner 71efa54954 Move tests, minor Refactoring, Add comments 2018-09-23 23:32:05 +02:00
Sergey Vinokurov 9755db1d05
Unify "(#", "#)" under single name, docParenHashL and docParenHashR 2018-09-18 09:14:20 +01:00
Sergey Vinokurov 6898d3ef44
Lay out unboxed tuples in types 2018-09-18 09:07:15 +01:00
Sergey Vinokurov 281d7a2f81
Lay out unboxed tuples with spaces
This avoids clashes with names like foo#
2018-09-18 09:07:13 +01:00
Sergey Vinokurov 9d7cecaa92
Run tests in prallel 2018-09-17 23:54:56 +01:00
Evan Rutledge Borden 92a1d89983 Consolidate record expression layouter
Both record construction and record layouting have very similar
constructions. These each had their own layouter with slightly different
variations. Variations here lead to subtley different bugs in layout for
nearly identicle syntactic forms.

The record update logic is more advanced and respects `IndentPolicyLeft`.
Instead of keeping these layouters distinct we can consolidate
construction logic into the update logic. This results in a smaller
volume of code and more uniform layouting of syntax for these simlilar
forms.

Record constructors with fields and wildcards are not included in this
consolidation. A TODO has been left to handle this consolidation later.
2018-09-16 15:47:04 -04:00
Phil Hazelden a5a24b4220 Fix imports of type operators.
Previously, we could only import a type operator with no subsequent
list, i.e.

    import Foo ( (:.) )

was fine, but

    import Foo ( (:.)(..) )
    import Foo ( (:.)((:.) )
    import Foo ( (:.)(A, b) )

would all break. Brittany would attempt to output them as

    import Foo ( :.(..) )
    import Foo ( :.((:.) )
    import Foo ( :.(A, b) )

I believe the problem was that although `ieName <$> lie` was returning
an `IEWrappedName` with the same contents as used in `layoutWrapped`,
it had different location annotations; and the parentheses are
apparently saved in the location annotations.
2018-08-10 10:01:11 +01:00
Lennart Spitzner ab27825b7b Core layouting algo improvement (non-bottom more effective)
During alt-transform, when gather spacings, previously
we tracked different non-bottom spacings separately even
though they would be treated in the same way during any
future transformations (apart from certain exceptions that
don't practically give better results). Instead we now
merge such spacings into one, giving more space for other
spacings when pruning to the spacings limit.
2018-07-06 22:41:31 +02:00
Lennart Spitzner 3c5670d5cd Fix layouting for OpApps with comments (fixes 159) 2018-07-05 21:31:28 +02:00
Lennart Spitzner ab389fe66f Support for -XExplicitNamespaces and -XPatternSynonyms
Properly round-trip export items of the forms "type OPERATOR"
or "pattern SYNONYM"

fixes #158
2018-07-04 21:42:46 +02:00
Lennart Spitzner cc0718e964 Add indentation to import-hiding-paragraph 2018-06-04 18:18:44 +02:00
Lennart Spitzner 5816704658 Fix import-hiding-paragraph with policy/=free (fixes #150) 2018-06-04 17:30:50 +02:00
Lennart Spitzner bdee27cb59 Add spaces around record braces (single-line) (fixes #126) 2018-05-25 17:57:54 +02:00
Lennart Spitzner ef7b0fcc70 Add test for #144 2018-05-16 21:25:40 +02:00
Lennart Spitzner a42bf2e03f Merge branch 'IndentPolicyMultiple' 2018-05-01 23:26:05 +02:00
Lennart Spitzner dd53948a23 Fix IndentPolicyMultiple for indentAmount>4 2018-05-01 23:21:09 +02:00
Lennart Spitzner e91bb6aec9 Clean up IndentPolicyMultiple 2018-05-01 23:19:44 +02:00
Bryan Richter 004dee73e0 Add test for IndentPolicyMultiple 2018-05-01 22:07:03 +02:00
Lennart Spitzner 601dd05be6 Change test file name 2018-05-01 21:45:31 +02:00
Lennart Spitzner e9aacb27ff Implement hacky workaround for issue 89 2018-04-25 19:54:35 +02:00
Lennart Spitzner a237e591b2 Implement `--obfuscate`
Support replacing all (non-keyword) identifiers with
randomly generated characters
2018-04-24 00:47:50 +02:00
Lennart Spitzner 696f72d336 Fixup last two commits (tests were effectively disabled
- re-enable tests
- un-break tests by fixing the alignment code behaviour
2018-04-24 00:38:40 +02:00
Lennart Spitzner 315a7e1ee1 Fix overflowing due to alignment; Add docs (alignment algorithm) 2018-04-23 19:33:04 +02:00
Lennart Spitzner 18704e403f Fix inline disabling of brittany 2018-04-19 17:09:10 +02:00
Lennart Spitzner b43ee43220 Fix/Implement empty type constraint handling (fixes #133) 2018-04-02 17:11:53 +02:00
Lennart Spitzner 0845142727 Fix let-in comment placement bug (fixes #110) 2018-03-23 17:34:36 +01:00
Lennart Spitzner bdd3b155f3 Fix HsPar comment placement bug (see #111) 2018-03-23 17:11:39 +01:00
Lennart Spitzner 3847325fd5 Omit single-line layout for OpApp with comments (fixes #111) 2018-03-23 17:02:58 +01:00
Lennart Spitzner a003b932a9 Fix comments in tuples being dropped (fixes #37) 2018-03-23 16:55:28 +01:00
Lennart Spitzner d634d34ff1 Fix module-import-hiding-items layout 2018-03-23 15:41:41 +01:00
Lennart Spitzner 90a2f65ba7 Align applications on for same function, plus minor fixup
Arguments of two function applications will only be aligned
if the same function is called in both cases.

The column transform was altered slightly to fix #65
properly as well.

fixes #65, #128
2018-03-22 01:19:56 +01:00
Lennart Spitzner 46de13256b Add one more testcase 2018-03-21 16:03:38 +01:00
Lennart Spitzner f1536b8966 Merge pull request #83/#124 from sniperrifle2004/import 2018-03-21 01:06:26 +01:00
Lennart Spitzner 8de56ba11d Support import column vs import-as column 2018-03-21 01:02:44 +01:00
Lennart Spitzner 1330aeb6b4 Fix ticked type operator losing tick (fixes #125) 2018-03-13 23:51:22 +01:00
Lennart Spitzner 833ac95fd7 Add two config options to control preamble layouting 2018-03-12 17:11:25 +01:00
Lennart Spitzner 9531edb2a7 Improve module layouting in two aspects
- IEThingWith in export list can now be single-line
- Now respect offset of the "module" keyword
  (retain empty lines after pragmas, for example)
2018-03-12 16:29:47 +01:00
Lennart Spitzner 20f9c009ee Stop hanging indent for IEThingWith
plus minor refactors/cleanups

this is more in line with IndentPolicyLeft and imo also looks
nicer in general
2018-03-11 22:49:20 +01:00
Lennart Spitzner 41a60ce60f Merge branch 'master' into import 2018-03-11 17:43:16 +01:00
Lennart Spitzner 19e31fdaf2 Improve layouting of RecordUpd, Fix minor issue for HsLet 2018-02-19 21:33:43 +01:00
Lennart Spitzner c124336738 Fix NOINLINE pragma layouting 2018-02-19 17:17:39 +01:00
Lennart Spitzner 55b1c71bf3 Fix a layouting mistake that went unnoticed so far 2018-02-14 01:00:01 +01:00
Lennart Spitzner 91de1ca08c Fix bang deletion on ghc-8.2, Add testcase (fixes #116) 2018-02-13 23:48:00 +01:00
Evan Rutledge Borden 019d47bf7e Change infix patterns to include spaces
This commit changes infix patterns to utilize `lrdrNameToTextAnn`. This
function allows the logic to avoid introspecting on the constructor
name.

Additionally this adds spaces to all infix operator pattern matches.
Previously infix symbols did not include spaces:

```
foo (x:xs) = _
```

Now they include a space

```
foo (x : xs) = _
```
2018-02-09 16:43:44 +01:00
Evan Rutledge Borden 18b3cfaf88 Fix infix constructor pattern matching for normal constructors
Brittany was previously only support symbol based infix constructors. It
is common in some libraries (for example Esqueleto) to pattern match on
normal constructors as infix. Brittany was failing in this case by not
wrapping the constructor name in back ticks/spaces. Backticks and spaces
have been added in the case where the constructor contains any alpha
characters.
2018-02-09 16:43:29 +01:00
Lennart Spitzner 25ff576dc3
Merge pull request #97 from eborden/let-in-on-single-lines
Format let and in on a single line if they fit
2018-01-13 21:39:11 +01:00
Evan Rutledge Borden f1b49b082f Format let and in on a single line if they fit
The following is wasteful of vertical space:

```
_ =
  let
    longIdentifierForShortValue = 1
  in
    longIdentifierForShortValue + longIdentifierForShortValue
```

We should format it on two lines if possible.

```
_ =
  let longIdentifierForShortValue = 1
  in longIdentifierForShortValue + longIdentifierForShortValue
```

This commit also allows for a mix of variations:

```
_ =
  let
    longIdentifierForShortValue = 1
  in longIdentifierForShortValue + longIdentifierForShortValue

_ =
  let longIdentifierForShortValue = 1
  in
    longIdentifierForShortValue + longIdentifierForShortValue
```
2017-12-31 00:04:53 -05:00
Lennart Spitzner 37e355fea5 Support hanging type signature config option 2017-12-28 21:38:31 +01:00
Lennart Spitzner 43abab2dd2 Remove space after opening parenthesis (fixes #87) 2017-12-28 20:46:03 +01:00
sniperrifle2004 98c93f0d63 Move expanded binding list to standard indent level for compact layout 2017-12-22 16:35:39 +01:00
sniperrifle2004 ad34a8b9b9 Only expand empty binding list with comments 2017-12-22 10:18:09 +01:00
sniperrifle2004 3708838b6a Also handle comments inside ThingWith 2017-12-22 06:58:39 +01:00
sniperrifle2004 21c080572b Add compact version of import layout
Also let layoutLLIEs deal with comments
2017-12-21 23:51:27 +01:00
Lennart Spitzner f651d02898 Merge branch 'dev' into import 2017-12-19 22:27:37 +01:00
sniperrifle2004 162b6e6bfd Also fix export comments
Also refactored a little to improve reuse of the docWrapNode logic
2017-12-19 16:33:13 +01:00
sniperrifle2004 a59df1f391 Fix comments!! 🎉 2017-12-19 14:28:22 +01:00
sniperrifle2004 7c51a181c8 Fix operators for ThingWith 2017-12-19 01:17:19 +01:00
Lennart Spitzner 8c3a9bec25 Fix operators in import list 2017-12-18 18:56:50 +01:00
sniperrifle2004 c3b6e17261 Improve layout for imports 2017-12-18 13:17:24 +01:00
Lennart Spitzner 204f0aff08 import+module: Refactor and Simplify slightly 2017-12-17 21:14:46 +01:00
sniperrifle2004 a72465ebef Add context-free tests 2017-12-17 13:13:19 +01:00
sniperrifle2004 ee9abff9e8 Add import and module support 2017-12-17 12:51:04 +01:00
Matthew Piziak 9704fc3490
add tuple section tests 2017-12-14 18:15:07 -05:00
Lennart Spitzner 39c48b33f1 Fix error in Annotation filtering (fixes #70) 2017-12-08 19:57:16 +01:00
Lennart Spitzner 127299b442 Merge branch 'dev' into indentpolicyleft 2017-11-30 23:47:18 +01:00
Lennart Spitzner 882a3b1a7a Allow single-line after let with IndentPolicyLeft 2017-11-30 23:20:35 +01:00
Lennart Spitzner 8a401d291e Workaround for #68: trim exactprinted text for unknown nodes 2017-11-28 18:23:05 +01:00
Lennart Spitzner 6a97379b33 Add whitespace around operator in section, Fixes #67 2017-11-28 17:56:28 +01:00
Evan Rutledge Borden f6859d184f Fix tests after rebase. 2017-11-27 13:05:04 -05:00
Evan Rutledge Borden e9a2de7a85 Filter binders with docSetBaseAndIndent. 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden ba3d9ad739 Add tests for record construction. 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden d7ac478fc6 Update type operator pending tests to remove context. 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden 44e95940c0 Change record update syntax for left indent policy 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden a6bea7542b Update pending long operator use for left indent. 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden d1e1984206 Update guard formatting for IndentPolicyLeft 2017-11-27 18:12:19 +01:00