Releases: dart-lang/dart_style
package:dart_style v3.1.9
package:dart_style v3.1.8
Style changes
- Format extension type representation clauses the same way primary constructor
formal parameter lists are formatted. This rarely makes a difference but
produces better formatting when the representation type is long and there are
other clauses on the extension type, as in:This change is not language versioned. (The old style is always worse, and// Before: extension type JSExportedDartFunction._( JSExportedDartFunctionRepType _jsExportedDartFunction ) implements JSFunction {} // After: extension type JSExportedDartFunction._( JSExportedDartFunctionRepType _jsExportedDartFunction ) implements JSFunction {}
continuing to support it would add complexity to the formatter.) - Force blank lines around a mixin or extension type declaration if it doesn't
have a;body:The formatter already forces blank lines around class, enum, and extension// Before: int above; extension type Inches(int x) {} mixin M {} int below; // After: int above; extension type Inches(int x) {} mixin M {} int below;
declarations. Mixins and extension types were overlooked. This makes them
consistent. This style change is language versioned and only affects
libraries at 3.13 or higher.
Note that the formatter allows classes and extension types whose body is;
to not have a blank line above or below them.
Internal changes
- Support upcoming Dart language version 3.13.
- Support formatting primary constructors.
- Require
analyzer: '^12.0.0'.
package:dart_style v3.1.7
- Require
analyzer: '>=10.0.0 <12.0.0'.
package:dart_style v3.1.6
Style changes
- When trailing commas are preserved, don't insert a newline before the
;in
an enum with members unless there actually is a trailing comma.
(Fix by @Barbirosha.)
Internal changes
- Support upcoming Dart language version 3.12.
- Stop using experiment flags for features released in 3.10.
- Require
sdk: ^3.10.0.
package:dart_style v3.1.5
- Support upcoming Dart language version 3.11.
package:dart_style v3.1.4
- Remove dependencies on analyzer internal implementation.
- Require
analyzer: '^10.0.0'.
package:dart_style v3.1.3
- No longer format imports with configurations and a prefix in the wrong order.
The parser used to accept this without error even though it violated the
language spec. The parser is being fixed, so the formatter will no longer
accept or format code like:import 'foo.dart' as prefix if (cond) 'bar.dart';
- Don't force a space between
?and.if a null-aware element contains a
dot shorthand. - Require
analyzer: '>=8.2.0 <10.0.0'. - Require
args: ^2.5.0. - Require
sdk: ^3.9.0.
Bug fixes
- Respect
@dart=version comments when determining which >3.7 style to apply.
The formatter correctly used those comments to switch between the old short
and new tall style, but ignored them for language versioned style rule changes
after 3.7. Now the language version of the file is consistently respected for
all style rules (#1762).
package:dart_style v3.1.2
- Support dot shorthand syntax.
- Update to the latest
package:analyzer. - Enable language version 3.10.
Bug fixes
- Preserved trailing commas (
trailing_commas: preserve) applies to record
type annotations too (#1721).
Style changes
This change only applies to code whose language version is 3.10 or higher:
- When
trailing_commasispreserve, preserve a trailing comma after the last
enum constant when members are present (#1678, #1729).(Thanks to jellynoone@ for this change.)// Before formatting: enum { constant, ; member() {} } // After formatting at language version 3.9 or lower: enum { constant; member() {} } // After formatting at language version 3.10 or higher: enum { constant, ; member() {} }
package:dart_style v3.1.1
- Update to latest analyzer and enable language version 3.9.
package:dart_style v3.1.0
This release contains a fairly large number of style changes in response to feedback we got from shipping the new tall style formatter.
Features
-
Allow preserving trailing commas and forcing the surrounding construct to split even when it would otherwise fit on one line. This is off by default (because it breaks reversibility among other reasons) but can be enabled by adding this to a surrounding
analysis_options.yamlfile:formatter: trailing_commas: preserve
This is similar to how trailing commas work in the old short style formatter applied to code before language version 3.7.
Bug fixes
- Don't add a trailing comma in lists that don't allow it, even when there is a trailing comment (#1639).
Style changes
The following style changes are language versioned and only affect code whose language version is 3.8 or later. Dart code at 3.7 or earlier is formatted the same as it was before.
-
Allow more code on the same line as a named argument or
=>(#1536, #1545, #1668, #1679).// Before: function( name: (param, another) => veryLongBody, ); function( name: (param) => another( argument1, argument2, argument3, ), ); // After: function( name: (param, another) => veryLongBody, ); function( name: (param) => another( argument1, argument2, argument3, ), );
-
Avoid splitting chains containing only properties.
// Before: variable = target .property .another; // After: variable = target.property.another;
Note that this only applies to
.chains that are only properties. If there are method calls in the chain, then it prefers to split the chain instead of splitting at=,:, or=>. -
Allow the target or property chain part of a split method chain on the RHS of
=,:, and=>(#1466).// Before: variable = target.property .method() .another(); // After: variable = target.property .method() .another();
-
Allow the condition part of a split conditional expression on the RHS of
=,:, and=>(#1465).// Before: variable = condition ? longThenBranch : longElseBranch; // After: variable = condition ? longThenBranch : longElseBranch;
-
Don't indent conditional branches redundantly after
=,:, and=>.// Before: function( argument: condition ? thenBranch : elseBranch, ) // After: function( argument: condition ? thenBranch : elseBranch, )
-
Indent conditional branches past the operators (#1534).
// Before: condition ? thenBranch + anotherOperand : elseBranch( argument, ); // After: condition ? thenBranch + anotherOperand : elseBranch( argument, );
-
Block format record types in typedefs (#1651):
// Before: typedef ExampleRecordTypedef = ( String firstParameter, int secondParameter, String thirdParameter, String fourthParameter, ); // After: typedef ExampleRecordTypedef = ( String firstParameter, int secondParameter, String thirdParameter, String fourthParameter, );
-
Eagerly split argument lists whose contents are complex enough to be easier to read spread across multiple lines even if they would otherwise fit on a single line (#1660). The rules are basically:
-
If an argument list contains at least three named arguments, at least one of which must be directly in the argument list and at least one of which must be nested in an inner argument list, then force the outer one to split. We make an exception where a named argument whose expression is a simple number, Boolean, or null literal doesn't count as a named argument.
-
If a list, set, or map literal is the immediate expression in a named argument and contains any argument lists with a named argument, then force the collection to split.
// Before: TabBar(tabs: [Tab(text: 'A'), Tab(text: 'B')], labelColor: Colors.white70); // After: TabBar( tabs: [ Tab(text: 'A'), Tab(text: 'B'), ], labelColor: Colors.white70, );
-