@@ -3734,11 +3734,20 @@ namespace ts {
3734
3734
3735
3735
/** Get `C` given `N` if `N` is in the position `class C extends N` where `N` is an ExpressionWithTypeArguments. */
3736
3736
export function tryGetClassExtendingExpressionWithTypeArguments ( node : Node ) : ClassLikeDeclaration | undefined {
3737
- if ( isExpressionWithTypeArguments ( node ) &&
3738
- node . parent . token === SyntaxKind . ExtendsKeyword &&
3739
- isClassLike ( node . parent . parent ) ) {
3740
- return node . parent . parent ;
3741
- }
3737
+ const cls = tryGetClassImplementingOrExtendingExpressionWithTypeArguments ( node ) ;
3738
+ return cls && ! cls . isImplements ? cls . class : undefined ;
3739
+ }
3740
+
3741
+ export interface ClassImplementingOrExtendingExpressionWithTypeArguments {
3742
+ readonly class : ClassLikeDeclaration ;
3743
+ readonly isImplements : boolean ;
3744
+ }
3745
+ export function tryGetClassImplementingOrExtendingExpressionWithTypeArguments ( node : Node ) : ClassImplementingOrExtendingExpressionWithTypeArguments | undefined {
3746
+ return isExpressionWithTypeArguments ( node )
3747
+ && isHeritageClause ( node . parent )
3748
+ && isClassLike ( node . parent . parent )
3749
+ ? { class : node . parent . parent , isImplements : node . parent . token === SyntaxKind . ImplementsKeyword }
3750
+ : undefined ;
3742
3751
}
3743
3752
3744
3753
export function isAssignmentExpression ( node : Node , excludeCompoundAssignment : true ) : node is AssignmentExpression < EqualsToken > ;
@@ -3765,15 +3774,6 @@ namespace ts {
3765
3774
return tryGetClassExtendingExpressionWithTypeArguments ( node ) !== undefined ;
3766
3775
}
3767
3776
3768
- export function isExpressionWithTypeArgumentsInClassImplementsClause ( node : Node ) : node is ExpressionWithTypeArguments {
3769
- return node . kind === SyntaxKind . ExpressionWithTypeArguments
3770
- && isEntityNameExpression ( ( node as ExpressionWithTypeArguments ) . expression )
3771
- && node . parent
3772
- && ( < HeritageClause > node . parent ) . token === SyntaxKind . ImplementsKeyword
3773
- && node . parent . parent
3774
- && isClassLike ( node . parent . parent ) ;
3775
- }
3776
-
3777
3777
export function isEntityNameExpression ( node : Node ) : node is EntityNameExpression {
3778
3778
return node . kind === SyntaxKind . Identifier || isPropertyAccessEntityNameExpression ( node ) ;
3779
3779
}
0 commit comments