All Versions
Latest Version
Avg Release Cycle
75 days
Latest Release
305 days ago

Changelog History
Page 1

  • v0.12.1.1

    December 01, 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)
  • v0.12.1.0

    September 01, 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.
  • v0.12.0.0

    June 01, 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
  • v0.11.0.0

    May 01, 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
  • v0.10.0.0

    March 01, 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)
  • v0.9.0.1

    February 01, 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)
  • v0.9.0.0

    December 01, 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
  • v0.8.0.3

    September 01, 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-
    • โž• Add continuous integration via travis (cabal, cabal-new, stack) (brittle due compilation time limit)
    • โฌ‡๏ธ Reduce compilation memory usage a bit
  • v0.8.0.2

    August 01, 2017
    • โž• Add library interface, to be used by haskell-ide-engine.
    • Publish to hackage.
  • v0.8.0.1

    May 01, 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