From 6400d53394def163795e77bf35ea0ce87d2db53d Mon Sep 17 00:00:00 2001 From: Arthur Ozga Date: Mon, 14 Nov 2016 15:43:24 -0800 Subject: [PATCH] Fix handling of default class --- src/compiler/utilities.ts | 2 +- .../codefixes/fixClassIncorrectlyImplementsInterface.ts | 5 +++-- .../cases/fourslash/codeFixUnImplementedDefaultClass.ts | 9 +++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/codeFixUnImplementedDefaultClass.ts diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 299f91be662..eafac479807 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1801,7 +1801,7 @@ namespace ts { } } - export function getAncestor(node: Node, kind: SyntaxKind): Node { + export function getAncestor(node: Node | undefined, kind: SyntaxKind): Node { while (node) { if (node.kind === kind) { return node; diff --git a/src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts b/src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts index 9bcf491ac5b..f8da7ae2218 100644 --- a/src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts +++ b/src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts @@ -8,10 +8,11 @@ namespace ts.codefix { const token = getTokenAtPosition(sourceFile, start); const checker = context.program.getTypeChecker(); - if (!(token.kind === SyntaxKind.Identifier && isClassLike(token.parent))) { + const classDecl = getAncestor(token, SyntaxKind.ClassDeclaration) as ClassDeclaration; + if (!(classDecl && isClassLike(classDecl))) { return undefined; } - const classDecl = token.parent; + const startPos: number = classDecl.members.pos; const implementedTypeNodes = getClassImplementsHeritageClauseElements(classDecl); diff --git a/tests/cases/fourslash/codeFixUnImplementedDefaultClass.ts b/tests/cases/fourslash/codeFixUnImplementedDefaultClass.ts new file mode 100644 index 00000000000..9f507c3dc60 --- /dev/null +++ b/tests/cases/fourslash/codeFixUnImplementedDefaultClass.ts @@ -0,0 +1,9 @@ +/// + +//// interface I { x: number; } +//// +//// export default class implements I {[| |]} + +verify.rangeAfterCodeFix(` +x: number; +`); \ No newline at end of file