@@ -3,87 +3,78 @@ const schema = [];
3
3
const create = ( context ) => {
4
4
let globalScope ;
5
5
6
- // do nearly the same thing that eslint does for config globals
7
- // https://github.com/eslint/eslint/blob/v2.0.0/lib/eslint.js#L118-L194
8
- const makeDefined = ( ident ) => {
9
- let ii ;
10
-
11
- // start from the right since we're going to remove items from the array
12
- for ( ii = globalScope . through . length - 1 ; ii >= 0 ; ii -- ) {
13
- const ref = globalScope . through [ ii ] ;
14
-
15
- if ( ref . identifier . name === ident . name ) {
16
- // use "__defineGeneric" since we don't have a reference to "escope.Variable"
17
-
18
- globalScope . __defineGeneric (
19
- ident . name ,
20
- globalScope . set ,
21
- globalScope . variables ,
22
- ) ;
23
- const variable = globalScope . set . get ( ident . name ) ;
24
-
25
- variable . writeable = false ;
26
-
27
- // "through" contains all references whose definition cannot be found
28
- // so we need to update references and remove the ones that were added
29
- globalScope . through . splice ( ii , 1 ) ;
30
- ref . resolved = variable ;
31
- variable . references . push ( ref ) ;
6
+ const makeDefined = ( variableName ) => {
7
+ // Add the variable to the global scope
8
+ globalScope . through = globalScope . through . filter ( ( ref ) => {
9
+ if ( ref . identifier . name === variableName ) {
10
+ globalScope . variables . push ( {
11
+ name : variableName ,
12
+ identifiers : [ ref . identifier ] ,
13
+ references : [ ref ] ,
14
+ defs : [ ] ,
15
+ } ) ;
16
+ return false ;
32
17
}
33
- }
18
+ return true ;
19
+ } ) ;
34
20
} ;
35
21
36
22
// NOTE: For future contributors, if you ever need to add support for a new identifier,
37
23
// use `Identifier(node) {}` to find out which identifiers should be handled.
38
24
return {
39
25
ClassImplements ( node ) {
40
- makeDefined ( node . id ) ;
26
+ makeDefined ( node . id . name ) ;
41
27
} ,
42
28
DeclareInterface ( node ) {
43
- makeDefined ( node . id ) ;
29
+ makeDefined ( node . id . name ) ;
44
30
} ,
45
31
DeclareTypeAlias ( node ) {
46
- makeDefined ( node . id ) ;
32
+ makeDefined ( node . id . name ) ;
47
33
} ,
48
34
EnumDeclaration ( node ) {
49
- makeDefined ( node . id ) ;
35
+ makeDefined ( node . id . name ) ;
50
36
} ,
51
37
EnumDefaultedMember ( node ) {
52
- makeDefined ( node . id ) ;
38
+ makeDefined ( node . id . name ) ;
53
39
} ,
54
40
EnumNumberMember ( node ) {
55
- makeDefined ( node . id ) ;
41
+ makeDefined ( node . id . name ) ;
56
42
} ,
57
43
EnumStringMember ( node ) {
58
- makeDefined ( node . id ) ;
44
+ makeDefined ( node . id . name ) ;
59
45
} ,
60
46
GenericTypeAnnotation ( node ) {
61
47
if ( node . id . type === 'Identifier' ) {
62
- makeDefined ( node . id ) ;
48
+ makeDefined ( node . id . name ) ;
63
49
} else if ( node . id . type === 'QualifiedTypeIdentifier' ) {
64
50
let qid ;
65
51
66
52
qid = node . id ;
67
- do {
53
+ while ( qid . qualification ) {
68
54
qid = qid . qualification ;
69
- } while ( qid . qualification ) ;
55
+ }
70
56
71
- makeDefined ( qid ) ;
57
+ makeDefined ( qid . name ) ;
72
58
}
73
59
} ,
74
60
75
61
// Can be removed once https://github.com/babel/babel-eslint/pull/696 is published
76
62
OpaqueType ( node ) {
77
63
if ( node . id . type === 'Identifier' ) {
78
- makeDefined ( node . id ) ;
64
+ makeDefined ( node . id . name ) ;
79
65
}
80
66
} ,
81
- Program ( ) {
82
- globalScope = context . getScope ( ) ;
67
+ Program ( node ) {
68
+ const newGetScope = context . sourceCode . getScope ;
69
+ if ( newGetScope ) {
70
+ globalScope = context . sourceCode . getScope ( node ) ;
71
+ } else {
72
+ globalScope = context . getScope ( ) ;
73
+ }
83
74
} ,
84
75
TypeParameterDeclaration ( node ) {
85
76
for ( const param of node . params ) {
86
- makeDefined ( param ) ;
77
+ makeDefined ( param . name ) ;
87
78
}
88
79
} ,
89
80
} ;
0 commit comments