Commit Graph

320 Commits (api)

Author SHA1 Message Date
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
Lennart Spitzner b1c6be7acd Fix parentheses around kind signatures, fixes #64 2017-10-15 00:23:14 +02:00
Lennart Spitzner f86665a251 Fix promoted HsTyVars on ghc-8.2.1
This fix does not work on ghc-8.0, because I do not understand
the 8.0 API in this instance. Could be resolved by looking
at annotations, but that really should not be necessary.
2017-10-14 23:21:13 +02:00
Lennart Spitzner ccf2eb092f Support RecordWildCards, Add one-liner layouting for records
fixes #52
2017-10-01 17:24:13 +02:00
Lennart Spitzner a348ae7fbc Switch to XDG path for config; Search conf in parents
- switch to XDG path should be backwards-compatible:
  - new config will be written to XDG path
  - but existing config in ~/.brittany will be respected
- looks for "brittany.yaml" not only in cwd, but in parents too.
  uses the first file found.

fixes #45, fixes #55
2017-09-29 21:42:39 +02:00
Lennart Spitzner d1606932f8 Minor cleanup / performance improvement 2017-09-20 23:35:45 +02:00
Lennart Spitzner 867016c198 Fix quadratic behaviour (fixes #34)
Split up annotations by top-level elements in one
go, instead of doing the filtering per top-level
element (which necessarily makes things quadratic,
or rather O(n*m) with n top-level elements and m
size of annotation map). The fixed version should
be O(log n * m), and log n is negligible.
2017-09-20 23:35:45 +02:00
Lennart Spitzner 9703ebead5 Fix #53
Previously, if the input did not end with a newline
character and config had 'ppconf_hackAroundIncludes = True'
then due to using unlines/lines the output contained an
additional newline.
2017-09-10 16:37:35 +02:00
Lennart Spitzner ca13a1897f Fix type application layouting (fixes #48)
- one-line externals are not detected as multiline in backend
- layouting of EAsPat (when TypeApplications is disabled)
- layouting of HsTyLit (TypeApplications with literals)
2017-08-20 14:09:03 +02:00
Lennart Spitzner fba8ad1a99 Fix negative literals in patterns (fixes #49) 2017-08-20 00:34:13 +02:00
Lennart Spitzner 1288c37204 Disable specific optim. in Config/Types/Instances 2017-08-19 14:56:46 +02:00
Lennart Spitzner aba7d13f67 Fix stupid haddock needs 2017-08-16 00:14:56 +02:00
Lennart Spitzner 6f4eec245e Split up Config/Types.hs
for the compilation of that module, GHC max residency
was an astounding 600MB for Config/Types.hs;
for Config/Types/Instances.hs it now "only" is 480MB.
(numbers according to "+RTS -s", the real usage
accoding to `time` is about 20% higher even.)
2017-08-15 20:37:46 +02:00
Lennart Spitzner 3ac8cccb0f Refactor prelude.inc/Prelude to reduce imports 2017-08-12 23:51:07 +02:00
Lennart Spitzner ebf84a03e9 Merge remote-tracking branch 'origin/master' 2017-08-12 15:29:06 +02:00
Erik Schnetter 0774d0e413 Correct typographical errors in comments 2017-08-11 21:37:29 -04:00
Lennart Spitzner 655074d1c0 Fix comment insertion error introduced in 91b9a240 2017-08-10 13:09:39 +02:00
Lennart Spitzner 91b9a240f1 Fix comment-before-BDCols issue; Relax alignmentBreakOnMultiline 2017-08-07 00:35:09 +02:00
Lennart Spitzner 41beeb9723 Remove/Cleanup unused/deprecated MTEL stuff 2017-08-06 16:28:41 +02:00
Lennart Spitzner b39997fcfa Adapt for ghc-8.2
Could it be so simple?
2017-08-05 18:17:49 +02:00
Lennart Spitzner ccb59ef803 Fix wherespecial with indent/=2 (fixes #39) 2017-08-05 16:09:46 +02:00
Lennart Spitzner 00ad6c71b9 Impl. layouting of TypeApplication, fixes #38 2017-07-28 18:03:21 +02:00
Alan Zimmerman 33eed86851 Fix haddock generation.
Otherwise the haddock process complains about malformed haddock comments
2017-07-07 10:40:55 +02:00
Lennart Spitzner 134f31e4d1 Add Semigroup instances for C*Config Identity 2017-07-05 00:08:21 +02:00
Lennart Spitzner 6268b8075a Fix layouting bug for RecordUpd 2017-07-04 23:57:54 +02:00
Lennart Spitzner 5a82968a7b Add sub-config-alternative default to lib interface
i.e. `forwardOptionsSyntaxExtsEnabled`
2017-07-04 23:26:13 +02:00
Lennart Spitzner 0251062100 Support mdo layouting (RecursiveDo) 2017-06-29 18:13:28 +02:00
Lennart Spitzner cece70380c Fix/Implement proper layouting of MultiWayIf 2017-06-28 23:35:02 +02:00
Lennart Spitzner 6d472315e3 Fix layouting special-case (getSpacing(s) internals) 2017-06-04 18:15:22 +02:00
Lennart Spitzner 5e3cc0a7c3 Fix OpApp layouting/indentation annoyance 2017-06-04 16:28:01 +02:00
Lennart Spitzner 16f5aa118d Add flag to omit reformatting (ghc-exactprint only) 2017-06-03 21:01:24 +02:00
Lennart Spitzner 9f4cda9130 Add license (AGPLv3) 2017-06-03 18:23:03 +02:00
Lennart Spitzner 91429ccacc Remove unordered-containers direct dependency 2017-06-03 18:23:03 +02:00
Lennart Spitzner 3784a0123b Refactor exposed function (now parsePrintModule)
- Rename parsePrintModule -> parsePrintModuleTests
- Rename pureModuleTransform -> parsePrintModule
- Change argument type from (CConfig Option) to Config
- Expose CConfig type fully
2017-06-03 18:23:03 +02:00
Lennart Spitzner dfec26e55b Refactor/Rename LayoutError -> BrittanyError 2017-06-03 18:23:03 +02:00
Lennart Spitzner 1adf02dabe Add instance Monoid (CConfig Option) 2017-06-03 18:23:03 +02:00
Lennart Spitzner f350113f7f Refactor all modules: +Internal; Add public Brittany module 2017-05-22 21:25:08 +02:00
Lennart Spitzner 5dbe0f2c9c Add function pureModuleTransform 2017-05-22 21:06:02 +02:00
Lennart Spitzner fd9427754e Add "hackAroundIncludes" option (default false)
- Makes brittany work in stdin/stdout mode when
  CPP usage is limited to #includes.
2017-05-22 15:49:18 +02:00
Lennart Spitzner 3957272c10 Improve backwards-compat for config (manual FromJson) 2017-05-22 15:45:14 +02:00
Lennart Spitzner 8f1e366f9c Change config file structure; Add config version tag 2017-05-21 16:48:05 +02:00
Lennart Spitzner 4ee44388f7 Improve layouting for OpApp (special-case for dollar/HsVar) 2017-05-21 13:43:39 +02:00
Lennart Spitzner b8396da1d6 Refactor Backend.hs (Move stuff to top-level) 2017-05-21 13:17:46 +02:00
Lennart Spitzner 8b7b1334e2 Fix forall type signature layouting 2017-05-18 14:18:10 +02:00
Lennart Spitzner 83ba7803e6 Fix layouting issues in lists/listcomprehension 2017-05-17 23:31:20 +02:00
Lennart Spitzner 56e53a9cbb Apply brittany to `layoutBriDocM` 2017-05-17 21:41:07 +02:00
Lennart Spitzner 6448ee780a Restrict aggressive horizontal alignment (fixes #21)
- Add config values:
  _lconfig_alignmentLimit for roughly "max spaces inserted"
  _lconfig_alignmentBreakOnMultiline for stopping
  alignment after non-singleline-items
2017-05-17 21:34:49 +02:00
Lennart Spitzner 22300d9c62 Minor cleanups 2017-05-14 17:10:20 +02:00
Lennart Spitzner 41a86b2eab Use czipwith package (replacing CZip), Refactor slightly 2017-05-14 17:04:58 +02:00
Lennart Spitzner 4770dbdb7c Remove lens dependency (was not used) 2017-05-14 12:05:19 +02:00
Lennart Spitzner c701e5d00b Fix #26: Fix comment glitch in patternbind layouting
Prevent single-line layout when it would not even be
a single line due to a comment.
This patch might be a bit over-eager in at least one
case (I think you'd get a two-line layout with a
multiway-if and a comment _after_ the where binding).
2017-05-02 17:10:04 +02:00
Lennart Spitzner c3dc3b6074 And one more touch to ExplicitList 2017-05-02 16:32:43 +02:00
Lennart Spitzner ca42178eff Improve tuple layouting (also fixes #18 for tuples) 2017-05-02 16:21:13 +02:00
Lennart Spitzner f6324da600 Fix ExplicitList comment insertion (fixes #18) 2017-05-02 14:20:58 +02:00
Lennart Spitzner 26ffb40fb4 Fixup for config file generation
- fixes a silent bug; behaviour seems not to be affected.
2017-04-16 13:55:49 +02:00
Lennart Spitzner cbeab39b2d Fix comment/eof space handling (fixes #22) 2017-04-15 14:50:55 +02:00
Lennart Spitzner 505ad99f35 Handle InlineSig construct (pragma), fixes #20 2017-04-12 21:47:59 +02:00
Lennart Spitzner acbaba0782 Omit output syntax test for fix-point tests 2017-04-12 14:53:47 +02:00
Lennart Spitzner 14884be8df Minor fixups in docs plus some minor Refactoring 2017-04-12 14:31:53 +02:00
Lennart Spitzner 2dd6fe83f5 Add documentation and examples; Add debugging flag; Minor refactors 2017-03-30 22:47:00 +02:00
Lennart Spitzner 2b30d83fe8 Fix CPP/macro usage for MacOS; Fix minor stuff in .cabal 2017-03-27 16:18:14 +02:00
Lennart Spitzner a7e4bdc168 Fix #16; Improve layouting in two cases; Add comments
- the #16 fix is a one-liner:
  Throw `nub` at spacings before pruning.
- Expr/OpApp layouting: Force single-line for children in
  the params-in-multiple-lines-right-of-the-function case.
- Expr/HsIf layouting: Insert a SetBaseY to prevent
  "then"/"else" being placed left of "if".
2017-03-16 23:02:11 +01:00
Lennart Spitzner 109163fc4d Remove traceShow statement
fixes #15
2017-03-08 14:55:02 +01:00
Lennart Spitzner 7dc6c525eb Fix minor layouting issue with long guards
(see test multiple-clauses-4)
2017-03-07 21:44:28 +01:00
Lennart Spitzner 00c7384d20 Fix config printing (config file generation) 2017-03-07 21:14:41 +01:00
Lennart Spitzner cea81d5369 Add indentation to the paragraphs inserted in patterns
Ugly, but fixes #6. Ugly still better than non-valid-haskell result.
2017-03-06 16:56:38 +01:00
Lennart Spitzner 8d163eb099 Improve layouting for equations with multiple clauses
e.g.
func x | x         = simple expression
       | otherwise = 0

This fixes part of #7
2017-03-06 16:03:47 +01:00