Skip to content

Commit d7d4bf6

Browse files
committed
Handle class expressions
1 parent 395d736 commit d7d4bf6

4 files changed

Lines changed: 18 additions & 8 deletions

File tree

src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace ts.codefix {
88
const token = getTokenAtPosition(sourceFile, start);
99
const checker = context.program.getTypeChecker();
1010

11-
const classDecl = getAncestor(token, SyntaxKind.ClassDeclaration) as ClassDeclaration;
12-
if (!(classDecl && isClassLike(classDecl))) {
11+
const classDecl = getContainingClass(token);
12+
if (!classDecl) {
1313
return undefined;
1414
}
1515

src/services/codefixes/fixExtendsInterfaceBecomesImplements.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ namespace ts.codefix {
66
const sourceFile = context.sourceFile;
77
const start = context.span.start;
88
const token = getTokenAtPosition(sourceFile, start);
9-
const classDeclNode = getAncestor(token, SyntaxKind.ClassDeclaration) as ClassDeclaration;
10-
if (!(token.kind === SyntaxKind.Identifier && classDeclNode && classDeclNode.kind === SyntaxKind.ClassDeclaration)) {
9+
const classDeclNode = getContainingClass(token);
10+
if (!(token.kind === SyntaxKind.Identifier && isClassLike(classDeclNode))) {
1111
return undefined;
1212
}
1313

src/services/utilities.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,7 +1359,7 @@ namespace ts {
13591359
};
13601360
}
13611361

1362-
export function getMissingAbstractMembersInsertion(classDeclaration: ClassDeclaration, resolvedType: ResolvedType, checker: TypeChecker, newlineChar: string): string {
1362+
export function getMissingAbstractMembersInsertion(classDeclaration: ClassLikeDeclaration, resolvedType: ResolvedType, checker: TypeChecker, newlineChar: string): string {
13631363
const missingMembers = filterMissingMembers(filterAbstract(filterNonPrivate(resolvedType.members)), classDeclaration.symbol.members);
13641364
return getInsertionsForMembers(missingMembers, classDeclaration, checker, newlineChar);
13651365
}
@@ -1368,7 +1368,7 @@ namespace ts {
13681368
* Finds members of the resolved type that are missing in the class pointed to by class decl
13691369
* and generates source code for the missing members.
13701370
*/
1371-
export function getMissingMembersInsertion(classDeclaration: ClassDeclaration, resolvedType: ResolvedType, checker: TypeChecker, newlineChar: string): string {
1371+
export function getMissingMembersInsertion(classDeclaration: ClassLikeDeclaration, resolvedType: ResolvedType, checker: TypeChecker, newlineChar: string): string {
13721372
const missingMembers = filterMissingMembers(filterNonPrivate(resolvedType.members), classDeclaration.symbol.members);
13731373
return getInsertionsForMembers(missingMembers, classDeclaration, checker, newlineChar);
13741374
}
@@ -1406,7 +1406,7 @@ namespace ts {
14061406
return filterSymbolMapByDeclaration(symbolMap, decl => !(getModifierFlags(decl) & ModifierFlags.Private));
14071407
}
14081408

1409-
function getInsertionsForMembers(symbolMap: MapLike<Symbol>, enclosingDeclaration: ClassDeclaration, checker: TypeChecker, newlineChar: string): string {
1409+
function getInsertionsForMembers(symbolMap: MapLike<Symbol>, enclosingDeclaration: ClassLikeDeclaration, checker: TypeChecker, newlineChar: string): string {
14101410
let insertion = "";
14111411

14121412
for (const symbolName in symbolMap) {
@@ -1415,7 +1415,7 @@ namespace ts {
14151415
return insertion;
14161416
}
14171417

1418-
function getInsertionForMemberSymbol(symbol: Symbol, enclosingDeclaration: ClassDeclaration, checker: TypeChecker, newlineChar: string): string {
1418+
function getInsertionForMemberSymbol(symbol: Symbol, enclosingDeclaration: ClassLikeDeclaration, checker: TypeChecker, newlineChar: string): string {
14191419
const name = symbol.getName();
14201420
const type = checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration);
14211421
const declarations = symbol.getDeclarations();
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
4+
//// interface I { x: number; }
5+
////
6+
//// new class implements I {[| |]};
7+
8+
verify.rangeAfterCodeFix(`
9+
x: number;
10+
`);

0 commit comments

Comments
 (0)