@lzehrung/codegraph 2.3.23 → 2.3.25
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/README.md +1 -1
- package/codegraph-skill/codegraph/SKILL.md +2 -2
- package/dist/bin/cli.js +3475 -1655
- package/dist/bin/query-index-worker.js +569 -229
- package/dist/cli/command-table.d.ts.map +1 -1
- package/dist/cli/command-table.js +1 -5
- package/dist/cli/command-table.js.map +1 -1
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +7 -4
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/doctor.d.ts +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +8 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/invocation-context.d.ts +2 -1
- package/dist/cli/invocation-context.d.ts.map +1 -1
- package/dist/cli/invocation-context.js +13 -0
- package/dist/cli/invocation-context.js.map +1 -1
- package/dist/document-links/asciidoc.d.ts.map +1 -1
- package/dist/document-links/asciidoc.js +33 -0
- package/dist/document-links/asciidoc.js.map +1 -1
- package/dist/document-links/language-ids.d.ts +10 -0
- package/dist/document-links/language-ids.d.ts.map +1 -0
- package/dist/document-links/language-ids.js +15 -0
- package/dist/document-links/language-ids.js.map +1 -0
- package/dist/document-links/markdown.d.ts.map +1 -1
- package/dist/document-links/markdown.js +103 -21
- package/dist/document-links/markdown.js.map +1 -1
- package/dist/document-links/shared.d.ts.map +1 -1
- package/dist/document-links/shared.js +1 -0
- package/dist/document-links/shared.js.map +1 -1
- package/dist/document-links.d.ts +1 -3
- package/dist/document-links.d.ts.map +1 -1
- package/dist/document-links.js +1 -8
- package/dist/document-links.js.map +1 -1
- package/dist/duplicates/unit-cache.d.ts +4 -3
- package/dist/duplicates/unit-cache.d.ts.map +1 -1
- package/dist/duplicates/unit-cache.js +17 -7
- package/dist/duplicates/unit-cache.js.map +1 -1
- package/dist/duplicates/units.d.ts +2 -1
- package/dist/duplicates/units.d.ts.map +1 -1
- package/dist/duplicates/units.js +77 -16
- package/dist/duplicates/units.js.map +1 -1
- package/dist/graphs/edge-resolution.d.ts.map +1 -1
- package/dist/graphs/edge-resolution.js +3 -0
- package/dist/graphs/edge-resolution.js.map +1 -1
- package/dist/graphs/external/stdlib.d.ts.map +1 -1
- package/dist/graphs/external/stdlib.js +18 -11
- package/dist/graphs/external/stdlib.js.map +1 -1
- package/dist/graphs/specifiers.d.ts +3 -2
- package/dist/graphs/specifiers.d.ts.map +1 -1
- package/dist/graphs/specifiers.js +76 -39
- package/dist/graphs/specifiers.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -1
- package/dist/indexer/build-cache/options.d.ts +8 -2
- package/dist/indexer/build-cache/options.d.ts.map +1 -1
- package/dist/indexer/build-cache/options.js +10 -2
- package/dist/indexer/build-cache/options.js.map +1 -1
- package/dist/indexer/build-cache/reports.d.ts.map +1 -1
- package/dist/indexer/build-cache/reports.js +29 -21
- package/dist/indexer/build-cache/reports.js.map +1 -1
- package/dist/indexer/expand-star-imports.d.ts.map +1 -1
- package/dist/indexer/expand-star-imports.js +8 -3
- package/dist/indexer/expand-star-imports.js.map +1 -1
- package/dist/indexer/imports/language-specific.d.ts.map +1 -1
- package/dist/indexer/imports/language-specific.js +166 -32
- 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 +4 -3
- package/dist/indexer/imports/native-captures.js.map +1 -1
- package/dist/indexer/imports/python.d.ts +2 -0
- package/dist/indexer/imports/python.d.ts.map +1 -1
- package/dist/indexer/imports/python.js +113 -8
- package/dist/indexer/imports/python.js.map +1 -1
- package/dist/indexer/imports.d.ts.map +1 -1
- package/dist/indexer/imports.js +25 -12
- package/dist/indexer/imports.js.map +1 -1
- package/dist/indexer/locals-and-exports.d.ts.map +1 -1
- package/dist/indexer/locals-and-exports.js +153 -38
- package/dist/indexer/locals-and-exports.js.map +1 -1
- package/dist/indexer/navigation-goto.js +1 -1
- package/dist/indexer/navigation-goto.js.map +1 -1
- package/dist/indexer/scope-types.d.ts +1 -1
- package/dist/indexer/scope-types.d.ts.map +1 -1
- package/dist/indexer/scope.d.ts.map +1 -1
- package/dist/indexer/scope.js +43 -2
- package/dist/indexer/scope.js.map +1 -1
- package/dist/languages/definitions/c-family.d.ts +5 -0
- package/dist/languages/definitions/c-family.d.ts.map +1 -1
- package/dist/languages/definitions/c-family.js +27 -6
- 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 +5 -0
- 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 +41 -3
- 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 +52 -21
- package/dist/languages/definitions/csharp.js.map +1 -1
- package/dist/languages/definitions/go.d.ts.map +1 -1
- package/dist/languages/definitions/go.js +10 -7
- package/dist/languages/definitions/go.js.map +1 -1
- package/dist/languages/definitions/html-stub.d.ts +6 -7
- package/dist/languages/definitions/html-stub.d.ts.map +1 -1
- package/dist/languages/definitions/html-stub.js +6 -7
- package/dist/languages/definitions/html-stub.js.map +1 -1
- package/dist/languages/definitions/html.js +13 -13
- 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 +6 -0
- 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 +48 -30
- package/dist/languages/definitions/javascript.js.map +1 -1
- package/dist/languages/definitions/kotlin.d.ts.map +1 -1
- package/dist/languages/definitions/kotlin.js +49 -61
- package/dist/languages/definitions/kotlin.js.map +1 -1
- package/dist/languages/definitions/php.js +1 -1
- package/dist/languages/definitions/php.js.map +1 -1
- package/dist/languages/definitions/python.d.ts.map +1 -1
- package/dist/languages/definitions/python.js +85 -20
- 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 +13 -11
- 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 +22 -5
- 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 +21 -17
- package/dist/languages/definitions/scss.js.map +1 -1
- package/dist/languages/definitions/sql.js +1 -1
- package/dist/languages/definitions/sql.js.map +1 -1
- package/dist/languages/definitions/swift.d.ts.map +1 -1
- package/dist/languages/definitions/swift.js +66 -16
- 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 +30 -9
- package/dist/languages/definitions/typescript.js.map +1 -1
- package/dist/languages/definitions/zig.d.ts.map +1 -1
- package/dist/languages/definitions/zig.js +26 -5
- package/dist/languages/definitions/zig.js.map +1 -1
- package/dist/languages/import-statement-parsers.d.ts +14 -1
- package/dist/languages/import-statement-parsers.d.ts.map +1 -1
- package/dist/languages/import-statement-parsers.js +473 -45
- package/dist/languages/import-statement-parsers.js.map +1 -1
- package/dist/languages/types.d.ts +11 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages.d.ts +1 -0
- package/dist/languages.d.ts.map +1 -1
- package/dist/languages.js +9 -2
- package/dist/languages.js.map +1 -1
- package/dist/native/backend-report-format.d.ts +4 -0
- package/dist/native/backend-report-format.d.ts.map +1 -0
- package/dist/native/backend-report-format.js +14 -0
- package/dist/native/backend-report-format.js.map +1 -0
- package/dist/native/contracts.d.ts +2 -0
- package/dist/native/contracts.d.ts.map +1 -1
- package/dist/util/comments.js +1 -1
- package/dist/util/comments.js.map +1 -1
- package/dist/util/member-access.d.ts +1 -1
- package/dist/util/member-access.d.ts.map +1 -1
- package/dist/util/member-access.js +5 -2
- package/dist/util/member-access.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/rust.d.ts +8 -1
- package/dist/util/resolution/rust.d.ts.map +1 -1
- package/dist/util/resolution/rust.js +521 -7
- package/dist/util/resolution/rust.js.map +1 -1
- package/dist/util/resolution-candidates.d.ts +1 -1
- package/dist/util/resolution-candidates.d.ts.map +1 -1
- package/dist/util/resolution-candidates.js +11 -8
- package/dist/util/resolution-candidates.js.map +1 -1
- package/dist/util/resolution.d.ts +5 -0
- package/dist/util/resolution.d.ts.map +1 -1
- package/dist/util/resolution.js +18 -7
- package/dist/util/resolution.js.map +1 -1
- package/dist/util/rust-test-modules.d.ts.map +1 -1
- package/dist/util/rust-test-modules.js +2 -5
- package/dist/util/rust-test-modules.js.map +1 -1
- package/dist/util/specifiers.d.ts +8 -0
- package/dist/util/specifiers.d.ts.map +1 -1
- package/dist/util/specifiers.js +33 -7
- package/dist/util/specifiers.js.map +1 -1
- package/package.json +3 -3
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import { resolvePythonModule } from "../../util/resolution.js";
|
|
4
4
|
import { stripPythonCommentsAndStrings } from "../../util/comments.js";
|
|
5
5
|
import { PYTHON_IDENTIFIER_SOURCE } from "../../util/identifiers.js";
|
|
6
|
+
import { utf8ByteOffsetToStringIndex } from "../../util/rust-test-modules.js";
|
|
6
7
|
function splitRelativeModuleSpec(moduleSpec) {
|
|
7
8
|
const match = moduleSpec.match(/^(\.+)(.*)$/);
|
|
8
9
|
if (!match)
|
|
@@ -93,14 +94,116 @@ async function pushDefaultImport(context, dotted, local, moduleLevel) {
|
|
|
93
94
|
});
|
|
94
95
|
}
|
|
95
96
|
const PYTHON_NAMED_IMPORT_PATTERN = new RegExp(String.raw `^(${PYTHON_IDENTIFIER_SOURCE})(?:\s+as\s+(${PYTHON_IDENTIFIER_SOURCE}))?$`, "u");
|
|
96
|
-
|
|
97
|
+
// Matches at a physical line start (capturing its indentation) or immediately after a `;`
|
|
98
|
+
// that ends a preceding simple statement on the same line, so `x = 1; import os` and a
|
|
99
|
+
// multi-line parenthesized statement's trailing `; import os` are both recognized. A
|
|
100
|
+
// compound-suite header's `:` is deliberately excluded, so `if x: import os` still is not.
|
|
101
|
+
const PYTHON_MODULE_IMPORT_PATTERN = new RegExp(String.raw `(^[\t ]*|;[\t ]*)import\s+(${PYTHON_IDENTIFIER_SOURCE}(?:\.${PYTHON_IDENTIFIER_SOURCE})*)\s*(?:as\s+(${PYTHON_IDENTIFIER_SOURCE}))?`, "gmu");
|
|
102
|
+
const PYTHON_MODULE_LIST_ITEM_PATTERN = new RegExp(String.raw `^(${PYTHON_IDENTIFIER_SOURCE}(?:\.${PYTHON_IDENTIFIER_SOURCE})*)(?:\s+as\s+(${PYTHON_IDENTIFIER_SOURCE}))?$`, "u");
|
|
103
|
+
function isPythonModuleLevelImportPrefix(prefix) {
|
|
104
|
+
if (/^[\t ]/.test(prefix))
|
|
105
|
+
return false;
|
|
106
|
+
const cleaned = stripPythonCommentsAndStrings(prefix).trim();
|
|
107
|
+
if (!cleaned)
|
|
108
|
+
return true;
|
|
109
|
+
// A same-line suite belongs to its compound statement, not the module.
|
|
110
|
+
if (/^(?:async\s+)?(?:if|elif|else|for|while|try|except|finally|with|def|class)\b/.test(cleaned)) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const delimiters = [];
|
|
114
|
+
for (const char of cleaned) {
|
|
115
|
+
if (char === "(")
|
|
116
|
+
delimiters.push(")");
|
|
117
|
+
else if (char === "[")
|
|
118
|
+
delimiters.push("]");
|
|
119
|
+
else if (char === "{")
|
|
120
|
+
delimiters.push("}");
|
|
121
|
+
else if (char === ")" || char === "]" || char === "}") {
|
|
122
|
+
// A closing delimiter with no matching open on this physical line belongs to a
|
|
123
|
+
// bracket opened on a preceding physical line (e.g. a multi-line parenthesized
|
|
124
|
+
// statement or suite header); it does not by itself make this a nested suite.
|
|
125
|
+
if (delimiters[delimiters.length - 1] === char)
|
|
126
|
+
delimiters.pop();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (delimiters.length || !cleaned.endsWith(";"))
|
|
130
|
+
return false;
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
// `strippedSrc` has already had comments/strings deleted (not offset-preserving), so
|
|
134
|
+
// `keywordStart` and every position derived from it are only meaningful within that same
|
|
135
|
+
// string. `isPythonModuleLevelImportPrefix` re-strips its input, which is a harmless no-op
|
|
136
|
+
// here since `strippedSrc` is already clean.
|
|
137
|
+
function isModuleLevelKeywordInStrippedSource(strippedSrc, keywordStart) {
|
|
138
|
+
const lineStart = strippedSrc.lastIndexOf("\n", keywordStart - 1) + 1;
|
|
139
|
+
return isPythonModuleLevelImportPrefix(strippedSrc.slice(lineStart, keywordStart));
|
|
140
|
+
}
|
|
141
|
+
function normalizePythonImportStatement(statement) {
|
|
142
|
+
return stripPythonCommentsAndStrings(statement)
|
|
143
|
+
.replace(/\\\r?\n[\t ]*/g, " ")
|
|
144
|
+
.trim();
|
|
145
|
+
}
|
|
146
|
+
async function collectPythonImportStatement(context, statement, moduleLevel) {
|
|
147
|
+
const normalized = normalizePythonImportStatement(statement);
|
|
148
|
+
const fromMatch = normalized.match(/^from\s+([^\s]+)\s+import\s+([\s\S]+)$/u);
|
|
149
|
+
if (fromMatch) {
|
|
150
|
+
const moduleSpec = fromMatch[1];
|
|
151
|
+
const importedList = fromMatch[2].trim().replace(/^\(\s*|\s*\)$/g, "");
|
|
152
|
+
for (const item of importedList
|
|
153
|
+
.split(",")
|
|
154
|
+
.map((entry) => entry.trim())
|
|
155
|
+
.filter(Boolean)) {
|
|
156
|
+
if (item === "*") {
|
|
157
|
+
await pushStarImport(context, moduleSpec, moduleLevel);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const aliasMatch = item.match(PYTHON_NAMED_IMPORT_PATTERN);
|
|
161
|
+
if (!aliasMatch)
|
|
162
|
+
continue;
|
|
163
|
+
const imported = aliasMatch[1];
|
|
164
|
+
await pushNamedImport(context, moduleSpec, imported, aliasMatch[2] ?? imported, moduleLevel);
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
const importMatch = normalized.match(/^import\s+([\s\S]+)$/u);
|
|
169
|
+
if (!importMatch)
|
|
170
|
+
return false;
|
|
171
|
+
for (const item of importMatch[1]
|
|
172
|
+
.split(",")
|
|
173
|
+
.map((entry) => entry.trim())
|
|
174
|
+
.filter(Boolean)) {
|
|
175
|
+
const aliasMatch = item.match(PYTHON_MODULE_LIST_ITEM_PATTERN);
|
|
176
|
+
if (!aliasMatch)
|
|
177
|
+
continue;
|
|
178
|
+
const dotted = aliasMatch[1];
|
|
179
|
+
await pushDefaultImport(context, dotted, aliasMatch[2] ?? dotted.split(".")[0], moduleLevel);
|
|
180
|
+
}
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
export async function collectPythonImportsFromNativeMatches(context, matches) {
|
|
184
|
+
for (const match of matches) {
|
|
185
|
+
const statementCapture = match.captures.find((capture) => capture.name === "stmt");
|
|
186
|
+
if (!statementCapture)
|
|
187
|
+
continue;
|
|
188
|
+
const startIndex = utf8ByteOffsetToStringIndex(context.source, statementCapture.start.index);
|
|
189
|
+
const lineStart = context.source.lastIndexOf("\n", startIndex - 1) + 1;
|
|
190
|
+
const prefix = context.source.slice(lineStart, startIndex);
|
|
191
|
+
const moduleLevel = isPythonModuleLevelImportPrefix(prefix);
|
|
192
|
+
await collectPythonImportStatement(context, statementCapture.text, moduleLevel);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
97
195
|
export async function collectPythonImportsFromSource(context) {
|
|
98
196
|
const pySrc = stripPythonCommentsAndStrings(context.source);
|
|
99
|
-
|
|
197
|
+
// Boundary group 1 captures either the line's leading indentation or the `;` (plus any
|
|
198
|
+
// following tabs/spaces) that separates this import from a completed simple statement on
|
|
199
|
+
// the same physical line; a compound-suite header's `:` is not part of this alternation, so
|
|
200
|
+
// `if x: import os` still is not recognized as a statement start here.
|
|
201
|
+
const fromLinePattern = /(^[\t ]*|;[\t ]*)from\s+([^\s]+)\s+import\s+([^\n;#]+)/gm;
|
|
100
202
|
for (const match of pySrc.matchAll(fromLinePattern)) {
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
const
|
|
203
|
+
const keywordStart = match.index + match[1].length;
|
|
204
|
+
const mod = match[2].trim();
|
|
205
|
+
const moduleLevel = isModuleLevelKeywordInStrippedSource(pySrc, keywordStart);
|
|
206
|
+
const items = match[3].split(",").map((item) => item.trim());
|
|
104
207
|
for (const item of items) {
|
|
105
208
|
if (item === "*") {
|
|
106
209
|
await pushStarImport(context, mod, moduleLevel);
|
|
@@ -118,9 +221,11 @@ export async function collectPythonImportsFromSource(context) {
|
|
|
118
221
|
}
|
|
119
222
|
const importPattern = PYTHON_MODULE_IMPORT_PATTERN;
|
|
120
223
|
for (const match of pySrc.matchAll(importPattern)) {
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
|
|
224
|
+
const keywordStart = match.index + match[1].length;
|
|
225
|
+
const dotted = match[2];
|
|
226
|
+
const local = match[3] ?? dotted.split(".")[0];
|
|
227
|
+
const moduleLevel = isModuleLevelKeywordInStrippedSource(pySrc, keywordStart);
|
|
228
|
+
await pushDefaultImport(context, dotted, local, moduleLevel);
|
|
124
229
|
}
|
|
125
230
|
}
|
|
126
231
|
//# sourceMappingURL=python.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/indexer/imports/python.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/indexer/imports/python.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/indexer/imports.ts"],"names":[],"mappings":"AACA,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/indexer/imports.ts"],"names":[],"mappings":"AACA,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAGL,KAAK,6BAA6B,EAEnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAU5D,OAAO,KAAK,EAAwB,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAYnH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,CAAC;IAC5E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB,GACA,OAAO,CAAC,aAAa,EAAE,CAAC,CAsO1B"}
|
package/dist/indexer/imports.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { prepareSourceInput } from "../languages/file-prep.js";
|
|
2
2
|
import { loadNearestTsconfigFor, resolveImportSpecifier } from "../util/resolution.js";
|
|
3
3
|
import { loadWorkspaceConfig } from "../util/workspace.js";
|
|
4
|
-
import { collectModuleSpecifiersFromSource, } from "../graphs/specifiers.js";
|
|
4
|
+
import { collectModuleSpecifiersFromSource, mapNativeExecutionFallbackReason, } from "../graphs/specifiers.js";
|
|
5
5
|
import { isGraphOnlyLanguage } from "../document-links.js";
|
|
6
6
|
import { stripJsLikeComments } from "../util/comments.js";
|
|
7
7
|
import { assertNativeRequiredAvailable, getNativeQueryExecution, isNativeBindingLoadedForLanguage, isNativeRequiredUnavailableError, isNativeQueryAuthoritative, } from "../native/tree-sitter-native.js";
|
|
@@ -9,7 +9,7 @@ import { collectGraphOnlyImports } from "./imports/graph-only.js";
|
|
|
9
9
|
import { collectJsTextImports, collectJsTextValueRequireImports } from "./imports/js-text-imports.js";
|
|
10
10
|
import { applyStatementImportOverride, createStatementImportOverrideState, finalizeLanguageSpecificImports, } from "./imports/language-specific.js";
|
|
11
11
|
import { collectNativeCaptureImportBindings } from "./imports/native-captures.js";
|
|
12
|
-
import { collectPythonImportsFromSource } from "./imports/python.js";
|
|
12
|
+
import { collectPythonImportsFromNativeMatches, collectPythonImportsFromSource } from "./imports/python.js";
|
|
13
13
|
export async function collectImportsForFile(file, projectRoot, opts) {
|
|
14
14
|
let source = opts?.source;
|
|
15
15
|
let sup = opts?.sup;
|
|
@@ -48,13 +48,26 @@ export async function collectImportsForFile(file, projectRoot, opts) {
|
|
|
48
48
|
nativeExecution = getNativeQueryExecution(resolvedSource, resolvedSup, nativeMode);
|
|
49
49
|
resolvedNativeQueries = nativeExecution.results;
|
|
50
50
|
}
|
|
51
|
+
// The graph and binding consumers must agree on why extraction fell back, so both map the
|
|
52
|
+
// native execution reason with the same rule instead of labelling it per call site.
|
|
53
|
+
const nativeExecutionFallbackReason = nativeExecution?.fallbackReason
|
|
54
|
+
? mapNativeExecutionFallbackReason(resolvedSup.id, nativeExecution.fallbackReason, false, resolvedNativeQueries !== null)
|
|
55
|
+
: null;
|
|
51
56
|
if (resolvedSup.id === "python") {
|
|
52
|
-
|
|
57
|
+
const context = {
|
|
53
58
|
file,
|
|
54
59
|
projectRoot,
|
|
55
60
|
source: resolvedSource,
|
|
56
61
|
pushBinding: (binding) => imports.push(binding),
|
|
57
|
-
}
|
|
62
|
+
};
|
|
63
|
+
if (resolvedNativeQueries) {
|
|
64
|
+
await collectPythonImportsFromNativeMatches(context, resolvedNativeQueries.importBindings);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await collectPythonImportsFromSource(context);
|
|
68
|
+
if (nativeExecutionFallbackReason)
|
|
69
|
+
reportFallback(nativeExecutionFallbackReason);
|
|
70
|
+
}
|
|
58
71
|
return imports;
|
|
59
72
|
}
|
|
60
73
|
let matchPath = opts?.matchPath;
|
|
@@ -63,8 +76,9 @@ export async function collectImportsForFile(file, projectRoot, opts) {
|
|
|
63
76
|
}
|
|
64
77
|
const workspaceConfig = opts?.workspaceConfig ?? (await loadWorkspaceConfig(projectRoot));
|
|
65
78
|
const resolvedImportCache = new Map();
|
|
66
|
-
const
|
|
67
|
-
|
|
79
|
+
const stylesheetLanguage = ["css", "scss", "less"].includes(resolvedSup.id);
|
|
80
|
+
const resolveFrom = async (from, phpImportType, resolutionKind) => {
|
|
81
|
+
const cacheKey = `${from}\0${phpImportType ?? ""}\0${resolutionKind ?? ""}`;
|
|
68
82
|
const cached = resolvedImportCache.get(cacheKey);
|
|
69
83
|
if (cached)
|
|
70
84
|
return await cached;
|
|
@@ -76,6 +90,8 @@ export async function collectImportsForFile(file, projectRoot, opts) {
|
|
|
76
90
|
resolveNodeModules: !!opts?.graphOptions?.resolveNodeModules,
|
|
77
91
|
...(resolutionHints ? { resolutionHints } : {}),
|
|
78
92
|
...(phpImportType ? { phpImportType } : {}),
|
|
93
|
+
...(resolutionKind ? { resolutionKind } : {}),
|
|
94
|
+
...(resolvedSup.id === "scss" && resolutionKind === "stylesheet" ? { allowScssPartialResolution: true } : {}),
|
|
79
95
|
});
|
|
80
96
|
return typeof result === "string" ? result.replace(/\\/g, "/") : result;
|
|
81
97
|
})();
|
|
@@ -87,7 +103,7 @@ export async function collectImportsForFile(file, projectRoot, opts) {
|
|
|
87
103
|
projectRoot,
|
|
88
104
|
source: resolvedSource,
|
|
89
105
|
languageId: resolvedSup.id,
|
|
90
|
-
resolveFrom,
|
|
106
|
+
resolveFrom: (from, phpImportType) => resolveFrom(from, phpImportType, stylesheetLanguage ? "stylesheet" : undefined),
|
|
91
107
|
pushBinding: (binding) => imports.push(binding),
|
|
92
108
|
getBindings: () => imports,
|
|
93
109
|
replaceBindings: (bindings) => imports.splice(0, imports.length, ...bindings),
|
|
@@ -116,10 +132,7 @@ export async function collectImportsForFile(file, projectRoot, opts) {
|
|
|
116
132
|
});
|
|
117
133
|
};
|
|
118
134
|
const nativeLanguageAvailable = isNativeBindingLoadedForLanguage(resolvedSup.id, nativeMode);
|
|
119
|
-
let nativeFallbackReason =
|
|
120
|
-
if (nativeExecution?.fallbackReason === "queryFailure") {
|
|
121
|
-
nativeFallbackReason = "query-error";
|
|
122
|
-
}
|
|
135
|
+
let nativeFallbackReason = nativeExecutionFallbackReason;
|
|
123
136
|
if (resolvedNativeQueries) {
|
|
124
137
|
try {
|
|
125
138
|
await collectNativeCaptureImportBindings({
|
|
@@ -176,7 +189,7 @@ export async function collectImportsForFile(file, projectRoot, opts) {
|
|
|
176
189
|
imports.push({
|
|
177
190
|
kind: "star",
|
|
178
191
|
from: specifier.spec,
|
|
179
|
-
resolved: await resolveFrom(specifier.spec),
|
|
192
|
+
resolved: await resolveFrom(specifier.spec, undefined, specifier.resolutionKind),
|
|
180
193
|
...(specifier.typeOnly ? { typeOnly: true } : {}),
|
|
181
194
|
});
|
|
182
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/indexer/imports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAoB,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAwB,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EACL,iCAAiC,
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/indexer/imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locals-and-exports.d.ts","sourceRoot":"","sources":["../../src/indexer/locals-and-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAe,aAAa,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"locals-and-exports.d.ts","sourceRoot":"","sources":["../../src/indexer/locals-and-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAe,aAAa,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AA+VrF,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,aAAa,EAAO,EAC7B,IAAI,CAAC,EAAE;IACL,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GACA,WAAW,CAqwBb"}
|
|
@@ -8,11 +8,23 @@ import { sliceText, toRange, unquote } from "../util/ast.js";
|
|
|
8
8
|
import { bindingKindToSymbolKind } from "./declarations.js";
|
|
9
9
|
import { buildScopeIndexFromSource } from "./scope.js";
|
|
10
10
|
import { SymbolKind } from "./types.js";
|
|
11
|
-
import { ECMASCRIPT_IDENTIFIER_SOURCE } from "../util/identifiers.js";
|
|
11
|
+
import { ECMASCRIPT_IDENTIFIER_SOURCE, XID_IDENTIFIER_SOURCE } from "../util/identifiers.js";
|
|
12
|
+
/**
|
|
13
|
+
* Matches one `exportScopeBlockers` entry against an ancestor node. A plain entry compares the
|
|
14
|
+
* node type; a `parent>node` entry also requires that parent type, which is how Python separates a
|
|
15
|
+
* function body from a class body when the grammar spells both `block`.
|
|
16
|
+
*/
|
|
17
|
+
function matchesExportScopeBlocker(node, blocker) {
|
|
18
|
+
const separator = blocker.indexOf(">");
|
|
19
|
+
if (separator < 0)
|
|
20
|
+
return node.type === blocker;
|
|
21
|
+
return node.type === blocker.slice(separator + 1) && node.parent?.type === blocker.slice(0, separator);
|
|
22
|
+
}
|
|
12
23
|
const JS_FALLBACK_DECLARATION_PATTERN = new RegExp(String.raw `\bexport\s+(?:const|let|var|function|class)\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})`, "gu");
|
|
13
24
|
const JS_FALLBACK_DEFAULT_PATTERN = new RegExp(String.raw `\bexport\s+default\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})`, "gu");
|
|
14
25
|
const JS_FALLBACK_EXPORT_ASSIGN_PATTERN = new RegExp(String.raw `\bexport\s*=\s*(${ECMASCRIPT_IDENTIFIER_SOURCE})`, "gu");
|
|
15
|
-
const JS_FALLBACK_REEXPORT_SPECIFIER_PATTERN = new RegExp(String.raw `^(${ECMASCRIPT_IDENTIFIER_SOURCE})(?:\s+as\s+(${ECMASCRIPT_IDENTIFIER_SOURCE}))?$`, "u");
|
|
26
|
+
const JS_FALLBACK_REEXPORT_SPECIFIER_PATTERN = new RegExp(String.raw `^(?:type\s+)?(${ECMASCRIPT_IDENTIFIER_SOURCE})(?:\s+as\s+(${ECMASCRIPT_IDENTIFIER_SOURCE}))?$`, "u");
|
|
27
|
+
const JS_FALLBACK_REEXPORT_TYPE_SPECIFIER_PATTERN = new RegExp(String.raw `^type\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})(?:\s+as\s+(${ECMASCRIPT_IDENTIFIER_SOURCE}))?$`, "u");
|
|
16
28
|
const JS_FALLBACK_REEXPORT_NAMESPACE_PATTERN = new RegExp(String.raw `\bexport\s*\*\s+as\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})\s+from\s*("|')([^"']*)\2`, "gu");
|
|
17
29
|
const JS_FALLBACK_CJS_FUNCTION_PATTERN = new RegExp(String.raw `(?:^|[;\n\r])\s*(?:exports|module\.exports)\.(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*=\s*(function\b|\([^)]*\)\s*=>)`, "gu");
|
|
18
30
|
const JS_FALLBACK_CJS_OBJECT_FUNCTION_PATTERN = new RegExp(String.raw `(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*:\s*(function\b|\([^)]*\)\s*=>)`, "gu");
|
|
@@ -71,6 +83,74 @@ function isTypeMemberDeclaration(node) {
|
|
|
71
83
|
}
|
|
72
84
|
return false;
|
|
73
85
|
}
|
|
86
|
+
const C_DECLARATOR_IDENTIFIER_PATTERN = new RegExp(`^${XID_IDENTIFIER_SOURCE}`, "u");
|
|
87
|
+
const C_DECLARATOR_QUALIFIER_PATTERN = /^(?:const|volatile|restrict|_Atomic)\b/;
|
|
88
|
+
function cDeclaratorDeclaredName(text) {
|
|
89
|
+
const masked = maskJsLikeCommentsAndStrings(text);
|
|
90
|
+
let index = 0;
|
|
91
|
+
while (index < masked.length) {
|
|
92
|
+
if (/[\s(*&]/.test(masked[index])) {
|
|
93
|
+
index += 1;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const rest = masked.slice(index);
|
|
97
|
+
const qualifier = C_DECLARATOR_QUALIFIER_PATTERN.exec(rest);
|
|
98
|
+
if (qualifier) {
|
|
99
|
+
index += qualifier[0].length;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const ident = C_DECLARATOR_IDENTIFIER_PATTERN.exec(rest);
|
|
103
|
+
if (!ident || rest.slice(ident[0].length).trimStart().startsWith("::"))
|
|
104
|
+
return undefined;
|
|
105
|
+
return { name: ident[0], start: index, end: index + ident[0].length };
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
function declaratorNameNode(node) {
|
|
110
|
+
let current = node;
|
|
111
|
+
while (current) {
|
|
112
|
+
if (current.type === "identifier" || current.type === "type_identifier")
|
|
113
|
+
return current;
|
|
114
|
+
const next = current.childForFieldName("declarator");
|
|
115
|
+
if (next) {
|
|
116
|
+
current = next;
|
|
117
|
+
}
|
|
118
|
+
else if (current.type === "parenthesized_declarator") {
|
|
119
|
+
current = current.namedChildren.find((child) => child.type !== "comment");
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
function declaratorCaptureName(capture, node) {
|
|
128
|
+
const fromNode = declaratorNameNode(node)?.text;
|
|
129
|
+
if (fromNode)
|
|
130
|
+
return fromNode;
|
|
131
|
+
if (capture.nodeType === "identifier" || capture.nodeType === "type_identifier")
|
|
132
|
+
return capture.text;
|
|
133
|
+
return cDeclaratorDeclaredName(capture.text)?.name;
|
|
134
|
+
}
|
|
135
|
+
function localExportDedupeKey(entry) {
|
|
136
|
+
return `${entry.exportedAs}\0${entry.target.localName}\0${entry.target.range.start.index ?? 0}\0${entry.target.range.end.index ?? 0}`;
|
|
137
|
+
}
|
|
138
|
+
function dedupeExportEntries(entries) {
|
|
139
|
+
const seen = new Set();
|
|
140
|
+
const out = [];
|
|
141
|
+
for (const entry of entries) {
|
|
142
|
+
if (entry.type !== "local") {
|
|
143
|
+
out.push(entry);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const key = localExportDedupeKey(entry);
|
|
147
|
+
if (seen.has(key))
|
|
148
|
+
continue;
|
|
149
|
+
seen.add(key);
|
|
150
|
+
out.push(entry);
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
74
154
|
function appendJsLikeRegexFallbackExports(file, source, locals, exports) {
|
|
75
155
|
const maskedSource = maskJsLikeCommentsAndStrings(source);
|
|
76
156
|
JS_FALLBACK_DECLARATION_PATTERN.lastIndex = 0;
|
|
@@ -82,7 +162,7 @@ function appendJsLikeRegexFallbackExports(file, source, locals, exports) {
|
|
|
82
162
|
const reDecl = JS_FALLBACK_DECLARATION_PATTERN;
|
|
83
163
|
const reDefault = JS_FALLBACK_DEFAULT_PATTERN;
|
|
84
164
|
const reExportAssign = JS_FALLBACK_EXPORT_ASSIGN_PATTERN;
|
|
85
|
-
const reReexport = new RegExp(String.raw `\bexport\s
|
|
165
|
+
const reReexport = new RegExp(String.raw `\bexport\b\s*(type\s+)?\{\s*([^}]*)\}\s*from\s*("|')([^"']*)\3`, "gu");
|
|
86
166
|
const reReexportNs = JS_FALLBACK_REEXPORT_NAMESPACE_PATTERN;
|
|
87
167
|
const reStar = /\bexport\s*\*\s*from\s*("|')([^"']*)\1/gu;
|
|
88
168
|
const reCjsFn = JS_FALLBACK_CJS_FUNCTION_PATTERN;
|
|
@@ -124,7 +204,8 @@ function appendJsLikeRegexFallbackExports(file, source, locals, exports) {
|
|
|
124
204
|
}
|
|
125
205
|
}
|
|
126
206
|
while ((match = reReexport.exec(maskedSource))) {
|
|
127
|
-
const
|
|
207
|
+
const statementTypeOnly = Boolean(match[1]);
|
|
208
|
+
const list = match[2]
|
|
128
209
|
.split(",")
|
|
129
210
|
.map((item) => item.trim())
|
|
130
211
|
.filter(Boolean);
|
|
@@ -137,12 +218,14 @@ function appendJsLikeRegexFallbackExports(file, source, locals, exports) {
|
|
|
137
218
|
continue;
|
|
138
219
|
const srcName = entryMatch[1];
|
|
139
220
|
const alias = entryMatch[2] ?? srcName;
|
|
221
|
+
const typeOnly = statementTypeOnly || JS_FALLBACK_REEXPORT_TYPE_SPECIFIER_PATTERN.test(spec);
|
|
140
222
|
if (!exports.some((entry) => entry.type === "reexport" && entry.exportedAs === alias && entry.fromModule === from)) {
|
|
141
223
|
exports.push({
|
|
142
224
|
type: "reexport",
|
|
143
225
|
exportedAs: alias,
|
|
144
226
|
fromModule: from,
|
|
145
227
|
sourceSpecifier: srcName,
|
|
228
|
+
typeOnly,
|
|
146
229
|
});
|
|
147
230
|
}
|
|
148
231
|
}
|
|
@@ -394,14 +477,12 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
394
477
|
return SymbolKind.Class;
|
|
395
478
|
return SymbolKind.Variable;
|
|
396
479
|
};
|
|
397
|
-
const classifyLocalCapture = (
|
|
480
|
+
const classifyLocalCapture = (node) => {
|
|
398
481
|
if (node)
|
|
399
482
|
return toKind(support.classifyDefinition(node));
|
|
400
|
-
if ("name" in capture && capture.name === "tname") {
|
|
401
|
-
return SymbolKind.TypeAlias;
|
|
402
|
-
}
|
|
403
483
|
return SymbolKind.Variable;
|
|
404
484
|
};
|
|
485
|
+
// Declarator captures name the declared entity, never parameter or array-bound types.
|
|
405
486
|
const extractLocalsFromNativeQueries = () => {
|
|
406
487
|
if (!nativeQueries)
|
|
407
488
|
return false;
|
|
@@ -415,12 +496,31 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
415
496
|
const enrichmentTree = ensureTree();
|
|
416
497
|
for (const match of nativeQueries.locals) {
|
|
417
498
|
for (const capture of match.captures) {
|
|
418
|
-
if (capture.name !== "name" && capture.name !== "
|
|
499
|
+
if (capture.name !== "name" && capture.name !== "declarator")
|
|
419
500
|
continue;
|
|
420
501
|
const nativeRange = rangeFromNativeCapture(capture, ensureByteIndexMap());
|
|
421
502
|
const node = enrichmentTree?.rootNode.descendantForIndex(nativeRange.start.index ?? 0, nativeRange.end.index ?? 0) ??
|
|
422
503
|
undefined;
|
|
423
|
-
|
|
504
|
+
if (capture.name === "declarator") {
|
|
505
|
+
const namedNode = declaratorNameNode(node);
|
|
506
|
+
if (namedNode) {
|
|
507
|
+
pushLocal(namedNode.text, classifyLocalCapture(namedNode), toRange(namedNode), namedNode);
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
const extracted = cDeclaratorDeclaredName(capture.text);
|
|
511
|
+
if (!extracted)
|
|
512
|
+
continue;
|
|
513
|
+
if (capture.nodeType === "identifier" || capture.nodeType === "type_identifier") {
|
|
514
|
+
pushLocal(capture.text, SymbolKind.TypeAlias, nativeRange);
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
pushLocal(extracted.name, SymbolKind.TypeAlias, rangeFromOffsets((nativeRange.start.index ?? 0) + extracted.start, (nativeRange.start.index ?? 0) + extracted.end));
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
pushLocal(capture.text, classifyLocalCapture(node), nativeRange, node);
|
|
523
|
+
}
|
|
424
524
|
capturedLocals = true;
|
|
425
525
|
}
|
|
426
526
|
}
|
|
@@ -432,9 +532,7 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
432
532
|
return false;
|
|
433
533
|
}
|
|
434
534
|
};
|
|
435
|
-
const
|
|
436
|
-
const usedNativeLocals = extractLocalsFromNativeQueries();
|
|
437
|
-
const usedQueryLocals = usedNativeLocals || extractLocalsFromJsQueries();
|
|
535
|
+
const usedQueryLocals = extractLocalsFromNativeQueries();
|
|
438
536
|
if (!usedQueryLocals) {
|
|
439
537
|
const scopeTree = ensureTree();
|
|
440
538
|
if (scopeTree) {
|
|
@@ -526,14 +624,44 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
526
624
|
return (node.childForFieldName("name") ?? node.childForFieldName("declaration")?.childForFieldName("name") ?? undefined);
|
|
527
625
|
};
|
|
528
626
|
const hasDefaultExport = () => exports.some((entry) => entry.type === "local" && entry.exportedAs === "default");
|
|
627
|
+
const excludedCaptures = [];
|
|
628
|
+
if (!treeForEnrichment) {
|
|
629
|
+
for (const match of matches) {
|
|
630
|
+
for (const capture of match.captures) {
|
|
631
|
+
if (capture.name === "export_scope" || capture.name === "private_declaration")
|
|
632
|
+
excludedCaptures.push(capture);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
// Native scope captures preserve C/C++ exclusions without an enrichment tree.
|
|
637
|
+
const isOutsideModuleScope = (capture) => {
|
|
638
|
+
if (!capture || !support.exportScopeBlockers.length)
|
|
639
|
+
return false;
|
|
640
|
+
let current = nodeForCapture(capture)?.parent ?? undefined;
|
|
641
|
+
while (current) {
|
|
642
|
+
const ancestor = current;
|
|
643
|
+
if (support.exportScopeBlockers.some((blocker) => matchesExportScopeBlocker(ancestor, blocker)))
|
|
644
|
+
return true;
|
|
645
|
+
current = ancestor.parent ?? undefined;
|
|
646
|
+
}
|
|
647
|
+
return excludedCaptures.some((scope) => capture.start.index >= scope.start.index && capture.end.index <= scope.end.index);
|
|
648
|
+
};
|
|
529
649
|
for (const match of matches) {
|
|
530
650
|
const map = capturesByName(match);
|
|
531
651
|
const stmtText = map["stmt"]?.text ?? "";
|
|
652
|
+
if (support.id === "c" || support.id === "cpp") {
|
|
653
|
+
const declarationNode = nodeForCapture(map["declaration"]);
|
|
654
|
+
const hasStaticStorageClass = declarationNode?.namedChildren.some((child) => child.type === "storage_class_specifier" && child.text === "static");
|
|
655
|
+
if (hasStaticStorageClass)
|
|
656
|
+
continue;
|
|
657
|
+
}
|
|
658
|
+
if (isOutsideModuleScope(map["name"] ?? map["src"]))
|
|
659
|
+
continue;
|
|
532
660
|
const isTypeOnly = support.isTypeOnly(stmtText);
|
|
533
661
|
if (support.id === "python") {
|
|
534
662
|
const leftText = map["left"]?.text ?? "";
|
|
535
663
|
const methodText = map["method"]?.text ?? "";
|
|
536
|
-
const isAllAssignment = leftText === "__all__";
|
|
664
|
+
const isAllAssignment = leftText === "__all__" && !methodText;
|
|
537
665
|
const isAllMethod = leftText === "__all__" && (methodText === "extend" || methodText === "append");
|
|
538
666
|
if (isAllAssignment || isAllMethod) {
|
|
539
667
|
hasPythonAll = true;
|
|
@@ -551,26 +679,6 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
551
679
|
});
|
|
552
680
|
}
|
|
553
681
|
}
|
|
554
|
-
if (isAllAssignment && map["stmt"]) {
|
|
555
|
-
const assignmentText = map["stmt"].text;
|
|
556
|
-
const hasTuple = /=\s*\(/.test(assignmentText);
|
|
557
|
-
if (!items.length || hasTuple) {
|
|
558
|
-
const strRe = /["']([^"']+)["']/g;
|
|
559
|
-
for (let submatch; (submatch = strRe.exec(assignmentText));) {
|
|
560
|
-
const name = submatch[1];
|
|
561
|
-
pythonAllExports.add(name);
|
|
562
|
-
const local = mergedLocals.find((def) => def.localName === name);
|
|
563
|
-
if (local &&
|
|
564
|
-
!exports.some((entry) => entry.type !== "exportStar" && "exportedAs" in entry && entry.exportedAs === name)) {
|
|
565
|
-
exports.push({
|
|
566
|
-
type: "local",
|
|
567
|
-
exportedAs: name,
|
|
568
|
-
target: local,
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
682
|
continue;
|
|
575
683
|
}
|
|
576
684
|
if (map["name"]) {
|
|
@@ -597,7 +705,7 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
597
705
|
fromModule: from,
|
|
598
706
|
moduleSpecifier: from,
|
|
599
707
|
sourceSpecifier: srcName,
|
|
600
|
-
typeOnly: isTypeOnly,
|
|
708
|
+
typeOnly: Boolean(map["type_kw"]) || isTypeOnly,
|
|
601
709
|
});
|
|
602
710
|
}
|
|
603
711
|
else if (/^\s*export\s*\*/.test(stmtText)) {
|
|
@@ -785,8 +893,15 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
785
893
|
}
|
|
786
894
|
continue;
|
|
787
895
|
}
|
|
788
|
-
|
|
789
|
-
|
|
896
|
+
const nameCapture = map["name"] ?? map["declarator"];
|
|
897
|
+
if (nameCapture) {
|
|
898
|
+
if (isOutsideModuleScope(nameCapture))
|
|
899
|
+
continue;
|
|
900
|
+
const nameText = map["declarator"]
|
|
901
|
+
? declaratorCaptureName(nameCapture, nodeForCapture(nameCapture))
|
|
902
|
+
: nameCapture.text;
|
|
903
|
+
if (!nameText)
|
|
904
|
+
continue;
|
|
790
905
|
const local = locals.find((def) => def.localName === nameText);
|
|
791
906
|
if (local) {
|
|
792
907
|
const isDefaultExport = /^\s*export\s+default\b/.test(stmtText);
|
|
@@ -926,6 +1041,6 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
|
|
|
926
1041
|
}
|
|
927
1042
|
}
|
|
928
1043
|
}
|
|
929
|
-
return { file, exports, imports, locals };
|
|
1044
|
+
return { file, exports: dedupeExportEntries(exports), imports, locals };
|
|
930
1045
|
}
|
|
931
1046
|
//# sourceMappingURL=locals-and-exports.js.map
|