Changelog of @hackage/brittany 0.14.0.2

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.

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:
    • 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 instances (-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