# Artistic Style Release Notes

### Artistic Style 3.2 (pending)

- Add new option "style=webkit" for the WebKit brace style.
- Improve recognition of pointer variable types.
- Change CMake files to the "modern" format.
- Fix formatting of raw string literals with the opening '(' at the end of line (#519).
- Fix indentation of comments in a preprocessor define indented with tabs (#506).
- Fix vector limit segfault with g++-8, recursive, and -D_GLIBCXX_ASSERTIONS (#503).
- Refactoring:
  - Extract new method for options in ASOptions class to avoid compiler limits.
  - Change vector push_back to emplace_back except for vector<bool>.
  - Changes from clang-tidy to modernize code.

### Artistic Style 3.1 (January 2018)

- Add new options "project", "project=####", and "project=none" (#11).
- Add new options, "break-return-type" and "break-return-type-decl" (#358, 286, 205, 16).
- Add new options, "attach-return-type" and "attach-return-type-decl" (#358, 286, 205, 16).
- Add new option "style=ratliff", as an alternate name for banner style.
- Add new environment variable ARTISTIC_STYLE_PROJECT_OPTIONS (#11).
- Add multiple extensions to the command line file paths option.
- Improve recognition of unary + and - when using pad-oper.
- Change the Windows default options file location from USERPROFILE to APPDATA.
- Change options file input to accept UTF-16, or UTF-8 with a BOM (or signature).
- Change "unsigned short" data type to c++11 "char16_t".
- Change translations for new project options file.
- Fix utf8LengthFromUtf16() calculation being less than the actual length.
- Fix multiply followed by a dereference for "align-pointer=type".
- Fix recognition of a uniform class initializer in a base class initialization (#441).
- Fix indentation of "volatile" keyword not used in a method definition (#450).
- Fix indentation of "final" keyword not used in a method definition (#450).
- Fix indentation of compound literals in an argument list (#456).
- Fix indentation of trailing return type method following a constructor (#463).
- Fix space padding of closing brace before a dot (#468).
- Fix Objective-C to allow for "Extern C" statements in the source files (#443, 444, 446).
- Fix Objective-C to allow for method definitions without a specified return type (#447).
- Fix Objective-C to allow for method definitions with multiple param types.
- Fix Objective-C to replace tabbed padding with a space.
- Fix Objective-C formatting of line-end comments with "unpad-return-type".
- Fix Objective-C "align-method-colon" to ignore ternary (?) operators.
- Fix C# base class constructor indentation (#459).
- Fix C# indentation of method declaration containing a colon (#465)
- Fix C/C++ to allow "interface" as a non-keyword (#445).
- Fix Java to allow "default" as a non-switch keyword.
- Fix line ends initialization if no line end has been read.
- Fix Java build from including ASLocalizer in the shared library.
- Fix to check for AStyleWx line tags after C style comments.
- Fix boundary conditions and other errors discovered by fuzzing.
- Refactoring:
  - Extract method isNumericVariable() in ASFormatter class.
  - Extract method isTopLevel() in ASBeautifier class.
  - Extract method fileExists() in Console class.
  - Rename ASEncoding variable from "utf8_16" to "encode".
  - Rename ASBeautifier vector from squareBracketDepthStack to parenDepthStack.
  - Combine style options in ASOptions class to avoid compiler limits.

### Artistic Style 3.0.1 (May 2017)

- Fix crash caused by certain class initializer formats (#435).
- Fix "final" identifier not being recognized as a pre-command header (#433).
- Fix recognition of certain rvalue reference variables.

### Artistic Style 3.0 (April 2017)

- Add new option "indent-after-parens" (#396, 152, 108, 79).
- Add new option "attach-closing-while" (#177).
- Add "style=run-in" as an alternative for "style=horstmann".
- Add "break-closing-braces" to "style=stroustrup" (#267).
- Add formatting for C++11 trailing return type methods.
- Add new class ASPeekStream using RAII to allow early method returns.
- Change affected variable names to new AStyle terminology.
- Change some vector push_back() statements to emplace_back().
- Fix memory leak when using "indent-preproc-define".
- Fix sometimes splitting an r-value reference when "pad-oper" is used.
- Fix in-statement-indent brace check not always checking a brace (#421).
- Fix formatting of C# get/set and add/remove when braces are attached (#430).
- Fix formatting of C# generic constraints (#430).
- Fix padding of C# null conditional operator.
- Fix attach-inlines to not attach a brace followed by a run-in comment.
- Fix not always breaking lines after "add-braces" (#341).
- Fix unpadding the "in" in a foreach statement (#386).
- Fix boundary conditions discovered by american fuzzy lop fuzzer (#370).
- Refactoring:
  - Replace NULL with C++11 nullptr.
  - Rename Utf8_16 class to ASEncoding.
  - Move ASConsole constructor and destructor from inline to non-inline.
  - Move console error stream (cerr) from global to ASConsole class.
  - Move ASConsole pointer in ASOptions from global to a class member.
  - Move findHeader and findOperator methods from ASBeautifier to ASBase.
  - Minor changes from PVS-Studio analyzer.
  - Minor changes from clang-tidy.

### Artistic Style 2.06 (December 2016)

- Add new bracket style option "style=mozilla".
- Add new option "break-one-line-headers" (#33, 64, 367).
- Add new option "indent-continuation".
- Add new option "pad-comma" (#100).
- Add removing spaces before a comma (#100).
- Add new Objective‑C options "pad-return-type" (-xq) and "unpad-return-type" (-xr).
- Add new Objective‑C options "pad-param-type" (-xS) and "unpad-param-type" (-xs).
- Add formatting of C++14 single-quote digit separators (#337).
- Add indentation for CORBA IDL module statement (#414).
- Add translations for Bulgarian, Estonian, Greek, Hungarian, Norwegian, and Romanian.
- Remove lineend option from formatCinToCout function.
- Improve align-method-colon and apply to Objective‑C method calls.
- Improve recognition of header guards in preprocessor statements.
- Improve recognition of C++11 uniform initializer brackets (#381, 411, 415).
- Improve the processing of quoted strings and verbatim strings.
- Change align-method-colon short first line to align on the longest line instead of the first line.
- Change to not break empty one line brackets to support new "break-one-line-headers".
- Change add-brackets to not add to one line blocks to support new "break-one-line-headers".
- Change add-brackets to not add to one line statements in support new "break-one-line-headers".
- Fix not recognizing an escaped space character within a quote (#403).
- Fix not recognizing "else" brackets as COMMAND_TYPE (#400).
- Fix attaching "if" statements to a #else preprocessor directive (#356).
- Fix not clearing global variables for a new file (#364).
- Fix not recognizing an rvalue reference in a template (#404).
- Fix breaking a line when processing the first line of a file (#400).
- Fix breaking a line in an exponential (#392).
- Fix indentation of an "enum" without following brackets (#401, 384).
- Fix indentation of arguments using preceding commas (#355).
- Fix indentation of Pico style one line blocks.
- Fix not padding header for "new" or "delete" followed by parens.
- Fix template variable not being cleared at end of a statement (#380).
- Fix "close-templates" to only close ending angle brackets (#375).
- Fix pad-oper to not pad a + or - following an open bracket (#378).
- Fix C# to recognize "using" as a header.
- Fix C# to always recognize "forever" as a header.
- Fix Pico style not always computing the indentation for one line blocks.
- Fix indentation of Objective-C @interface statement (#333).
- Fix assert error when Objective-C "@" is followed by whitespace.
- Fix end of line comments for "pad-method-prefix" and "unpad-method-prefix".
- Fix end of line comments for "pad-method-colon".
- Refactoring:
  - Consolidate scattered ASFormatter conditional statements into a padParenObjC method.
  - Remove BracketMode STROUSTRUP_MODE and change it to LINUX_MODE.
  - Remove ASBase methods from being inlined as class definitions.
  - Replace C char arrays in astyle_main.cpp with C++ strings.
  - Return language translation as a mutable variable.
  - Portability changes for additional compiler support (#352).
  - Minor changes based on results of the Clang-Tidy.

### Artistic Style 2.05.1 (December 2014)

- Fix incorrectly reporting files containing disabled formatting as being formatted.
- Fix incorrect handling of quoted arguments in the options file (#321).
- Fix error in identifying an enum return type as an enumeration (#322, 323).
- Fix error in identifying an enum argument as an enumeration (#327).
- Fix recognition of Qt keywords when used as variables in C++ (#329).
- Fix recognition of a pointer in a C++ cast (#316).
- Fix removing trailing whitespace after a changed pointer or reference cast.

### Artistic Style 2.05 (November 2014)

- Add new bracket style option "style=vtk" (#155).
- Add new option "indent-preproc-block" to indent blocks of preprocessor directives (#21, #114, #229, #242, #294).
- Add new option, "dry-run", to run AStyle without updating the files (#184, #285).
- Add new options, "html" (-!") and "html=###", to display the HTML help documentation in the default browser.
- Add tags "*INDENT-OFF*" and "*INDENT_ON*" to disable formatting of source code blocks (#2, #47, #55, #78, #110, #176).
- Add tag *NOPAD* to disable selected formatting on a single line.
- Add '__attribute__ ((visibility ("default")))' to Linux exported functions.
- Remove option "style=ansi" and make it depreciated (#146).
- Remove fix for broken 'case' statements from release 2.02.1, Nov 21, 2011.
- Improve Korean translation (#256).
- Change shared libraries to include the version number as part of the file name (#264)
- Change "help" display to stdout to allow piping and redirection (#63).
- Change "version" display to stdout.
- Change headers to include foreach, forever, Q_FOREACH, and Q_FOREVER (#98, #154).
- Change compiler definition ASTYLE_NO_VCX (no Visual Studio exports) to ASTYLE_NO_EXPORTS.
- Change shared library error handler argument from "char*" to "const char*".
- Fix not recognizing noexcept, interrupt, and autoreleasepool as pre-command headers (#225, #259).
- Fix formatting of C++11 uniform initializer brackets (#253, #257, #260, #284).
- Fix to not automatically space pad C++11 uniform initializer brackets (#275).
- Fix formatting of enums with leading commas (#159, #179, #270).
- Fix formatting of logical && operator in class initializers (#290).
- Fix flagging a 'const' variable as a 'const' method (#275).
- Fix piping and redirection adding an extra character to the output (#245, #252, #305).
- Fix "indent-modifiers" to attach class access modifiers to Horstmann style brackets.
- Fix ASFormatter to correctly recognize the end of a C++ raw string literal (#261).
- Fix to recognize C++11 "enum class" as an enum (#303).
- Fix indent of C++11 "noexecpt" statements within a class (#260, #304).
- Fix not resetting templateDepth when a template was not found (#295).
- Fix formatting of multiplication in a block paren (#144).
- Fix whitespace padding when formatting an rvalue references (#297).
- Fix to recognize an rvalue reference without a name (#265).
- Fix to not identify an operator overload method as a calculation (#296).
- Fix concatenating multiplication with a pointer dereference (#291).
- Fix recognition of a pointer dereference following a question mark (#213).
- Fix extra space after a trailing reference type (#300).
- Fix _asm blocks not being identified as a block opener and the variable not cleared on exit (#163).
- Fix indentation of line comments before a "class" opening bracket.
- Fix indentation of line comments before a "namespace" opening bracket.
- Fix isBracketType() method to correctly process a NULL_TYPE.
- Fix unpad-paren to recognize additional variables (#43, #132, #143).
- Fix indentation of C# "let" statements.
- Fix a few omissions with "fill-empty-lines".
- Fix file read to read 64K blocks of data.
- Refactor to clarify the code, and improve design and decomposition:
  - Extract class Utf8_16 from ASConsole.
  - Replace Linux dependency on iconv with a Utf8_16 class for ASLibrary.
  - Move global "using" statements to the astyle namespace in astyle.h and ASLocalizer.h.
  - Move shared library declarations from astyle.h to astyle_main.h.
  - Move indentable macros from ASEnhancer to ASResource and create static pairs.
  - Simplify ASBeautifier procedure to identify the colon (:) type.
  - Major refactoring in ASBeautifier to create separate variables for an enum, a class statement and a class initializer.
    This was needed to fix the processing of C++11 uniform initializers in a class initializer.
  - Minor changes to ASFormatter and ASBeautifier based on results of the Clang analyzer.
  - Change several methods in astyle_main to "const".

Previous releases are available in the Release Notes Archives.