Skip to content

Latest commit

 

History

History
1902 lines (1496 loc) · 124 KB

CHANGELOG.md

File metadata and controls

1902 lines (1496 loc) · 124 KB

Changelog

6.2.0 - 2023-08-29

Changed

  • Update FCS to 'Included get,set in range of AutoProperty', commit d508186f510681d1261291474e3f9f25485999a8
  • Update FCS to 'Add a Paren case to SynRationalConst', commit 97a5b6584b54707e3e8541fe758e1aa22132a8fe

Added

Fixed

  • Comment no longer attached to autoproperty. #2948
  • begin/end are replaced with parens. #2368
  • Block comment in Rational between lparen and numerator is moved before lparen. #2930
  • Block comment in Rational between / and denominator is moved before /. #2932
  • Block comment in Rational between denominator and rparen is moved behind rparen. #2933

6.1.3 - 2023-08-25

Changed

  • Update FCS to 'Add some more ranges to SynMeasure for tooling support', commit 6ed38fcb360a0015828973b1f32cd2ea6b58c6ad

Fixed

  • Block comment in Rational between numerator and / is lost. #2931
  • Block comment between ^- and exponent in SynMeasure.Power is lost. #2937
  • Block comment between measure1 and / is moved between / and measure2 in SynMeasure.Divide. #2934
  • Block comment between measure1 and * is moved between * and measure2 in SynMeasure.Product. #2935
  • Block comment between ^ and exponent in SynMeasure.Power is lost. #2936
  • Opening parens make unstable/incorrect indentation for an Enum wrapping a record. #2943

6.1.2 - 2023-07-23

Changed

  • Update FCS to 'Add trivia information to SynConst.Measure', commit 7b5e12842d673b7daa467e0091378bf4acc95e4f

Fixed

  • Left out lhs in SynMeasure.Divide should not be restored as SynMeasure.One. #2926
  • Block comments in measure are lost or restored twice and in wrong place. #2927

6.1.1 - 2023-06-29

Changed

  • Update FCS to 'Remove unused open in SyntaxTree.fs', commit 9c8b4192966e6554adc5dcc8973f2a23c8fa2722

6.1.0 - 2023-06-28

Fixed

  • Additional newline for interface in object expression. #2914

6.1.0-alpha-006 - 2023-06-20

Fixed

  • Contains fixes of 6.0.8

6.1.0-alpha-005 - 2023-06-20

Fixed

  • Contains fixes of 6.0.7

6.1.0-alpha-004 - 2023-06-19

Fixed

  • Contains fixes of 6.0.6

6.1.0-alpha-003 - 2023-06-02

Changed

  • Rename namespace FSharp.Compiler to namespace Fantomas.FCS for Fantomas.FCS. #2894

6.1.0-alpha-002 - 2023-05-02

Changed

  • Enrich transformed Oak. #2869

6.1.0-alpha-001 - 2023-05-02

Added

  • TransformAST in CodeFormatter. #2868

[6.0.8] - 2023-06-20

Fixed

  • Inline keyword is missing in property #2908

[6.0.7] - 2023-06-20

Fixed

  • Private keyword is lost from getter with unit. #2906

[6.0.6] - 2023-06-19

Fixed

  • Setter is also private. #2902

[6.0.5] - 2023-06-06

Fixed

  • Idempotency problem when reformatting type declaration with large when clause. #2896

[6.0.4] - 2023-06-02

Changed

  • Update FCS to 'Prototype signature files for lex files', commit 5b74995780a0e9d24a5db025e68b31e6d910f71f

Fixed

  • Missing space before arrow. #2888
  • Cons pattern in let bindings is converted to invalid code. #1996
  • Trivia after infix operator is not restored correctly. #2887

[6.0.3] - 2023-05-14

Fixed

  • Preserves quotes around type parameter names. #2875
  • Additional whitespace for LineCommentAfterSourceCode when last character is a ,. #2589
  • Tupled parameter wrapped in conditional directive. #2877

Changed

  • Update FCS to 'Add commas to tuple pat and simple pats', commit e267bb9f8d590feed1b94b469d78cfce61afecad

[6.0.2] - 2023-05-05

Fixed

  • Incorrect indentation of compiler-conditional accessibility modifier for module definition. #2867
  • Comment above the record bracket beaks formatting when MultilineBracketStyle is Stroustrup. #2871

[6.0.1] - 2023-04-19

Fixed

  • Invalid code: moved line comment. #2847

[6.0.0] - 2023-04-13

Fixed

  • Trivia of ParseOak is not processed. #2834

[6.0.0-beta-001] - 2023-04-05

Fixed

  • If then expression inside object instantiation breaks when formatted. #2819
  • fsharp_space_before_colon not honored for return type info of explicit get, set. #2825
  • Fantomas is trying to format the input multiple times due to the detection of multiple defines. #2822

Changed

  • Update FCS to 'Add parser recovery for incomplete named pat pair', commit ba6647ebf5b94823c4d6fafd1e7d5f806d915ee0

[6.0.0-alpha-010] - 2023-04-03

Fixed

  • Fix a performance regression. #2820

[6.0.0-alpha-009] - 2023-03-31

Fixed

  • Adding space after prefix operator breaks code. #2796
  • Idempotency problem when comment after pattern match arrow and Stroustrup. #2806

[6.0.0-alpha-008] - 2023-03-27

Fixed

  • Nested multiline record with indent_size = 2. #2801
  • Idempotency problem when comment after opening brace in inherit record. #2803

[6.0.0-alpha-007] - 2023-03-27

Changed

  • CodeFormatter.FormatASTAsync returns a string. #2799
  • Cursor with defines. #2774

Removed

[6.0.0-alpha-006] - 2023-03-17

Fixed

  • Record member declarations can break with Stroustrup enabled. #2787

Changed

  • Add fsharp_experimental_elmish setting. #2795

[6.0.0-alpha-005] - 2023-02-24

Changed

  • Fix handling of AppExpr with a single stroustrup record. #2747
  • Inconsistent styling when using Stroustrup with or without member attach to record creation. #2652

[6.0.0-alpha-004] - 2023-02-22

Changed

  • Always process folder recursive. #2768
  • Revisit --profile flag. #2751

Fixed

  • Don't hook up SerilogTraceListener in FantomasDaemon. #2777

[6.0.0-alpha-003] - 2023-02-04

Changed

  • Splitting ExperimentalStroustrupStyle to separate settings. #2276
  • Remove F# option from public API. #2759
  • Naive parallel formatting implementation. #2717
  • Add separate CodeFormatter.FormatDocumentAsync overloads with cursor and config. #2763

[6.0.0-alpha-002] - 2023-02-01

Changed

  • Update output for copy-and-update expression for Stroustrup. #2748
  • Drop Experimental prefix from ExperimentalStroustrup. #2755
  • Expose initial Oak API. #2758

[6.0.0-alpha-001] - 2023-01-24

Changed

  • Add --verbosity flag. #2693
  • Sunset MultilineBlockBracketsOnSameColumn & ExperimentalStroustrupStyle. #2710
  • Move FormatConfig into Fantomas.Core namespace. #2736
  • Initial cursor API. #2739

[5.2.4] - 2023-03-17

Fixed

  • Idempotency problem with module abbreviation in signature file. #2792

Changed

  • Update FCS to 'Fix range for ModuleAbbrev...', commit 62dfce601573f44779b9c890e8944826f5ccfef0

[5.2.3] - 2023-03-06

Fixed

  • Duplicate newline in else if. #2752
  • Try-with expression with long when guard - when breaking line, add a double indent when the indent_size is lower than the default 4 spaces. #2784

[5.2.2] - 2023-02-18

Fixed

  • Fixes comma breaking with lambda in tuple. #2771

[5.2.1] - 2023-02-04

Fixed

  • Conditional defines around selfIdentifier in implicit type constructor. #2733
  • Insert extra spaces around index between method calling and member variable accessing. #2760
  • Exception caused by long line over 80 characters including method calling and member indexing. #2761

Changed

  • Update FCS to 'Add SynMemberDefnImplicitCtorTrivia', commit 924a64e8e40c840f05fbe7113796f267dd603282

[5.2.0] - 2023-01-19

Fixed

  • Optional constructor arguments are lost. #2718
  • Bad format result with SynExpr.DotSet. #2000
  • Empty nested module. #2721
  • Optional parameter lost backticks. #2731

[5.2.0-alpha-012] - 2023-01-14

Fixed

  • Trivia before open statement is not preserved. #2704
  • Type app identifier is considered as an expression. #2705
  • Subsequent identifier links in chain should be on the same line. #2712
  • Delegate with many parameters result in a compilation error. #1514
  • MultiLineLambdaClosingNewline + ExperimentalStroustrupStyle is not displaying very well for some use cases. #2378

[5.2.0-alpha-011] - 2023-01-12

Fixed

  • Stroustrup: Two lists given directly as parameters, break code #2681
  • fsharp_experimental_stroustrup_style=true breaks on types with nested anonymous records. #2413
  • Stroustrup style breaks on nested records. #2587
  • Unit is lost inside dot get chain. #2683
  • Piped multiline application is indented too far. #2682
  • Comment not assigned to first parameter in constructor. #2692
  • Stroustrup: Type alias for anonymous record type. #2179
  • Space before lambda should not occur in chain. #2685
  • Trivia inside chained lambda is not restored correctly. #2686
  • SpaceBeforeUppercaseInvocation not respected in TypeApp DotGet. #2700

[5.2.0-alpha-010] - 2022-12-30

Fixed

  • Conditional compilation of a declaration is lost. #640
  • Block comment is not assigned to trivia node. #2490

[5.2.0-alpha-009] - 2022-12-29

Fixed

  • ifdef removed when used on inline keyword in function. #2017

Changed

  • Update FCS to 'Include inline in trivia', commit e30d14cb46f290050ac8e2bbea5e9b804b97bdde

[5.2.0-alpha-008] - 2022-12-28

Fixed

  • else followed by //comment and then if has incorrect indention. #2449
  • Multiple List concat operators are not seen as the same operator. #2472
  • Multiline string inside lambda expression fails to format. #1299
  • Can't format fragment of source code with #if element, and keyword, and triple-slash comment. #2360
  • Wrong formatting applied to fragment of code with #if clause. #2361
  • Comment in middle of pattern fail formatting. #1939

[5.2.0-alpha-007] - 2022-12-26

Fixed

  • Comment dropped in constructor parameter list. #1872
  • Block comment before unit is missing. #2660

Changed

  • Update config to accept a single option for multiline_bracket_style. #2425

[5.2.0-alpha-006] - 2022-12-22

Fixed

  • Conditional directives around internal keyword. #628

[5.2.0-alpha-005] - 2022-12-16

Fixed

  • MultiLineLambdaClosingNewline didn't trigger correctly on line which was one character too long. #2642

Changed

  • Enable ServerGarbageCollection. #2655

[5.2.0-alpha-004] - 2022-12-07

Fixed

  • genNode for patterns case by case. #2644
  • Mutable and private keywords are swapped. #2646
  • Stroustrup results in heavily indented second argument. #2648
  • Comment on first chained function call gets lost. #2649
  • Double indents in piped function call. #2650

[5.2.0-alpha-003] - 2022-12-05

Fixed

  • Attribute on ExplicitCtor is lost. #2638
  • Comment above single parameter in brackets breaks code due to wrong indentation. #2594

[5.2.0-alpha-002] - 2022-12-04

Fixed

  • Regression around let ... in in multiline infix application. #2633
  • Improve TypeDefn. #2636
  • Trivia before equals in multiline implicit type constructor. #2637

[5.2.0-alpha-001] - 2022-11-30

Changed

  • Introduce custom internal syntax tree. #2626

[5.1.5] - 2022-12-22

Fixed

  • Call ignoreFile.IsIgnored with absolute path. #2656

[5.1.4] - 2022-11-30

Fixed

  • Indenting problem with match workaround for single-line stroustrup expressions #2586

[5.1.3] - 2022-11-14

Fixed

  • Idempotency problem with anonymous types in discriminated unions. #2621

[5.1.2] - 2022-11-09

Changed

  • Update to newer Fantomas.Client. #2617

[5.1.1] - 2022-11-07

Fixed

  • Comment is removed when using array index access syntax, without a leading dot. #2611
  • Interface in object expression is not printed. #2604

[5.1.0] - 2022-11-04

Changed

  • Official release.

[5.1.0-beta-002] - 2022-10-29

Fixed

  • Idempotency problem with struct end. #2592
  • Idempotency problem when having a comment in an anonymous record and Stroustrup formatting. #2566
  • AlternativeLongMemberDefinitions breaks spacing around type Blah as this. #2598
  • Outdenting problem when specifying record with accessibility modifier. #2597

[5.1.0-beta-001] - 2022-10-19

Fixed

  • Comments get removed for method parameter with attribute. #2585

Changed

  • Update FCS to 'TypeDefn and NamespaceOrModule leading trivia', commit 7d115d56cde12006dd26a3c5babd702df451b8e8

[5.1.0-alpha-007] - 2022-10-14

Changed

  • Revert multiline alternative for prefix types. #2582

[5.1.0-alpha-006] - 2022-10-14

Changed

  • Formatting of anonymous record types respects fsharp_multiline_block_brackets_on_same_column. #1167
  • Update FCS to 'Leading keyword synbinding', commit 05201993cfaac663c72b6431d81f543e3d001dfe

[5.1.0-alpha-005] - 2022-10-07

Changed

Fixed

  • Comments in SynArgPats.NamePatPairs are lost. #2541
  • Vanity alignment used inside base ctor call. #2111
  • Add line break before start of argument list. #2335

[5.1.0-alpha-004] - 2022-10-07

Changed

  • Update FCS to 'Add extern keyword to SynBindingTrivia', commit 23d93522a56e139e2fc85e6d2591d38698ae8d38

Fixed

  • extern expression should respect page width. #735
  • extern declaration inside type declaration is converted to let binding. #1214
  • extern with void return type is converted to let binding. #1215
  • extern C-like parameters are not supported. #1216

[5.1.0-alpha-003] - 2022-10-02

Changed

  • Function call with parenthesis around function name. #2382
  • Spaces added inside new index syntax. #2494

[5.1.0-alpha-002] - 2022-09-29

Changed

  • Update FCS to 'Parallel type checking for impl files with backing sig files', commit 51635bbebf36e39a86d06d96730e13cfc40a095f

[5.1.0-alpha-001] - 2022-09-18

Changed

  • Update FCS to 'Introduce SynType.SignatureParameter', commit 8f59d364a0abccb04d4ec2f1cd09665dee298777

[5.0.6] - 2022-10-13

Fixed

  • Overly aggressive de-indentation. #2110
  • Broken comma in match expression in parameter invocation. #1869

[5.0.5] - 2022-10-07

Fixed

  • Function lambda with type annotation breaks code. #2295
  • Incorrect scope chosen for trivia, hence comments lost. #2535

[5.0.4] - 2022-10-04

Fixed

  • Additional space before equals sign. #2548
  • Idempotency problem when DotSet / App / Paren. #2549

[5.0.3] - 2022-09-29

Fixed

  • Comments in anonymous record deleted after formatting. #2538

[5.0.2] - 2022-09-22

Fixed

  • Wrong generic constraint placement in ML-style generic definitions with multiple type parameters. #1868
  • Incorrect async indentation when inside of a match. #2501
  • Conditional directives before expression leads to invalid code with Stroustrup. #2517

Documented

  • Building Fantomas in Visual Studio for dev errors. #2447

[5.0.1] - 2022-09-18

Fixed

  • Items.Item <index> <- value gives wrong code. #2498
  • Incorrect Stroustrup indentation with let binding for anonymous record with expression. #2508
  • Equality comparison with a record with a with expression results in broken code. #2507
  • Stroustrup record type definition with access modifiers and members lead to invalid F# code #2511

[5.0.0] - 2022-09-16

Fixed

  • Open statement after module should get a newline before it. #2502

[5.0.0-beta-010] - 2022-09-10

Fixed

  • Record definition with accessibility modifier error using stroustrup style. #2481
  • Comments between tuple type are lost. #2149
  • Stack overflow on macOS with a big source-file. #2485

[5.0.0-beta-009] - 2022-09-02

Fixed

  • --check should fail if the number of newlines is different. #2461
  • Comment after closing brace of computation expression is lost. #2466
  • Match statements should not be split into separate lines between parentheses. #2044

[5.0.0-beta-008] - 2022-08-30

Fixed

  • List of functions misaligned and breaks (Elmish). #2158
  • Idempotency problem when Elmish Html. #2195
  • Splitting list results in code that doesn't compile. #2201
  • Idempotency problem when using a list with interpolated strings. #2242
  • Idempotency problem when using set and spread syntax. #2392
  • Formatting (*) returns ( * ). #2452
  • Comment after last case of function with operator is removed. #2454
  • Trailing whitespace in block comments should be preserved. #2450

[5.0.0-beta-007] - 2022-08-19

Fixed

  • abstract with docstring and comment gets split up. #2433
  • Invalid removal of space in operator which starts with *. #2434
  • Incorrect concatenation of lines with functions. #2435

[5.0.0-beta-006] - 2022-08-12

Fixed

  • Wrong comma placement results in "Possible incorrect indentation". #2159
  • Indentation warning for update record in infix operation. #2355
  • Use of A | B as c fails to format correctly. #2289

Changed

  • Update FCS to 'Include star in topTupleType rule', commit f8b56cb6db3c90348810263fd7a5d37dc5719e92

[5.0.0-beta-005] - 2022-08-03

Changed

  • Update FCS to 'SynType with single slash and type', commit e1f735546a907b0a511b818f10829b1d75139021

Fixed

  • Fantomas moves comma and breaks code. #2381
  • Idempotency problem for unit of measure. 2264
  • Indent interface member after anonymous record as generic type. #2396
  • Unexpected concatenation of docstring lines after private modifier on DU. #2401
  • Star in tuple return type lost. #2403

[5.0.0-beta-004] - 2022-07-27

Fixed

  • Shebang directives get removed from scripts #2367

[5.0.0-beta-003] - 2022-07-26

Changed

  • Show a better error message when the folder does not exist. #2341
  • Update FCS to 'Use SynLongIdent in SynOpenDeclTarget.ModuleOrNamespace', commit c18989124a92cc26a736d89137254f1ca84d4880

Fixed

  • global keyword is escaped with single-backticks when used as part of a namespace/module open. #2274
  • global namespace should not be escaped. #2366
  • Trivia between xml doc and type not restored. #2143

[5.0.0-beta-002] - 2022-07-19

Fixed

  • Idempotency problem when using object expression and having a space between get / set lines. #2372
  • FSharp.Core version conflict between Fantomas.Core and Fantomas.FCS. #2374

[5.0.0-beta-001] - 2022-07-15

Changed

  • Don't mark optional parameters as required in public API. #2350
  • Update default value for v5. #2288

Fixed

  • Content of #if block removed - Breaking Code on reformat. #801
  • Using a compiler directive copies the previous(?) line in fsi files. #1186
  • Multiline if expression with multiline infix operations. #1775

[5.0.0-alpha-011] - 2022-07-08

Changed

  • Restore the CodeFormatter.MakeRange public API. #2306
  • Update FCS to 'Add arrow to SynType.Fun trivia.', commit 5a5a5f6cd07aa4a8326baa07d4f7af1305ced6f4
  • Update FCS to 'Fix setter first', commit 267d0a57f217df756d9ac33c6aa4ffbfe3b53097
  • Update style of long if/match expressions (See fslang-design#646). #2334
  • --force will now write a file even when the result is invalid. #2346

Added

  • Add setting fsharp_max_if_then_short_width. #2299

Fixed

  • KeepIndentInBranch not respected inside a let and match. 1825

Removed

  • --stdin, --stdout and --fsi flags. #2346

[5.0.0-alpha-010] - 2022-06-27

Changed

  • Restore the FormatSelection public API. #2237
  • Refactor list of TriviaNodeAssigner to tree structure. #2271

[5.0.0-alpha-009] - 2022-06-21

Fixed

  • Explicit interface with SpaceBeforeClassConstructor. #2226
  • Spaces around binary operators in units of measure. #2207
  • Trivia not restored after long identifier in SynField. #2290
  • Content after hash directive is lost. #2293
  • Idempotency problem with computation expression with generic parameter. #2285

[5.0.0-alpha-008] - 2022-05-28

Fixed

  • Superfluous space between negate and RationalConst. #2265
  • Idempotency problem with ParsedHashDirective in signature file. #2258
  • Keyword 'override' gets changed to 'member'. #2221

Changed

  • Formatting of multi-constrained SRTP functions needs improvement. #2230
  • Try/With with a single clause. #1881
  • Long type argument with constraints is not respecting max_line_length. #2266
  • Long function argument with constraints is not respecting max_line_length. #2267

Removed

  • Remove Fantomas.Extras. #2269

[5.0.0-alpha-007] - 2022-05-16

Changed

  • Update FCS to 'Add SynExpr.Dynamic to SyntaxTree.', commit b822e2793bd6387c40cfd5b25d604e002a253257
  • Restore the validation API. #2236
  • Renamed fsharp_experimental_stroupstrup_style to fsharp_experimental_stroustrup_style. #2257

[5.0.0-alpha-006] - 2022-05-13

Added

  • Format function application that end with a list in the Stroustrup bracket style. #2244
  • Option to reduce multiple blank lines from source code. #2198

Removed

  • Remove Elmish settings: fsharp_max_elmish_width, fsharp_single_argument_web_mode & fsharp_disable_elmish_syntax. #2180
  • Remove fsharp_semicolon_at_end_of_line. #2247
  • Remove fsharp_keep_if_then_in_same_line. #2248
  • Remove fsharp_indent_on_try_with. #2249

Changed

  • Update FCS to 'More cleanup', commit e063dd2a7005faf953619ab4f232d1e3606c7ed2
  • Rename fsharp_ragnarok to fsharp_experimental_stroupstrup_style and fsharp_keep_indent_in_branch to fsharp_experimental_keep_indent_in_branch. #2251
  • Consider wider default format for record declarations if any XML doc comments are present on fields. #1879

Fixed

  • A space was added before paren lambda argument. #2041
  • Linq method call breaks because of space before paren lambda was added. #2231

[5.0.0-alpha-005] - 2022-05-07

Fixed

  • Fantomas v4.6.4 and onwards removes backticks. #2164
  • include is reserved keyword. #2167
  • base keyword given backticks when overriding with argument. #2212
  • Fantomas removes backticks around constraint. #2116
  • Keep backticks in identifiers. #2034
  • Parens stripped from custom definitions of op_Range and op_RangeStep operators. #1842
  • XML docs for commented code automatically removed. #2186

[5.0.0-alpha-004] - 2022-05-07

Changed

[5.0.0-alpha-003] - 2022-05-06

Changed

  • Don't add space between type of array and square brackets. #2192
  • Adjusted formatting of quotation expressions to latest F# style guide. #661
  • Use F# compiler from the source files. #2217
  • Rename Fantomas to Fantomas.Core and fantomas-tool to fantomas. #2174
  • Update logo. #2229

Fixed

  • Idempotency problem with multiline quotation expressions. #2203

[5.0.0-alpha-002] - 2022-04-04

Changed

  • Target net6.0 for fantomas-tool.

[5.0.0-alpha-001] - 2022-03-19

Added

  • Initial settings for strousrup bracket style. #2161

[4.7.9] - 2022-05-02

Changed

  • Add fable_modules to the directories which are always excluded. Fable 3.4

Fixed

  • Let binding after match lambda is moved outside of nested module. #2214

[4.7.8] - 2022-04-25

Fixed

  • Breaks float range with step-size when trailing 0 is omitted. #2171
  • Fantomas inserts a space between array variable and indexer. #2106

[4.7.7] - 2022-04-20

Fixed

  • Multiline parentheses objectExpression in indexer expression. #2176
  • Blank line over SynEnumCase is restored incorrectly. #2155
  • XML Doc comments on DU cases seem to get shuffled. #2188
  • Comment after bar is lost in single case DU. #2182
  • Piped lambda with if-then-else can break code. #2196

[4.7.6] - 2022-04-04

Fixed

  • SRTP or condition disappear when non-generic type is used. #2168
  • Multiline AbstractSlot without constraints introduces newline #2175

[4.7.5] - 2022-03-27

Fixed

  • Only load the .fantomasignore file once, except for the daemon. #2097

[4.7.4] - 2022-03-25

Fixed

  • DotGet in quotation should be further indented. #2154
  • Reformatting multiple array index operators (v6 style) adds spaces that are invalid #2151

[4.7.3] - 2022-03-12

Fixed

  • Option parameter name is lost in tuple. #2144
  • Trivia between XmlDoc and member is not printed. #2147
  • Emit correct keyword for properties with both getter and setter specified #2129
  • Duplicate ///-comments when immediately preceded by a //-comment. #2152

[4.7.2] - 2022-03-11

Fixed

  • Reordering comments on modules. #2141

[4.7.1] - 2022-03-08

Fixed

  • Comment after equals is remove in anonymous record. #1921
  • Comment after equals in record type is lost. #2001
  • Comment after match keyword is lost. #1851
  • Preserve in keyword on next line. #1182
  • Remove Ionide.KeepAChangelog.Tasks and Dotnet.ReproducibleBuilds as NuGet dependencies. #2131
  • Comment lost between attribute and member. #2130

[4.7.0] - 2022-03-04

Changed

  • Always add a space for multiple curried args invocation. #2087
  • Update FCS to 41.0.3. #2122
  • Print XML Document comments from AST. #1878

[4.6.6] - 2022-03-04

Changed

  • Update .NET SDK to 6.0.200. #2105
  • Lock FCS version in Fantomas nuspec. #2118

Fixed

  • Keep copyInfo for record fixed at starting column. #2109
  • Unexpected expression: Fixed. #2112

Documentation

  • Fixed typo in Formatting-Elmish-code.md #2120

[4.6.5] - 2022-02-18

Changed

Fixed

  • Error formatting defines #if (!DEBUG) ... #endif (no #else). #2098
  • Single block comment in namespace is disappearing. #1951
  • Unexpected newline added before let bang. #1932
  • Creating anonymous record based on a function call with a list arg fails. #1749
  • Access modifier is lost in extern declaration. #1213
  • Unexpected indentation in if-else when using keep_if_then_in_same_line=true. #1160

Documentation

  • Add additional information about the style guide in CONTRIBUTING.md. #2078
  • Fix FSharp compiler docs link for SynExpr. #2082
  • Fix FSharp compiler docs link for SynExpr.DotGet expression. #2084
  • Pre push hook to ensure code is formatted on upload. #2085
  • Explain what's needed to close issues, that aren't reproducible anymore. #2092

[4.6.4] - 2022-02-11

Fixed

  • type declaration loses 'when' qualifier. #2075
  • Comments in anonymous record values are deleted. #2067
  • Comment after [] is lost, more common in records. #2043
  • Named argument should have a space. #1877

[4.6.3] - 2022-02-08

Documented

  • Running fake build locally. #2056
  • Replace Gitter with Discord. #2070

Fixed

  • Spaces are lost in multi range expression. #2071

[4.6.2] - 2022-02-06

Fixed

  • Comment in method chain gets deleted. #2062
  • Idempotency and correctness problem when using multiple if statements as list comprehension. #2055
  • Comment inside LongIdentWithDots not preserved. #2027
  • Consecutive #load statements are merged into one line if namespace is declared below. #2014
  • Line of code including a backward composition operator causes error. #1998

[4.6.1] - 2022-02-01

Fixed

  • Type parameter comment lost in formatting. #2052
  • Unicode string containing "\000" is replaced by null character when being formatted. #2050
  • Idempotency problem when comment after opening bracket in Elmish expression without children. #2037
  • Default settings in .editorconfig files. #2030
  • "cannot determine if synExpr Paren" when Lambda after If expression. #2015
  • Comment removed in do binding. #1875
  • Comment after arrow is missing in SynExpr.Lambda. #1870
  • else if turned into elif when KeepIndentInBranch = true. #1818
  • Comment after closing brace in nested record is lost with default settings. #1172
  • Inconsistent spacing of multiline object expressions in lists with default settings. #1170
  • type definition in signature file wrapped with hash directives. #1115
  • Strict mode strips literal strings. #560

[4.6.0] - 2022-01-14

Changed

  • Unify Fantomas versions across editors. #1844
  • Update formatting types in signatures (See fslang-design). #1994
  • Read editorconfig settings before overwriting settings with request configuration. #2006
  • Expose configuration documentation in Fantomas.Daemon #1956
  • Update FCS to 41.0.1 #1949
  • Wider default fsharp_max_value_binding_width. #1947
  • Update FCS to 41.0.0-preview.21472.3 #1927
  • Update record should indent from the curly brace instead of the identifier. #1876
  • Update style of lambda argument. #1871
  • Update to FCS 40.0.1-preview.21352.5

Added

  • Editor.config: insert_final_newline. #2002

Fixed

  • Comment lost between attribute and nested module #2016
  • Incorrect new array indexing formatting. #1985
  • Idempotency problem when exception definition used in signature file. #1974
  • Create parsingOption via CodeFormatterImpl helper. #1946
  • Explicit call of active pattern fails. #1937
  • Idempotency problem when destructing a record inside a lambda argument. #1922
  • Exception with boolean constant in #if. #2013

[4.5.12] - 2022-01-08

Fixed

  • Strings containing spaces at end of line change meaning. #1941
  • Explicit class/end/with loses members. #1940
  • Idempotency problem when static member with get. #1913

[4.5.11] - 2021-12-29

Fixed

  • KeepIndentInBranch not being respected. #2003

[4.5.10] - 2021-12-04

Fixed

  • Fantomas writes even when not necessary. #1984

[4.5.9] - 2021-11-24

Fixed

  • Operator application to some literals doesn't preserve spacing. #1979

[4.5.8] - 2021-11-19

Fixed

  • Fantomas is unable to format valid F# (.net 6.0) program. #1969
  • Attributes on static members of recursive types formats incorrectly. #1962
  • val mutable in signature loses 'mutable'. #1954
  • Literals in signatures lose values. #1953
  • Attribute on member of mutually dependent types fails to validate. #1918
  • Wrong code is generated for member attribute in recursive type. #1898
  • Attribute on type function incorrectly placed for 'and' types. #1874

[4.5.7] - 2021-11-07

Fixed

  • Formatting power operator in code quotation pattern match fails. #1945

[4.5.6] - 2021-11-03

Fixed

  • Offside code created when base constructor wraps across lines. #1942
  • Extra space in val and member bindings in signature files. #1934

[4.5.5] - 2021-10-27

Fixed

  • Provide more information when string merge failed. #1904
  • Comment gets duplicated. #1912
  • Vanity alignment used when splitting line in match block. #1901
  • Unexpected loss of newline in closing bracket. #1835
  • Relative patterns in .fantomasignore don't match any files. #1713

[4.5.4] - 2021-10-05

Fixed

  • Documentation contains reference to infix multiline formatter even though it's removed. #1884
  • Newline was introduced in Sequential with LetBang. #1882
  • Vanity alignment used when calling base constructor. #1442

[4.5.3] - 2021-09-07

Fixed

  • indented #if directive inside another non-indented #if directive drops significant whitespace. #1866

[4.5.2] - 2021-08-11

Fixed

  • Dropped comment with function with type parameter. #1861
  • Comment dropped in a multi-option match. #1855
  • StackoverflowException when formatted long triple-quoted strings. #1837
  • Comment removed in match. #1677

[4.5.1] - 2021-07-24

Fixed

  • StackOverflow exceptions when collecting ColMultilineItem list. #1839
  • Overly indented members on a record type with accessibility modifier. #1824
  • MultiLineLambdaClosingNewline not respected with function keyword. #1823
  • Comment is lost at the end of a match. #1822

Changed

  • Honor .fantomasignore file when processing a folder. #1834

[4.5.0] - 2021-07-07

Added

  • Always place bar in front of discriminated union. #1750
  • Support multiple files/dirs as command-line arguments. #1696
  • Disable empty line between mutually recursive type. #1658
  • BlankLinesAroundNestedMultilineExpressions. #1587

Changed

  • Initial support of KeepIndentInBranch. #1361
  • Update to FCS 39 #1479

Fixed

  • Collect empty define block as single trivia. #1528
  • Refactor ASTTransformer. #1497
  • replace genTypeByLookup with Trivia. #594
  • Space between identifier and then is lost. #1816
  • KeepIndentInBranch causing offside error in if condition. #1812
  • Indentation warnings for multiline match expression. #1774
  • Extra indentation on match-case block. #1234
  • Fantomas introduces meaningless match block. #1806
  • Lazy causes indentation to produce invalid F#. #1805
  • Nested Fluent API produces wrong code: misses indentation. #1804
  • Tuple should be consider short branch in KeepIndentInBranch setting. #1800
  • Fantomas adds "of" to a union case when it is seemingly too long. #1796
  • Function application in if expression should remain on single line. #1795
  • Conditional code is not printed. #1794
  • Records in list in a pattern match always have a semicolon. #1793
  • parenthesis expression in then should further indent inner expression. #1777
  • Wild cards in lambda. #1789
  • Soundness regression in 4.5.0-beta-001. Nested lambdas are stripped. #1782
  • KeepIndentInBranch not respected when returning short function application. #1779
  • Hash directive not printed above recursive binding. #1776
  • Fantomas adds space before colon when SpaceBeforeColon is false. #1773
  • Long return expression not formatted multiline. #1771
  • Add support for LibraryOnlyStaticOptimization. #1769
  • fsharp_keep_indent_in_branch not respected for multiline infix expression. #1768
  • Inline lambda in argument list causes problems for argument chopping and lambda alignment. #1028
  • Difference in behavior between signature and implementation files for single case DU. #973
  • Concatenation of multi-line """ strings mis-indented. #639
  • Comment after arrow lost with KeepIndentInBranch. #1759
  • Multiline if/then/else in infix expression. #1757
  • Newline and comment trivia are mixed up. #1468
  • Inline lambda in argument list causes problems for argument chopping and lambda alignment. #1028
  • Difference in behavior between signature and implementation files for single case DU. #973
  • Concatenation of multi-line """ strings mis-indented. #639
  • Trivia before SynPat.Paren. #1753
  • Idempotency problem when trailing comment is present. #1538
  • Offside error after formatting with MultiLineLambdaClosingNewline. #1741
  • Pipe character missing in single-case try/with. #1571
  • Multiline if condition in KeepIndentInBranch leads to warnings. #1729
  • KeepIndentInBranch not respected for values. #1728
  • KeepIndentInBranch not respected. #1717
  • Bad interaction between KeepIndentInBranch and MultiLambdaClosingNewLine. #1715
  • KeepIndentInBranch not being respected. #1714
  • Breaking method chain in the middle of an if statement causes offside error. #1712
  • Offside error when a comment appears before a match statement in pipeline. #1711
  • Line comment after short pattern match clause causes additional parenthesis. #1721
  • Appending two lists with @ fails. #1719
  • Leading block comment makes type multiline. #1718
  • List concat chain using operators fails to format. #1188
  • Unexpected newline after inner let binding. #1709
  • Currying a pair gets spread over multiple lines. #1700
  • Additional parentheses are introduced when match is piped. #1698
  • \t in string replaced by ASCII 9. #1695
  • Idempotency problem with nested else if. #1648
  • Idempotency problem with ifdef in a function. #1646
  • string interpolation part crossing max line length introduces new line and lots of whitespace. #1511
  • Splitting generic type parameters over multiple lines sometimes puts the break in an invalid place. #1687
  • Idempotency problem related to comments in with. #1686
  • Upcast requires a line break but is not given one. #1685
  • Idempotency problem when trying to format a type with method chaining in it. #1681
  • Line comments after null value used as argument in function call are removed. #1676
  • Idempotency problem when trying to format a type with method chaining in it. #1681
  • Comment after constant got moved to the next line. #1671
  • Idempotency problem when ending with a comment. #1649
  • end_of_line not respecting when file has ifdef. #1673
  • Attributes in a recursive type get misplaced. #1668
  • alternative_long_member_definitions docs. #1666
  • Stack overflow on macOS for long pipelines. #1453
  • Comment inside empty Elmish children is lost. #1179
  • Long .Setup line in Moq code results in broken indentation. #1662
  • Don't introduce parenthesis around SynPat.IsInst. #1660
  • Offside error splitting long line. #1651
  • Offside errors after formatting. #1650
  • Idempotency problem with with block. #1647
  • Formatting code makes Interpolated verbatim strings to non-verbatim strings, which breaks the code. #1645
  • Comment stripped in a record with semi-colons. #1643
  • Another shape which isn't respecting KeepIndentInBranch. #1638
  • Incorrect code when function type parameter would break over line. #1637
  • Multiline type parameter arguments inside indentation. #1611
  • Fantomas add extra parenthesis in desugared lambda. #1631
  • Mutually recursive functions break with function invocation above definition. #1628
  • Removal of bar in one-case DU. #1563
  • Multiline type signature is not unindent. #1624
  • Failure to unindent with KeepIndentInBranch. #1621
  • Some of newlines in string interpolation is deleted. #1613
  • Idempotency problem when piping just before the keyword in. #1610
  • Idempotency problem with lazy. #1609
  • Idempotency issue with let … in. #1608
  • Idempotency problem when splitting && over multiple lines. #1607
  • Idempotency problem when splitting if-clause over multiple lines. #1606
  • Idempotency problem with recursive types in FSI. #1605
  • Idempotency problem with comments at the end of code. #1604
  • Block comment in Elmish expression removed. #1601
  • System.Exception: was not expecting token DOLLAR. #1598
  • Define before opening bracket. #1597
  • Swap internal and inline in signature file. #1590
  • member laced with conditional. #1589
  • if expression is not indented. #1588
  • Fantomas throws an exception with custom operator (>??). #1533
  • Unexpected identifier in lambda expression when using pre processor directives. #1484
  • FormatException: Unexpected symbol '|' for DU case under pre-processor directive. #1483
  • End-of-line comments lost when formatting multiline type function signature. #1287
  • Comments are sometimes removed unexpectedly during formatting. #1276
  • max_line_length not respected in mutliline infix expression in if. #1584
  • Const() stripped from string literals break. #1574
  • Conversion of & to byref is invalid in extern function declaration. #1567
  • Quote character in a comment results in removing code inside preprocessor directive. #1504
  • Documentation comment for primary class constructor is removed. #1286
  • A comment before an anonymous function gets swallowed up. #1190
  • KeepIndentInBranch not being respected?. #1569
  • Split of very long function call in if body. #1564
  • fsi extension loses docstring in mutually recursive type. #1562
  • .fsi extension: attribute followed by docstring loses the docstring. #1561
  • .fsi extension causes first DU case's docstring to be lost. #1560
  • KeepIfThenInSameLine breaks function indentation. #1559
  • All SynExpr should start on next line and indent. #1556
  • Missing indentation when using pattern matching via anonymous functions in a pipeline. #614
  • Required type arguments are removed with DotGet lambda. #1550
  • Fantomas removes the format string from string interpolation. #1549
  • Missing in keyword. #1548
  • Pattern inside when clause. #1545
  • Hash defines in let binding. #1543
  • Comments are stripped at the end of a vertical list. #1541
  • Idempotency problem when match is follow by pipe. #1532
  • Idempotency problem when exceptions in signature file. #1531
  • Exception - detect of multiple defines when define surrounds a DU member. #1503
  • DotGet infix expression. #1529
  • SynPat.Or should have the same indent. #1522
  • DotGet with parenthesis. #1521
  • Trivia regressions around SynConst. #1518
  • Long signatures have additonal newline inserted and don't respect the indent from the config. #1515
  • Bad formatting when using elmish style + empty arrays. #1510
  • \xHH escapes in string literal are expanded. #1508
  • Indentation of pattern match clause. #1501
  • Class parameters expands unit for long lines. #1494
  • Comments inside Elmish gets repeated. #1347
  • Extra space throws exception. #1476
  • comment deleted on reformat. #1343

[4.4.0] - 2021-02-25

Changed

  • Revisit SynExpr.IfThenElse. #1258
  • Target netcoreapp3.1 for fantomas-tool.
  • Stricter trivia selection. #1304

Fixed

  • Idempotency problem when function argument's type annotation requires brackets. #1470
  • Inconsistency about when fantomas decides to split () (unit) to the next line. #1469
  • Unexpected newline between hash directives. #1464
  • Oscillating newlines in custom computation expression. #1463
  • Violation of "avoid name-sensitive alignments" clause. #1422
  • Incorrectly combines tokens when formatting. #1407
  • string interpolation with multi-line string causes literal part to change. #1451
  • when clause in try-with block gets split and causes compiler warnings about indentation. #1406
  • Long line breaks match. #1403
  • Long line causes offside error. #1402
  • Nested matches format into something invalid. #1400
  • Shortening big if clause still creates compiler warnings. #1390
  • “FS0058: Possible incorrect indentation” on function composition after running Fantomas. #1341
  • Typed App followed by chained lambda should not add space. #1448
  • TypedApp should not have a space when chained. #1447
  • Unexpected newline after short match expression. #1445
  • Space after chain lambda function is not allowed. #1440
  • Formatting error with MultilineBlockBracketsOnSameColumn. #1396
  • fsharp_space_before_uppercase_invocation=true breaks method calls. #1437
  • Crash regression on 4.4.0-beta-003. #1438
  • MultiLineLambdaClosingNewline concats lambda arguments. #1427
  • member val causes invalid code to be generated. #1426
  • Surround return type annotations with white space [F# style guide]. #1420
  • Lists concatene onto one line invalidly. #1405
  • Accessibility modifier on record causes unindentation of following type. #1404
  • Invalid addition of a space after constructor invocation. #1401
  • "Inline" is incorrectly stripped out in FSI file. #1399
  • Multiple type checks in a try/with get collapsed. #1395
  • Short line length and member constraint leads to invalid code. #1394
  • Object expression newline gets added/removed. #1388
  • Arrays of constructors with lots of arguments gets dedented too much. #1382
  • Format in pre-commit hook. #1207
  • Shortening an 'if' condition causes compilation warnings about indentation. #1374
  • Some escapes are unexpectedly modified in character literal patterns. #1372
  • Fantomas formats with an error for very long DU case match. #1364
  • Fantomas errors out on new Foo "". #1363
  • Aesthetics of long members in a type declaration. #1362
  • Comment on first constructor argument gets removed. #1350
  • “FS0058: Possible incorrect indentation” around if/then/else after running Fantomas. #1349
  • Failing to format file should return an exit code different than 0. #1340
  • Shorter MaxLineLength with long variable name yields invalid F# code according to fantomas. #1241
  • MultilineBlockBracketsOnSameColumn should be honored inside match block. #1238
  • Update constructor formatting to match MS Style guide. #1359
  • Violation of name-sensitive alignments. #1358
  • Pattern matching breaks code when expression is long and somewhat complex. #1352
  • Inserts extra newline everytime formatter runs. #1346
  • Functions looses space before parameter if func is defined inside method. #1345
  • Required backslash removed in string interpolation. #1344
  • Swallows comment before #nowarn directive. #1220
  • Swallows comment inside with block (of a try-with). #1219
  • Program.fs inside full path can lead to invalid AST. #1337
  • Formatting of long parameter lists. #657
  • DotGet inside If expression not correct on second format. #1329
  • Pipe is indented too far. #1327
  • IfThenElse piped leads to invalid code. #1324
  • Multiline when condition in pattern match needs to be further indented. #1320
  • Add comma in front of expression in tuple with if/then/else. #1319
  • New line before for loop not preserved. #1317
  • Newline before set expression is lost. #1314
  • Newline after let bang is missing. #1313
  • Revisit place parameters on a new line for long definitions. #1307
  • static member should only have a single indent. #1300
  • Elmish-like syntax using yields with interspersed let statements breaks the code. #1191
  • The 'member' keyword gets deleted in 'abstract member' declarations. #1106
  • Don't indent too far. #659
  • static member should only have a single indent. #1300
  • Named string argument to type provider requires a space prior to '@', which Fantomas removes. #1209
  • Don't indent too far. #659
  • spaces removed from string. #1290

[4.3.0] - 2020-12-17

Added

  • Clarify constructors. #1217
  • MultiLineLambdaClosingNewline. #1221
  • Disable Elmish syntax. #1198

Changed

  • Support user-provided end-of-line characters. #1231
  • Add option to make expressions multiline based on number of subexpressions rather than character length. #1143
  • Update to FCS 38. #1240

Fixed

  • Comment after let binding breaks downstream output. #1284
  • Comments are removed before and after empty array literals. #1281
  • Use a safe filename when formatting from CodeFormatter. #1279
  • Incorrect movement of a comma. #966
  • Bracket indentation is incorrect. #1271
  • tuple with match formats to invalid code. #1269
  • Incorrect movement of a comma. #966
  • Not adding a space even when all SpaceBefore* settings are enabled. #964
  • Multiline if condition can have incorrect indentation error. #1267
  • multiline do bang gives a warning. #1265
  • regressions. #1264
  • multiline yield bang in list should be further indented. #1254
  • Or pipe in destructured record should not be splitted. #1252
  • Swap order of private and inline. #1250
  • Comment is lost in enum. #1247
  • Nested if/else/then in short mode. #1243
  • Something doesn't add up in fix for 303. #1093
  • Fantomas format is "unstable/oscillates" after upcast operator: adds/removes empty line. #1227
  • Misplaces = in function signature so it's invalid F# code. #1218
  • Additional newline is added between if/elif and for loop. #1211
  • Let binding in hash directive disappears. #1205
  • Downcast operator doesn't get a new line. #1203
  • Implicit unit else results in extra lines with each reformat. #1187
  • Incorrect formatting of function parameter application with lambdas. #1201
  • Lambda functions in fluent API calls should indent further. #970
  • Hard to read code when using Thoth.Json. #685
  • --check should ignore the line endings. #1196
  • Format entire return type on the line. #1181
  • Only add one in keyword in LetOrUse. #1176
  • Multiline SynPat.Record in pattern match is formatted as a mixture of single/multiline styles. #1173
  • Inconsistent indentation of multiline records with internal keyword when fsharp_multiline_block_brackets_on_same_column is on/off. #1171
  • Lambda argument splits in awkward way. #1164
  • Multiline expression should be on next line. #1158
  • Missing in keyword makes code invalid. #1114
  • Invalid code after format. #1032
  • Space before ^ SRTP type is removed in function call. #984
  • Shouldn't remove space after colon. #908
  • Crash when formatting with config file. #824
  • Formatting typeof generic static constraint fails to compile. #803
  • Indenting of record definition when internal. #658

[4.2.0] - 2020-09-25

Added

  • MaxDotGetExpressionWidth. #501

Fixed

  • Confusing symmetry between infix operators. #988
  • Comment before closing parenthesis is lost. #1146

[4.1.1] - 2020-09-17

Fixed

  • No newline between module and first declaration. #1139
  • additional new lines added after each call to format. #1137
  • Generics error when breaking line. #1134
  • Comments on DUs parameterized by functions are dropped. #1128
  • Preserve underscore in number. #1120

[4.1.0] - 2020-09-10

Changed

  • Ignore files by .fantomasignore file. #420
  • Limit trivia by AST MainNode name. #992
  • Lead by example. #666
  • Verify all unit test whether the formatted code is valid. #842

Fixed

  • Comments get dropped from the end of multi-line records. #1124
  • Functions in nested modules which follow a type consisting of only one member of a DU are un-nested from that module. #1123
  • After discriminated union in module wrongly indented. #1122
  • Extra whitespace with a type which has an attribute. #1116
  • Adds newline between comments and (all but the first) attribute. #1108
  • Extra whitespace lines added in fsi files at the end of a nested module declaration. #1105
  • Extra new line is added before attributes. #1097
  • Comments after closing brace are lost. #1096
  • Comment after Or operator lost. #1095
  • Trivia before bar is being repeated. #1083
  • Comment after arrow is being duplicated. #1082
  • Allow line break after return to avoid excessive indenting/aligning. #1062
  • Name of static members are removed/empty. #1059
  • When using parenthesis in type definition, it will sometimes keep adding additional () for each time fantomas i run. #1057
  • Multiline string in use expression. #1055
  • Issue #246 has returned in v4.0.0. #1051
  • Indentation after multiple hash directives is off. #1026
  • if/then/else indented too far. #1054
  • Single AST node should contain trivia. #1031
  • Formatter adds extra newlines between type and any subsequent val in .fsi files. #1029
  • Comments in if/then/else statements are sometimes deleted. #1019
  • Moves type name around when writing constrained type defintions. #1018
  • Line break before bracket on long method call followed by member access causes semantic change. #994
  • Long union case should be split over multiple lines. #972
  • FSI formatting does the wrong thing with comments on single-case DU. #965
  • Invalid unit test should break lines on multiline if conditions. #863
  • Abstract member declarations don't follow page width. #435

[4.0.0] - 2020-08-27

Changed

  • Add initial support of String Interpolation. #998
  • Extract FakeHelpers and EditorConfig to Fantomas.Extras project #986
  • Update FCS to 37. #996
  • Update FCS to 36. #899, #961
  • Replaced json configuration with .editorconfig. #650
  • Sunset setting ReorderOpenDeclaration. #645
  • Sunset setting KeepNewlineAfter. #737
  • Renamed setting IndentSpaceNum to IndentSize. #940
  • Renamed setting PageWidth to MaxLineLength. #940
  • Removed all style configuration options from CLI tool. #704
  • Added Benchmarks. #867
  • Split up setting SpaceBeforeArgument to multiple settings. #649
    • SpaceBeforeParameter
    • SpaceBeforeLowercaseInvocation
    • SpaceBeforeUppercaseInvocation
    • SpaceBeforeClassConstructor
    • SpaceBeforeMember
  • Increase control over length of certain code constructs. #697
    • MaxRecordWidth
    • MaxArrayOrListWidth
    • MaxValueBindingWidth
    • MaxFunctionBindingWidth
    • MaxElmishWidth
  • Better support for Elmish inspired code. #922

Added

  • SingleArgumentWebMode. #927
  • AlignFunctionSignatureToIndentation. #946
  • AlternativeLongMemberDefinitions. #913
  • MultilineBlockBracketsOnSameColumn. #453
  • NewlineBetweenTypeDefinitionAndMembers. #752
  • KeepIfThenInSameLine. #825

Fixed

  • Comments in match statements are sometimes deleted. #1010
  • Comments on members with get/set are deleted. #1009
  • Hexadecimal numbers in enums are output as decimal numbers. #1006
  • List indentation issue. #999
  • Hexadecimal numbers in match arms are output as decimal numbers. #995
  • Removes the first comment above the member of the list. #990
  • Brackets increased every time Fantomas is run. #989
  • Bug: Hash directive in computation expression. #977
  • Bug with hash directives inside a match statement. #976
  • Bug with defines in record member assignment. #968
  • Backquotes are stripped down from checked. #937
  • Fantomas wraps extra set of parenthesis around parenthesis. #921
  • Remove indent setting from CLI tool. #888
  • Fantomas generating invalid F# when trying to format a list created with yields. #882
  • Invalid unit test method call on multiple lines. #862
  • Invalid unit test should break on . operator and keep indentation. #860
  • Multi-line arguments to chained method calls produce invalid code. #702
  • Line comment displaced from commented #-directive. #638
  • #if'd argument types are lost. #633
  • #if'd attributes moved to wrong column. #631
  • Assembly attributes create over-long lines. #629
  • List expression can get combined to a single line with different semantics. #931
  • Additional new line inserted around attributes. #949
  • with get removal in FSI invalid. #945
  • FSI file has "abstract" stripped. #944
  • Insertion of space before function application can break dot-chaining. #943
  • Concatenation of lines can break operator precedence. #942
  • Extra spaces inserted in record definition. #941
  • Comments at the end of async blocks are deleted automatically. #936
  • Newline between comments should lead to individual comments. #920
  • VS Code | Extra white space added to record definition. #910
  • When cutting off function invocations, should place each param in its own line (or align them to the 1st param). #907
  • Try online link points to old location. #890
  • Leading | in single-case union type with access modifier. #889
  • Type constraint on a type definition causes a loss of the type definition. #887
  • Fantomas removes the 'and' if there are multiple member constraints on a function declaration. #886
  • Comments inside a type definition can cause issues. #885
  • Long function signature should align with equal sign. #883
  • Newline not preserved between let and let bang. #879
  • Stackoverflow problem with let bang in match. #876
  • Incorrect formatting for chained class members using Websharper. #871
  • Pipe before and inside lambda leads to wrong indent of following lambda. #870
  • Formatting Program.fs with --check fails. #869
  • Possible wrong indentation for functions with parameters over multiple lines. #868
  • Invalid unit test different attributes according to defines. #864
  • Invalid unit test record instance with inherit keyword. #861
  • Invalid unit test should add space before type provider params. #859
  • Incorrect end of line added after "(" which makes the code not to compile. #856
  • Incorrect end of line added after "(". #855
  • SpaceBeforeUppercaseInvocation applied in the middle of a invocation chain. #853
  • MultilineBlockBracketsOnSameColumn not working properly when calling base constructors. #852
  • PageWidth not respected for member with one long parameter. #850
  • Wrong indentation in member definition. #844
  • Class type with long variable names results in invalid formatted F# code. #841
  • Multiline let bang should have newline before. #838
  • complex computation expression identifier looks off. #835
  • keyword before type declaration leads to invalid F# code. #830
  • Inconsistent if-then-else cut. #825
  • MultilineBlockBracketsOnSameColumn=true not working on records with short names. #823
  • --config fantomas-config.json gives error. #821
  • multiline let bang should have a newline. #819
  • Updated value not indented correctly. #817
  • Comment removed in multi-case pattern matching. #813
  • Wrong handling multi lines comment at the end of file after function application. #810
  • Opening brace for test missing. #806
  • Return attribute deleted on reformatting. #800
  • Fantomas crash with evaluation of array member. #798
  • Type restrictions in FSI files. #797
  • AssemblyInfo.fs attributes get squashed together. #796
  • Byte-order mark is stripped. #795
  • Fantomas replaces "abstract" in fsi, leading to compile errors. #794
  • Broken links in Readme.md. #791
  • Multiline first member should not introduce initial newline. #789
  • Newline added before let binding with attribute in class. #786
  • Some floating-point numbers are changed. #785
  • Adding newline before first comment in module. #784
  • Parameter after multiline string parameter. #783
  • Modulo operator misplaced. #780
  • double-backtick identifier is formatted wrong when starts with non-alphanum character. #776
  • Line comment after record not printed. #774
  • Additional blank lines inserted after formatting. #772
  • Error while formatting Fantomas unit test with compiler define. #761
  • AbstractSlot with line comment is consider multi line. #757
  • Missing space after multiline string. #754
  • Cannot determine upper or lowercase. #753
  • Feature: Add blank line between type definition and members. #752
  • Default member implementation changed to member during formatting. #742
  • Long function definition should put equals and body on a newline. #740
  • Add extra space between prefix operator and string. #736
  • MaxIfThenElseShortWidth is not respected. #734
  • Shouldn't remove getters. #733
  • Comment after then keyword gets removed. #730
  • Determine if DotGet expression is upper- or lowercase. #729
  • Check for Trivia content before the equals sign in let bindings. #728
  • When advising user to file a bug, should mention the file it was trying to format. #726
  • space removed from parameters passed to inherited class. #720
  • Place parameters on a new line for very long member definitions. #719
  • Exception: Unexpected scenario when formatting else if / elif. #713
  • Fantomas keeps adding newlines every time you format. #709
  • Duplicate spaces and lost of linecomment. #687
  • Formatting of array literals of BigInteger. #682
  • Hash directive not between namespace and module. #681
  • Comment above static member is wrongly placed. #680
  • Do not remove property setters. #664
  • StringConstant printed twice. #646
  • Newline after "bang" keywords in computation expressions. #615
  • Incorrect indentation when folding a record update expression. #536
  • Preserve comments after record. #516
  • Long function signature broken into two lines. #492
  • "Better" support for nesting complex expressions in async { } blocks. #386

[3.3.0] - 2020-02-28

Changed

  • Support for and!. #690
  • Support for new slice syntax. #691
  • Support for check style flag #642
  • Update FCS to 34.1 #699
  • Allow to configure spaces before and after semicolon. #653
  • Update README with link to YouTube videos series. #672

Fixed

  • Problem with --config and directory names containing ".". #694
  • Space is removed after Foo.Create. #676
  • Error in formatting nested else if construction. #675
  • Unbalanced and misplaced #if directives after formatting. #635
  • Stack overflow when using fantomas 3.2.0-beta-002. #630
  • --help and --version return exit code 1. #612
  • Line comment disappears after format. #598
  • Stack overflow for global tool on OSX. #591
  • Page width is not respected when formatting a function signature. #495

[3.2.0] - 2020-02-03

Changed

  • Added support for settings configuration file. #354
  • Use Argu for commandline argument parsing. #607

Fixed

  • Unicode null escapes are still unescaped. #632
  • Back ticks are removed from enum. #626
  • Pipe is removed when DU type name matches record type name. #641
  • fantomas --version should return version. #625
  • Extra newline between attribute and function. #611
  • Invalid code produced when formatting type alias for struct tuple. #605
  • Extra newlines repeatedly being added inside an object expression. #601
  • Empty line added on each format. #597
  • Error when formatting DU with single choice and attribute. #596
  • Unwanted new line after elif expression. #588
  • Unwanted new line added. #586
  • Empty lines in multi-line string get moved. #577
  • Error when combining #if directive with async block and let. #576
  • DllImport not detected when using additional attribute. #574
  • Comment in async block gets moved. #573
  • Enum comments removed. #572
  • Fantomas keeps adding new lines between two interface member implementations. #569
  • Unindented DU case causes compile error. #567
  • Erroneous whitespace in chained accessors. #566
  • Comments inside type signatures break formatting. #565
  • Hash symbol in signatures requires parens to remain. #564
  • Stack overflow in Strict mode. #562
  • Accessibility modifiers in DUs. #561
  • Line comment place after lambda instead of infix function. #559
  • Sequence expression inside computation expression outputs uncompilable code. #553
  • Comment after [ is not preserved. #551
  • Record update indentation incorrect around comments. #537
  • Formatting document continuously adds new lines each time it's called. #535
  • Comments like (fun arg -> // comment are lost. #534
  • KeepNewlineAfter not respected in let binding. #524
  • Improve formatting of lambda between parenthesis. #523
  • Crash when using --keepNewlineAfter. #513
  • Over-aggresive folding breaks nested lambda expressions. #486
  • Add FormatASTRangeAsync to API. #454
  • Intrinsic type extension member signatures are erased. #413
  • Inconsistencies in if formatting. #135

[3.1.0] - 2019-11-27

Fixed

  • invalid code generated after multiline string when other expressions exist on same line. #545
  • Trivia before elif generates invalid code due to missing indentation. #527
  • Don't add additional newline between two and blocks. #520
  • Print line comment after { #517
  • Formatting document removes '#if DEBUG' and '#endif'. #512
  • Some unicode control characters are incorrectly formatted. #506
  • New empty line inserted preceding module attribute. #505
  • Weird indentation/breaks with lambda in pipeline. #503
  • Sufficiently indent match case bodies for other indentation lengths than 4. #502
  • --noSpaceBeforeColon doesn't work. #499
  • Invalid code produced when wrapping method call to new line. #498
  • Indexer usage fails to parse. #497

Changed

[3.0.0] - 2019-10-11

Changed

Fixed

  • Adding parentheses around expressions can lead to incorrect indentation. #385
  • Indentation removed when combining comments and compiler directives. #382
  • Fantomas removes module and namespace if it is only 1 word (without dots). #380
  • Indentation incorrect for code with chained fluent interface method calls. #379
  • Incorrect indentation when space around delimiter is false. #362
  • Meaningful spaces can be collapsed in record-with expressions. #353
  • CLI arguments not accepted. #334
  • Calls to constructor from inherited class leads to wrong indentation (breaks build). #326
  • Indent level context lost in record initialization -- causes compilation failure. #313
  • Semi-colons may or may not be insterted in list literals. #312
  • Handling of blank lines is idiosyncratic. #311
  • Over-length line not folded (inside #if block). #309
  • With --preserverEOL, multi-line lambdas are not correctly formatted. #307
  • Reformatting #if blocks controlling attributes changes the meaning of the code. #304
  • Some spacing is still lost in and around #if blocks. #303
  • Weird formattiing behavior. #287
  • #if blocks result in code being moved around incorrectly. #282
  • Inline replacement. #278
  • No new line after long name when copying record with "with". #155
  • Formatting of multi-line list literals. #133
  • Problems with very long lines and/or files. #119
  • Adjust default configuration to be more F# idiomatic. #61
  • Excessive line breaking. #43
  • [Trivia] Line comment after then breaks code. #451
  • Bug report from fantomas-ui. #450
  • Publish 3.0.0 to NuGet.org with a preview flag. #448
  • Include directive with __SOURCE_DIRECTORY__ is removed and replace. #447
  • Formatting if expressions not according to style-guide. #446
  • PreserveEndOfLine+SpaceAroundDelimiter add an unnecessary space before closing brace. #443
  • Record option with attribute gets an additional space with PreserveEndOfLine. #442
  • Quotation escapes removed - Bug report from fantomas-ui. #440
  • Fantomas fails in Fake script. #439
  • Configuration options for "Fabulous compatibility"?. #437
  • Using fantomas with dotnet-format. #430
  • Change space before colon default to false. #429
  • global.json specifies outdated dotnet sdk. #426
  • Errors after formatting secondary constructors. #423
  • Wrong attribute and xml doc placement on reformat with PreserveEOL. #422
  • When running the tool for a fairly large script file (1000 lines) nothing happens. #416
  • Is Fantomas still supported for VS? Couldn't find it?. #415
  • the required library libhostfxr.so could not be found. #412
  • Latest FCS breaks fantomas. #410
  • Compiled operators names are replaced with source names. #409
  • Wrong anon module formatting when filename starts with a digit. #408
  • Raw method names with / are formatted improperly. #406
  • Attributes followed by unit literals aren't formatted properly. #405
  • Wrongly removed "with" for member on record, PreserveEndOfLine=true. #388
  • IndentSpaceNum is ignored if PreserveEndOfLine is enable. #387
  • An option to preserve empty lines between logical blocks. #496
  • Bug report from fantomas-ui. #491
  • finally is duplicated, moved. #487
  • Multiple #if cases causes failure (3.0.0 beta3 and beta4). #484
  • Significant spaces lost (v3.0.0-beta4). #483
  • #if/#endif lost with v3.0.0-beta-004. #482
  • Exception when code for no defines is empty. #480
  • Stackoverflow exception in AstTransformer. #479
  • [Trivia] Significant spacing added after let binding in function. #478
  • Incorrect replacement of override with member. #477
  • [Trivia] Fantomas removes the parentheses around Fable's string field access syntax. #476
  • [Trivia] Additional line added after very specific case. #475
  • Multiple extension members cause additional lines to be printed. #473
  • Long text lines cause out of range exception in 3.0.0-beta. #472
  • Class member attributes cause additional lines. #471
  • 'with' incorrectly removed. #469
  • Online UI tool doesn't understand F# 4.6's {| |}. #467
  • Exception handling 'with' clause using drop-through is malformed. #465
  • Unicode null escapes are unescaped (v3.0.0. beta1, beta2). #464
  • Multiline record not on new line after DU constructor. #462
  • Feature request: Prefix generic type parameters. #460
  • Fantomas hangs indefinitely when run. #459
  • record mutation: first field after with should be placed in a new line. #457
  • for i in 1..-1..0 do: should add space before -. #456
  • Incorrect handling of attributes in static method. #452

[3.0.0-beta-006] - 2019-10-02

Changed

  • FCS 32
  • Partial F# 4.7 support

[3.0.0-beta-005] - 2019-09-27

Changed

  • Move to .NETCore 3 global tool, deprecated net461
  • Deprecated dotnet-fantomas tool
  • Bug fixes

[3.0.0-beta-004] - 2019-09-18

Changed

  • Restructured library API
  • Improved performance

[3.0.0-beta-003] - 2019-09-13

Changed

  • More trivia fixes
  • FCS 31

[3.0.0-beta-002] - 2019-07-20

Changed

  • More fixes with hash directives

[3.0.0-beta-001] - 2019-07-12

Changed

  • Use FCS 28.0.0 and net461. #436
  • Deprecated PreserveEndOfLine setting in favor of Trivia. #434
  • Added support for formatting multiple code path in defines.

[2.9.2] - 2019-02-02

Fixed

  • PreserveEndOfLine introduces additional newlines. #360
  • Extra newline is introduced when file ends with multiline comment. #363
  • Fantomas shouldn't remove parens when using the dynamic operator (?). #369
  • Extra semicolons in list with PreserveEndOfLine. #371
  • Multiple attributes indented wrongly with PreserveEndOfLine. #370
  • pattern matched unions are formatted badly. #283
  • wrong indentation when accessing member of constructed record. #383
  • latest fantomas breaks Falanx indentation. #384
  • Recurse option with globally installed dotnet-tool traverses 'obj' directories. #341
  • creates invalid F# for string handling operations. #365

Changed

  • Use qualified name for inputPath and outputPath. #376
  • Added Nightly nuget feed. #375
  • Moved solution file to root folder. #377
  • Add support for SynExpr.Set(,,_). #368
  • Use FAKE 5. #261
  • Added FAKE 5 sample. #402

[2.9.1] - 2018-11-20

Changed

  • Added instructions for vscode and online website. #333
  • Removed trailing spaces for each line, after formatting. #328
  • Allow easy build/format/build cycle of external projects. #337
  • Update to .NET Core 2.1 #350
  • Removed unused open statements. #352
  • Added regression test for Implicit module is added to resulting code. #355

Fixed

  • in is removed from binding when PreserveEndOfLine is true. #340
  • unnecessary conversion from 'YieldOrReturn' to 'YieldOrReturnFrom', by update of FCS. #339
  • Lazy<'T> is incorrectly rewritten. #335
  • Fluent API with comments breaks code. #331
  • wrong comment placement. #289

[2.9.0] - 2018-10-17

Changed

  • Improved README. #243
  • Bad split of chained method call expression. #246
  • rec modifier removed for namespaces and modules. #292
  • Over-enthusiastic removal of parentheses #249
  • Broken reformat of "if" inside call (fantomas-tool 2.8.0) #288
  • Support struct tuple. #224
  • Support match! #262
  • Upgrade to .NET 4.5.2 #325

Fixed

  • for AST formatting regression. #321

[2.8.1] - 2018-09-12

Changed

  • Force parameter is true by default. #267
  • Formatting compiler directives with inactive code is incorrect. #270
  • rec keyword is removed from recursive modules #274
  • Access modifiers in method signatures in signature files are not formatted correctly. #284
  • #if FOO || BAR => #if FOO #280
  • override becomes member in interface implementations. #263
  • Operator >>.~ incorrectly formatted. #291
  • Bad choice of line break location in boolean equality expression. #248
  • Pipe operator inside quotation expression leads to wrong indentation. #256
  • broken indent by pipe formatting. #269

Fixed

  • "Fantômas" mistranslation in README. #273
  • for preserve EOL feature. #275

[2.8.0] - 2018-07-07

Changed

  • Wrong indentation of else after comment #241
  • Change Content to None #238
  • Formatting of code with a pipe and a lambda expression #211
  • Added support for a global dotnet cli tool #252
  • Added option to preserve blank lines #143

Fixed

  • for chopped of members #239

[2.7.1] - 2018-05-02

Changed

  • Hotfix for runtime problem when using dotnet cli tool

[2.7.0] - 2018-05-02

Changed

  • Upgrade to .NET Core 2.0
  • Published as clitool
  • Upgrade to FCS 22.0.3
  • Single case DUs on same line #234
  • Removed whitespaces around type provider arguments #235

[2.6.1] - 2017-04-22

Changed

  • Upgrade to FCS 11.0.4

[2.5.0] - 2017-02-19

Changed

  • Upgrade to FCS 10.0.0

[2.4.0] - 2016-10-24

Changed

  • Upgrade to FCS 8.0.0

[2.3.0] - 2016-07-09

Changed

  • Upgrade to FCS 5.0.0

[2.2.0] - 2016-04-24

Changed

  • Handle record types with private fields #197
  • Create a separate CLI NuGet package #196
  • Do not print out module names if not necessary #196

[2.1.0] - 2016-04-01

Changed

  • Upgrade to FCS 2.0.0.8

[2.0.2] - 2015-11-15

Changed

  • Add a new public API using static members. Deprecate old functions.

Fixed

[1.11.0] - 2015-09-12

Fixed

Changed

  • Migrate to FCS 1.4.0.5

[1.10.0] - 2015-08-29

Changed

Improve formatting of bind operator #175

[1.9.0] - 2015-08-10

Fixed

[1.8.0-beta] - 2015-07-19

Changed

  • Migrate to F# 4.0 (#170)

[1.7.0] - 2015-06-10

Changed

  • Print attributes on member arguments (#168)
  • Do not misrecognize "then" blocks in explicit constructors (#168)
  • Suppress whitespaces inside dot access (#168)
  • Insert brackets around tuples in type test patterns (#168)

Fixed

  • desugar patterns' bug exposed by FsCheck (#167)

[1.6.0] - 2014-10-25

Changed

  • Add FAKE task helper

[1.5.0] - 2014-09-18

Changed

  • Bugfix release

[1.4.0] - 2014-07-01

Changed

  • Bugfix release

[1.3.0] - 2014-05-17

Changed

  • Bugfix release

[1.2.0] - 2014-04-21

Changed

  • Bugfix release

[1.1.0] - 2014-03-29

Changed

  • Bugfix release

[1.0.5] - 2014-01-07

Changed

  • Fully support F# 3.1
  • Compatible with F# on Mono
  • Handle external functions
  • Improve support of multiline strings
  • Implement various bug fixes

[1.0.4] - 2013-11-16

Changed

  • Implement various bug fixes

[1.0.3] - 2013-10-06

Changed

  • Implement various bug fixes
  • Synchronize version numbers with NuGet packages

[0.7.1] - 2013-03-24

Changed

  • Support Visual Studio 2013 (not support F# 3.1 constructs yet)

[0.7.0] - 2013-03-24

Changed

  • Implement formatting cursor positions
  • Implement reordering of open statements
  • Enhance indentation of anonymous functions
  • Add line breaks for nested let bindings
  • Implement various bug fixes

[0.5.0] - 2013-03-22

Changed

  • Improve formatting of signatures
  • Improve UI interaction
  • Enhance spacing of function applications and arguments
  • Implement various bug fixes

[0.4.1] - 2013-03-22

Changed

  • Initial release