Skip to content

Commit

Permalink
fix: ensure leading and trailing trivia for overloads ends up in output
Browse files Browse the repository at this point in the history
Closes #1244
  • Loading branch information
dsherret committed May 21, 2022
1 parent abc840d commit 0d043b5
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 8 deletions.
10 changes: 8 additions & 2 deletions deno/ts_morph.js
Original file line number Diff line number Diff line change
Expand Up @@ -6319,15 +6319,15 @@ class NodePrinter extends Printer {
this.printTrailingTrivia(writer, structure);
}
printLeadingTrivia(writer, structure) {
const leadingTrivia = structure["leadingTrivia"];
const leadingTrivia = structure.leadingTrivia;
if (leadingTrivia != null) {
this.printTrivia(writer, leadingTrivia);
if (writer.isInComment())
writer.closeComment();
}
}
printTrailingTrivia(writer, structure) {
const trailingTrivia = structure["trailingTrivia"];
const trailingTrivia = structure.trailingTrivia;
if (trailingTrivia != null)
this.printTrivia(writer, trailingTrivia);
}
Expand Down Expand Up @@ -7406,8 +7406,10 @@ class ConstructorDeclarationStructurePrinter extends NodePrinter {
}
}
printOverload(writer, structure) {
this.printLeadingTrivia(writer, structure);
this.printHeader(writer, structure);
writer.write(";");
this.printTrailingTrivia(writer, structure);
}
printHeader(writer, structure) {
this.factory.forJSDoc().printDocs(writer, structure.docs);
Expand Down Expand Up @@ -7495,8 +7497,10 @@ class MethodDeclarationStructurePrinter extends NodePrinter {
}
}
printOverload(writer, name, structure) {
this.printLeadingTrivia(writer, structure);
this.printHeader(writer, name, structure);
writer.write(";");
this.printTrailingTrivia(writer, structure);
}
printHeader(writer, name, structure) {
this.factory.forJSDoc().printDocs(writer, structure.docs);
Expand Down Expand Up @@ -7877,8 +7881,10 @@ class FunctionDeclarationStructurePrinter extends NodePrinter {
}
}
printOverload(writer, name, structure) {
this.printLeadingTrivia(writer, structure);
this.printHeader(writer, name, structure);
writer.write(";");
this.printTrailingTrivia(writer, structure);
}
printHeader(writer, name, structure) {
this.factory.forJSDoc().printDocs(writer, structure.docs);
Expand Down
8 changes: 4 additions & 4 deletions packages/ts-morph/src/structurePrinters/NodePrinter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export abstract class NodePrinter<TStructure> extends Printer<TStructure> {

protected abstract printTextInternal(writer: CodeBlockWriter, structure: TStructure): void;

printLeadingTrivia(writer: CodeBlockWriter, structure: TStructure) {
const leadingTrivia = (structure as any)["leadingTrivia"] as Structure["leadingTrivia"];
printLeadingTrivia(writer: CodeBlockWriter, structure: { leadingTrivia?: Structure["leadingTrivia"] }) {
const leadingTrivia = structure.leadingTrivia;

if (leadingTrivia != null) {
this.printTrivia(writer, leadingTrivia);
Expand All @@ -33,8 +33,8 @@ export abstract class NodePrinter<TStructure> extends Printer<TStructure> {
}
}

printTrailingTrivia(writer: CodeBlockWriter, structure: TStructure) {
const trailingTrivia = (structure as any)["trailingTrivia"] as Structure["trailingTrivia"];
printTrailingTrivia(writer: CodeBlockWriter, structure: { trailingTrivia?: Structure["leadingTrivia"] }) {
const trailingTrivia = structure.trailingTrivia;

if (trailingTrivia != null)
this.printTrivia(writer, trailingTrivia);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,10 @@ export class ConstructorDeclarationStructurePrinter extends NodePrinter<Optional
}

printOverload(writer: CodeBlockWriter, structure: OptionalKind<ConstructorDeclarationOverloadStructure>) {
this.printLeadingTrivia(writer, structure);
this.printHeader(writer, structure);
writer.write(";");
this.printTrailingTrivia(writer, structure);
}

private printHeader(writer: CodeBlockWriter, structure: OptionalKind<ConstructorDeclarationStructure | ConstructorDeclarationOverloadStructure>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ export class MethodDeclarationStructurePrinter extends NodePrinter<OptionalKind<
}

printOverload(writer: CodeBlockWriter, name: string, structure: OptionalKind<MethodDeclarationOverloadStructure>) {
this.printLeadingTrivia(writer, structure);
this.printHeader(writer, name, structure);
writer.write(";");
this.printTrailingTrivia(writer, structure);
}

private printHeader(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,10 @@ export class FunctionDeclarationStructurePrinter extends NodePrinter<OptionalKin
}

printOverload(writer: CodeBlockWriter, name: string | undefined, structure: OptionalKind<FunctionDeclarationOverloadStructure>) {
this.printLeadingTrivia(writer, structure);
this.printHeader(writer, name, structure);
writer.write(";");
this.printTrailingTrivia(writer, structure);
}

private printHeader(
Expand Down
72 changes: 72 additions & 0 deletions packages/ts-morph/src/tests/issues/1244tests.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { expect } from "chai";
import { Project } from "../../Project";
import { StructureKind } from "../../structures";

describe("tests for issue #1244", () => {
it("write leading and trailing trivia on overloads", () => {
const project = new Project({ useInMemoryFileSystem: true, skipLoadingLibFiles: true });

const file = project.createSourceFile("test.ts", ``);
file.addStatements([{
kind: StructureKind.Function,
leadingTrivia: "// leading trivia function",
trailingTrivia: "// trailing trivia function",
overloads: [
{
leadingTrivia: "// leading trivia overload",
trailingTrivia: "// trailing trivia overload",
returnType: "string",
},
],
name: "functionName",
statements: "return 'hello';",
}, {
kind: StructureKind.Class,
name: "MyClass",
methods: [{
leadingTrivia: "// leading trivia method",
trailingTrivia: "// trailing trivia method",
overloads: [
{
leadingTrivia: "// leading trivia overload",
trailingTrivia: "// trailing trivia overload",
returnType: "string",
},
],
name: "method",
}],
ctors: [{
leadingTrivia: "// leading trivia ctor",
trailingTrivia: "// trailing trivia ctor",
overloads: [
{
leadingTrivia: "// leading trivia overload",
trailingTrivia: "// trailing trivia overload",
},
],
}],
}]);

expect(file.getFullText()).to.equal(`// leading trivia function
// leading trivia overload
function functionName(): string;// trailing trivia overload
function functionName() {
return 'hello';
}// trailing trivia function
class MyClass {
// leading trivia ctor
// leading trivia overload
constructor();// trailing trivia overload
constructor() {
}// trailing trivia ctor
// leading trivia method
// leading trivia overload
method(): string;// trailing trivia overload
method() {
}// trailing trivia method
}
`);
});
});
4 changes: 2 additions & 2 deletions packages/ts-morph/src/tests/issues/1273tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { ts } from "@ts-morph/common";
import { expect } from "chai";
import { Project } from "../../Project";

describe("tests for issue #1227", () => {
it("should find referencing source files", () => {
describe("tests for issue #1273", () => {
it("should output synthetic comments on nodes with only addSyntheticLeadingComment", () => {
const project = new Project({ useInMemoryFileSystem: true, compilerOptions: { removeComments: false } });

const file = project.createSourceFile("x.ts", `const x: number = 5 * 9;`);
Expand Down

0 comments on commit 0d043b5

Please sign in to comment.