13 KiB
Revision history for brittany
0.14.0.0 -- November 2021
- #357: Added support for GHC 9.0. Dropped support for all other versions of GHC.
- ab59e9acc3069551ac4132321b285d000f5f5691: Removed runtime dependency on
ghc-paths
. - fa8365a7fa9372043d5a1018f2f7669ce3853edd: Started providing pre-built binaries for Linux, MacOS, and Windows.
- Many other changes to Brittany's internals and exposed Haskell interface, but (hopefully) no changes to its command-line interface.
- ab59e9acc3069551ac4132321b285d000f5f5691: Removed runtime dependency on
0.13.1.2 -- May 2021
- #347: Allowed hspec 2.8. Thanks @felixonmars!
0.13.1.1 -- February 2021
- #333: Allowed random 1.2. Thanks @felixonmars!
- #334: Updated Arch install instructions. Thanks @ahstro!
- #343: Allowed ghc-exactprint 0.6.4. Thanks @maralorn!
0.13.1.0 -- December 2020
- #330: Started sorting imports. Thanks @expipiplus1!
0.13.0.0 -- December 2020
- #324: Added support for GHC 8.10.
- Dropped support for GHC 8.4, 8.2, and 8.0.
- Thanks @jneira, @bubba, @infinity0, and @expipiplus1!
0.12.2.0 -- November 2020
- #207: Fix newtype indent in associated type family.
- #231: Improve comments-affecting-layout behaviour for tuples.
- #259: Data declaration for newtype and records. Thanks @eborden!
- #263: Fix non-idempotent newlines with comment + where.
- #273: Error handling.
- #281: Fix moving comment in export list (haddock header).
- #286: Fix comments in instance/type instances.
- #287: Add support for pattern synonyms. Thanks @RaoulHC!
- #293: Expose main function as a module. Thanks @soareschen!
- #303: Readme: Supports 8.8. Thanks @andys8!
- #311: Allows aeson-1.5.*. Thanks @jkachmar!
- #313: Nondecreasing export list formatting. Thanks @expipiplus1!
0.12.1.1 -- December 2019
- Bugfixes:
- 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:
- one or more flags in the form of what brittany accepts on the commandline, e.g. "--columns 50", or
- 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 ton * 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:
-
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
andindentAmount>=4
- On default settings, allow single-line module header
0.10.0.0 -- March 2018
- Implement module/exports/imports layouting (thanks to sniperrifle2004)
- Expose config paths/parsing functions (thanks to Alexey Raga)
- Bugfixes:
- Layouting changes:
- New layouting config items:
lconfig_importColumn
/--import-col
: column for import itemslconfig_importAsColumn
/--import-as-col
: column for the "as" name of a modulelconfig_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:
- 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
andlconfig_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
toconf_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
meaningbrittany -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