From ec4b3ef202b67307da57c357b792b2c2be040f35 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 3 Apr 2025 15:29:29 +0200 Subject: [PATCH] JS: Stop resolving imports from TS symbols --- .../ql/lib/semmle/javascript/Modules.qll | 7 +-- .../PathResolution/BaseUrl/src/main.ts | 28 ++++++------ .../PathResolution/Extended/src/main.ts | 28 ++++++------ .../PathResolution/Fallback/src/main.ts | 18 ++++---- .../PathResolution/NoBaseUrl/src/main.ts | 14 +++--- .../PathResolution/test.expected | 44 ------------------- 6 files changed, 45 insertions(+), 94 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Modules.qll b/javascript/ql/lib/semmle/javascript/Modules.qll index 8c36044bb24..209ac0d1370 100644 --- a/javascript/ql/lib/semmle/javascript/Modules.qll +++ b/javascript/ql/lib/semmle/javascript/Modules.qll @@ -170,12 +170,7 @@ abstract class Import extends AstNode { /** * Gets the imported module, as determined by the TypeScript compiler, if any. */ - private Module resolveFromTypeScriptSymbol() { - exists(CanonicalName symbol | - ast_node_symbol(this, symbol) and - ast_node_symbol(result, symbol) - ) - } + private Module resolveFromTypeScriptSymbol() { none() } /** * Gets the module this import refers to. diff --git a/javascript/ql/test/library-tests/PathResolution/BaseUrl/src/main.ts b/javascript/ql/test/library-tests/PathResolution/BaseUrl/src/main.ts index a6043d09603..667f0757f8e 100644 --- a/javascript/ql/test/library-tests/PathResolution/BaseUrl/src/main.ts +++ b/javascript/ql/test/library-tests/PathResolution/BaseUrl/src/main.ts @@ -8,22 +8,22 @@ import "../lib/index.ts"; // $ importTarget=BaseUrl/lib/index.ts import "../lib/index.js"; // $ importTarget=BaseUrl/lib/index.ts // Import relative to baseUrl -import "lib/file"; // $ importTarget=BaseUrl/lib/file.ts -import "lib/file.ts"; // $ importTarget=BaseUrl/lib/file.ts -import "lib/file.js"; // $ importTarget=BaseUrl/lib/file.ts -import "lib"; // $ importTarget=BaseUrl/lib/index.ts -import "lib/index"; // $ importTarget=BaseUrl/lib/index.ts -import "lib/index.ts"; // $ importTarget=BaseUrl/lib/index.ts -import "lib/index.js"; // $ importTarget=BaseUrl/lib/index.ts +import "lib/file"; // $ MISSING: importTarget=BaseUrl/lib/file.ts +import "lib/file.ts"; // $ MISSING: importTarget=BaseUrl/lib/file.ts +import "lib/file.js"; // $ MISSING: importTarget=BaseUrl/lib/file.ts +import "lib"; // $ MISSING: importTarget=BaseUrl/lib/index.ts +import "lib/index"; // $ MISSING: importTarget=BaseUrl/lib/index.ts +import "lib/index.ts"; // $ MISSING: importTarget=BaseUrl/lib/index.ts +import "lib/index.js"; // $ MISSING: importTarget=BaseUrl/lib/index.ts // Import matching "@/*" path mapping -import "@/file"; // $ importTarget=BaseUrl/lib/file.ts -import "@/file.ts"; // $ importTarget=BaseUrl/lib/file.ts -import "@/file.js"; // $ importTarget=BaseUrl/lib/file.ts -import "@"; // $ importTarget=BaseUrl/lib/nostar.ts -import "@/index"; // $ importTarget=BaseUrl/lib/index.ts -import "@/index.ts"; // $ importTarget=BaseUrl/lib/index.ts -import "@/index.js"; // $ importTarget=BaseUrl/lib/index.ts +import "@/file"; // $ MISSING: importTarget=BaseUrl/lib/file.ts +import "@/file.ts"; // $ MISSING: importTarget=BaseUrl/lib/file.ts +import "@/file.js"; // $ MISSING: importTarget=BaseUrl/lib/file.ts +import "@"; // $ MISSING: importTarget=BaseUrl/lib/nostar.ts +import "@/index"; // $ MISSING: importTarget=BaseUrl/lib/index.ts +import "@/index.ts"; // $ MISSING: importTarget=BaseUrl/lib/index.ts +import "@/index.js"; // $ MISSING: importTarget=BaseUrl/lib/index.ts // Import matching "@/*.xyz" path mapping. Note that this is not actually supported by TypeScript. import "@/file.xyz"; diff --git a/javascript/ql/test/library-tests/PathResolution/Extended/src/main.ts b/javascript/ql/test/library-tests/PathResolution/Extended/src/main.ts index 949bc7c7908..3afdd24fd17 100644 --- a/javascript/ql/test/library-tests/PathResolution/Extended/src/main.ts +++ b/javascript/ql/test/library-tests/PathResolution/Extended/src/main.ts @@ -8,22 +8,22 @@ import "../lib/index.ts"; // $ importTarget=Extended/lib/index.ts import "../lib/index.js"; // $ importTarget=Extended/lib/index.ts // Import relative to baseUrl -import "lib/file"; // $ importTarget=Extended/lib/file.ts -import "lib/file.ts"; // $ importTarget=Extended/lib/file.ts -import "lib/file.js"; // $ importTarget=Extended/lib/file.ts -import "lib"; // $ importTarget=Extended/lib/index.ts -import "lib/index"; // $ importTarget=Extended/lib/index.ts -import "lib/index.ts"; // $ importTarget=Extended/lib/index.ts -import "lib/index.js"; // $ importTarget=Extended/lib/index.ts +import "lib/file"; // $ MISSING: importTarget=Extended/lib/file.ts +import "lib/file.ts"; // $ MISSING: importTarget=Extended/lib/file.ts +import "lib/file.js"; // $ MISSING: importTarget=Extended/lib/file.ts +import "lib"; // $ MISSING: importTarget=Extended/lib/index.ts +import "lib/index"; // $ MISSING: importTarget=Extended/lib/index.ts +import "lib/index.ts"; // $ MISSING: importTarget=Extended/lib/index.ts +import "lib/index.js"; // $ MISSING: importTarget=Extended/lib/index.ts // Import matching "@/*" path mapping -import "@/file"; // $ importTarget=Extended/lib/file.ts -import "@/file.ts"; // $ importTarget=Extended/lib/file.ts -import "@/file.js"; // $ importTarget=Extended/lib/file.ts -import "@"; // $ importTarget=Extended/lib/nostar.ts -import "@/index"; // $ importTarget=Extended/lib/index.ts -import "@/index.ts"; // $ importTarget=Extended/lib/index.ts -import "@/index.js"; // $ importTarget=Extended/lib/index.ts +import "@/file"; // $ MISSING: importTarget=Extended/lib/file.ts +import "@/file.ts"; // $ MISSING: importTarget=Extended/lib/file.ts +import "@/file.js"; // $ MISSING: importTarget=Extended/lib/file.ts +import "@"; // $ MISSING: importTarget=Extended/lib/nostar.ts +import "@/index"; // $ MISSING: importTarget=Extended/lib/index.ts +import "@/index.ts"; // $ MISSING: importTarget=Extended/lib/index.ts +import "@/index.js"; // $ MISSING: importTarget=Extended/lib/index.ts // Import matching "@/*.xyz" path mapping. Note that this is not actually supported by TypeScript. import "@/file.xyz"; diff --git a/javascript/ql/test/library-tests/PathResolution/Fallback/src/main.ts b/javascript/ql/test/library-tests/PathResolution/Fallback/src/main.ts index 1b0bdb14e99..fd77fd9f55d 100644 --- a/javascript/ql/test/library-tests/PathResolution/Fallback/src/main.ts +++ b/javascript/ql/test/library-tests/PathResolution/Fallback/src/main.ts @@ -1,10 +1,10 @@ -import "@/both" // $ importTarget=Fallback/lib1/both.ts -import "@/only1" // $ importTarget=Fallback/lib1/only1.ts -import "@/only2" // $ importTarget=Fallback/lib2/only2.ts -import "@/differentExtension" // $ importTarget=Fallback/lib2/differentExtension.ts -import "@/differentExtension.js" // $ importTarget=Fallback/lib2/differentExtension.ts +import "@/both" // $ MISSING: importTarget=Fallback/lib1/both.ts +import "@/only1" // $ MISSING: importTarget=Fallback/lib1/only1.ts +import "@/only2" // $ MISSING: importTarget=Fallback/lib2/only2.ts +import "@/differentExtension" // $ MISSING: importTarget=Fallback/lib2/differentExtension.ts +import "@/differentExtension.js" // $ MISSING: importTarget=Fallback/lib2/differentExtension.ts -import "@/subdir" // $ importTarget=Fallback/lib1/subdir/index.ts -import "@/subdir/both" // $ importTarget=Fallback/lib1/subdir/both.ts -import "@/subdir/only1" // $ importTarget=Fallback/lib1/subdir/only1.ts -import "@/subdir/only2" // $ importTarget=Fallback/lib2/subdir/only2.ts +import "@/subdir" // $ MISSING: importTarget=Fallback/lib1/subdir/index.ts +import "@/subdir/both" // $ MISSING: importTarget=Fallback/lib1/subdir/both.ts +import "@/subdir/only1" // $ MISSING: importTarget=Fallback/lib1/subdir/only1.ts +import "@/subdir/only2" // $ MISSING: importTarget=Fallback/lib2/subdir/only2.ts diff --git a/javascript/ql/test/library-tests/PathResolution/NoBaseUrl/src/main.ts b/javascript/ql/test/library-tests/PathResolution/NoBaseUrl/src/main.ts index 799794a2c6b..422ed5f3ecd 100644 --- a/javascript/ql/test/library-tests/PathResolution/NoBaseUrl/src/main.ts +++ b/javascript/ql/test/library-tests/PathResolution/NoBaseUrl/src/main.ts @@ -17,13 +17,13 @@ import "lib/index.ts"; import "lib/index.js"; // Import matching "@/*" path mapping -import "@/file"; // $ importTarget=NoBaseUrl/lib/file.ts -import "@/file.ts"; // $ importTarget=NoBaseUrl/lib/file.ts -import "@/file.js"; // $ importTarget=NoBaseUrl/lib/file.ts -import "@"; // $ importTarget=NoBaseUrl/lib/nostar.ts -import "@/index"; // $ importTarget=NoBaseUrl/lib/index.ts -import "@/index.ts"; // $ importTarget=NoBaseUrl/lib/index.ts -import "@/index.js"; // $ importTarget=NoBaseUrl/lib/index.ts +import "@/file"; // $ MISSING: importTarget=NoBaseUrl/lib/file.ts +import "@/file.ts"; // $ MISSING: importTarget=NoBaseUrl/lib/file.ts +import "@/file.js"; // $ MISSING: importTarget=NoBaseUrl/lib/file.ts +import "@"; // $ MISSING: importTarget=NoBaseUrl/lib/nostar.ts +import "@/index"; // $ MISSING: importTarget=NoBaseUrl/lib/index.ts +import "@/index.ts"; // $ MISSING: importTarget=NoBaseUrl/lib/index.ts +import "@/index.js"; // $ MISSING: importTarget=NoBaseUrl/lib/index.ts // Import matching "@/*.xyz" path mapping. Note that this is not actually supported by TypeScript. import "@/file.xyz"; diff --git a/javascript/ql/test/library-tests/PathResolution/test.expected b/javascript/ql/test/library-tests/PathResolution/test.expected index 94d9750b5d1..29f89584f60 100644 --- a/javascript/ql/test/library-tests/PathResolution/test.expected +++ b/javascript/ql/test/library-tests/PathResolution/test.expected @@ -5,20 +5,6 @@ | BaseUrl/src/main.ts:6:1:6:22 | import ... index"; | BaseUrl/lib/index.ts | | BaseUrl/src/main.ts:7:1:7:25 | import ... ex.ts"; | BaseUrl/lib/index.ts | | BaseUrl/src/main.ts:8:1:8:25 | import ... ex.js"; | BaseUrl/lib/index.ts | -| BaseUrl/src/main.ts:11:1:11:18 | import "lib/file"; | BaseUrl/lib/file.ts | -| BaseUrl/src/main.ts:12:1:12:21 | import ... le.ts"; | BaseUrl/lib/file.ts | -| BaseUrl/src/main.ts:13:1:13:21 | import ... le.js"; | BaseUrl/lib/file.ts | -| BaseUrl/src/main.ts:14:1:14:13 | import "lib"; | BaseUrl/lib/index.ts | -| BaseUrl/src/main.ts:15:1:15:19 | import "lib/index"; | BaseUrl/lib/index.ts | -| BaseUrl/src/main.ts:16:1:16:22 | import ... ex.ts"; | BaseUrl/lib/index.ts | -| BaseUrl/src/main.ts:17:1:17:22 | import ... ex.js"; | BaseUrl/lib/index.ts | -| BaseUrl/src/main.ts:20:1:20:16 | import "@/file"; | BaseUrl/lib/file.ts | -| BaseUrl/src/main.ts:21:1:21:19 | import "@/file.ts"; | BaseUrl/lib/file.ts | -| BaseUrl/src/main.ts:22:1:22:19 | import "@/file.js"; | BaseUrl/lib/file.ts | -| BaseUrl/src/main.ts:23:1:23:11 | import "@"; | BaseUrl/lib/nostar.ts | -| BaseUrl/src/main.ts:24:1:24:17 | import "@/index"; | BaseUrl/lib/index.ts | -| BaseUrl/src/main.ts:25:1:25:20 | import "@/index.ts"; | BaseUrl/lib/index.ts | -| BaseUrl/src/main.ts:26:1:26:20 | import "@/index.js"; | BaseUrl/lib/index.ts | | Extended/src/main.ts:2:1:2:21 | import ... /file"; | Extended/lib/file.ts | | Extended/src/main.ts:3:1:3:24 | import ... le.ts"; | Extended/lib/file.ts | | Extended/src/main.ts:4:1:4:24 | import ... le.js"; | Extended/lib/file.ts | @@ -26,29 +12,6 @@ | Extended/src/main.ts:6:1:6:22 | import ... index"; | Extended/lib/index.ts | | Extended/src/main.ts:7:1:7:25 | import ... ex.ts"; | Extended/lib/index.ts | | Extended/src/main.ts:8:1:8:25 | import ... ex.js"; | Extended/lib/index.ts | -| Extended/src/main.ts:11:1:11:18 | import "lib/file"; | Extended/lib/file.ts | -| Extended/src/main.ts:12:1:12:21 | import ... le.ts"; | Extended/lib/file.ts | -| Extended/src/main.ts:13:1:13:21 | import ... le.js"; | Extended/lib/file.ts | -| Extended/src/main.ts:14:1:14:13 | import "lib"; | Extended/lib/index.ts | -| Extended/src/main.ts:15:1:15:19 | import "lib/index"; | Extended/lib/index.ts | -| Extended/src/main.ts:16:1:16:22 | import ... ex.ts"; | Extended/lib/index.ts | -| Extended/src/main.ts:17:1:17:22 | import ... ex.js"; | Extended/lib/index.ts | -| Extended/src/main.ts:20:1:20:16 | import "@/file"; | Extended/lib/file.ts | -| Extended/src/main.ts:21:1:21:19 | import "@/file.ts"; | Extended/lib/file.ts | -| Extended/src/main.ts:22:1:22:19 | import "@/file.js"; | Extended/lib/file.ts | -| Extended/src/main.ts:23:1:23:11 | import "@"; | Extended/lib/nostar.ts | -| Extended/src/main.ts:24:1:24:17 | import "@/index"; | Extended/lib/index.ts | -| Extended/src/main.ts:25:1:25:20 | import "@/index.ts"; | Extended/lib/index.ts | -| Extended/src/main.ts:26:1:26:20 | import "@/index.js"; | Extended/lib/index.ts | -| Fallback/src/main.ts:1:1:1:15 | import "@/both" | Fallback/lib1/both.ts | -| Fallback/src/main.ts:2:1:2:16 | import "@/only1" | Fallback/lib1/only1.ts | -| Fallback/src/main.ts:3:1:3:16 | import "@/only2" | Fallback/lib2/only2.ts | -| Fallback/src/main.ts:4:1:4:29 | import ... ension" | Fallback/lib2/differentExtension.ts | -| Fallback/src/main.ts:5:1:5:32 | import ... ion.js" | Fallback/lib2/differentExtension.ts | -| Fallback/src/main.ts:7:1:7:17 | import "@/subdir" | Fallback/lib1/subdir/index.ts | -| Fallback/src/main.ts:8:1:8:22 | import ... r/both" | Fallback/lib1/subdir/both.ts | -| Fallback/src/main.ts:9:1:9:23 | import ... /only1" | Fallback/lib1/subdir/only1.ts | -| Fallback/src/main.ts:10:1:10:23 | import ... /only2" | Fallback/lib2/subdir/only2.ts | | NoBaseUrl/src/main.ts:2:1:2:21 | import ... /file"; | NoBaseUrl/lib/file.ts | | NoBaseUrl/src/main.ts:3:1:3:24 | import ... le.ts"; | NoBaseUrl/lib/file.ts | | NoBaseUrl/src/main.ts:4:1:4:24 | import ... le.js"; | NoBaseUrl/lib/file.ts | @@ -56,10 +19,3 @@ | NoBaseUrl/src/main.ts:6:1:6:22 | import ... index"; | NoBaseUrl/lib/index.ts | | NoBaseUrl/src/main.ts:7:1:7:25 | import ... ex.ts"; | NoBaseUrl/lib/index.ts | | NoBaseUrl/src/main.ts:8:1:8:25 | import ... ex.js"; | NoBaseUrl/lib/index.ts | -| NoBaseUrl/src/main.ts:20:1:20:16 | import "@/file"; | NoBaseUrl/lib/file.ts | -| NoBaseUrl/src/main.ts:21:1:21:19 | import "@/file.ts"; | NoBaseUrl/lib/file.ts | -| NoBaseUrl/src/main.ts:22:1:22:19 | import "@/file.js"; | NoBaseUrl/lib/file.ts | -| NoBaseUrl/src/main.ts:23:1:23:11 | import "@"; | NoBaseUrl/lib/nostar.ts | -| NoBaseUrl/src/main.ts:24:1:24:17 | import "@/index"; | NoBaseUrl/lib/index.ts | -| NoBaseUrl/src/main.ts:25:1:25:20 | import "@/index.ts"; | NoBaseUrl/lib/index.ts | -| NoBaseUrl/src/main.ts:26:1:26:20 | import "@/index.js"; | NoBaseUrl/lib/index.ts |