- Support for zip and strict generators in comprehensions from OTP 28
- Support for nominal types from OTP 28
- Support some partially invalid code - e.g. case or receive with no clauses
- Fix crash with sigils inside ignored sections
- Improve
erlfmt:error_info()type
- Fix crash when two erlfmt-ignore-begin/end blocks immediately followed
- Fix crash when formatting an indented tripple quoted string with empty lines
- Parse code with trailing commas and semicolons and just remove them when reprinting
- Support OTP 27 sigils https://www.erlang.org/blog/highlights-otp-27/#sigils
- Support OTP 27 triple-quoted strings https://www.erlang.org/blog/highlights-otp-27/#triple-quoted-strings
- Support new documentation attributes
- Apply
exclude_filestofilesabsolute paths - mixing relative & absolute paths could lead to unexpected behaviour before
- Support trailing content on ignore comments
- Support (and recommend)
erlfmt:ignore-style ignore comments to align with ELP & eqWAlizer
- Fix compiler warnings on OTP 27
- Support map comprehensions,
import_typeattribute, andmaybeconstructs
POTENTIAL RE-FORMATTING
All "raw" maybe and else atoms will be automatically re-quoted to make
the code compatible with the maybe feature, if enabled.
After the transformation the code will be compatible with the maybe feature
both enabled & disabled.
- Support
erlfmt-ignore-begin,erlfmt-ignore-endto skip multiple top-level forms
- Handle try clauses in define
- Support formatting PIDs, Refs, Ports
- Handle ;-separated guards in macro expressions
- Ensure proper IO opts when reading from stdin
- Handle Int#{} edge case without crashing
1.0.0 Release. No new changes.
1.0 Release Candidate 3.2
- Formatting Ranges support for opt-out pragmas #311
1.0 Release Candidate 3.1
- Introduce semi-expanded format for containers #309
1.0 Release Candidate 3
- Add
--rangeas a command line option #299, #300, #295 - Introduce semi-expanded format for function calls #305
- Introduce noformat pragma #302
- Return exit code 2 when option isn't recognized. #304
1.0 Release Candidate 2.1
- fix replace pragma to not crash on two blocks of comments
1.0 Release Candidate 2
- comment
@formatpragma to avoid warnings from edoc - fix place of comments for list cons #282
- added
delete-pragmacommand line flag #280
- new module documentation analyses #283
1.0 Release Candidate 1
- Preserve newline in spec without guards #273 #275
- Preserve comments in receive after after #271
- Fix end_location in raw_string anno #274
- Fix pre dot comments in function #267
- Better error reporting for not_equivalent and tests #269
Tuples that are not tagged tuples are formatted as lists
- Break untagged tuples #259
- rewrite some binary operators using associativity #262 #264 #265
- next break fits for dolon #246
- double indent pattern matches in clauses #247
- fix parsing of bad records #261
Support macros in type and spec names
- Added shorthand
-ifor--insert-pragma#256
- Support macros in type and spec names #254
List comprehensions revisited
- Updated formatting for list comprehensions #249
- preserve newline after's arrow #245
- preserve newlines after equal #248
Preserve a single empty line between attributes
- Preserve a single empty line between attributes #239
- Only write to file the formatted code when it is different to the current one #235
- Export the format_nodes function for symmetry with read_nodes function.
- no newline after spec #224
- preserve breaks after dolon #225
- fix: Crash formatting qlc_SUITE in OTP #240
- Preserve newlines between separated guards #241
- Adjust AST for try clauses such that they do not move comments around #242
Default files and exclude_files option
- Provide default value for
--fileswhen none is provided #204 - Add
--exclude-filesflag to manually exclude some files from the formatter #213 - Warn on overly long lines, given
--verboseflag #209
- Comments below shebang are pull upwards to support emulator args #207
- Bind Pipe Tighter in parser #206
- Fix record field type end location in parser #201
- Properly handle comments inside concats #216
- Properly handle trailing comments followed by post-comments #217
- Preserve comments inside fun type arg list #218
Better rebar integration
- Better rebar integration #196 #183 #197 #200
- Change formatting of pipes to prefixes #191 #194
- Parse attributes with empty parens #189
- Do not crash with comments before a dot #184
- Do not crash with post comments in catch #195
--check flag now provides exit code 1, if files are not formatted.
--checkflag #123
- Preserve newline in list & binary comprehensions #116
- Preserve new lines in guards and specs #115
- Make multi-line tuples & binaries next-break-fits #117
- Use deterministic compiler option for releasing precompiled escript #127
- Do not crash when formatting an empty file #130
- Relax map syntax #137
- Support macros with parens in concat #138
Configurable print-width and erlfmt-ignore comment
print-widthis now configurable as a command line parameter #99% erlfmt-ignorecomment ignores the next form and does not format it #98- files are now formatted in parallel #101
- Preserve empty lines around if-like attributes #97
- Don't break multiple clauses with comments #96
- Make try and after always introduce a newline #107
- Do not preserve operator newline with a next break fits expression #104
- New format for multiline fun types #110
- correctly handle type unions inside of multiline containers (such as specs) #90
- new
--insert-pragmaCLI option adds the@formatpragma to all the formatted files that didn't have it before #75 - preserve empty lines in containers #83
- correctly handle
.scriptfiles likerebar.config.script#79 export_typeis formatted the same asexport#86- print type unions either all on single line or each type separated by
|on a separate line #84
--require-pragmacombined with stdio for files with high-codepoint unicode
- Fix dialyzer
--require-pragmafor single-form and non-unicode files- Compiles with rebar3 3.14
- require-pragma prints out original file instead of formatting if no pragma is found. This makes it easier to integrate into a CI pipeline. #57
- Better exceptions #58
- Group imports and exports with similar names on the same line. #65
- Add format_string as a library call. #66
- Preserve empty lines between attributes #67
- Remove space between single clause fun and parens #68
- Allow reading from stdin with command
$ erlfmt -#46 - Support Erlang version 23.0
- Remove trailing spaces from comments #48
- Make position of return type in specs consistent #47
- Fix some parser failures in OTP #39
- Concat converted from a string also forces breaks #43
Switched out formatting algorithm. This is now based on Elixir's greedy algorithm, instead of a lazy algorithm. This fixes performance issues with laying out larger tuples.
- Preserve empty lines between comments and expressions
- Stop adding unnecessary empty lines between attributes
- Stop indenting list and binary comprehensions unnecessarily
- Fix formatting multiple files from command line
- Ensure all parsable OTP files format cleanly
- Support formatting escripts and "consult" files like rebar.config
- Add
--require-pragmaflag to only format files annotated with@format
Initial release