// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`assignment-pattern.js 1`] = ` "const { a /* comment */ = 1 } = b; const { c = 1 /* comment */ } = d; let {a //comment = b} = c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const { a /* comment */ = 1 } = b; const { c = 1 /* comment */ } = d; let { a = b //comment } = c; " `; exports[`before-comma.js 1`] = ` "const foo = { a: 'a' /* comment for this line */, /* Section B */ b: 'b', }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const foo = { a: \\"a\\" /* comment for this line */, /* Section B */ b: \\"b\\" }; " `; exports[`blank.js 1`] = ` "// This file only // has comments. This comment // should still exist // // when printed. /** * @typedef {DataDrivenMapping|ConstantMapping} Mapping */ /** * @typedef {Object.} ConfigurationMapping */ /** * @typedef {Function} D3Scale - a D3 scale * @property {Function} ticks * @property {Function} tickFormat */ // comment // comment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // This file only // has comments. This comment // should still exist // // when printed. /** * @typedef {DataDrivenMapping|ConstantMapping} Mapping */ /** * @typedef {Object.} ConfigurationMapping */ /** * @typedef {Function} D3Scale - a D3 scale * @property {Function} ticks * @property {Function} tickFormat */ // comment // comment " `; exports[`call_comment.js 1`] = ` "render( // Warm any cache , container ); React.render( // Warm any cache , container ); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ render( // Warm any cache , container ); React.render( // Warm any cache , container ); " `; exports[`dangling.js 1`] = ` "var x = {/* dangling */}; var x = { // dangling }; var x = [/* dangling */]; function x() { /* dangling */ } declare class Foo extends Qux {/* dangling */} export /* dangling */{}; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ var x = { /* dangling */ }; var x = { // dangling }; var x = [ /* dangling */ ]; function x() { /* dangling */ } declare class Foo extends Qux { /* dangling */ } export /* dangling */{}; " `; exports[`dangling_array.js 1`] = ` "expect(() => {}).toTriggerReadyStateChanges([ // Nothing. ]); [1 /* first comment */, 2 /* second comment */, 3]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expect(() => {}).toTriggerReadyStateChanges( [ // Nothing. ] ); [1 /* first comment */, 2 /* second comment */, 3]; " `; exports[`dangling_for.js 1`] = ` "for // comment (;;); for /* comment */(;;); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // comment for (;;); /* comment */ for (;;); " `; exports[`export.js 1`] = ` "export //comment {} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //comment export {}; " `; exports[`first-line.js 1`] = ` "a // comment b ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ a; // comment b; " `; exports[`flow_union.js 1`] = ` "type UploadState // The upload hasnt begun yet = {type: \\"Not_begun\\"} // The upload timed out | {type: \\"Timed_out\\"} // Failed somewhere on the line | {type: \\"Failed\\", error: E, errorMsg: EM} // Uploading to aws3 and CreatePostMutation succeeded | {type: \\"Success\\", data: D}; type UploadState // The upload hasnt begun yet = A // The upload timed out | B // Failed somewhere on the line | C // Uploading to aws3 and CreatePostMutation succeeded | D; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ type UploadState = // The upload hasnt begun yet | { type: \\"Not_begun\\" } // The upload timed out | { type: \\"Timed_out\\" } // Failed somewhere on the line | { type: \\"Failed\\", error: E, errorMsg: EM } // Uploading to aws3 and CreatePostMutation succeeded | { type: \\"Success\\", data: D }; type UploadState = // The upload hasnt begun yet | A // The upload timed out | B // Failed somewhere on the line | C // Uploading to aws3 and CreatePostMutation succeeded | D; " `; exports[`function-declaration.js 1`] = ` "function a(/* comment */) {} // comment function b() {} // comment function c(/* comment */ argA, argB, argC) {} // comment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function a(/* comment */) {} // comment function b() {} // comment function c(/* comment */ argA, argB, argC) {} // comment " `; exports[`if.js 1`] = ` "if (1) // comment { false } // comment else if (2) true // multi // ple // lines else if (3) // existing comment true // okay? else if (4) { // empty with existing comment } // comment else { } if (1) {} else // comment {} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (1) { // comment false; } else if (2) // comment true; else if (3) // multi // ple // lines // existing comment true; else if (4) { // okay? // empty with existing comment } else { // comment } if (1) { } else { // comment } " `; exports[`issues.js 1`] = ` "// Does not need to break as it fits in 80 columns this.call(a, /* comment */ b); function f( someReallyLongArgument: WithSomeLongType, someReallyLongArgument2: WithSomeLongType, // Trailing comment should stay after ) {} // Comments should either stay at the end of the line or always before, but // not one before and one after. throw new ProcessSystemError({ code: acc.error.code, // Alias of errno originalError: acc.error, // Just in case. }); // Adding a comment stops the pretty printing process and everything is // squished in a single line afterward export type BuckWebSocketMessage = { // Not actually from Buck - this is to let the receiver know that the socket is connected. type: 'SocketConnected', } | { type: 'BuildProgressUpdated', progressValue: number, } | { type: 'BuildFinished', exitCode: number, } | { type: 'BuildStarted', } | { type: 'ParseStarted', } | { type: 'ParseFinished', } | { type: 'RunStarted', } | { type: 'RunComplete', }; // Missing one level of indentation because of the comment const rootEpic = (actions, store) => ( combineEpics(...epics)(actions, store) // Log errors and continue. .catch((err, stream) => { getLogger().error(err); return stream; }) ); // Two extra levels of indentation because of the comment export type AsyncExecuteOptions = child_process$execFileOpts & { // The contents to write to stdin. stdin?: ?string, dontLogInNuclide?: ?boolean, }; // optional trailing comma gets moved all the way to the beginning const regex = new RegExp( '^\\\\\\\\s*' + // beginning of the line 'name\\\\\\\\s*=\\\\\\\\s*' + // name = '[\\\\'\\"]' + // opening quotation mark escapeStringRegExp(target.name) + // target name '[\\\\'\\"]' + // closing quotation mark ',?$', // optional trailing comma ); // The comment is moved and doesn't trigger the eslint rule anymore import path from 'path'; // eslint-disable-line nuclide-internal/prefer-nuclide-uri // Comments disappear in-between MemberExpressions Observable.of(process) // Don't complete until we say so! .merge(Observable.never()) // Get the errors. .takeUntil(throwOnError ? errors.flatMap(Observable.throw) : errors) .takeUntil(exit); // Comments disappear inside of JSX
{/* Some comment */}
; // Comments in JSX tag are placed in a non optimal way
; // Comments disappear in empty blocks if (1) { // Comment } // Comments trigger invalid JavaScript in-between else if if (1) { } // Comment else { } // The comment makes the line break in a weird way const result = asyncExecute('non_existing_command', /* args */ []); // The closing paren is printed on the same line as the comment foo({} // Hi ); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Does not need to break as it fits in 80 columns this.call(a, /* comment */ b); function f( someReallyLongArgument: WithSomeLongType, someReallyLongArgument2: WithSomeLongType // Trailing comment should stay after ) {} // Comments should either stay at the end of the line or always before, but // not one before and one after. throw new ProcessSystemError({ code: acc.error.code, // Alias of errno originalError: acc.error // Just in case. }); // Adding a comment stops the pretty printing process and everything is // squished in a single line afterward export type BuckWebSocketMessage = | { // Not actually from Buck - this is to let the receiver know that the socket is connected. type: \\"SocketConnected\\" } | { type: \\"BuildProgressUpdated\\", progressValue: number } | { type: \\"BuildFinished\\", exitCode: number } | { type: \\"BuildStarted\\" } | { type: \\"ParseStarted\\" } | { type: \\"ParseFinished\\" } | { type: \\"RunStarted\\" } | { type: \\"RunComplete\\" }; // Missing one level of indentation because of the comment const rootEpic = (actions, store) => combineEpics(...epics)(actions, store) // Log errors and continue. .catch((err, stream) => { getLogger().error(err); return stream; }); // Two extra levels of indentation because of the comment export type AsyncExecuteOptions = child_process$execFileOpts & { // The contents to write to stdin. stdin?: ?string, dontLogInNuclide?: ?boolean }; // optional trailing comma gets moved all the way to the beginning const regex = new RegExp( \\"^\\\\\\\\s*\\" + // beginning of the line \\"name\\\\\\\\s*=\\\\\\\\s*\\" + // name = \\"['\\\\\\"]\\" + // opening quotation mark escapeStringRegExp(target.name) + // target name \\"['\\\\\\"]\\" + // closing quotation mark \\",?$\\" // optional trailing comma ); // The comment is moved and doesn't trigger the eslint rule anymore import path from \\"path\\"; // eslint-disable-line nuclide-internal/prefer-nuclide-uri // Comments disappear in-between MemberExpressions Observable.of(process) // Don't complete until we say so! .merge(Observable.never()) // Get the errors. .takeUntil(throwOnError ? errors.flatMap(Observable.throw) : errors) .takeUntil(exit); // Comments disappear inside of JSX
{/* Some comment */}
; // Comments in JSX tag are placed in a non optimal way
; // Comments disappear in empty blocks if (1) { // Comment } // Comments trigger invalid JavaScript in-between else if if (1) { } else { // Comment } // The comment makes the line break in a weird way const result = asyncExecute(\\"non_existing_command\\", /* args */ []); // The closing paren is printed on the same line as the comment foo( {} // Hi ); " `; exports[`jsx.js 1`] = ` "
{ /* comment */ }
;
{/* comment */ }
;
{/* comment */ }
;
{a/* comment */ }
;
{/* comment */ a }
;
{/* comment */ }
;
{/* comment */}
;
{ // single line comment }
;
{ // multiple line comments 1 // multiple line comments 2 }
;
{ // multiple mixed comments 1 /* multiple mixed comments 2 */ /* multiple mixed comments 3 */ // multiple mixed comments 4 }
;
{ // Some very v ery very very merry (xmas) very very long line to break line width limit }
;
{/*
Some very v ery very very long line to break line width limit
*/}
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{/* comment */}
;
{/* comment */}
;
{/* comment */}
;
{a /* comment */}
;
{ /* comment */ a }
;
{/* comment */}
;
{/* comment */}
;
{ // single line comment }
;
{ // multiple line comments 1 // multiple line comments 2 }
;
{ // multiple mixed comments 1 /* multiple mixed comments 2 */ /* multiple mixed comments 3 */ // multiple mixed comments 4 }
;
{ // Some very v ery very very merry (xmas) very very long line to break line width limit }
;
{/*
Some very v ery very very long line to break line width limit
*/}
; " `; exports[`last-arg.js 1`] = ` "type f = ( currentRequest: {a: number}, // TODO this is a very very very very long comment that makes it go > 80 columns ) => number; f = ( currentRequest: {a: number}, // TODO this is a very very very very long comment that makes it go > 80 columns ): number => {}; f = ( currentRequest: {a: number}, // TODO this is a very very very very long comment that makes it go > 80 columns ) => {}; f = function( currentRequest: {a: number}, // TODO this is a very very very very long comment that makes it go > 80 columns ) {}; class X { f( currentRequest: {a: number}, // TODO this is a very very very very long comment that makes it go > 80 columns ) {} } function f( a: number // some comment here ): number { return a + 1; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ type f = ( currentRequest: { a: number } // TODO this is a very very very very long comment that makes it go > 80 columns ) => number; f = ( currentRequest: { a: number } // TODO this is a very very very very long comment that makes it go > 80 columns ): number => {}; f = ( currentRequest: { a: number } // TODO this is a very very very very long comment that makes it go > 80 columns ) => {}; f = function( currentRequest: { a: number } // TODO this is a very very very very long comment that makes it go > 80 columns ) {}; class X { f( currentRequest: { a: number } // TODO this is a very very very very long comment that makes it go > 80 columns ) {} } function f( a: number // some comment here ): number { return a + 1; } " `; exports[`preserve-new-line-last.js 1`] = ` "function f() { a /* eslint-disable */ } function f() { a /* eslint-disable */ } function name() { // comment1 func1() // comment2 func2() // comment3 why func3 commented // func3() } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function f() { a; /* eslint-disable */ } function f() { a; /* eslint-disable */ } function name() { // comment1 func1(); // comment2 func2(); // comment3 why func3 commented // func3() } " `; exports[`return-statement.js 1`] = ` "function jsx() { return ( // Comment
); } function unary() { return ( // Comment !!x ); } function numericLiteralNoParen() { return 1337; // Comment } function logical() { return ( // Reason for 42 42 ) && 84 } function binary() { return ( // Reason for 42 42 ) * 84 } function binaryInBinaryLeft() { return ( // Reason for 42 42 ) * 84 + 2 } function binaryInBinaryRight() { return ( // Reason for 42 42 ) + 84 * 2 } function conditional() { return ( // Reason for 42 42 ) ? 1 : 2 } function binaryInConditional() { return ( // Reason for 42 42 ) * 3 ? 1 : 2 } function call() { return ( // Reason for a a )() } function memberInside() { return ( // Reason for a.b a.b ).c } function memberOutside() { return ( // Reason for a a ).b.c } function memberInAndOutWithCalls() { return ( // Reason for a a.b() ).c.d() } function excessiveEverything() { return ( // Reason for stuff a.b() * 3 + 4 ? (a\`hi\`, 1) ? 1 : 1 : 1 ) } function sequenceExpression() { return ( // Reason for a a ), b } function sequenceExpressionInside() { return ( // Reason for a a, b ); } function taggedTemplate() { return ( // Reason for a a )\`b\` } function inlineComment() { return ( /* hi */ 42 ) || 42 } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function jsx() { return ( // Comment
); } function unary() { return ( // Comment !!x ); } function numericLiteralNoParen() { return 1337; // Comment } function logical() { return ( // Reason for 42 42 && 84 ); } function binary() { return ( // Reason for 42 42 * 84 ); } function binaryInBinaryLeft() { return ( // Reason for 42 42 * 84 + 2 ); } function binaryInBinaryRight() { return ( // Reason for 42 42 + 84 * 2 ); } function conditional() { return ( // Reason for 42 42 ? 1 : 2 ); } function binaryInConditional() { return ( // Reason for 42 42 * 3 ? 1 : 2 ); } function call() { return ( // Reason for a a() ); } function memberInside() { return ( // Reason for a.b a.b.c ); } function memberOutside() { return ( // Reason for a a.b.c ); } function memberInAndOutWithCalls() { return ( a .b// Reason for a () .c.d() ); } function excessiveEverything() { return ( // Reason for stuff a.b() * 3 + 4 ? (a\`hi\`, 1) ? 1 : 1 : 1 ); } function sequenceExpression() { return ( // Reason for a a, b ); } function sequenceExpressionInside() { return ( // Reason for a a, b ); } function taggedTemplate() { return ( // Reason for a a\`b\` ); } function inlineComment() { return /* hi */ 42 || 42; } " `; exports[`switch.js 1`] = ` "switch (node && node.type) { case \\"Property\\": case \\"MethodDefinition\\": prop = node.key; break; case \\"MemberExpression\\": prop = node.property; break; // no default } switch (foo) { case \\"bar\\": doThing() // no default } switch (foo) { case \\"bar\\": //comment doThing(); //comment case \\"baz\\": doOtherThing(); //comment } switch (foo) { case \\"bar\\": { doThing(); } //comment case \\"baz\\": { doThing(); } //comment } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ switch (node && node.type) { case \\"Property\\": case \\"MethodDefinition\\": prop = node.key; break; case \\"MemberExpression\\": prop = node.property; break; // no default } switch (foo) { case \\"bar\\": doThing(); // no default } switch (foo) { case \\"bar\\": //comment doThing(); //comment case \\"baz\\": doOtherThing(); //comment } switch (foo) { case \\"bar\\": { doThing(); } //comment case \\"baz\\": { doThing(); } //comment } " `; exports[`template-literal.js 1`] = ` "\` \${a // comment } \${b /* comment */} \${/* comment */ c /* comment */} \${// comment d //comment }; \` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \` \${/* comment*/ a} \${/* comment */ b} \${/* comment */ /* comment */ c} \${/* comment*/ /*comment*/ d}; \`; " `; exports[`try.js 1`] = ` "// comment 1 try { // comment 2 } // comment 3 catch(e) { // comment 4 } // comment 5 finally // comment 6 { // comment 7 } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // comment 1 try { // comment 2 } catch (e) { // comment 3 // comment 4 } finally { // comment 6 // comment 5 // comment 7 } " `; exports[`variable_declarator.js 1`] = ` "let obj = // Comment { key: 'val' } let obj // Comment = { key: 'val' } let obj = { // Comment key: 'val' } let obj = { // Comment key: 'val' } let obj = // Comment [ 'val' ] let obj // Comment = [ 'val' ] let obj = [ // Comment 'val' ] let obj = [ // Comment 'val' ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ let obj = // Comment { key: \\"val\\" }; let obj = // Comment { key: \\"val\\" }; let obj = { // Comment key: \\"val\\" }; let obj = { // Comment key: \\"val\\" }; let obj = // Comment [\\"val\\"]; let obj = // Comment [\\"val\\"]; let obj = [ // Comment \\"val\\" ]; let obj = [ // Comment \\"val\\" ]; " `;