40 columns                              |
>>> indented line comment
extension A on B {
  // comment
}
<<<
extension A on B {
  // comment
}
>>> line comment on opening line
extension A on B { // comment
}
<<<
extension A on B {
  // comment
}
>>> indented block comment
extension A on B {
  /* comment */
}
<<<
extension A on B {
  /* comment */
}
>>> block comment with trailing newline
extension A on B {/* comment */
}
<<<
extension A on B {
  /* comment */
}
>>> block comment with leading newline
extension A on B {
  /* comment */}
<<<
extension A on B {/* comment */}
>>> inline block comment
extension A on B {  /* comment */  }
<<<
extension A on B {/* comment */}
>>> multiple comments on opening line
extension A on B { /* first */ // second
}
<<<
extension A on B {
  /* first */ // second
}
>>> multiple inline block comments
extension A on B {  /*1*/   /*2*/   /*3*/  }
<<<
extension A on B {/*1*/ /*2*/ /*3*/}
>>> multiline trailing block comment
extension A on B {  /* comment
*/  }
<<<
extension A on B {
  /* comment
*/
}
>>> lines comments at the start of the line in body
extension A on B {
//  a() => 1;
//  b() => 2;
  c() => 3;
}
<<<
extension A on B {
//  a() => 1;
//  b() => 2;
  c() => 3;
}
>>> block comment
extension A on B/* is cool */{
  /* int */ foo(/* comment */) => 42;
}
<<<
extension A on B /* is cool */ {
  /* int */ foo(/* comment */) => 42;
}
>>> block comments in odd places
extension/*1*/A/*2*/on B {}
extension A on/*3*/B/*4*/{}
<<<
extension /*1*/ A /*2*/ on B {}

extension A on /*3*/ B /*4*/ {}
>>> line comments in odd places
extension// 1
A// 2
on// 3
B// 4
{}
<<<
extension // 1
    A // 2
    on // 3
    B // 4
{}
>>> block comment
library foo;
/* A long
 * Comment
*/
extension A on B /* is cool */ {
  /* int */ foo() => 42;
}
<<<
library foo;

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

  /// doc
  b() => 2;
}
>>> remove blank line before beginning of body
extension A on B {



  // comment
}
<<<
extension A on B {
  // comment
}
>>> nested flush left comment
extension A on B {
  method() {
// flush
  }
}
<<<
extension A on B {
  method() {
// flush
  }
}
>>> nested flush left after non-nested
extension A on B {
  method() {
    // ...
// flush
  }
}
<<<
extension A on B {
  method() {
    // ...
// flush
  }
}
>>> force doc comment between extensions to have two newlines before
extension A on B {} /**
*/
extension A on B {}
<<<
extension A on B {}

/**
*/
extension A on B {}
>>> force doc comment between classes to have newline after
extension A on B {}
/**
*/ extension A on B {}
<<<
extension A on B {}

/**
*/
extension A on B {}