From 45a77c0a2c62662b9eaf4f404a6cb227f93c31fe Mon Sep 17 00:00:00 2001 From: Arthur Ozga Date: Mon, 26 Jun 2017 12:33:29 -0700 Subject: [PATCH 1/2] visit question token --- src/compiler/factory.ts | 4 +++- src/compiler/visitor.ts | 1 + ...odeFixClassImplementInterfaceOptionalProperty.ts | 13 +++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixClassImplementInterfaceOptionalProperty.ts diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index ed3ed36e79a..a5265db9d38 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -314,10 +314,11 @@ namespace ts { return node; } - export function updateProperty(node: PropertyDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: PropertyName, type: TypeNode | undefined, initializer: Expression | undefined) { + export function updateProperty(node: PropertyDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: string | PropertyName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined) { return node.decorators !== decorators || node.modifiers !== modifiers || node.name !== name + || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer ? updateNode(createProperty(decorators, modifiers, name, node.questionToken, type, initializer), node) @@ -360,6 +361,7 @@ namespace ts { || node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name + || node.questionToken !== questionToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index 391fa88c79d..a1658c7eb48 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -270,6 +270,7 @@ namespace ts { nodesVisitor((node).decorators, visitor, isDecorator), nodesVisitor((node).modifiers, visitor, isModifier), visitNode((node).name, visitor, isPropertyName), + visitNode((node).questionToken, tokenVisitor, isToken), visitNode((node).type, visitor, isTypeNode), visitNode((node).initializer, visitor, isExpression)); diff --git a/tests/cases/fourslash/codeFixClassImplementInterfaceOptionalProperty.ts b/tests/cases/fourslash/codeFixClassImplementInterfaceOptionalProperty.ts new file mode 100644 index 00000000000..96d8defbcc7 --- /dev/null +++ b/tests/cases/fourslash/codeFixClassImplementInterfaceOptionalProperty.ts @@ -0,0 +1,13 @@ +/// + +//// interface IPerson { +//// name: string; +//// birthday?: string; +//// } +//// +//// class Person implements IPerson {[| |]} + +verify.rangeAfterCodeFix(` + name: string; + birthday?: string; +`); \ No newline at end of file From 39b7965c0d03f5cdc104f20ded5b8db7d4c4c52f Mon Sep 17 00:00:00 2001 From: Arthur Ozga Date: Wed, 28 Jun 2017 13:41:52 -0700 Subject: [PATCH 2/2] respond to comment --- src/compiler/factory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index a5265db9d38..e994d78ed9e 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -321,7 +321,7 @@ namespace ts { || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer - ? updateNode(createProperty(decorators, modifiers, name, node.questionToken, type, initializer), node) + ? updateNode(createProperty(decorators, modifiers, name, questionToken, type, initializer), node) : node; }