mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-17 00:34:47 -05:00
Fix writing multi-line text without semicolons (#32903)
* Fix semicolon-omitting writer * Use writeTrailingSemicolon for do statements
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user