diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index 839e740b755..e1bb95481a1 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -1245,6 +1245,7 @@ namespace ts { const statement = createExpressionStatement(transformInitializedProperty(property, receiver)); setSourceMapRange(statement, moveRangePastModifiers(property)); setCommentRange(statement, property); + setOriginalNode(statement, property); statements.push(statement); } } @@ -1262,6 +1263,7 @@ namespace ts { startOnNewLine(expression); setSourceMapRange(expression, moveRangePastModifiers(property)); setCommentRange(expression, property); + setOriginalNode(expression, property); expressions.push(expression); } diff --git a/src/testRunner/unittests/transform.ts b/src/testRunner/unittests/transform.ts index cae0ee7deb2..d2a61fb1248 100644 --- a/src/testRunner/unittests/transform.ts +++ b/src/testRunner/unittests/transform.ts @@ -334,6 +334,29 @@ export {Value}; } }).outputText; }); + + // https://github.com/Microsoft/TypeScript/issues/17594 + testBaseline("transformAddCommentToProperties", () => { + return transpileModule(` +// class comment. +class Clazz { + // original comment 1. + static staticProp: number = 1; + // original comment 2. + instanceProp: number = 2; + // original comment 3. + constructor(readonly field = 1) {} +} +`, { + transformers: { + before: [addSyntheticComment(n => isPropertyDeclaration(n) || isParameterPropertyDeclaration(n) || isClassDeclaration(n) || isConstructorDeclaration(n))], + }, + compilerOptions: { + target: ScriptTarget.ES2015, + newLine: NewLineKind.CarriageReturnLineFeed, + } + }).outputText; + }); }); } diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToClassProp.js b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToClassProp.js new file mode 100644 index 00000000000..1e316e31107 --- /dev/null +++ b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToClassProp.js @@ -0,0 +1,7 @@ +class X { + constructor() { + // new comment! + // original comment. + this.foo = 1; + } +} diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js new file mode 100644 index 00000000000..d5f27d7148c --- /dev/null +++ b/tests/baselines/reference/transformApi/transformsCorrectly.transformAddCommentToProperties.js @@ -0,0 +1,12 @@ +/*comment*/ +class Clazz { + /*comment*/ + constructor(/*comment*/ + field = 1) { + this.field = field; + /*comment*/ + this.instanceProp = 2; + } +} +/*comment*/ +Clazz.staticProp = 1;