From ad4fdbd2b2943d6cf09072e8b690c03e8b3c268c Mon Sep 17 00:00:00 2001 From: David Sherret Date: Fri, 22 Oct 2021 11:07:17 -0400 Subject: [PATCH] fix: typeArguments on decorator structure should output type arguments Ref #1205 --- .../decorator/DecoratorStructurePrinter.ts | 15 ++++++++++++++- .../decorator/decoratorStructurePrinterTests.ts | 14 ++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/ts-morph/src/structurePrinters/decorator/DecoratorStructurePrinter.ts b/packages/ts-morph/src/structurePrinters/decorator/DecoratorStructurePrinter.ts index b3eae2d5d..40e57f8b7 100644 --- a/packages/ts-morph/src/structurePrinters/decorator/DecoratorStructurePrinter.ts +++ b/packages/ts-morph/src/structurePrinters/decorator/DecoratorStructurePrinter.ts @@ -13,10 +13,23 @@ export class DecoratorStructurePrinter extends NodePrinter) { writer.write(`@${structure.name}`); + this.printTypeArguments(writer, structure); this.printArguments(writer, structure); } - printArguments(writer: CodeBlockWriter, structure: OptionalKind) { + private printTypeArguments(writer: CodeBlockWriter, structure: OptionalKind) { + if (structure.typeArguments == null || structure.typeArguments.length === 0) + return; + + writer.write("<"); + for (let i = 0; i < structure.typeArguments.length; i++) { + writer.conditionalWrite(i > 0, ", "); + writer.write(this.getTextWithQueuedChildIndentation(writer, structure.typeArguments[i])); + } + writer.write(">"); + } + + private printArguments(writer: CodeBlockWriter, structure: OptionalKind) { if (structure.arguments == null) return; diff --git a/packages/ts-morph/src/tests/structurePrinters/decorator/decoratorStructurePrinterTests.ts b/packages/ts-morph/src/tests/structurePrinters/decorator/decoratorStructurePrinterTests.ts index 79b5309e4..47277043c 100644 --- a/packages/ts-morph/src/tests/structurePrinters/decorator/decoratorStructurePrinterTests.ts +++ b/packages/ts-morph/src/tests/structurePrinters/decorator/decoratorStructurePrinterTests.ts @@ -27,5 +27,19 @@ describe(nameof(DecoratorStructurePrinter), () => { doTest({ name: "dec", arguments: writer => writer.writeLine("1,").write("2") }, `@dec(1,\n 2)`); }); }); + + describe("type arguments", () => { + it("should not write when empty", () => { + doTest({ name: "dec", typeArguments: [] }, `@dec`); + }); + + it("should write", () => { + doTest({ name: "dec", typeArguments: ["string"], arguments: ["1"] }, `@dec(1)`); + }); + + it("should write multiple", () => { + doTest({ name: "dec", typeArguments: ["string", "number"] }, `@dec`); + }); + }); }); });