From 43e01f282b5172152a9b9c3cac2c5b058fa94a8e Mon Sep 17 00:00:00 2001 From: Arthur Ozga Date: Wed, 22 Mar 2017 14:50:01 -0700 Subject: [PATCH] remove trivia --- src/compiler/checker.ts | 4 +-- src/services/codefixes/helpers.ts | 11 ++++++- ...assExtendAbstractMethodAnonymousClass.1.ts | 33 ------------------- .../codeFixClassImplementInterfaceComments.ts | 25 ++++++++++---- 4 files changed, 31 insertions(+), 42 deletions(-) delete mode 100644 tests/cases/fourslash/codeFixClassExtendAbstractMethodAnonymousClass.1.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2790d03934..b681d1298d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2208,13 +2208,13 @@ namespace ts { const parameterDeclaration = parameterSymbol.declarations[0] as ParameterDeclaration; const parameterType = getTypeOfSymbol(parameterSymbol); const parameterTypeNode = typeToTypeNode(parameterType, enclosingDeclaration); - // TODO: how should we clone members/modifiers? // TODO: check initializer accessibility correctly. const parameterNode = createParameter( parameterDeclaration.decorators, parameterDeclaration.modifiers, parameterDeclaration.dotDotDotToken && createToken(SyntaxKind.DotDotDotToken), - parameterDeclaration.name, + // Clone name to remove trivia. + getSynthesizedClone(parameterDeclaration.name), parameterDeclaration.questionToken && createToken(SyntaxKind.QuestionToken), parameterTypeNode, parameterDeclaration.initializer); diff --git a/src/services/codefixes/helpers.ts b/src/services/codefixes/helpers.ts index b3635f89f6..da72921508 100644 --- a/src/services/codefixes/helpers.ts +++ b/src/services/codefixes/helpers.ts @@ -62,7 +62,8 @@ namespace ts.codefix { } const declaration = declarations[0] as Declaration; - const name = declaration.name; + // Clone name to remove leading trivia. + const name = getSynthesizedClone(declaration.name); const visibilityModifier = createVisibilityModifier(getModifierFlags(declaration)); const modifiers = visibilityModifier ? createNodeArray([visibilityModifier]) : undefined; const type = checker.getWidenedType(checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration)); @@ -227,4 +228,12 @@ namespace ts.codefix { } return undefined; } + + function stripComments(node: Node): Node { + if(node === undefined) { + return node; + } + const strippedChildren = visitEachChild(node, stripComments, nullTransformationContext); + return strippedChildren === node ? getSynthesizedClone(strippedChildren) : strippedChildren; + } } \ No newline at end of file diff --git a/tests/cases/fourslash/codeFixClassExtendAbstractMethodAnonymousClass.1.ts b/tests/cases/fourslash/codeFixClassExtendAbstractMethodAnonymousClass.1.ts deleted file mode 100644 index 134ce17376..0000000000 --- a/tests/cases/fourslash/codeFixClassExtendAbstractMethodAnonymousClass.1.ts +++ /dev/null @@ -1,33 +0,0 @@ -/// - -class A { - foo() { - return class { x: number; } - } - bar() { - return new class { x: number; } - } -} -class B { - foo() { - return class { - x: X; - } - } -} - - -class D extends A { } - -verify.rangeAfterCodeFix(` - f(a: number, b: string): boolean; - f(a: number, b: string): this; - f(a: string, b: number): Function; - f(a: string): Function; - f(a: any, b?: any) { - throw new Error("Method not implemented."); - } - foo(): number { - throw new Error("Method not implemented."); - } -`); diff --git a/tests/cases/fourslash/codeFixClassImplementInterfaceComments.ts b/tests/cases/fourslash/codeFixClassImplementInterfaceComments.ts index 56d56a5a50..f082074f16 100644 --- a/tests/cases/fourslash/codeFixClassImplementInterfaceComments.ts +++ b/tests/cases/fourslash/codeFixClassImplementInterfaceComments.ts @@ -2,13 +2,26 @@ // @lib: es2017 -//// /** interface prefix */ -//// interface /**interface name prefix */ I /**open-brace prefix*/{ -//// /** property prefix*/ x /**colon prefix*/: /**number prefix*/ number; -//// +//// namespace N { +//// /**enum prefix */ +//// export enum /**enum identifier prefix */ E /**open-brace prefix*/ { +//// /* literal prefix */ a /** comma prefix */, +//// /* literal prefix */ b /** comma prefix */, +//// /* literal prefix */ c +//// /** close brace prefix */ } +//// /** interface prefix */ +//// export interface /**interface name prefix */ I /**open-brace prefix*/ { +//// /** property prefix */ a /** colon prefix */: /** enum literal prefix 1*/ E /** dot prefix */. /** enum literal prefix 2*/a; +//// /** property prefix */ b /** colon prefix */: /** enum prefix */ E; +//// /**method signature prefix */foo /**open angle prefix */< /**type parameter name prefix */ X /** closing angle prefix */> /**open paren prefix */(/** parameter prefix */ a/** colon prefix */: /** parameter type prefix */ X /** close paren prefix */) /** colon prefix */: /** return type prefix */ string /** semicolon prefix */; +//// /**close-brace prefix*/ } //// /**close-brace prefix*/ } -//// class C implements I {[| |]} +//// class C implements N.I {[| |]} verify.rangeAfterCodeFix(` - x: number; + a: N.E.a; + b: N.E; + foo(a: X): string { + throw new Error("Method not implemented."); + } `);