@@ -3,27 +3,11 @@ import type {
3
3
TSESTree ,
4
4
} from '@typescript-eslint/utils' ;
5
5
import { AST_NODE_TYPES } from '@typescript-eslint/utils' ;
6
- import type ts from 'typescript' ;
7
-
8
- export function getSymbol (
9
- node : TSESTree . Identifier ,
10
- services : ParserServicesWithTypeInformation ,
11
- ) : ts . Signature | ts . Symbol | undefined {
12
- if (
13
- node . parent ?. type === AST_NODE_TYPES . AssignmentPattern ||
14
- node . parent ?. type === AST_NODE_TYPES . Property
15
- ) {
16
- return services
17
- . getTypeAtLocation ( node . parent . parent )
18
- . getProperty ( node . name ) ;
19
- }
20
-
21
- return services . getSymbolAtLocation ( node ) ;
22
- }
6
+ import ts from 'typescript' ;
7
+ import * as tsutils from 'ts-api-utils' ;
23
8
24
9
export type CallLikeNode =
25
10
| TSESTree . CallExpression
26
- | TSESTree . JSXOpeningElement
27
11
| TSESTree . NewExpression
28
12
| TSESTree . TaggedTemplateExpression ;
29
13
@@ -40,6 +24,23 @@ export function getCallLikeNode(node: TSESTree.Node): CallLikeNode | undefined {
40
24
return isNodeCalleeOfParent ( callee ) ? callee : undefined ;
41
25
}
42
26
27
+ export function getSymbol (
28
+ node : TSESTree . Identifier ,
29
+ services : ParserServicesWithTypeInformation ,
30
+ checker : ts . TypeChecker ,
31
+ ) : ts . Symbol | undefined {
32
+ const callLikeNode = getCallLikeNode ( node ) ;
33
+ if ( callLikeNode ) {
34
+ return getCallLikeNodeSymbol ( callLikeNode , services , checker ) ;
35
+ } else if ( node . parent . type === AST_NODE_TYPES . Property ) {
36
+ return services
37
+ . getTypeAtLocation ( node . parent . parent )
38
+ . getProperty ( node . name ) ;
39
+ } else {
40
+ return services . getSymbolAtLocation ( node ) ;
41
+ }
42
+ }
43
+
43
44
export function isNodeCalleeOfParent (
44
45
node : TSESTree . Node ,
45
46
) : node is CallLikeNode {
@@ -51,9 +52,6 @@ export function isNodeCalleeOfParent(
51
52
case AST_NODE_TYPES . TaggedTemplateExpression :
52
53
return node . parent . tag === node ;
53
54
54
- case AST_NODE_TYPES . JSXOpeningElement :
55
- return node . parent . name === node ;
56
-
57
55
default :
58
56
return false ;
59
57
}
@@ -66,24 +64,22 @@ export function hasJsDocTag(
66
64
return ! ! symbol ?. getJsDocTags ( ) . find ( ( tag ) => tag . name === tagName ) ;
67
65
}
68
66
69
- export function getCallLikeNodeSignature (
70
- callLikeNode : CallLikeNode ,
67
+ export function getCallLikeNodeSymbol (
68
+ node : CallLikeNode ,
71
69
services : ParserServicesWithTypeInformation ,
72
70
checker : ts . TypeChecker ,
73
- ) : ts . Signature | undefined {
74
- const tsNode = services . esTreeNodeToTSNodeMap . get ( callLikeNode . parent ) ;
75
-
76
- return checker . getResolvedSignature ( tsNode as ts . CallLikeExpression ) ;
71
+ ) : ts . Symbol | undefined {
72
+ const symbol = services . getSymbolAtLocation ( node ) ;
73
+ return symbol !== undefined &&
74
+ tsutils . isSymbolFlagSet ( symbol , ts . SymbolFlags . Alias )
75
+ ? checker . getAliasedSymbol ( symbol )
76
+ : symbol ;
77
77
}
78
78
79
79
export function isDeclaration ( node : TSESTree . Identifier ) : boolean {
80
80
const { parent } = node ;
81
81
82
82
switch ( parent . type ) {
83
- case AST_NODE_TYPES . ArrayPattern :
84
- return parent . elements . includes ( node as TSESTree . Identifier ) ;
85
-
86
- case AST_NODE_TYPES . ClassExpression :
87
83
case AST_NODE_TYPES . ClassDeclaration :
88
84
case AST_NODE_TYPES . VariableDeclarator :
89
85
case AST_NODE_TYPES . TSEnumMember :
@@ -100,15 +96,8 @@ export function isDeclaration(node: TSESTree.Identifier): boolean {
100
96
) ;
101
97
102
98
case AST_NODE_TYPES . AssignmentPattern :
103
- return (
104
- parent . left === node &&
105
- ! (
106
- parent . parent . type === AST_NODE_TYPES . Property &&
107
- parent . parent . shorthand
108
- )
109
- ) ;
99
+ return parent . left === node ;
110
100
111
- case AST_NODE_TYPES . ArrowFunctionExpression :
112
101
case AST_NODE_TYPES . FunctionDeclaration :
113
102
case AST_NODE_TYPES . FunctionExpression :
114
103
case AST_NODE_TYPES . TSDeclareFunction :
0 commit comments