40 columns                              |
>>> force newline before directives
@deprecated library foo;

@deprecated import 'dart:io';

@deprecated export 'dart:io';
<<<
@deprecated
library foo;

@deprecated
import 'dart:io';

@deprecated
export 'dart:io';
>>> metadata on part
@foo part "part.dart";
<<<
@foo
part "part.dart";
>>> metadata on part of
@foo part of bar;
<<<
@foo
part of bar;
>>> force newline before types
@meta class X {}

@meta class Y = X with Z;

@meta typedef void X(y);
<<<
@meta
class X {}

@meta
class Y = X with Z;

@meta
typedef void X(y);
>>> force newline before variable declarations
foo() {
  @meta var a;

  @meta
  var b;

  @a @b


  var c;
}
<<<
foo() {
  @meta
  var a;

  @meta
  var b;

  @a
  @b
  var c;
}
>>> allow inline annotations before functions
@meta   foo() {}
<<<
@meta foo() {}
>>> allow newline before functions
@meta


foo() {}
<<<
@meta
foo() {}
>>> allow inline annotations before members
class X {
  @meta   var _x;
  @meta       X.y();
  @meta   factory X(x) => null;
  @meta  int x() => null;
}
<<<
class X {
  @meta var _x;
  @meta X.y();
  @meta factory X(x) => null;
  @meta int x() => null;
}
>>> allow newline before members
class X {
  @meta

  var _x;

  @meta



  X.y();

  @meta
  factory X(x) => null;

  @meta

  int x() => null;
}
<<<
class X {
  @meta
  var _x;

  @meta
  X.y();

  @meta
  factory X(x) => null;

  @meta
  int x() => null;
}
>>> collapse newlines between annotations
@a


@b



@c


class A {}
<<<
@a
@b
@c
class A {}
>>> multiple top-level annotations always get their own line
@a @b class A {}
<<<
@a
@b
class A {}
>>> multiple member annotations always get their own line
class A {
  @a @b void foo() {}
}
<<<
class A {
  @a
  @b
  void foo() {}
}
>>> parameter annotations are inline
foo(

@a

@b

param) {}
<<<
foo(@a @b param) {}
>>> type parameter annotations are inline
class Foo<

@a

@b

T> {}
<<<
class Foo<@a @b T> {}
>>> comment after metadata
@DomName('DatabaseCallback')
@Experimental() // deprecated
typedef void DatabaseCallback(database);
<<<
@DomName('DatabaseCallback')
@Experimental() // deprecated
typedef void DatabaseCallback(database);
>>> comment between metadata
@DomName('DatabaseCallback') // deprecated
  @Experimental()
      typedef void DatabaseCallback(database);
<<<
@DomName(
    'DatabaseCallback') // deprecated
@Experimental()
typedef void DatabaseCallback(database);
>>> metadata on top-level variables
@DomName('DatabaseCallback')
@Experimental()
var variable;
<<<
@DomName('DatabaseCallback')
@Experimental()
var variable;
>>> metadata on parameters
main(@foo @bar param) {}
<<<
main(@foo @bar param) {}
>>> metadata on initializing formal
class Foo {
  Foo(@bar this.field);
}
<<<
class Foo {
  Foo(@bar this.field);
}
>>> metadata on function-typed formal parameter
withReturnType(@foo @bar int fn(@foo param)) {}
withoutReturnType(@foo @bar fn(@foo param)) {}
<<<
withReturnType(
    @foo @bar int fn(@foo param)) {}
withoutReturnType(
    @foo @bar fn(@foo param)) {}
>>> metadata on default formal parameter
positional([@foo bar]) {}
named({@foo bar}) {}
<<<
positional([@foo bar]) {}
named({@foo bar}) {}
>>> split between metadata and parameter indents
function(@VeryLongMetadataAnnotation longParameter) {}
<<<
function(
    @VeryLongMetadataAnnotation
        longParameter) {}