40 columns                              |
>>> indented line comment (dartbug.com/16383)
class A {
  // comment
}
<<<
class A {
  // comment
}
>>> line comment on opening line
class A { // comment
}
<<<
class A {
  // comment
}
>>> indented block comment
class A {
  /* comment */
}
<<<
class A {
  /* comment */
}
>>> block comment with trailing newline
class A {/* comment */
}
<<<
class A {
  /* comment */
}
>>> block comment with leading newline
class A {
  /* comment */}
<<<
class A {/* comment */}
>>> inline block comment
class A {  /* comment */  }
<<<
class A {/* comment */}
>>> multiple comments on opening line
class A { /* first */ // second
}
<<<
class A {
  /* first */ // second
}
>>> multiple inline block comments
class A {  /* 1 */   /* 2 */   /* 3 */  }
<<<
class A {/* 1 */ /* 2 */ /* 3 */}
>>> multiline trailing block comment
class A {  /* comment
*/  }
<<<
class A {
  /* comment
*/
}
>>> lines comments at the start of the line in a class body
class A {
//  int a;
//  int b;
  int c;
}
<<<
class A {
//  int a;
//  int b;
  int c;
}
>>> block comment
class C/* is cool */{
  /* int */ foo(/* comment */) => 42;
}
<<<
class C /* is cool */ {
  /* int */ foo(/* comment */) => 42;
}
>>> block comment
library foo;
/* A long
 * Comment
*/
class C /* is cool */ {
  /* int */ foo() => 42;
}
<<<
library foo;

/* A long
 * Comment
*/
class C /* is cool */ {
  /* int */ foo() => 42;
}
>>> ensure blank line above doc comments
class Foo {var a = 1;
/// doc
var b = 2;}
<<<
class Foo {
  var a = 1;

  /// doc
  var b = 2;
}
>>> remove blank line before beginning of body
class A {



  // comment
}
<<<
class A {
  // comment
}
>>> nested flush left comment
class Foo {
  method() {
// flush
  }
}
<<<
class Foo {
  method() {
// flush
  }
}
>>> nested flush left after non-nested
class Foo {
  method() {
    // ...
// flush
  }
}
<<<
class Foo {
  method() {
    // ...
// flush
  }
}
>>> force doc comment between classes to have two newlines before
class Foo {} /**
*/
class Bar {}
<<<
class Foo {}

/**
*/
class Bar {}
>>> force doc comment between classes to have newline after
class Foo {}
/**
*/ class Bar {}
<<<
class Foo {}

/**
*/
class Bar {}