Skip to content

Commit

Permalink
Fix writing multi-line text without semicolons (microsoft#32903)
Browse files Browse the repository at this point in the history
* Fix semicolon-omitting writer

* Use writeTrailingSemicolon for do statements
  • Loading branch information
andrewbranch committed Aug 28, 2019
1 parent ccf41ef commit cd371da
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3522,7 +3522,7 @@ namespace ts {
const sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | NodeBuilderFlags.IgnoreErrors | NodeBuilderFlags.WriteTypeParametersInQualifiedName);
const printer = createPrinter({ removeComments: true, omitTrailingSemicolon: true });
const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration);
printer.writeNode(EmitHint.Unspecified, sig!, /*sourceFile*/ sourceFile, getTrailingSemicolonOmittingWriter(writer)); // TODO: GH#18217
printer.writeNode(EmitHint.Unspecified, sig!, /*sourceFile*/ sourceFile, getTrailingSemicolonDeferringWriter(writer)); // TODO: GH#18217
return writer;
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/compiler/emitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1053,7 +1053,7 @@ namespace ts {

function setWriter(_writer: EmitTextWriter | undefined, _sourceMapGenerator: SourceMapGenerator | undefined) {
if (_writer && printerOptions.omitTrailingSemicolon) {
_writer = getTrailingSemicolonOmittingWriter(_writer);
_writer = getTrailingSemicolonDeferringWriter(_writer);
}

writer = _writer!; // TODO: GH#18217
Expand Down Expand Up @@ -2511,7 +2511,7 @@ namespace ts {
}

emitWhileClause(node, node.statement.end);
writePunctuation(";");
writeTrailingSemicolon();
}

function emitWhileStatement(node: WhileStatement) {
Expand Down
20 changes: 19 additions & 1 deletion src/compiler/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3374,7 +3374,11 @@ namespace ts {
};
}

export function getTrailingSemicolonOmittingWriter(writer: EmitTextWriter): EmitTextWriter {
export interface TrailingSemicolonDeferringWriter extends EmitTextWriter {
resetPendingTrailingSemicolon(): void;
}

export function getTrailingSemicolonDeferringWriter(writer: EmitTextWriter): TrailingSemicolonDeferringWriter {
let pendingTrailingSemicolon = false;

function commitPendingTrailingSemicolon() {
Expand Down Expand Up @@ -3440,10 +3444,24 @@ namespace ts {
decreaseIndent() {
commitPendingTrailingSemicolon();
writer.decreaseIndent();
},
resetPendingTrailingSemicolon() {
pendingTrailingSemicolon = false;
}
};
}

export function getTrailingSemicolonOmittingWriter(writer: EmitTextWriter): EmitTextWriter {
const deferringWriter = getTrailingSemicolonDeferringWriter(writer);
return {
...deferringWriter,
writeLine() {
deferringWriter.resetPendingTrailingSemicolon();
writer.writeLine();
},
};
}

export function getResolvedExternalModuleName(host: EmitHost, file: SourceFile, referenceFile?: SourceFile): string {
return file.moduleName || getExternalModuleNameFromPath(host, file.fileName, referenceFile && referenceFile.fileName);
}
Expand Down
2 changes: 1 addition & 1 deletion src/services/textChanges.ts
Original file line number Diff line number Diff line change
Expand Up @@ -854,7 +854,7 @@ namespace ts.textChanges {
const omitTrailingSemicolon = !!sourceFile && !probablyUsesSemicolons(sourceFile);
const writer = createWriter(newLineCharacter, omitTrailingSemicolon);
const newLine = newLineCharacter === "\n" ? NewLineKind.LineFeed : NewLineKind.CarriageReturnLineFeed;
createPrinter({ newLine, neverAsciiEscape: true, omitTrailingSemicolon }, writer).writeNode(EmitHint.Unspecified, node, sourceFile, writer);
createPrinter({ newLine, neverAsciiEscape: true }, writer).writeNode(EmitHint.Unspecified, node, sourceFile, writer);
return { text: writer.getText(), node: assignPositionsToNode(node) };
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ verify.codeFix({
constructor() {
}
foo() {
({ bar: () => { } });
({ bar: () => { } })
}
}
`,
Expand Down
2 changes: 1 addition & 1 deletion tests/cases/fourslash/extract-method25.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ edit.applyRefactor({
q[0]++
function newFunction() {
return [0];
return [0]
}
}`
});

0 comments on commit cd371da

Please sign in to comment.