Commit Graph

286 Commits (b95bc09a9d9b07b5b3dbfb6eff7ddd9d50f38b82)

Author SHA1 Message Date
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 17fb271694 Fix inlineconfig additions for ghc-8.4 + compat
The semigroup changes are a bit confusing when aiming
for backwards-compat.
2018-04-17 21:45:38 +02:00
Lennart Spitzner 1fc007591c Merge branch 'master' into inlineconfig
# Conflicts:
#	src/Language/Haskell/Brittany/Internal.hs
2018-04-17 20:05:33 +02:00
Lennart Spitzner e559a2cbf7 Implement inline configuration
e.g. "-- brittany --indent=4"

respects the following comment forms as input:

  source comment                       affected target
  ======================================================
  "-- brittany CONFIG"                 whole module
  "-- brittany-next-binding CONFIG"    next binding
  "-- brittany-disable-next-binding"   next binding
  "-- brittany @ myExampleFunc CONFIG" `myExampleFunc`

multiline-comments are supported too, although
the specification must still be a single line. E.g.

  "{- brittany --columns 50 -}"

CONFIG is either:

  1) one or more flags in the form of what brittany accepts
     on the commandline, e.g. "-- columns 50", or
  2) one or more specifications in the form of what brittany
     accepts in its config files for the layouting config
     (a one-line yaml document), e.g. "{ lconfig_cols: 50 }"

see #30
2018-04-17 20:04:40 +02:00
Lennart Spitzner 10e1c19788 Add support for ghc-8.4 2018-04-17 17:50:41 +02:00
Lennart Spitzner 213e82b476 Fix if-then-else paragraph layouting 2018-04-17 06:19:13 +02:00
Lennart Spitzner ae162403ae Support multistate-0.9 (ghc-8.4 preparation) 2018-04-13 22:13:15 +02:00
Lennart Spitzner 8b67a028ea Do not put `where` on newline when no export list
(even when lconfig_allowSingleLineExportList False)
2018-04-09 00:09:07 +02:00
Lennart Spitzner 21ef8b296c Adapt for czipwith-1.0.1.0 2018-04-05 21:06:44 +02:00
Sergey Vinokurov 9bd3bfbe4c
Review suggestions 2018-04-03 22:49:06 +01:00
Sergey Vinokurov 7a60229673
Fix some hlint hints 2018-04-02 22:44:49 +01:00
Sergey Vinokurov 631d9e181d
Replace 'fmap f $' with 'f <$>' 2018-04-02 22:44:49 +01:00
Sergey Vinokurov 545eff9e4f
Remove redundant parens 2018-04-02 22:42:06 +01:00
Sergey Vinokurov 226da07815
Improve vertical alignment 2018-04-02 22:41:15 +01:00
Sergey Vinokurov 0dad5051df
Remove redundant '$'s 2018-04-02 22:41:14 +01:00
Sergey Vinokurov 2ed9a13fdb
Replace 'docAltFilter' with 'runFilteredAlternative' 2018-04-02 21:25:44 +01:00
Sergey Vinokurov 8410fbff8e
Trailing whitespace 2018-04-02 21:25:44 +01:00
Sergey Vinokurov e9689394b1
Add Semigroup instance for 'Max' monoid
Otherwise ghc 8.4 will complain since Semigroup became a superclass
of Monoid.
2018-04-02 21:25:43 +01: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 487c32175a Refactor Alt.hs and Add out-commented alternative 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 a1c832e85c Merge pull request #121 from AlexeyRaga/PR-expose-read-configs
# Conflicts:
#	stack.yaml
2018-03-13 22:45:18 +01:00
Lennart Spitzner c0ea20455c Fixup haddock typos 2018-03-13 22:38:27 +01:00
Lennart Spitzner 15d2250c0b Change _lconfig_importColumn default: 60 -> 50 2018-03-12 17:21:28 +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 af7f9017b8 Fix Alt-transformation bug with BDFEnsureIndents
multiple BDFEnsureIndent nodes were mistreated previously
2018-03-11 22:07:12 +01:00
Lennart Spitzner 41a60ce60f Merge branch 'master' into import 2018-03-11 17:43:16 +01:00
alexeyraga 83b39de3d4 Expose readConfigs 2018-03-07 21:56:52 +11: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 4b53072ccd Correct some commandline help output 2018-02-14 17:18:15 +01:00
Lennart Spitzner 81928ea597 Switch to ghc-exactprint-0.5.6.0, Remove code duplication 2018-02-14 01:14:24 +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
Lennart Spitzner 077b93db01 Minor refactor 2018-02-09 16:50:57 +01:00
Evan Rutledge Borden eb8f0de6c3 Remove redundant import. 2018-02-09 16:43:59 +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
Lennart Spitzner 399e2f4f43 Minor cleanups 2018-01-13 18:41:51 +01:00
Evan Rutledge Borden cab1297585 Change function name to if/else 2017-12-31 00:11:10 -05: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
Lennart Spitzner 0f3ee76944 Fix shebang handling with stdin input
Fixes #92
probably should update upstream (ghc-exactprint)
2017-12-27 23:26:18 +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 f920f4714d Fix maximum on empty list, fixes #88 2017-12-21 21:45:29 +01:00
Lennart Spitzner 82a5ffb3b3 Refactor a bit more
- remove unnecessary docWrapNodeRest
- make sure that sharing is correct and non-redundant
2017-12-21 17:56:54 +01:00
Lennart Spitzner 33f23a65ec Refactor and Add missing docSharedWrapper 2017-12-21 15:44:58 +01:00
Lennart Spitzner f651d02898 Merge branch 'dev' into import 2017-12-19 22:27:37 +01:00
Lennart Spitzner ce7ec0b467 Fix warning 2017-12-19 17:55:31 +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
sniperrifle2004 eac17b1bf2 Also render comments on the binding list 2017-12-19 01:11:25 +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
Lennart Spitzner d8097f2862 Add mask_ to prevent "ghc panic" when using timeout on brittany 2017-12-17 15:45:08 +01:00
sniperrifle2004 e140cd01e0 Add directives for ghc > 8.2 2017-12-17 14:06:41 +01:00
sniperrifle2004 ee9abff9e8 Add import and module support 2017-12-17 12:51:04 +01:00
Lennart Spitzner 9700fb2a50
Merge pull request #82 from matthew-piziak/tuple-section-support
Tuple section support (fixes #41)
2017-12-15 00:49:57 +01:00
Matthew Piziak b731cd15e7
capture starting layout 2017-12-14 16:17:39 -05:00
Lennart Spitzner 0036dbf410 Add some documentation for `layoutPat` 2017-12-11 17:13:33 +01: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
Lennart Spitzner d9155e240d RecursiveDo: Add second layout, Respect IndentPolicyLeft 2017-11-27 23:13:13 +01:00
Lennart Spitzner 466ff237ff Add some comments/examples in layoutStmt 2017-11-27 23:05:47 +01:00
Lennart Spitzner 9e8571b848 Remove an unnecessary node in BriDoc construction; Add TODO 2017-11-27 23:01:32 +01:00
Evan Rutledge Borden e9a2de7a85 Filter binders with docSetBaseAndIndent. 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden de0851f975 Use docAltFilter for consistency. 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden 35f33c131c Remove duplication in 'let' expression layout. 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 d1e1984206 Update guard formatting for IndentPolicyLeft 2017-11-27 18:12:19 +01:00
Evan Rutledge Borden a13a137f68 Add left indent support for statements
This aligns left indent style `let` statements with their expression
form.
2017-11-27 18:12:19 +01:00
Evan Rutledge Borden de5f0401f3 Add consistency between contsrained and unconstrained forall format
Constrained forall formats aligned the `.` to the left. Constrained
formats aligned the `.` to the right. This change adds consistency
between both formats.
2017-11-27 18:12:19 +01:00
Evan Rutledge Borden ce41178df5 Remove context sensitive let indentation when IndentPolicyLeft
Let expressions with multiple bindings automattically indent and pull
left

```
let
  a = b
  c = d
in foo bar baz
```

```
let
  a = b
  c = d
in
  foo bar baz
```

```
let
  a = b
  c = d
in foo
  bar
  baz
```

```
let
  a = b
  c = d
in
  foo
    bar
    baz
```
2017-11-27 18:12:19 +01:00
Evan Rutledge Borden bdf8769913 Remove 3 space special case from HsIf when IndentPolicyLeft
```
if foo
   bar
then
  baz
```

becomes

```
if foo
  bar
then
  baz
```
2017-11-27 18:12:19 +01:00
Lennart Spitzner 88cbaf813a Implement `IndentPolicyLeft` for one HsApp case 2017-11-27 18:12:19 +01:00
Lennart Spitzner 4568bd3553 Prepare implementation for `IndentPolicyLeft` 2017-11-27 18:12:19 +01:00
Lennart Spitzner c709513209 Remove dependency on either package
Following the deprecation and removal of the EitherT transformer
2017-11-27 18:11:49 +01:00
Lennart Spitzner 26f8cdfb65 Support RecursiveDo/`rec` keyword 2017-10-24 00:25:59 +02:00
Lennart Spitzner ddd7c6b439 Fix some rare issue and add some comments
(it is so rare i cannot reproduce anymore right now,
because the code that caused it has changed since..)
2017-10-24 00:00:34 +02:00