remove trivia

This commit is contained in:
Arthur Ozga 2017-03-22 14:50:01 -07:00
parent 2958649a95
commit 43e01f282b
4 changed files with 31 additions and 42 deletions

View file

@ -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);

View file

@ -62,7 +62,8 @@ namespace ts.codefix {
}
const declaration = declarations[0] as Declaration;
const name = <PropertyName>declaration.name;
// Clone name to remove leading trivia.
const name = getSynthesizedClone(<PropertyName>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;
}
}

View file

@ -1,33 +0,0 @@
/// <reference path='fourslash.ts' />
class A {
foo() {
return class { x: number; }
}
bar() {
return new class { x: number; }
}
}
class B<X> {
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.");
}
`);

View file

@ -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<X>(a: X): string {
throw new Error("Method not implemented.");
}
`);