Skip to content

Commit 631ff27

Browse files
committed
JS: Use ValueNode for all ImportSpecifiers
1 parent 61e1d79 commit 631ff27

File tree

4 files changed

+31
-20
lines changed

4 files changed

+31
-20
lines changed

javascript/ql/src/semmle/javascript/ES2015Modules.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class ImportDeclaration extends Stmt, Import, @importdeclaration {
6565
// `import * as http from 'http'` or `import http from `http`'
6666
exists(ImportSpecifier is |
6767
is = getASpecifier() and
68-
result = DataFlow::ssaDefinitionNode(SSA::definition(is))
68+
result = DataFlow::valueNode(is)
6969
|
7070
is instanceof ImportNamespaceSpecifier and
7171
count(getASpecifier()) = 1

javascript/ql/src/semmle/javascript/dataflow/Sources.qll

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,9 @@ module SourceNode {
235235
astNode instanceof FunctionSentExpr or
236236
astNode instanceof FunctionBindExpr or
237237
astNode instanceof DynamicImportExpr or
238-
astNode instanceof NamedImportSpecifier
238+
astNode instanceof ImportSpecifier
239239
)
240240
or
241-
this = DataFlow::ssaDefinitionNode(SSA::definition(any(ImportNamespaceSpecifier imp)))
242-
or
243-
this = DataFlow::ssaDefinitionNode(SSA::definition(any(ImportDefaultSpecifier imp)))
244-
or
245241
DataFlow::parameterNode(this, _)
246242
or
247243
this instanceof DataFlow::Impl::InvokeNodeDef

javascript/ql/test/library-tests/ModuleImportNodes/TSGlobalImport.expected

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
| client2_lazy.ts:4:28:4:29 | F2 | framework2 |
77
| declare-module-client2.ts:3:1:3:22 | import ... 'foo'; | foo |
88
| declare-module-client.ts:3:1:3:22 | import ... 'foo'; | foo |
9+
| decls.ts:2:8:2:20 | * as F1_outer | framework1 |
10+
| decls.ts:3:8:3:20 | * as F2_outer | framework2 |
11+
| decls.ts:4:8:4:21 | * as net_outer | net |
912
| destructuringES6.js:1:1:1:41 | import ... ctron'; | electron |
1013
| destructuringRequire.js:1:27:1:45 | require('electron') | electron |
1114
| instanceThroughDefaultImport.js:1:1:1:82 | import ... tance'; | myDefaultImportedModuleInstance |
12-
| instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName | myDefaultImportedModuleInstance |
13-
| instanceThroughNamespaceImport.js:1:8:1:49 | myNamespaceImportedModuleInstanceName | myNamespaceImportedModuleInstance |
15+
| instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName | myDefaultImportedModuleInstance |
16+
| instanceThroughNamespaceImport.js:1:8:1:49 | * as my ... nceName | myNamespaceImportedModuleInstance |
1417
| instanceThroughRequire.js:1:36:1:70 | require ... tance') | myRequiredModuleInstance |
1518
| moduleUses.js:1:11:1:24 | require('mod') | mod |
1619
| process2.js:1:1:1:13 | require('fs') | fs |

javascript/ql/test/library-tests/ModuleImportNodes/tests.expected

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ test_ModuleImportNode
55
| client1.ts:6:9:6:11 | net | net | client1.ts:6:9:6:11 | net | net |
66
| client2.ts:4:28:4:29 | F2 | framework2 | client2.ts:4:28:4:29 | F2 | F2 |
77
| client2_lazy.ts:4:28:4:29 | F2 | framework2 | client2_lazy.ts:4:28:4:29 | F2 | F2 |
8-
| instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName | myDefaultImportedModuleInstance | instanceThroughDefaultImport.js:2:1:2:35 | myDefau ... nceName | myDefaultImportedModuleInstanceName |
9-
| instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName | myDefaultImportedModuleInstance | instanceThroughDefaultImport.js:4:5:4:39 | myDefau ... nceName | myDefaultImportedModuleInstanceName |
10-
| instanceThroughNamespaceImport.js:1:8:1:49 | myNamespaceImportedModuleInstanceName | myNamespaceImportedModuleInstance | instanceThroughNamespaceImport.js:2:1:2:37 | myNames ... nceName | myNamespaceImportedModuleInstanceName |
11-
| instanceThroughNamespaceImport.js:1:8:1:49 | myNamespaceImportedModuleInstanceName | myNamespaceImportedModuleInstance | instanceThroughNamespaceImport.js:4:5:4:41 | myNames ... nceName | myNamespaceImportedModuleInstanceName |
8+
| instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName | myDefaultImportedModuleInstance | instanceThroughDefaultImport.js:2:1:2:35 | myDefau ... nceName | myDefaultImportedModuleInstanceName |
9+
| instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName | myDefaultImportedModuleInstance | instanceThroughDefaultImport.js:4:5:4:39 | myDefau ... nceName | myDefaultImportedModuleInstanceName |
10+
| instanceThroughNamespaceImport.js:1:8:1:49 | * as my ... nceName | myNamespaceImportedModuleInstance | instanceThroughNamespaceImport.js:2:1:2:37 | myNames ... nceName | myNamespaceImportedModuleInstanceName |
11+
| instanceThroughNamespaceImport.js:1:8:1:49 | * as my ... nceName | myNamespaceImportedModuleInstance | instanceThroughNamespaceImport.js:4:5:4:41 | myNames ... nceName | myNamespaceImportedModuleInstanceName |
1212
| instanceThroughRequire.js:1:36:1:70 | require ... tance') | myRequiredModuleInstance | instanceThroughRequire.js:2:1:2:28 | myRequi ... nceName | myRequiredModuleInstanceName |
1313
| instanceThroughRequire.js:1:36:1:70 | require ... tance') | myRequiredModuleInstance | instanceThroughRequire.js:4:5:4:32 | myRequi ... nceName | myRequiredModuleInstanceName |
1414
| moduleUses.js:1:11:1:24 | require('mod') | mod | moduleUses.js:3:1:3:3 | mod | mod |
@@ -31,22 +31,27 @@ test_moduleImport
3131
| foo | declare-module-client2.ts:3:1:3:22 | import ... 'foo'; |
3232
| foo | declare-module-client.ts:3:1:3:22 | import ... 'foo'; |
3333
| framework1 | client1.ts:4:28:4:29 | F1 |
34+
| framework1 | decls.ts:2:8:2:20 | * as F1_outer |
3435
| framework2 | client2.ts:4:28:4:29 | F2 |
3536
| framework2 | client2_lazy.ts:4:28:4:29 | F2 |
37+
| framework2 | decls.ts:3:8:3:20 | * as F2_outer |
3638
| fs | amd1.js:1:25:1:26 | fs |
3739
| fs | amd2.js:2:12:2:24 | require('fs') |
3840
| fs | process2.js:1:1:1:13 | require('fs') |
3941
| mod | moduleUses.js:1:11:1:24 | require('mod') |
4042
| myDefaultImportedModuleInstance | instanceThroughDefaultImport.js:1:1:1:82 | import ... tance'; |
41-
| myDefaultImportedModuleInstance | instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName |
42-
| myNamespaceImportedModuleInstance | instanceThroughNamespaceImport.js:1:8:1:49 | myNamespaceImportedModuleInstanceName |
43+
| myDefaultImportedModuleInstance | instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName |
44+
| myNamespaceImportedModuleInstance | instanceThroughNamespaceImport.js:1:8:1:49 | * as my ... nceName |
4345
| myRequiredModuleInstance | instanceThroughRequire.js:1:36:1:70 | require ... tance') |
4446
| net | client1.ts:6:9:6:11 | net |
47+
| net | decls.ts:4:8:4:21 | * as net_outer |
4548
| process | process2.js:2:10:2:16 | process |
4649
| process | process.js:1:10:1:27 | require('process') |
4750
test_moduleMember
4851
| electron | BrowserWindow | destructuringES6.js:1:10:1:22 | BrowserWindow |
4952
| electron | BrowserWindow | destructuringRequire.js:1:9:1:21 | BrowserWindow |
53+
| foo | C | declare-module-client2.ts:3:9:3:9 | C |
54+
| foo | C | declare-module-client.ts:3:9:3:9 | C |
5055
| framework1 | Component | client1.ts:4:28:4:39 | F1.Component |
5156
| framework2 | Component | client2.ts:4:28:4:39 | F2.Component |
5257
| framework2 | Component | client2_lazy.ts:4:28:4:39 | F2.Component |
@@ -56,7 +61,7 @@ test_moduleMember
5661
| mod | moduleField | moduleUses.js:11:1:11:15 | mod.moduleField |
5762
| mod | moduleFunction | moduleUses.js:5:9:5:26 | mod.moduleFunction |
5863
| mod | moduleMethod | moduleUses.js:3:1:3:16 | mod.moduleMethod |
59-
| myDefaultImportedModuleInstance | default | instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName |
64+
| myDefaultImportedModuleInstance | default | instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName |
6065
| net | createServer | client1.ts:6:9:6:24 | net.createServer |
6166
test_ModuleImportNode_getPath
6267
| amd1.js:1:25:1:26 | fs | fs |
@@ -67,11 +72,14 @@ test_ModuleImportNode_getPath
6772
| client2_lazy.ts:4:28:4:29 | F2 | framework2 |
6873
| declare-module-client2.ts:3:1:3:22 | import ... 'foo'; | foo |
6974
| declare-module-client.ts:3:1:3:22 | import ... 'foo'; | foo |
75+
| decls.ts:2:8:2:20 | * as F1_outer | framework1 |
76+
| decls.ts:3:8:3:20 | * as F2_outer | framework2 |
77+
| decls.ts:4:8:4:21 | * as net_outer | net |
7078
| destructuringES6.js:1:1:1:41 | import ... ctron'; | electron |
7179
| destructuringRequire.js:1:27:1:45 | require('electron') | electron |
7280
| instanceThroughDefaultImport.js:1:1:1:82 | import ... tance'; | myDefaultImportedModuleInstance |
73-
| instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName | myDefaultImportedModuleInstance |
74-
| instanceThroughNamespaceImport.js:1:8:1:49 | myNamespaceImportedModuleInstanceName | myNamespaceImportedModuleInstance |
81+
| instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName | myDefaultImportedModuleInstance |
82+
| instanceThroughNamespaceImport.js:1:8:1:49 | * as my ... nceName | myNamespaceImportedModuleInstance |
7583
| instanceThroughRequire.js:1:36:1:70 | require ... tance') | myRequiredModuleInstance |
7684
| moduleUses.js:1:11:1:24 | require('mod') | mod |
7785
| process2.js:1:1:1:13 | require('fs') | fs |
@@ -97,6 +105,8 @@ test_ModuleImportNode_getAMemberInvocation
97105
test_moduleImportProp
98106
| electron | BrowserWindow | destructuringES6.js:1:10:1:22 | BrowserWindow |
99107
| electron | BrowserWindow | destructuringRequire.js:1:9:1:21 | BrowserWindow |
108+
| foo | C | declare-module-client2.ts:3:9:3:9 | C |
109+
| foo | C | declare-module-client.ts:3:9:3:9 | C |
100110
| framework1 | Component | client1.ts:4:28:4:39 | F1.Component |
101111
| framework2 | Component | client2.ts:4:28:4:39 | F2.Component |
102112
| framework2 | Component | client2_lazy.ts:4:28:4:39 | F2.Component |
@@ -106,7 +116,7 @@ test_moduleImportProp
106116
| mod | moduleField | moduleUses.js:11:1:11:15 | mod.moduleField |
107117
| mod | moduleFunction | moduleUses.js:5:9:5:26 | mod.moduleFunction |
108118
| mod | moduleMethod | moduleUses.js:3:1:3:16 | mod.moduleMethod |
109-
| myDefaultImportedModuleInstance | default | instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName |
119+
| myDefaultImportedModuleInstance | default | instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName |
110120
| net | createServer | client1.ts:6:9:6:24 | net.createServer |
111121
test_ModuleImportNode_getAMemberCall
112122
| amd1.js:1:25:1:26 | fs | amd1.js:2:3:2:29 | fs.read ... a.txt") |
@@ -121,10 +131,12 @@ test_ModuleImportNode_getAPropertyRead
121131
| client1.ts:6:9:6:11 | net | client1.ts:6:9:6:24 | net.createServer |
122132
| client2.ts:4:28:4:29 | F2 | client2.ts:4:28:4:39 | F2.Component |
123133
| client2_lazy.ts:4:28:4:29 | F2 | client2_lazy.ts:4:28:4:39 | F2.Component |
134+
| declare-module-client2.ts:3:1:3:22 | import ... 'foo'; | declare-module-client2.ts:3:9:3:9 | C |
135+
| declare-module-client.ts:3:1:3:22 | import ... 'foo'; | declare-module-client.ts:3:9:3:9 | C |
124136
| destructuringES6.js:1:1:1:41 | import ... ctron'; | destructuringES6.js:1:10:1:22 | BrowserWindow |
125137
| destructuringRequire.js:1:27:1:45 | require('electron') | destructuringRequire.js:1:9:1:21 | BrowserWindow |
126-
| instanceThroughDefaultImport.js:1:1:1:82 | import ... tance'; | instanceThroughDefaultImport.js:1:8:1:42 | myDefaultImportedModuleInstanceName |
138+
| instanceThroughDefaultImport.js:1:1:1:82 | import ... tance'; | instanceThroughDefaultImport.js:1:8:1:42 | myDefau ... nceName |
127139
| moduleUses.js:1:11:1:24 | require('mod') | moduleUses.js:3:1:3:16 | mod.moduleMethod |
128140
| moduleUses.js:1:11:1:24 | require('mod') | moduleUses.js:5:9:5:26 | mod.moduleFunction |
129141
| moduleUses.js:1:11:1:24 | require('mod') | moduleUses.js:8:9:8:31 | mod.con ... unction |
130-
| moduleUses.js:1:11:1:24 | require('mod') | moduleUses.js:11:1:11:15 | mod.moduleField |
142+
| moduleUses.js:1:11:1:24 | require('mod') | moduleUses.js:11:1:11:15 | mod.moduleField |

0 commit comments

Comments
 (0)