# Artistic Style Release Notes

### 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 un-obfuscate (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".

### Artistic Style 2.04 (November 2013)

- Add new programming language Objective‑C.
- Add new bracket style option "style=google" (-A14).
- Add new option "indent-preproc-cond" (xw) to indent preprocessor conditional statements (#118).
- Add new bracket modify options "attach-namespaces", "attach-classes", "attach-inlines", and "attach-extern-c".
- Add new option "indent-modifiers" (-xG) to indent class access modifiers one-half indent (#130).
- Add new option "remove-brackets" (-xj) to remove brackets from single line conditional statements.
- Add new option "remove-comment-prefix" (-xp) to remove the leading '*' from multi-line comments.
- Add new option "align-method-colon" (-xM) to align Objective‑C method colons.
- Add new option "pad-method-colon=#" (-xP#) to space pad Objective‑C method colons.
- Add new options "pad-method-prefix" (-xQ), and "unpad-method-prefix" (-xR) to pad the Objective‑C "-" and "+" method prefix.
- Add new dll entry point AStyleMainUtf16 for processing C# UTF-16 strings.
- Add formatting of C++11 raw string literals (#222).
- Add "style=knf" as an alternative to "style=linux".
- Remove depreciated "bracket=" options.
- Improve recognition and formatting of pointers and references (#174 and other changes).
- Improve the recognition of block-opening brackets.
- Improve code using a static code analyzer (#195).
- Change "max-code-length" to include Objective‑C methods.
- Change "indent-elseifs" and "break-blocks" to look ahead only if in command-type brackets (speed improvement).
- Fix linux bracket styles to break the opening bracket in inline function definitions (#185).
- Fix indentation of switch block comments (#164).
- Fix enums to indent with tabs when requested (#92, #121).
- Fix formatting of rvalue reference without a name in a declaration (#219).
- Fix "pad-first-paren-out" to not pad if the following parens are empty (#232).
- Fix end-of-statement reset when comments follow closing bracket.
- Fix the ASBeautifier active and waiting stacks to delete the ASBeautifier objects before deleting the pointers.
- Fix ASBeautifier "init" to delete the tempStack vectors before deleting the tempStack.
- Fix Linux piping problem by changing "cin" input to build a stringstream before formatting.
- Fix to identify the correct bracket type when 'extern "C"' is part of the enum definition.
- Fix to clear 'extern "C"' variables when the block is closed.
- Fix unindented 'extern "C"' to not indent when in a #else preprocessor directive.
- Fix not always correctly formatting linux type brackets for enum blocks.
- Fix align-pointer in a range-based for statement (#217).
- Fix pointer-reference argument alignment to correctly position a following comment (#235).
- Fix to not attach a bracket to a line ending in a backslash '\' (#186, #214, #220).
- Fix to recognize templates using multiple lines (#85, #87, #136).
- Fix formatting of template continuation lines (#85, #87, #136).
- Fix to allow '^' as an array operator (#233).
- Fix an "enum" argument being mistaken for an enumeration (#211).
- Fix to recognize a non-instatement array after a "},{" sequence.
- Fix "pad-oper" to not pad before a following comma.
- Fix recognition of an operator when the calculation contains a bitwise "not" '~' (#166).
- Fix to allow a preprocessor statement within a preprocessor define (#238).
- Fix preprocessor comparison to check for whole words (#246).
- Fix "add-brackets" when a line contains more than one paren pairs (#181).
- Fix to allow Mac old CR line endings in the options file (#129).
- Refactor to aid debugging and improve design and decomposition:
  - Move ALL preliminary indentation calculations to computePreliminaryIndentation() in ASBeautifier.
  - Move calculation of 'force tab' indents to preLineWS() in ASBeautifier.
  - Combine methods init() and init(ASSourceIterator*) in ASBeautifier.
  - Extract method adjustParsedLineIndentation() in ASBeautifier.
  - Extract method parseCurrentLine() in ASEnhancer.
  - Remove astyle_main.cpp unused functions getFilesUnchanged, getOptionsFileRequired, and setOptionsFileRequired.

### Artistic Style 2.03 (April 2013)

- Add new option "indent=force-tab-x=#" (-xT#) to allow a tab length that different from the indent length (3430662).
- Add new option, "pad-first-paren-out" (xd), to pad only the first paren in a series on the outside (3350356).
- Add new option "max-code-length=#" (-xC#) to limit the length of code on a line.
- Add new option "break-after-logical" (-xL) to modify a "max-code-length" line break for conditionals.
- Add new option "close-templates" (-xy) to close whitespace in the angle brackets ">" of template definitions.
- Add formatting of C++ rvalue references (&&) using the existing "align-pointer" and "align-reference" options.
- Add formatting of C++/CLI managed pointers (the "^" character) to the "align-pointer" option.
- Add translations for Dutch, Finnish, Italian, Japanese, Korean, Polish, Portuguese, Russian, Swedish, and Ukrainian.
- Remove byte-order-mark from ASLocalizer.cpp.
- Change the short option for delete-empty-lines from "xd" to "xe".
- Change the ASTYLE_LIB option to remove __declspec for a Visual C static library when ASTYLE_NO_VCX is also declared.
- Change to remove any space padding in a pointer to pointer (**).
- Fix "break-elseifs" to format one-line "if" and "else" statements the same as when the option is not used.
- Fix "break-elseifs" to break else-if statements when "keep-one-line-statements" also is requested.
- Fix "break-elseifs" to correctly format comments preceding the else-if.
- Fix C# not correctly identifying lambda expressions as a command-type bracket.
- Fix C# preprocessor statements adding extra empty lines when "break-blocks" is used.
- Fix C# padding "get" and "set" statements that are not headers when "break-blocks" is used.
- Fix C# to recognize the "#line" statement.
- Fix C++11 standard for range-based "for" loops (3458402, 3480095).
- Fix C++11 standard for "enum" with a base type (3458402).
- Fix C++11 standard for template closing angle brackets (no space required) (3495192).
- Fix C/C++ keyword 'extern "C"' in a preprocessor causing an extra indent (1514844, 2953388, 2963382, 3093842, 3467479).
- Fix breaking after a switch "default" statement when "break-elseifs" is used without "keep-one-line-statements" (3559365).
- Fix in-statement arrays to indent correctly when they exceed the "max-instatement-indent".
- Fix quote continuation sometimes being processed as a preprocessor directive (3445475).
- Fix formatting of some conditional statements on a continuation-line.
- Fix Java formatting of generics with wildcards (3428140).
- Fix formatting of pointers and references to work with the new "max-code-length" option.
- Fix formatting of pointers and references after a template close.
- Fix formatting of empty attached brackets (3505002).
- Fix C comments beginning a line breaking if they follow a semi-colon (3502700).
- Fix "pad-header" not padding "return" and "throw" statements (3509134).
- Fix recognition problems with templates.
- Fix "struct" return type being mistaken for a struct.
- Fix "pad-oper" in java for-each loop.
- Fix recognition of a macro multi-line comment (3414970).
- Fix bracketTypeStack entries added by #if and #else if the # is separated from the word.
- Fix C++ breaking a line on an access modifier in a one-line block when "keep-one-line-blocks" is used.
- Fix memory leak when "ascii" option is used.
- Fix memory leak when a preprocessor statement is used without a closing #endif.
- Fix preprocessor directive to allow compiling with mingw-x64 compiler.
- Fix redirection on Windows so it does not hang when Linux line ends are used (3514712).
- Fix redirection on Linux to output the correct line ends (3514712).
- Fix non-portable return value on locale name (3452574).
- Fix assert errors caused by not checking the text length on the return from peekNextText().
- Fix spelling of "depreciated" in help message (3454735).
- Refactor to improve design and decomposition:
  - Fix warning messages from Visual Studio static code analysis.
  - Fix warning messages from cppcheck, except for constructor uninitialized variables (false positive).
  - Remove astyle_main.h dependency from ASLocalizer.h
  - Remove appendChar() from the inline functions.
  - Extract methods for pointer or reference alignment in ASFormatter.

Previous releases are available in the Release Notes Archives.