276 lines
11 KiB
Markdown
276 lines
11 KiB
Markdown
# Revision history for brittany
|
|
|
|
## 0.12.1.1 -- December 2019
|
|
|
|
* Bugfixes:
|
|
- Fix layouting regression of record update for many/large fields
|
|
- Fix whitespace regression on ExplicitForall notation
|
|
(`foo :: forall a . Show a => a -> a`, note the double space)
|
|
introduced in 0.12. (#264)
|
|
- Fix roundtripping of type equality constraint
|
|
`f :: ((~) a b) => a -> b` (#267)
|
|
* One experimental feature addition: Turning brace notation semicolons into
|
|
newlines when formatting (see #270)
|
|
|
|
## 0.12.1.0 -- September 2019
|
|
|
|
* Support ghc-8.8
|
|
* Support for OverloadedLabels extension
|
|
(thanks to Evan Rutledge Borden @eborden)
|
|
* Support for Implicit Params extension (thanks to pepe iborra @pepeiborra)
|
|
* Add flag `--no-user-config` to enable only using manually passed config
|
|
* Disable the performance test suite by default to prevent spurious failures
|
|
on certain CI setups. The github/travis brittany CI still has all tests
|
|
enabled. See the `brittany-test-perf` flag in the cabal file.
|
|
* Bugfixes:
|
|
- Fix one wandering-comment bug for let-in expressions
|
|
- Fix invalid result for prefix operator pattern matches
|
|
- Fix lambda expression with laziness/strictness annotation
|
|
- Fix parenthesis handling for infix pattern matches with 3+ arguments
|
|
* Changes to layouting behaviour:
|
|
- For pattern matching and data/instance definitions, the usage of
|
|
parenthesis is now "normalized", i.e. superfluous parens are removed by
|
|
brittany.
|
|
|
|
## 0.12.0.0 -- June 2019
|
|
|
|
* Support for ghc-8.6 (basic support, not necessarily all new syntactic
|
|
extensions)
|
|
* Support -XExplicitNamespaces and -XPatternSynonyms
|
|
* Allow a --dry-run sort of operation via flag "-c/--check-mode"
|
|
(thanks to Doug Beardsley @mightybyte)
|
|
* Include file name in errors about unsupported syntax nodes (thanks to @5outh)
|
|
* Partially implement layouting class instances: Layouts children, but
|
|
falls back on ghc-exactprint for the instance head
|
|
(thanks to Rupert Horlick @ruhatch)
|
|
* Implement layouting for type synonyms (thanks to Rupert Horlick @ruhatch)
|
|
* Support -XMagicHash, -XUnboxedTuples (thanks to Sergey Vinokurov @sergv)
|
|
* Support -XQuasiQuotes (no formatting applied to the splices; they are simply
|
|
retained without causing the dreaded "Unknown construct: HsSpliceE{}")
|
|
- `lconfig_allowHangingQuasiQuotes` controls whether multi-line
|
|
QuasiQuotes are allowed to start at the end of the current line, or
|
|
whether they are always placed in new lines.
|
|
* Bugfixes:
|
|
- Fix rare-case alignment bug with IndentPolicyMultiple (#144)
|
|
- Make inline layout config apply to module header (#151)
|
|
- Fix unaligned import-hiding layout (#150)
|
|
- Fix idempotence violation for comments around if-then-else (#167)
|
|
- Fix comments having an effect on far-away parent node's layout (#159)
|
|
- Fix imports of type operators ("symbolic data types")
|
|
(thanks to Phil Hazelden @ChickenProp)
|
|
- Work around GHC and cabal-install misfeature ".ghc.environment files"
|
|
that could break brittany in unexpected and hard-to-understand ways
|
|
- Stop removing empty lines before `where` keyword in a couple of cases
|
|
- Fix functions with mixing prefix/infix style causing error (#234)
|
|
* Changes to layout:
|
|
- Align usage of spaces for record update vs record construction (#126)
|
|
- More indentation to import-hiding-paragraph (follow-up to #150 fix)
|
|
- Record construction and update now are layouted in the same way
|
|
(thanks to Evan Rutledge Borden @eborden)
|
|
- Stop allowing single-line layout when there are comments between
|
|
arguments (#214) (thanks to @matt-noonan)
|
|
* Various build-instructions and editor integrations
|
|
|
|
## 0.11.0.0 -- May 2018
|
|
|
|
* Support for ghc-8.4
|
|
* Implement inline-config
|
|
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 }"
|
|
* Implement `IndentPolicyMultiple` (thanks to Bryan Richter @chreekat)
|
|
Restrict indentation amounts to `n * indentAmount`
|
|
* Implement `--obfuscate` that replaces non-keyword identifiers with random
|
|
names
|
|
* Do not write files unless there are changes (don't update modtime)
|
|
(`--write-mode=inplace`) (#93)
|
|
* Bugfixes:
|
|
- Fix empty function constraints (`() => IO ()`) (#133)
|
|
- Fix overflowing columns caused by aligning with surrounding lines
|
|
for certain complex cases
|
|
- Implement hacky workaround for `type instance`s (`-XTypeFamilies`) (#89)
|
|
* Layouting changes:
|
|
- On default settings, allow single-line module header
|
|
`module MyModule where` when no exports
|
|
- Fix one case of non-optimal layouting for if-then-else
|
|
- Allow same-line let binding inside do-notation with
|
|
`IndentPolicyLeft/Multiple` and `indentAmount>=4`
|
|
|
|
## 0.10.0.0 -- March 2018
|
|
|
|
* Implement module/exports/imports layouting (thanks to sniperrifle2004)
|
|
* Expose config paths/parsing functions (thanks to Alexey Raga)
|
|
* Bugfixes:
|
|
- Fix layouting of `NOINLINE` pragma
|
|
- Fix ticked type operator (e.g. `':-`) losing tick (#125)
|
|
- Fix alignment issue with cases involving operators (#65)
|
|
- Fix comments in tuples being dropped (#37)
|
|
- Fix comment placements with let-in (#110)
|
|
* Layouting changes:
|
|
- Align arguments only if it is the same function being called (#128)
|
|
- Do not use single-line layout when infix operator expression contains
|
|
comments (#111)
|
|
* New layouting config items:
|
|
- `lconfig_importColumn`/`--import-col`: column for import items
|
|
- `lconfig_importAsColumn`/`--import-as-col`: column for the "as" name of
|
|
a module
|
|
- `lconfig_reformatModulePreamble`: controls module/export/import layouting
|
|
(default True)
|
|
- `lconfig_allowSingleLineExportList`: permit one-line module header, e.g.
|
|
`module Main (main)` (default False)
|
|
|
|
## 0.9.0.1 -- February 2018
|
|
|
|
* Support `TupleSections` (thanks to Matthew Piziak)
|
|
* Bugfixes:
|
|
- Fix Shebang handling with stdin input (#92)
|
|
- Fix bug that effectively deleted strict/lazy matches (BangPatterns) (#116)
|
|
- Fix infix operator whitespace bug (#101, #114)
|
|
- Fix help command output and its layouting (#103)
|
|
- Fix crash when config dir does not exist yet (#115)
|
|
* Layouting changes:
|
|
- no space after opening non-tuple parenthesis even for multi-line case
|
|
- use spaces around infix operators (applies to sections and in pattern
|
|
matches)
|
|
- Let-in is layouted more flexibly in fewer lines, if possible
|
|
(thanks to Evan Borden)
|
|
|
|
## 0.9.0.0 -- December 2017
|
|
|
|
* Change default global config path (use XDG spec)
|
|
Existing config should still be respected, so this should not break
|
|
compatibility
|
|
* Support per-project config
|
|
* ! Slight rework of the commandline interface:
|
|
- Support multiple inputs and outputs
|
|
- Support inplace-transformation for multiple files via
|
|
`--write-mode=inplace`
|
|
* Implement `IndentPolicyLeft` - the indentation mode that never adds more
|
|
than the base indentation for nested parts (no hanging indentation)
|
|
|
|
(thanks to Evan Borden)
|
|
* Fix bug that manifested in bad output for (top-level) template haskell splices
|
|
* Extension support:
|
|
- RecordWildCards
|
|
- RecursiveDo (was only partially supported previously)
|
|
* Layouting Bugfixes:
|
|
- Properly reproduce parentheses around kind signatures
|
|
- Fix issue around promoted lists
|
|
(example good: `'[ 'True]` bad: `'['True]`)
|
|
- Trim text from exactprint used as workaround for unknown nodes
|
|
(unsupported extension workaround)
|
|
* Layouting changes
|
|
- Insert spaces around operator in sections
|
|
|
|
## 0.8.0.3 -- September 2017
|
|
|
|
* Support for ghc-8.2.1
|
|
* Bugfixes:
|
|
- Fix quadratic performance issue
|
|
- Fix special "where" indentation with indentAmount /= 2
|
|
- Fix negative literals in patterns
|
|
- Support type applications
|
|
* Accept `-h` for `--help` and improve help layouting (via butcher-1.1.0.2)
|
|
* Add continuous integration via travis (cabal, cabal-new, stack)
|
|
(brittle due compilation time limit)
|
|
* Reduce compilation memory usage a bit
|
|
|
|
## 0.8.0.2 -- August 2017
|
|
|
|
* Add library interface, to be used by `haskell-ide-engine`.
|
|
* Publish to hackage.
|
|
|
|
## 0.8.0.1 -- May 2017
|
|
|
|
* Document the high-level design of the program
|
|
* Improve layouting for many different cases, too many to list here. Brittany
|
|
still does only reformat top-level type signatures and bindings.
|
|
* Publish all dependencies on hackage; `ghc-exactprint ` adaptions got merged
|
|
upstream as well.
|
|
* Reduce the aggressiveness of horizontal alignment; this is configurable
|
|
via the `lconfig_alignmentLimit` and `lconfig_alignmentBreakOnMultiline`
|
|
values (config file only for now).
|
|
* (!) Breaking change to the config file format: The keys previously contained
|
|
underscore (e.g. `_econf_Werror`) but do not anymore (`econf_Werror`).
|
|
Add config version; also
|
|
* Move config value `conf_errorHandling.econf_CPPMode` to
|
|
`conf_preprocessor.ppconf_CPPMode`.
|
|
* Cope with unhandled syntactical constructs more gracefully by falling back
|
|
on the ghc-exactprint output; Brittany simply won't touch certain
|
|
subexpressions instead of aborting. This is further configurable via the
|
|
`econf_omit_output_valid_check` config value.
|
|
* Due to improvements to the `butcher` library: Accept `--key=value` on
|
|
commandline (only `--key value` was supported previously).
|
|
* Improve testsuite setup: The `tests.blt` file contains many different
|
|
testcases that allow quick addition - feel free to report bugs directly
|
|
by making PRs with additions to that file.
|
|
* Release under the terms of the AGPLv3
|
|
|
|
## 0.7.1.0 -- 2016-09-06
|
|
|
|
* Support stack
|
|
* Fix --ghc-options handling
|
|
* Add commandline param to allow shortcut `brittany Foo.hs`
|
|
meaning `brittany -i Foo.hs`
|
|
|
|
## 0.7.0.0 -- 2016-09-04
|
|
|
|
* First official alpha release
|
|
* Fix commandline flag parsing
|
|
* Implement/Improve horizontal aligning
|
|
* Various minor fixes and layouting improvements
|
|
|
|
## 0.6.0.0 -- 2016-08-12
|
|
|
|
* Add check that output is syntactically valid
|
|
* (!) Change config format, breaking previous configs
|
|
* Various layouting additions/imporements
|
|
* Various minor fixes
|
|
|
|
## 0.5.0.0 -- 2016-08-08
|
|
|
|
* Support --ghc-options
|
|
* Support user and local config files: Local config file is not mandatory
|
|
anymore.
|
|
|
|
## 0.4.0.0 -- 2016-08-06
|
|
|
|
* Make comment handling a bit more clever
|
|
* Various layouting additions/imporements
|
|
|
|
## 0.3.0.0 -- 2016-08-04
|
|
|
|
* Various layouting additions/imporements
|
|
|
|
## 0.2.0.0 -- 2016-07-30
|
|
|
|
* Basic and partial implementation for
|
|
expression/decl/statement/pattern layouting
|
|
* Prevent exponential behaviour using manual stablenames
|
|
|
|
## 0.1.0.0 -- 2016-06-05
|
|
|
|
* First working code for type signature layouting
|