1
1
import { queries } from "./queries" ;
2
+ import { getScope } from './context' ;
2
3
3
4
/**
4
5
* Gets the inner relevant node (CallExpression, Identity, et al.) given a generic expression node
5
6
* await someAsyncFunc() => someAsyncFunc()
6
7
* someElement as HTMLDivElement => someElement
7
8
*
8
9
* @param {Object } context - Context for a rule
10
+ * @param {Object } node - Node for a rule
9
11
* @param {Object } expression - An expression node
10
12
* @returns {Object } - A node
11
13
*/
12
- export function getInnerNodeFrom ( context , expression ) {
14
+ export function getInnerNodeFrom ( context , node , expression ) {
13
15
switch ( expression . type ) {
14
16
case "Identifier" :
15
- return getAssignmentForIdentifier ( context , expression . name ) ;
17
+ return getAssignmentForIdentifier ( context , node , expression . name ) ;
16
18
case "TSAsExpression" :
17
- return getInnerNodeFrom ( context , expression . expression ) ;
19
+ return getInnerNodeFrom ( context , node , expression . expression ) ;
18
20
case "AwaitExpression" :
19
- return getInnerNodeFrom ( context , expression . argument ) ;
21
+ return getInnerNodeFrom ( context , node , expression . argument ) ;
20
22
case "MemberExpression" :
21
- return getInnerNodeFrom ( context , expression . object ) ;
23
+ return getInnerNodeFrom ( context , node , expression . object ) ;
22
24
default :
23
25
return expression ;
24
26
}
@@ -28,19 +30,20 @@ export function getInnerNodeFrom(context, expression) {
28
30
* Get the node corresponding to the latest assignment to a variable named `identifierName`
29
31
*
30
32
* @param {Object } context - Context for a rule
33
+ * @param {Object } node - Node for a rule
31
34
* @param {String } identifierName - Name of an identifier
32
35
* @returns {Object } - A node, possibly undefined
33
36
*/
34
- export function getAssignmentForIdentifier ( context , identifierName ) {
35
- const variable = context . getScope ( ) . set . get ( identifierName ) ;
37
+ export function getAssignmentForIdentifier ( context , node , identifierName ) {
38
+ const variable = getScope ( context , node ) . set . get ( identifierName ) ;
36
39
37
40
if ( ! variable ) return ;
38
41
const init = variable . defs [ 0 ] . node . init ;
39
42
40
43
let assignmentNode ;
41
44
if ( init ) {
42
45
// let foo = bar;
43
- assignmentNode = getInnerNodeFrom ( context , init ) ;
46
+ assignmentNode = getInnerNodeFrom ( context , node , init ) ;
44
47
} else {
45
48
// let foo;
46
49
// foo = bar;
@@ -50,7 +53,7 @@ export function getAssignmentForIdentifier(context, identifierName) {
50
53
if ( ! assignmentRef ) {
51
54
return ;
52
55
}
53
- assignmentNode = getInnerNodeFrom ( context , assignmentRef . writeExpr ) ;
56
+ assignmentNode = getInnerNodeFrom ( context , node , assignmentRef . writeExpr ) ;
54
57
}
55
58
return assignmentNode ;
56
59
}
@@ -64,7 +67,7 @@ export function getAssignmentForIdentifier(context, identifierName) {
64
67
* @returns {Object } - Object with query, queryArg & isDTLQuery
65
68
*/
66
69
export function getQueryNodeFrom ( context , nodeWithValueProp ) {
67
- const queryNode = getInnerNodeFrom ( context , nodeWithValueProp ) ;
70
+ const queryNode = getInnerNodeFrom ( context , nodeWithValueProp , nodeWithValueProp ) ;
68
71
69
72
if ( ! queryNode || ! queryNode . callee ) {
70
73
return {
0 commit comments