mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 08:11:30 -06:00
Fix writing multi-line text without semicolons (#32903)
* Fix semicolon-omitting writer * Use writeTrailingSemicolon for do statements
This commit is contained in:
parent
ccf41ef803
commit
cd371daf77
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
@ -2511,7 +2511,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
emitWhileClause(node, node.statement.end);
|
||||
writePunctuation(";");
|
||||
writeTrailingSemicolon();
|
||||
}
|
||||
|
||||
function emitWhileStatement(node: WhileStatement) {
|
||||
|
||||
@ -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() {
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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) };
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ verify.codeFix({
|
||||
constructor() {
|
||||
}
|
||||
foo() {
|
||||
({ bar: () => { } });
|
||||
({ bar: () => { } })
|
||||
}
|
||||
}
|
||||
`,
|
||||
|
||||
@ -18,7 +18,7 @@ edit.applyRefactor({
|
||||
q[0]++
|
||||
|
||||
function newFunction() {
|
||||
return [0];
|
||||
return [0]
|
||||
}
|
||||
}`
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user