Skip to content

Commit 8dbbf11

Browse files
committed
Fix semicolon-omitting writer
1 parent 370a596 commit 8dbbf11

File tree

6 files changed

+24
-6
lines changed

6 files changed

+24
-6
lines changed

Diff for: src/compiler/checker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3506,7 +3506,7 @@ namespace ts {
35063506
const sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | NodeBuilderFlags.IgnoreErrors | NodeBuilderFlags.WriteTypeParametersInQualifiedName);
35073507
const printer = createPrinter({ removeComments: true, omitTrailingSemicolon: true });
35083508
const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration);
3509-
printer.writeNode(EmitHint.Unspecified, sig!, /*sourceFile*/ sourceFile, getTrailingSemicolonOmittingWriter(writer)); // TODO: GH#18217
3509+
printer.writeNode(EmitHint.Unspecified, sig!, /*sourceFile*/ sourceFile, getTrailingSemicolonDeferringWriter(writer)); // TODO: GH#18217
35103510
return writer;
35113511
}
35123512
}

Diff for: src/compiler/emitter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1056,7 +1056,7 @@ namespace ts {
10561056

10571057
function setWriter(_writer: EmitTextWriter | undefined, _sourceMapGenerator: SourceMapGenerator | undefined) {
10581058
if (_writer && printerOptions.omitTrailingSemicolon) {
1059-
_writer = getTrailingSemicolonOmittingWriter(_writer);
1059+
_writer = getTrailingSemicolonDeferringWriter(_writer);
10601060
}
10611061

10621062
writer = _writer!; // TODO: GH#18217

Diff for: src/compiler/utilities.ts

+19-1
Original file line numberDiff line numberDiff line change
@@ -3369,7 +3369,11 @@ namespace ts {
33693369
};
33703370
}
33713371

3372-
export function getTrailingSemicolonOmittingWriter(writer: EmitTextWriter): EmitTextWriter {
3372+
export interface TrailingSemicolonDeferringWriter extends EmitTextWriter {
3373+
resetPendingTrailingSemicolon(): void;
3374+
}
3375+
3376+
export function getTrailingSemicolonDeferringWriter(writer: EmitTextWriter): TrailingSemicolonDeferringWriter {
33733377
let pendingTrailingSemicolon = false;
33743378

33753379
function commitPendingTrailingSemicolon() {
@@ -3435,10 +3439,24 @@ namespace ts {
34353439
decreaseIndent() {
34363440
commitPendingTrailingSemicolon();
34373441
writer.decreaseIndent();
3442+
},
3443+
resetPendingTrailingSemicolon() {
3444+
pendingTrailingSemicolon = false;
34383445
}
34393446
};
34403447
}
34413448

3449+
export function getTrailingSemicolonOmittingWriter(writer: EmitTextWriter): EmitTextWriter {
3450+
const deferringWriter = getTrailingSemicolonDeferringWriter(writer);
3451+
return {
3452+
...deferringWriter,
3453+
writeLine() {
3454+
deferringWriter.resetPendingTrailingSemicolon();
3455+
writer.writeLine();
3456+
},
3457+
};
3458+
}
3459+
34423460
export function getResolvedExternalModuleName(host: EmitHost, file: SourceFile, referenceFile?: SourceFile): string {
34433461
return file.moduleName || getExternalModuleNameFromPath(host, file.fileName, referenceFile && referenceFile.fileName);
34443462
}

Diff for: src/services/textChanges.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ namespace ts.textChanges {
854854
const omitTrailingSemicolon = !!sourceFile && !probablyUsesSemicolons(sourceFile);
855855
const writer = createWriter(newLineCharacter, omitTrailingSemicolon);
856856
const newLine = newLineCharacter === "\n" ? NewLineKind.LineFeed : NewLineKind.CarriageReturnLineFeed;
857-
createPrinter({ newLine, neverAsciiEscape: true, omitTrailingSemicolon }, writer).writeNode(EmitHint.Unspecified, node, sourceFile, writer);
857+
createPrinter({ newLine, neverAsciiEscape: true }, writer).writeNode(EmitHint.Unspecified, node, sourceFile, writer);
858858
return { text: writer.getText(), node: assignPositionsToNode(node) };
859859
}
860860
}

Diff for: tests/cases/fourslash/convertFunctionToEs6Class_objectLiteralInArrowFunction.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ verify.codeFix({
1515
constructor() {
1616
}
1717
foo() {
18-
({ bar: () => { } });
18+
({ bar: () => { } })
1919
}
2020
}
2121
`,

Diff for: tests/cases/fourslash/extract-method25.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ edit.applyRefactor({
1818
q[0]++
1919
2020
function newFunction() {
21-
return [0];
21+
return [0]
2222
}
2323
}`
2424
});

0 commit comments

Comments
 (0)