From df4471867b2920e13b56e5ab8ca411d676a4932e Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 22 Mar 2018 08:12:02 -0700 Subject: [PATCH] convertFunctionToEs6Class: Copy comments from constructor to class (#22738) --- src/services/codefixes/convertFunctionToEs6Class.ts | 2 ++ src/services/textChanges.ts | 1 + .../fourslash/server/convertFunctionToEs6Class-server.ts | 5 ++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/services/codefixes/convertFunctionToEs6Class.ts b/src/services/codefixes/convertFunctionToEs6Class.ts index 7de070d1099c7..396249ceddbe0 100644 --- a/src/services/codefixes/convertFunctionToEs6Class.ts +++ b/src/services/codefixes/convertFunctionToEs6Class.ts @@ -49,6 +49,8 @@ namespace ts.codefix { return undefined; } + copyComments(ctorDeclaration, newClassDeclaration, sourceFile); + // Because the preceding node could be touched, we need to insert nodes before delete nodes. changes.insertNodeAfter(sourceFile, precedingNode, newClassDeclaration); for (const deleteCallback of deletes) { diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 850c26efd0729..0549a8aadd555 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -225,6 +225,7 @@ namespace ts.textChanges { return this; } + /** Warning: This deletes comments too. See `copyComments` in `convertFunctionToEs6Class`. */ public deleteNode(sourceFile: SourceFile, node: Node, options: ConfigurableStartEnd = {}) { const startPosition = getAdjustedStartPosition(sourceFile, node, options, Position.FullStart); const endPosition = getAdjustedEndPosition(sourceFile, node, options); diff --git a/tests/cases/fourslash/server/convertFunctionToEs6Class-server.ts b/tests/cases/fourslash/server/convertFunctionToEs6Class-server.ts index 498c976e71ecb..24a7acbf8edc5 100644 --- a/tests/cases/fourslash/server/convertFunctionToEs6Class-server.ts +++ b/tests/cases/fourslash/server/convertFunctionToEs6Class-server.ts @@ -14,9 +14,8 @@ verify.codeFix({ description: "Convert function to an ES2015 class", newFileContent: -// NOTE: '// Comment' should be included, but due to incorrect handling of trivia, -// it's omitted right now. -`class fn {\r +`// Comment\r +class fn {\r constructor() {\r this.baz = 10;\r }\r