@lzehrung/codegraph 2.3.28 → 2.3.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +7008 -4340
- package/dist/bin/query-index-worker.js +1357 -724
- package/dist/document-links/asciidoc.d.ts.map +1 -1
- package/dist/document-links/asciidoc.js +3 -4
- package/dist/document-links/asciidoc.js.map +1 -1
- package/dist/document-links/html-forms.d.ts +39 -0
- package/dist/document-links/html-forms.d.ts.map +1 -0
- package/dist/document-links/html-forms.js +94 -0
- package/dist/document-links/html-forms.js.map +1 -0
- package/dist/document-links/html.d.ts +8 -0
- package/dist/document-links/html.d.ts.map +1 -1
- package/dist/document-links/html.js +30 -15
- package/dist/document-links/html.js.map +1 -1
- package/dist/document-links/markdown.d.ts.map +1 -1
- package/dist/document-links/markdown.js +6 -7
- package/dist/document-links/markdown.js.map +1 -1
- package/dist/document-links/rst.d.ts.map +1 -1
- package/dist/document-links/rst.js +6 -0
- package/dist/document-links/rst.js.map +1 -1
- package/dist/document-links/sfc.d.ts.map +1 -1
- package/dist/document-links/sfc.js +4 -4
- package/dist/document-links/sfc.js.map +1 -1
- package/dist/graphs/angularjs.d.ts.map +1 -1
- package/dist/graphs/angularjs.js +9 -1
- package/dist/graphs/angularjs.js.map +1 -1
- package/dist/graphs/edge-resolution.d.ts.map +1 -1
- package/dist/graphs/edge-resolution.js +12 -2
- package/dist/graphs/edge-resolution.js.map +1 -1
- package/dist/graphs/specifiers.d.ts.map +1 -1
- package/dist/graphs/specifiers.js +62 -104
- package/dist/graphs/specifiers.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/ast.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/ast.js +3 -0
- package/dist/graphs/symbol-graph-detailed/ast.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.js +157 -91
- package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +34 -0
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js +531 -24
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -1
- package/dist/impact/analyzer.d.ts.map +1 -1
- package/dist/impact/analyzer.js +82 -4
- package/dist/impact/analyzer.js.map +1 -1
- package/dist/impact/call-compatibility/providers/index.d.ts +3 -1
- package/dist/impact/call-compatibility/providers/index.d.ts.map +1 -1
- package/dist/impact/call-compatibility/providers/index.js +11 -4
- package/dist/impact/call-compatibility/providers/index.js.map +1 -1
- package/dist/impact/call-compatibility.d.ts.map +1 -1
- package/dist/impact/call-compatibility.js +2 -7
- package/dist/impact/call-compatibility.js.map +1 -1
- package/dist/impact/map.d.ts.map +1 -1
- package/dist/impact/map.js +58 -1
- package/dist/impact/map.js.map +1 -1
- package/dist/impact/member-resolution-coverage.d.ts.map +1 -1
- package/dist/impact/member-resolution-coverage.js +2 -5
- package/dist/impact/member-resolution-coverage.js.map +1 -1
- package/dist/indexer/build-cache/manifest.d.ts +7 -0
- package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
- package/dist/indexer/build-cache/manifest.js +32 -1
- package/dist/indexer/build-cache/manifest.js.map +1 -1
- package/dist/indexer/build-cache/options.d.ts +20 -2
- package/dist/indexer/build-cache/options.d.ts.map +1 -1
- package/dist/indexer/build-cache/options.js +21 -3
- package/dist/indexer/build-cache/options.js.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.js +1 -0
- package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
- package/dist/indexer/build-index.d.ts.map +1 -1
- package/dist/indexer/build-index.js +80 -2
- package/dist/indexer/build-index.js.map +1 -1
- package/dist/indexer/build-manifest.d.ts +1 -0
- package/dist/indexer/build-manifest.d.ts.map +1 -1
- package/dist/indexer/build-manifest.js +18 -0
- package/dist/indexer/build-manifest.js.map +1 -1
- package/dist/indexer/build-workers.js +1 -1
- package/dist/indexer/build-workers.js.map +1 -1
- package/dist/indexer/declaration-visibility.d.ts +43 -0
- package/dist/indexer/declaration-visibility.d.ts.map +1 -0
- package/dist/indexer/declaration-visibility.js +202 -0
- package/dist/indexer/declaration-visibility.js.map +1 -0
- package/dist/indexer/imports/binding-ranges.d.ts +1 -1
- package/dist/indexer/imports/binding-ranges.d.ts.map +1 -1
- package/dist/indexer/imports/binding-ranges.js +2 -123
- package/dist/indexer/imports/binding-ranges.js.map +1 -1
- package/dist/indexer/imports/js-text-imports.d.ts.map +1 -1
- package/dist/indexer/imports/js-text-imports.js +5 -2
- package/dist/indexer/imports/js-text-imports.js.map +1 -1
- package/dist/indexer/imports/language-specific.d.ts.map +1 -1
- package/dist/indexer/imports/language-specific.js +58 -215
- package/dist/indexer/imports/language-specific.js.map +1 -1
- package/dist/indexer/imports/native-captures.d.ts.map +1 -1
- package/dist/indexer/imports/native-captures.js +23 -32
- package/dist/indexer/imports/native-captures.js.map +1 -1
- package/dist/indexer/imports/text-import-extractors.d.ts +37 -0
- package/dist/indexer/imports/text-import-extractors.d.ts.map +1 -0
- package/dist/indexer/imports/text-import-extractors.js +358 -0
- package/dist/indexer/imports/text-import-extractors.js.map +1 -0
- package/dist/indexer/locals-and-exports.d.ts.map +1 -1
- package/dist/indexer/locals-and-exports.js +26 -27
- package/dist/indexer/locals-and-exports.js.map +1 -1
- package/dist/indexer/navigation-goto.d.ts +1 -7
- package/dist/indexer/navigation-goto.d.ts.map +1 -1
- package/dist/indexer/navigation-goto.js +406 -276
- package/dist/indexer/navigation-goto.js.map +1 -1
- package/dist/indexer/navigation-resolve.d.ts.map +1 -1
- package/dist/indexer/navigation-resolve.js +20 -1
- package/dist/indexer/navigation-resolve.js.map +1 -1
- package/dist/indexer/navigation.d.ts.map +1 -1
- package/dist/indexer/navigation.js +49 -7
- package/dist/indexer/navigation.js.map +1 -1
- package/dist/indexer/parse-context.js +2 -2
- package/dist/indexer/parse-context.js.map +1 -1
- package/dist/indexer/scope-nodes.d.ts +108 -0
- package/dist/indexer/scope-nodes.d.ts.map +1 -0
- package/dist/indexer/scope-nodes.js +238 -0
- package/dist/indexer/scope-nodes.js.map +1 -0
- package/dist/indexer/scope.d.ts.map +1 -1
- package/dist/indexer/scope.js +70 -130
- package/dist/indexer/scope.js.map +1 -1
- package/dist/indexer/types.d.ts +7 -0
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/languages/definitions/c-family.d.ts +18 -4
- package/dist/languages/definitions/c-family.d.ts.map +1 -1
- package/dist/languages/definitions/c-family.js +51 -13
- package/dist/languages/definitions/c-family.js.map +1 -1
- package/dist/languages/definitions/c.d.ts.map +1 -1
- package/dist/languages/definitions/c.js +7 -43
- package/dist/languages/definitions/c.js.map +1 -1
- package/dist/languages/definitions/cpp.d.ts.map +1 -1
- package/dist/languages/definitions/cpp.js +34 -53
- package/dist/languages/definitions/cpp.js.map +1 -1
- package/dist/languages/definitions/csharp.d.ts.map +1 -1
- package/dist/languages/definitions/csharp.js +47 -53
- package/dist/languages/definitions/csharp.js.map +1 -1
- package/dist/languages/definitions/css-like.d.ts.map +1 -1
- package/dist/languages/definitions/css-like.js +13 -10
- package/dist/languages/definitions/css-like.js.map +1 -1
- package/dist/languages/definitions/go.d.ts.map +1 -1
- package/dist/languages/definitions/go.js +29 -42
- package/dist/languages/definitions/go.js.map +1 -1
- package/dist/languages/definitions/html.d.ts.map +1 -1
- package/dist/languages/definitions/html.js +15 -14
- package/dist/languages/definitions/html.js.map +1 -1
- package/dist/languages/definitions/java.d.ts.map +1 -1
- package/dist/languages/definitions/java.js +42 -48
- package/dist/languages/definitions/java.js.map +1 -1
- package/dist/languages/definitions/javascript.d.ts.map +1 -1
- package/dist/languages/definitions/javascript.js +26 -54
- package/dist/languages/definitions/javascript.js.map +1 -1
- package/dist/languages/definitions/js-family.d.ts +15 -1
- package/dist/languages/definitions/js-family.d.ts.map +1 -1
- package/dist/languages/definitions/js-family.js +51 -0
- package/dist/languages/definitions/js-family.js.map +1 -1
- package/dist/languages/definitions/kotlin.d.ts.map +1 -1
- package/dist/languages/definitions/kotlin.js +26 -43
- package/dist/languages/definitions/kotlin.js.map +1 -1
- package/dist/languages/definitions/php.d.ts.map +1 -1
- package/dist/languages/definitions/php.js +50 -60
- package/dist/languages/definitions/php.js.map +1 -1
- package/dist/languages/definitions/python.d.ts +5 -1
- package/dist/languages/definitions/python.d.ts.map +1 -1
- package/dist/languages/definitions/python.js +62 -14
- package/dist/languages/definitions/python.js.map +1 -1
- package/dist/languages/definitions/ruby.d.ts.map +1 -1
- package/dist/languages/definitions/ruby.js +14 -17
- package/dist/languages/definitions/ruby.js.map +1 -1
- package/dist/languages/definitions/rust.d.ts.map +1 -1
- package/dist/languages/definitions/rust.js +30 -52
- package/dist/languages/definitions/rust.js.map +1 -1
- package/dist/languages/definitions/scss.d.ts.map +1 -1
- package/dist/languages/definitions/scss.js +36 -30
- package/dist/languages/definitions/scss.js.map +1 -1
- package/dist/languages/definitions/sfc-graph.d.ts +4 -0
- package/dist/languages/definitions/sfc-graph.d.ts.map +1 -0
- package/dist/languages/definitions/sfc-graph.js +16 -0
- package/dist/languages/definitions/sfc-graph.js.map +1 -0
- package/dist/languages/definitions/shared.d.ts +33 -0
- package/dist/languages/definitions/shared.d.ts.map +1 -0
- package/dist/languages/definitions/shared.js +63 -0
- package/dist/languages/definitions/shared.js.map +1 -0
- package/dist/languages/definitions/sql.d.ts.map +1 -1
- package/dist/languages/definitions/sql.js +1 -0
- package/dist/languages/definitions/sql.js.map +1 -1
- package/dist/languages/definitions/svelte.d.ts.map +1 -1
- package/dist/languages/definitions/svelte.js +2 -10
- package/dist/languages/definitions/svelte.js.map +1 -1
- package/dist/languages/definitions/swift.d.ts.map +1 -1
- package/dist/languages/definitions/swift.js +37 -31
- package/dist/languages/definitions/swift.js.map +1 -1
- package/dist/languages/definitions/typescript.d.ts.map +1 -1
- package/dist/languages/definitions/typescript.js +65 -79
- package/dist/languages/definitions/typescript.js.map +1 -1
- package/dist/languages/definitions/vue.d.ts.map +1 -1
- package/dist/languages/definitions/vue.js +2 -10
- package/dist/languages/definitions/vue.js.map +1 -1
- package/dist/languages/definitions/zig.d.ts.map +1 -1
- package/dist/languages/definitions/zig.js +9 -15
- package/dist/languages/definitions/zig.js.map +1 -1
- package/dist/languages/graph-captures.d.ts +40 -0
- package/dist/languages/graph-captures.d.ts.map +1 -0
- package/dist/languages/graph-captures.js +46 -0
- package/dist/languages/graph-captures.js.map +1 -0
- package/dist/languages/import-statement-parsers.d.ts +17 -0
- package/dist/languages/import-statement-parsers.d.ts.map +1 -1
- package/dist/languages/import-statement-parsers.js +108 -0
- package/dist/languages/import-statement-parsers.js.map +1 -1
- package/dist/languages/js-family.d.ts +2 -0
- package/dist/languages/js-family.d.ts.map +1 -1
- package/dist/languages/js-family.js +15 -6
- package/dist/languages/js-family.js.map +1 -1
- package/dist/languages/types.d.ts +4 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/types.js +1 -1
- package/dist/languages/types.js.map +1 -1
- package/dist/languages.js +1 -1
- package/dist/languages.js.map +1 -1
- package/dist/native/contracts.d.ts +1 -1
- package/dist/native/contracts.d.ts.map +1 -1
- package/dist/native/js-bridge.d.ts +10 -0
- package/dist/native/js-bridge.d.ts.map +1 -1
- package/dist/native/js-bridge.js +10 -0
- package/dist/native/js-bridge.js.map +1 -1
- package/dist/native/native-backend-report.d.ts.map +1 -1
- package/dist/native/native-backend-report.js +2 -0
- package/dist/native/native-backend-report.js.map +1 -1
- package/dist/sql/graph.d.ts +1 -1
- package/dist/sql/graph.d.ts.map +1 -1
- package/dist/sql/graph.js.map +1 -1
- package/dist/sql/lookup.d.ts +7 -0
- package/dist/sql/lookup.d.ts.map +1 -1
- package/dist/sql/lookup.js +17 -0
- package/dist/sql/lookup.js.map +1 -1
- package/dist/sql/source-graph.d.ts +2 -0
- package/dist/sql/source-graph.d.ts.map +1 -1
- package/dist/sql/source-graph.js +20 -1
- package/dist/sql/source-graph.js.map +1 -1
- package/dist/util/comments.d.ts +7 -7
- package/dist/util/comments.d.ts.map +1 -1
- package/dist/util/comments.js +15 -214
- package/dist/util/comments.js.map +1 -1
- package/dist/util/lines.d.ts.map +1 -1
- package/dist/util/lines.js +4 -1
- package/dist/util/lines.js.map +1 -1
- package/dist/util/member-access.d.ts +2 -0
- package/dist/util/member-access.d.ts.map +1 -1
- package/dist/util/member-access.js +18 -5
- package/dist/util/member-access.js.map +1 -1
- package/dist/util/paths.d.ts +4 -0
- package/dist/util/paths.d.ts.map +1 -1
- package/dist/util/paths.js +26 -0
- package/dist/util/paths.js.map +1 -1
- package/dist/util/project-files.js +1 -1
- package/dist/util/project-files.js.map +1 -1
- package/dist/util/resolution/cargo-targets.d.ts.map +1 -1
- package/dist/util/resolution/cargo-targets.js +17 -14
- package/dist/util/resolution/cargo-targets.js.map +1 -1
- package/dist/util/resolution/cpp.d.ts +6 -0
- package/dist/util/resolution/cpp.d.ts.map +1 -0
- package/dist/util/resolution/cpp.js +69 -0
- package/dist/util/resolution/cpp.js.map +1 -0
- package/dist/util/resolution/csharp.d.ts +8 -0
- package/dist/util/resolution/csharp.d.ts.map +1 -0
- package/dist/util/resolution/csharp.js +103 -0
- package/dist/util/resolution/csharp.js.map +1 -0
- package/dist/util/resolution/files.d.ts +6 -0
- package/dist/util/resolution/files.d.ts.map +1 -1
- package/dist/util/resolution/files.js +108 -4
- package/dist/util/resolution/files.js.map +1 -1
- package/dist/util/resolution/go.d.ts +1 -0
- package/dist/util/resolution/go.d.ts.map +1 -1
- package/dist/util/resolution/go.js +4 -3
- package/dist/util/resolution/go.js.map +1 -1
- package/dist/util/resolution/jvm.d.ts +3 -3
- package/dist/util/resolution/jvm.d.ts.map +1 -1
- package/dist/util/resolution/jvm.js +90 -54
- package/dist/util/resolution/jvm.js.map +1 -1
- package/dist/util/resolution/node.js +2 -2
- package/dist/util/resolution/node.js.map +1 -1
- package/dist/util/resolution/php-composer.d.ts.map +1 -1
- package/dist/util/resolution/php-composer.js +8 -7
- package/dist/util/resolution/php-composer.js.map +1 -1
- package/dist/util/resolution/php.d.ts.map +1 -1
- package/dist/util/resolution/php.js +30 -43
- package/dist/util/resolution/php.js.map +1 -1
- package/dist/util/resolution/project-symbols.d.ts +5 -7
- package/dist/util/resolution/project-symbols.d.ts.map +1 -1
- package/dist/util/resolution/project-symbols.js +23 -9
- package/dist/util/resolution/project-symbols.js.map +1 -1
- package/dist/util/resolution/python.d.ts.map +1 -1
- package/dist/util/resolution/python.js +107 -62
- package/dist/util/resolution/python.js.map +1 -1
- package/dist/util/resolution/rust.d.ts.map +1 -1
- package/dist/util/resolution/rust.js +45 -34
- package/dist/util/resolution/rust.js.map +1 -1
- package/dist/util/resolution/tsconfig.d.ts.map +1 -1
- package/dist/util/resolution/tsconfig.js +3 -9
- package/dist/util/resolution/tsconfig.js.map +1 -1
- package/dist/util/resolution-candidates.d.ts +5 -1
- package/dist/util/resolution-candidates.d.ts.map +1 -1
- package/dist/util/resolution-candidates.js +18 -0
- package/dist/util/resolution-candidates.js.map +1 -1
- package/dist/util/resolution.d.ts.map +1 -1
- package/dist/util/resolution.js +95 -49
- package/dist/util/resolution.js.map +1 -1
- package/dist/util/specifiers.d.ts +4 -10
- package/dist/util/specifiers.d.ts.map +1 -1
- package/dist/util/specifiers.js +213 -164
- package/dist/util/specifiers.js.map +1 -1
- package/dist/util/trivia-tables.d.ts +69 -0
- package/dist/util/trivia-tables.d.ts.map +1 -0
- package/dist/util/trivia-tables.js +186 -0
- package/dist/util/trivia-tables.js.map +1 -0
- package/dist/util/trivia.d.ts +24 -0
- package/dist/util/trivia.d.ts.map +1 -0
- package/dist/util/trivia.js +621 -0
- package/dist/util/trivia.js.map +1 -0
- package/dist/util.d.ts +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -1
- package/dist/util.js.map +1 -1
- package/dist/worker/native-extract-worker.d.ts.map +1 -1
- package/dist/worker/native-extract-worker.js +4 -4
- package/dist/worker/native-extract-worker.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/files.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,0BAA0B,oGAM7B,CAAC;AAEX,eAAO,MAAM,6BAA6B,uBAAwB,CAAC;AAEnE,eAAO,MAAM,0BAA0B,4BAA6B,CAAC;AAErE,eAAO,MAAM,6BAA6B,iEAAkE,CAAC;AA0D7G,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEjH;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxB;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D"}
|
|
@@ -1,22 +1,126 @@
|
|
|
1
1
|
import fsp from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { fileIdentityKey, isFilePathWithinRoot } from "../paths.js";
|
|
3
4
|
import { fileExists } from "../workspace.js";
|
|
5
|
+
export const JVM_PACKAGE_MANIFEST_NAMES = [
|
|
6
|
+
"pom.xml",
|
|
7
|
+
"build.gradle",
|
|
8
|
+
"build.gradle.kts",
|
|
9
|
+
"settings.gradle",
|
|
10
|
+
"settings.gradle.kts",
|
|
11
|
+
];
|
|
12
|
+
export const CSHARP_PACKAGE_MANIFEST_NAMES = ["*.csproj"];
|
|
13
|
+
export const PHP_PACKAGE_MANIFEST_NAMES = ["composer.json"];
|
|
14
|
+
export const PYTHON_PACKAGE_MANIFEST_NAMES = ["pyproject.toml", "setup.py", "setup.cfg", "Pipfile"];
|
|
15
|
+
function isExtensionManifestPattern(name) {
|
|
16
|
+
return name.startsWith("*.") && !name.includes("/") && !name.includes("\\");
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A symlink counts as a manifest when `stat` follows it to a regular file.
|
|
20
|
+
* Directories, directory links, and dangling links are not manifests.
|
|
21
|
+
*/
|
|
22
|
+
async function direntIsManifestFile(entry, fullPath) {
|
|
23
|
+
if (entry.isFile())
|
|
24
|
+
return true;
|
|
25
|
+
if (entry.isDirectory())
|
|
26
|
+
return false;
|
|
27
|
+
try {
|
|
28
|
+
const st = await fsp.stat(fullPath);
|
|
29
|
+
return st.isFile();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function findExtensionManifestInDir(dir, suffix) {
|
|
36
|
+
let entries;
|
|
37
|
+
try {
|
|
38
|
+
entries = await fsp.readdir(dir, { withFileTypes: true });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const matches = [];
|
|
44
|
+
for (const entry of entries) {
|
|
45
|
+
if (!entry.name.toLowerCase().endsWith(suffix))
|
|
46
|
+
continue;
|
|
47
|
+
const fullPath = path.join(dir, entry.name);
|
|
48
|
+
if (await direntIsManifestFile(entry, fullPath))
|
|
49
|
+
matches.push(entry.name);
|
|
50
|
+
}
|
|
51
|
+
const first = sortManifestMatches(dir, suffix, matches)[0];
|
|
52
|
+
if (!first)
|
|
53
|
+
return null;
|
|
54
|
+
return path.join(dir, first);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Deterministic tie-break for a directory holding several extension-manifest matches.
|
|
58
|
+
* `readdir` order is filesystem- and locale-dependent (`*.csproj` can match both `App.csproj`
|
|
59
|
+
* and `App.Core.csproj`), so the winner must not depend on it. Prefer the manifest whose stem
|
|
60
|
+
* equals the directory name, because the primary project file is conventionally named after its
|
|
61
|
+
* directory; then fall back to code-unit name order, which is identical on every platform.
|
|
62
|
+
*/
|
|
63
|
+
function sortManifestMatches(dir, suffix, names) {
|
|
64
|
+
const dirName = path.basename(dir).toLowerCase();
|
|
65
|
+
return names.sort((a, b) => {
|
|
66
|
+
const aPreferred = a.slice(0, a.length - suffix.length).toLowerCase() === dirName;
|
|
67
|
+
const bPreferred = b.slice(0, b.length - suffix.length).toLowerCase() === dirName;
|
|
68
|
+
if (aPreferred !== bPreferred)
|
|
69
|
+
return aPreferred ? -1 : 1;
|
|
70
|
+
if (a < b)
|
|
71
|
+
return -1;
|
|
72
|
+
if (a > b)
|
|
73
|
+
return 1;
|
|
74
|
+
return 0;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
4
77
|
export async function findNearestFile(startDir, stopDir, fileName) {
|
|
78
|
+
return await findNearestManifest(startDir, stopDir, [fileName]);
|
|
79
|
+
}
|
|
80
|
+
export async function findNearestManifest(startDir, stopDir, names) {
|
|
5
81
|
let dir = path.resolve(startDir);
|
|
6
82
|
const stop = path.resolve(stopDir);
|
|
83
|
+
const stopKey = fileIdentityKey(stop);
|
|
7
84
|
while (true) {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
85
|
+
for (const name of names) {
|
|
86
|
+
if (isExtensionManifestPattern(name)) {
|
|
87
|
+
const suffix = name.slice(1).toLowerCase();
|
|
88
|
+
const hit = await findExtensionManifestInDir(dir, suffix);
|
|
89
|
+
if (hit)
|
|
90
|
+
return hit;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const candidate = path.join(dir, name);
|
|
94
|
+
if (await fileExists(candidate))
|
|
95
|
+
return candidate;
|
|
96
|
+
}
|
|
97
|
+
if (dir === stop || fileIdentityKey(dir) === stopKey)
|
|
12
98
|
break;
|
|
13
99
|
const parent = path.dirname(dir);
|
|
14
100
|
if (parent === dir)
|
|
15
101
|
break;
|
|
102
|
+
if (!isFilePathWithinRoot(stop, parent) && fileIdentityKey(parent) !== stopKey)
|
|
103
|
+
break;
|
|
16
104
|
dir = parent;
|
|
17
105
|
}
|
|
18
106
|
return null;
|
|
19
107
|
}
|
|
108
|
+
export async function resolveNearestManifestRoot(projectRoot, fromFile, names) {
|
|
109
|
+
const resolvedRoot = path.resolve(projectRoot);
|
|
110
|
+
// Empty or out-of-root importers fall back here, not by omitting `fromFile` at call sites.
|
|
111
|
+
if (!fromFile)
|
|
112
|
+
return resolvedRoot;
|
|
113
|
+
const startDir = path.dirname(path.resolve(fromFile));
|
|
114
|
+
const startKey = fileIdentityKey(startDir);
|
|
115
|
+
const rootKey = fileIdentityKey(resolvedRoot);
|
|
116
|
+
if (startKey !== rootKey && !isFilePathWithinRoot(resolvedRoot, startDir)) {
|
|
117
|
+
return resolvedRoot;
|
|
118
|
+
}
|
|
119
|
+
const manifest = await findNearestManifest(startDir, resolvedRoot, names);
|
|
120
|
+
if (!manifest)
|
|
121
|
+
return resolvedRoot;
|
|
122
|
+
return path.dirname(path.resolve(manifest));
|
|
123
|
+
}
|
|
20
124
|
export async function isDirectory(p) {
|
|
21
125
|
try {
|
|
22
126
|
const st = await fsp.stat(p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/util/resolution/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/util/resolution/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/go.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/go.ts"],"names":[],"mappings":"AAmFA,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBhF;AA6BD,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwCrH"}
|
|
@@ -2,6 +2,7 @@ import fs from "node:fs";
|
|
|
2
2
|
import fsp from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { unquote } from "../ast.js";
|
|
5
|
+
import { stripBom } from "../paths.js";
|
|
5
6
|
import { fileExists } from "../workspace.js";
|
|
6
7
|
import { findNearestFile } from "./files.js";
|
|
7
8
|
function stripInlineComment(line) {
|
|
@@ -12,7 +13,7 @@ async function parseGoMod(moduleRoot) {
|
|
|
12
13
|
const modPath = path.join(moduleRoot, "go.mod");
|
|
13
14
|
if (!(await fileExists(modPath)))
|
|
14
15
|
return null;
|
|
15
|
-
const raw = await fsp.readFile(modPath, "utf8");
|
|
16
|
+
const raw = stripBom(await fsp.readFile(modPath, "utf8"));
|
|
16
17
|
const lines = raw.split(/\r?\n/);
|
|
17
18
|
let modulePath = null;
|
|
18
19
|
const replacements = new Map();
|
|
@@ -48,7 +49,7 @@ async function parseGoMod(moduleRoot) {
|
|
|
48
49
|
};
|
|
49
50
|
}
|
|
50
51
|
async function parseGoWork(goWorkPath) {
|
|
51
|
-
const content = await fsp.readFile(goWorkPath, "utf8");
|
|
52
|
+
const content = stripBom(await fsp.readFile(goWorkPath, "utf8"));
|
|
52
53
|
const lines = content.split(/\r?\n/);
|
|
53
54
|
const modules = [];
|
|
54
55
|
let inUseBlock = false;
|
|
@@ -75,7 +76,7 @@ async function parseGoWork(goWorkPath) {
|
|
|
75
76
|
}
|
|
76
77
|
return modules.filter(Boolean);
|
|
77
78
|
}
|
|
78
|
-
async function findGoPackageEntry(dirPath) {
|
|
79
|
+
export async function findGoPackageEntry(dirPath) {
|
|
79
80
|
try {
|
|
80
81
|
const stat = await fsp.stat(dirPath);
|
|
81
82
|
if (!stat.isDirectory())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/util/resolution/go.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQ7C,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,UAAkB;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/util/resolution/go.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare function resolveJvmPackageImportPaths(projectRoot: string, spec: string, languageId: "java" | "kotlin"): Promise<string[]>;
|
|
2
|
-
export declare function resolveKotlinImportPath(projectRoot: string, spec: string): Promise<string | null>;
|
|
3
|
-
export declare function resolveJavaImportPath(projectRoot: string, spec: string): Promise<string | null>;
|
|
1
|
+
export declare function resolveJvmPackageImportPaths(projectRoot: string, spec: string, languageId: "java" | "kotlin", fromFile: string): Promise<string[]>;
|
|
2
|
+
export declare function resolveKotlinImportPath(projectRoot: string, spec: string, fromFile: string): Promise<string | null>;
|
|
3
|
+
export declare function resolveJavaImportPath(projectRoot: string, spec: string, fromFile: string): Promise<string | null>;
|
|
4
4
|
export declare function clearJvmResolutionCaches(): void;
|
|
5
5
|
//# sourceMappingURL=jvm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jvm.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/jvm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jvm.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/jvm.ts"],"names":[],"mappings":"AAsJA,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAAG,QAAQ,EAC7B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB;AA8DD,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import fsp from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { buildDeclaredContainerIndex, getOrCreateProjectSymbolIndex, } from "./project-symbols.js";
|
|
4
4
|
import { JAVA_IDENTIFIER_IGNORABLE_SOURCE, JAVA_IDENTIFIER_SOURCE, KOTLIN_IDENTIFIER_SOURCE } from "../identifiers.js";
|
|
5
|
+
import { confineResolvedPath, readUtf8WithoutBom } from "../paths.js";
|
|
6
|
+
import { getImportableLanguageGlobs } from "../resolution-candidates.js";
|
|
7
|
+
import { JVM_PACKAGE_MANIFEST_NAMES, resolveNearestManifestRoot } from "./files.js";
|
|
5
8
|
const KOTLIN_PACKAGE_PATTERN = new RegExp(String.raw `^\s*package\s+(${KOTLIN_IDENTIFIER_SOURCE}(?:\.${KOTLIN_IDENTIFIER_SOURCE})*)`, "mu");
|
|
6
9
|
const KOTLIN_DECLARATION_PATTERN = new RegExp(String.raw `\b(?:class|object|fun|typealias|interface)\s+(${KOTLIN_IDENTIFIER_SOURCE})`, "gu");
|
|
7
10
|
const JAVA_PACKAGE_PATTERN = new RegExp(String.raw `^\s*package\s+(${JAVA_IDENTIFIER_SOURCE}(?:\.${JAVA_IDENTIFIER_SOURCE})*)\s*;`, "mu");
|
|
@@ -17,7 +20,7 @@ async function readJvmSymbolIndex(filePath, cache, options) {
|
|
|
17
20
|
const cached = cache.get(filePath);
|
|
18
21
|
if (cached)
|
|
19
22
|
return cached;
|
|
20
|
-
const source = await
|
|
23
|
+
const source = await readUtf8WithoutBom(filePath);
|
|
21
24
|
const packageName = source.match(options.packagePattern)?.[1] ?? null;
|
|
22
25
|
const symbols = new Set();
|
|
23
26
|
for (const match of source.matchAll(options.declarationPattern)) {
|
|
@@ -46,84 +49,117 @@ async function readJavaSymbolIndex(filePath) {
|
|
|
46
49
|
normalizeSymbol: (symbol) => symbol.replace(JAVA_IDENTIFIER_IGNORABLE_PATTERN, ""),
|
|
47
50
|
});
|
|
48
51
|
}
|
|
49
|
-
async function getJvmLanguageProjectSymbolIndex(
|
|
50
|
-
return await getOrCreateProjectSymbolIndex(cache,
|
|
52
|
+
async function getJvmLanguageProjectSymbolIndex(indexRoot, cache, languageId, readSymbolIndex) {
|
|
53
|
+
return await getOrCreateProjectSymbolIndex(cache, indexRoot, async () => buildDeclaredContainerIndex(indexRoot, getImportableLanguageGlobs(languageId), async (filePath) => {
|
|
54
|
+
const entry = await readSymbolIndex(filePath);
|
|
55
|
+
if (entry.packageName === null)
|
|
56
|
+
return [];
|
|
57
|
+
return [{ name: entry.packageName, symbols: entry.symbols }];
|
|
58
|
+
}));
|
|
51
59
|
}
|
|
52
|
-
async function getKotlinProjectSymbolIndex(
|
|
53
|
-
return await getJvmLanguageProjectSymbolIndex(
|
|
60
|
+
async function getKotlinProjectSymbolIndex(indexRoot) {
|
|
61
|
+
return await getJvmLanguageProjectSymbolIndex(indexRoot, kotlinProjectSymbolIndexCache, "kotlin", readKotlinSymbolIndex);
|
|
54
62
|
}
|
|
55
|
-
async function getJavaProjectSymbolIndex(
|
|
56
|
-
return await getJvmLanguageProjectSymbolIndex(
|
|
63
|
+
async function getJavaProjectSymbolIndex(indexRoot) {
|
|
64
|
+
return await getJvmLanguageProjectSymbolIndex(indexRoot, javaProjectSymbolIndexCache, "java", readJavaSymbolIndex);
|
|
57
65
|
}
|
|
58
|
-
async function getJvmProjectSymbolIndex(
|
|
66
|
+
async function getJvmProjectSymbolIndex(indexRoot, languageId) {
|
|
59
67
|
if (languageId === "kotlin") {
|
|
60
|
-
return await getKotlinProjectSymbolIndex(
|
|
68
|
+
return await getKotlinProjectSymbolIndex(indexRoot);
|
|
61
69
|
}
|
|
62
|
-
return await getJavaProjectSymbolIndex(
|
|
70
|
+
return await getJavaProjectSymbolIndex(indexRoot);
|
|
63
71
|
}
|
|
64
|
-
|
|
65
|
-
const
|
|
72
|
+
async function confineJvmResolvedPath(projectRoot, resolved) {
|
|
73
|
+
const confined = await confineResolvedPath(projectRoot, resolved);
|
|
74
|
+
if (!confined)
|
|
75
|
+
return null;
|
|
76
|
+
try {
|
|
77
|
+
const st = await fsp.stat(confined);
|
|
78
|
+
if (st.isDirectory())
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return confined;
|
|
85
|
+
}
|
|
86
|
+
async function jvmIndexRoot(projectRoot, fromFile) {
|
|
87
|
+
return await resolveNearestManifestRoot(projectRoot, fromFile, JVM_PACKAGE_MANIFEST_NAMES);
|
|
88
|
+
}
|
|
89
|
+
export async function resolveJvmPackageImportPaths(projectRoot, spec, languageId, fromFile) {
|
|
90
|
+
const indexRoot = await jvmIndexRoot(projectRoot, fromFile);
|
|
91
|
+
const projectIndex = await getJvmProjectSymbolIndex(indexRoot, languageId);
|
|
66
92
|
const packageCandidates = projectIndex.filesByPackage.get(spec) ?? [];
|
|
67
|
-
|
|
93
|
+
const confined = [];
|
|
94
|
+
for (const candidate of packageCandidates) {
|
|
95
|
+
const hit = await confineJvmResolvedPath(projectRoot, candidate);
|
|
96
|
+
if (hit)
|
|
97
|
+
confined.push(hit);
|
|
98
|
+
}
|
|
99
|
+
return confined;
|
|
68
100
|
}
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
const
|
|
101
|
+
async function resolveJvmImportPath(projectRoot, spec, options) {
|
|
102
|
+
const cache = options.languageId === "kotlin" ? kotlinImportResolutionCache : javaImportResolutionCache;
|
|
103
|
+
const indexRoot = await jvmIndexRoot(projectRoot, options.fromFile);
|
|
104
|
+
const cacheKey = `${path.resolve(projectRoot)}::${indexRoot}::${spec}`;
|
|
105
|
+
const cached = cache.get(cacheKey);
|
|
72
106
|
if (cached !== undefined)
|
|
73
107
|
return cached;
|
|
74
108
|
const parts = spec.split(".").filter(Boolean);
|
|
75
|
-
const projectIndex = await
|
|
109
|
+
const projectIndex = await getJvmProjectSymbolIndex(indexRoot, options.languageId);
|
|
76
110
|
if (parts.length < 2) {
|
|
111
|
+
if (!options.allowBarePackage) {
|
|
112
|
+
cache.set(cacheKey, null);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
77
115
|
const packageCandidates = projectIndex.filesByPackage.get(spec) ?? [];
|
|
78
|
-
const resolved = packageCandidates[0] ? path.resolve(packageCandidates[0]) : null;
|
|
79
|
-
|
|
116
|
+
const resolved = await confineJvmResolvedPath(projectRoot, packageCandidates[0] ? path.resolve(packageCandidates[0]) : null);
|
|
117
|
+
cache.set(cacheKey, resolved);
|
|
80
118
|
return resolved;
|
|
81
119
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
const symbolFiles = projectIndex.filesByPackageSymbol.get(packageName)?.get(importedName) ?? [];
|
|
91
|
-
const resolved = symbolFiles.length === 1 ? path.resolve(symbolFiles[0]) : null;
|
|
92
|
-
kotlinImportResolutionCache.set(cacheKey, resolved);
|
|
93
|
-
return resolved;
|
|
94
|
-
}
|
|
95
|
-
export async function resolveJavaImportPath(projectRoot, spec) {
|
|
96
|
-
const cacheKey = `${projectRoot}::${spec}`;
|
|
97
|
-
const cached = javaImportResolutionCache.get(cacheKey);
|
|
98
|
-
if (cached !== undefined)
|
|
99
|
-
return cached;
|
|
100
|
-
const parts = spec.split(".").filter(Boolean);
|
|
101
|
-
if (parts.length < 2) {
|
|
102
|
-
javaImportResolutionCache.set(cacheKey, null);
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
const projectIndex = await getJavaProjectSymbolIndex(projectRoot);
|
|
106
|
-
const exactPackageFiles = projectIndex.filesByPackage.get(spec) ?? [];
|
|
107
|
-
if (exactPackageFiles[0]) {
|
|
108
|
-
const resolved = path.resolve(exactPackageFiles[0]);
|
|
109
|
-
javaImportResolutionCache.set(cacheKey, resolved);
|
|
110
|
-
return resolved;
|
|
120
|
+
if (options.matchExactPackage) {
|
|
121
|
+
const exactPackageFiles = projectIndex.filesByPackage.get(spec) ?? [];
|
|
122
|
+
if (exactPackageFiles[0]) {
|
|
123
|
+
const resolved = await confineJvmResolvedPath(projectRoot, path.resolve(exactPackageFiles[0]));
|
|
124
|
+
cache.set(cacheKey, resolved);
|
|
125
|
+
return resolved;
|
|
126
|
+
}
|
|
111
127
|
}
|
|
112
128
|
const importedName = parts[parts.length - 1];
|
|
113
129
|
const packageName = parts.slice(0, -1).join(".");
|
|
114
130
|
const packageCandidates = projectIndex.filesByPackage.get(packageName) ?? [];
|
|
115
131
|
if (importedName === "*") {
|
|
116
|
-
const resolved = packageCandidates[0] ? path.resolve(packageCandidates[0]) : null;
|
|
117
|
-
|
|
132
|
+
const resolved = await confineJvmResolvedPath(projectRoot, packageCandidates[0] ? path.resolve(packageCandidates[0]) : null);
|
|
133
|
+
cache.set(cacheKey, resolved);
|
|
118
134
|
return resolved;
|
|
119
135
|
}
|
|
120
136
|
const symbolFiles = projectIndex.filesByPackageSymbol.get(packageName)?.get(importedName) ?? [];
|
|
121
|
-
const filenameMatched =
|
|
137
|
+
const filenameMatched = options.filenameFallback
|
|
138
|
+
? packageCandidates.filter((candidate) => path.parse(candidate).name === importedName)
|
|
139
|
+
: [];
|
|
122
140
|
const candidates = symbolFiles.length ? symbolFiles : filenameMatched;
|
|
123
|
-
const resolved = candidates.length === 1 ? path.resolve(candidates[0]) : null;
|
|
124
|
-
|
|
141
|
+
const resolved = candidates.length === 1 ? await confineJvmResolvedPath(projectRoot, path.resolve(candidates[0])) : null;
|
|
142
|
+
cache.set(cacheKey, resolved);
|
|
125
143
|
return resolved;
|
|
126
144
|
}
|
|
145
|
+
export async function resolveKotlinImportPath(projectRoot, spec, fromFile) {
|
|
146
|
+
return await resolveJvmImportPath(projectRoot, spec, {
|
|
147
|
+
languageId: "kotlin",
|
|
148
|
+
allowBarePackage: true,
|
|
149
|
+
matchExactPackage: false,
|
|
150
|
+
filenameFallback: false,
|
|
151
|
+
fromFile,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
export async function resolveJavaImportPath(projectRoot, spec, fromFile) {
|
|
155
|
+
return await resolveJvmImportPath(projectRoot, spec, {
|
|
156
|
+
languageId: "java",
|
|
157
|
+
allowBarePackage: false,
|
|
158
|
+
matchExactPackage: true,
|
|
159
|
+
filenameFallback: true,
|
|
160
|
+
fromFile,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
127
163
|
export function clearJvmResolutionCaches() {
|
|
128
164
|
kotlinImportResolutionCache.clear();
|
|
129
165
|
kotlinSymbolIndexCache.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jvm.js","sourceRoot":"","sources":["../../../src/util/resolution/jvm.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"jvm.js","sourceRoot":"","sources":["../../../src/util/resolution/jvm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { findFirstExistingResolutionCandidate } from "./find-first-existing.js";
|
|
3
3
|
import { resolvePackageExportTargets } from "../package-exports.js";
|
|
4
|
-
import { fileIdentityKey, isFilePathWithinRoot } from "../paths.js";
|
|
4
|
+
import { confineResolvedPath, fileIdentityKey, isFilePathWithinRoot } from "../paths.js";
|
|
5
5
|
import { directoryExists, loadJSON } from "../workspace.js";
|
|
6
6
|
export async function resolveFromNodeModules(spec, fromFile, projectRoot, resolutionExtensions, exportCondition = "import") {
|
|
7
7
|
try {
|
|
@@ -18,7 +18,7 @@ export async function resolveFromNodeModules(spec, fromFile, projectRoot, resolu
|
|
|
18
18
|
const pkg = await loadJSON(pkgPath);
|
|
19
19
|
const tryResolveRelative = async (rel) => {
|
|
20
20
|
const hit = await findFirstExistingResolutionCandidate(path.resolve(nmDir, rel), resolutionExtensions);
|
|
21
|
-
return
|
|
21
|
+
return await confineResolvedPath(resolvedProjectRoot, hit);
|
|
22
22
|
};
|
|
23
23
|
if (pkg && Object.hasOwn(pkg, "exports")) {
|
|
24
24
|
const exportKey = subpath ? `./${subpath}` : ".";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/util/resolution/node.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oCAAoC,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAmC,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/util/resolution/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"php-composer.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/php-composer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"php-composer.d.ts","sourceRoot":"","sources":["../../../src/util/resolution/php-composer.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AA6DF,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA8CnG;AAMD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAepH;AAYD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAepH;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKvG;AAED,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiB1G;AAED,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,iBAAiB,GAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAiFtB;AA4BD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,GAAG,OAAO,CAK1G;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAGvD"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import fsp from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { normalizePath } from "../paths.js";
|
|
3
|
+
import { normalizePath, stripBom } from "../paths.js";
|
|
4
4
|
import { listProjectFiles } from "../project-files.js";
|
|
5
5
|
import { fileExists } from "../workspace.js";
|
|
6
6
|
import { findFirstExistingResolutionCandidate } from "./find-first-existing.js";
|
|
7
7
|
import { findNearestFile } from "./files.js";
|
|
8
|
+
import { fileHasImportableLanguageExtension, getImportableLanguageExtensions, getImportableLanguageGlobs, } from "../resolution-candidates.js";
|
|
8
9
|
const phpComposerConfigCache = new Map();
|
|
9
10
|
const phpComposerAutoloadFileCache = new Map();
|
|
10
11
|
function readComposerNamespaceDirs(value, composerDir) {
|
|
@@ -60,7 +61,7 @@ export async function loadPhpComposerConfig(composerPath) {
|
|
|
60
61
|
const pending = (async () => {
|
|
61
62
|
try {
|
|
62
63
|
const raw = await fsp.readFile(composerPath, "utf8");
|
|
63
|
-
const parsed = JSON.parse(raw);
|
|
64
|
+
const parsed = JSON.parse(stripBom(raw));
|
|
64
65
|
const composerDir = path.dirname(composerPath);
|
|
65
66
|
const autoload = parsed.autoload && typeof parsed.autoload === "object" ? parsed.autoload : {};
|
|
66
67
|
const autoloadDev = parsed["autoload-dev"] && typeof parsed["autoload-dev"] === "object"
|
|
@@ -102,7 +103,7 @@ export async function resolvePhpPsr4MappedPath(spec, mappings) {
|
|
|
102
103
|
const suffix = normalizedSpec.slice(prefix.length).replace(/\\/g, "/");
|
|
103
104
|
for (const dir of dirs) {
|
|
104
105
|
const basePath = suffix ? path.join(dir, suffix) : dir;
|
|
105
|
-
const resolved = await findFirstExistingResolutionCandidate(basePath,
|
|
106
|
+
const resolved = await findFirstExistingResolutionCandidate(basePath, getImportableLanguageExtensions("php"));
|
|
106
107
|
if (resolved)
|
|
107
108
|
return resolved;
|
|
108
109
|
}
|
|
@@ -128,7 +129,7 @@ export async function resolvePhpPsr0MappedPath(spec, mappings) {
|
|
|
128
129
|
continue;
|
|
129
130
|
for (const dir of dirs) {
|
|
130
131
|
const basePath = relativePath ? path.join(dir, relativePath) : dir;
|
|
131
|
-
const resolved = await findFirstExistingResolutionCandidate(basePath,
|
|
132
|
+
const resolved = await findFirstExistingResolutionCandidate(basePath, getImportableLanguageExtensions("php"));
|
|
132
133
|
if (resolved)
|
|
133
134
|
return resolved;
|
|
134
135
|
}
|
|
@@ -204,7 +205,7 @@ export async function getPhpComposerAutoloadFiles(composerPath, composerConfig)
|
|
|
204
205
|
try {
|
|
205
206
|
const stat = await fsp.stat(root.path);
|
|
206
207
|
if (stat.isDirectory()) {
|
|
207
|
-
const files = await listProjectFiles(root.path,
|
|
208
|
+
const files = await listProjectFiles(root.path, getImportableLanguageGlobs("php"));
|
|
208
209
|
for (const filePath of files) {
|
|
209
210
|
if (!(await phpFileMatchesNamespacePrefixes(filePath, root.namespacePrefixes))) {
|
|
210
211
|
continue;
|
|
@@ -216,7 +217,7 @@ export async function getPhpComposerAutoloadFiles(composerPath, composerConfig)
|
|
|
216
217
|
}
|
|
217
218
|
continue;
|
|
218
219
|
}
|
|
219
|
-
if (stat.isFile() && root.path
|
|
220
|
+
if (stat.isFile() && fileHasImportableLanguageExtension(root.path, "php")) {
|
|
220
221
|
if (!(await phpFileMatchesNamespacePrefixes(root.path, root.namespacePrefixes)))
|
|
221
222
|
continue;
|
|
222
223
|
if (root.applyClassmapExcludes && isPhpComposerClassmapExcluded(root.path, composerConfig))
|
|
@@ -244,7 +245,7 @@ async function phpFileMatchesNamespacePrefixes(filePath, namespacePrefixes) {
|
|
|
244
245
|
}
|
|
245
246
|
let source;
|
|
246
247
|
try {
|
|
247
|
-
source = await fsp.readFile(filePath, "utf8");
|
|
248
|
+
source = stripBom(await fsp.readFile(filePath, "utf8"));
|
|
248
249
|
}
|
|
249
250
|
catch {
|
|
250
251
|
return false;
|