Skip to content

Commit 0d6795b

Browse files
committed
JS: Add test and support for providesModule
1 parent 0997da0 commit 0d6795b

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

javascript/ql/lib/semmle/javascript/internal/paths/PathExprResolver.qll

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,15 @@ module ResolveExpr<exprSig/1 shouldResolveExpr> {
175175
)
176176
}
177177

178+
pragma[nomagic]
179+
private Container getJSDocProvidedModule(string moduleName) {
180+
exists(JSDocTag tag |
181+
tag.getTitle() = "providesModule" and
182+
tag.getDescription().trim() = moduleName and
183+
tag.getFile() = result
184+
)
185+
}
186+
178187
/**
179188
* Holds if `expr` should be resolved as `path` relative to `base`.
180189
*/
@@ -200,6 +209,9 @@ module ResolveExpr<exprSig/1 shouldResolveExpr> {
200209
path = expr.getValue().suffix(packageName.length()).regexpReplaceAll("^[/\\\\]", "") and
201210
base = pkg.getFolder()
202211
)
212+
or
213+
base = getJSDocProvidedModule(expr.getValue()) and
214+
path = ""
203215
}
204216

205217
private module ResolverConfig implements Folder::ResolveSig {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* @providesModule jsdoc-provided-module/foo/bar/baz
3+
*/
4+
5+
export const x = 1;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import 'jsdoc-provided-module/foo/bar/baz'; // $ importTarget=JSDocProvide/lib.js

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
| Extended/src/main.ts:24:1:24:17 | import "@/index"; | Extended/lib/index.ts |
6868
| Extended/src/main.ts:25:1:25:20 | import "@/index.ts"; | Extended/lib/index.ts |
6969
| Extended/src/main.ts:26:1:26:20 | import "@/index.js"; | Extended/lib/index.ts |
70+
| JSDocProvide/main.js:1:1:1:43 | import ... r/baz'; | JSDocProvide/lib.js |
7071
| NoBaseUrl/src/main.ts:2:1:2:21 | import ... /file"; | NoBaseUrl/lib/file.ts |
7172
| NoBaseUrl/src/main.ts:3:1:3:24 | import ... le.ts"; | NoBaseUrl/lib/file.ts |
7273
| NoBaseUrl/src/main.ts:4:1:4:24 | import ... le.js"; | NoBaseUrl/lib/file.ts |

0 commit comments

Comments
 (0)