Skip to content

Releases: dart-lang/dart_style

package:dart_style v3.1.9

29 Apr 15:57
c9975c6

Choose a tag to compare

  • Require analyzer: ^13.0.0

package:dart_style v3.1.8

19 Mar 05:07
2d8c5dc

Choose a tag to compare

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:
    // Before:
    extension type JSExportedDartFunction._(
      JSExportedDartFunctionRepType _jsExportedDartFunction
    )
        implements JSFunction {}
    // After:
    extension type JSExportedDartFunction._(
      JSExportedDartFunctionRepType _jsExportedDartFunction
    ) implements JSFunction {}
    This change is not language versioned. (The old style is always worse, and
    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:
    // Before:
    int above;
    extension type Inches(int x) {}
    mixin M {}
    int below;
    // After:
    int above;
    extension type Inches(int x) {}
    mixin M {}
    int below;
    The formatter already forces blank lines around class, enum, and extension
    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

07 Mar 01:43
a0f21e8

Choose a tag to compare

  • Require analyzer: '>=10.0.0 <12.0.0'.

package:dart_style v3.1.6

26 Feb 01:24
4f93caf

Choose a tag to compare

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

29 Jan 01:42
f624489

Choose a tag to compare

  • Support upcoming Dart language version 3.11.

package:dart_style v3.1.4

14 Jan 17:54
bdae98c

Choose a tag to compare

  • Remove dependencies on analyzer internal implementation.
  • Require analyzer: '^10.0.0'.

package:dart_style v3.1.3

13 Nov 21:41
de7e726

Choose a tag to compare

  • 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

07 Aug 21:40
00b5f3f

Choose a tag to compare

  • 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_commas is preserve, preserve a trailing comma after the last
    enum constant when members are present (#1678, #1729).
    // 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() {}
    }
    (Thanks to jellynoone@ for this change.)

package:dart_style v3.1.1

18 Jul 17:29
05215a6

Choose a tag to compare

  • Update to latest analyzer and enable language version 3.9.

package:dart_style v3.1.0

20 May 17:47
90227c5

Choose a tag to compare

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.yaml file:

    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,
    );