Skip to content

Latest commit

 

History

History
204 lines (167 loc) · 7.61 KB

ChangeLog.md

File metadata and controls

204 lines (167 loc) · 7.61 KB

Revision history for brittany

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