@flyingrobots/graft 0.11.1 → 0.13.0
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/CHANGELOG.md +251 -0
- package/README.md +7 -0
- package/dist/adapters/fake-echo-kernel-transport.d.ts.map +1 -1
- package/dist/adapters/fake-echo-kernel-transport.js +12 -0
- package/dist/adapters/fake-echo-kernel-transport.js.map +1 -1
- package/dist/adapters/node-fs.d.ts.map +1 -1
- package/dist/adapters/node-fs.js +6 -0
- package/dist/adapters/node-fs.js.map +1 -1
- package/dist/api/index.d.ts +2 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/repo-workspace.d.ts.map +1 -1
- package/dist/api/repo-workspace.js +3 -0
- package/dist/api/repo-workspace.js.map +1 -1
- package/dist/cli/cli-error.d.ts.map +1 -1
- package/dist/cli/cli-error.js +4 -1
- package/dist/cli/cli-error.js.map +1 -1
- package/dist/cli/command-parser.d.ts.map +1 -1
- package/dist/cli/command-parser.js +5 -0
- package/dist/cli/command-parser.js.map +1 -1
- package/dist/cli/structural-review-render.d.ts.map +1 -1
- package/dist/cli/structural-review-render.js +5 -0
- package/dist/cli/structural-review-render.js.map +1 -1
- package/dist/contracts/capabilities.d.ts +12 -5
- package/dist/contracts/capabilities.d.ts.map +1 -1
- package/dist/contracts/capabilities.js +38 -0
- package/dist/contracts/capabilities.js.map +1 -1
- package/dist/contracts/output-schema-cli.d.ts +56 -0
- package/dist/contracts/output-schema-cli.d.ts.map +1 -1
- package/dist/contracts/output-schema-cli.js +1 -0
- package/dist/contracts/output-schema-cli.js.map +1 -1
- package/dist/contracts/output-schema-mcp.d.ts +79 -1
- package/dist/contracts/output-schema-mcp.d.ts.map +1 -1
- package/dist/contracts/output-schema-mcp.js +27 -0
- package/dist/contracts/output-schema-mcp.js.map +1 -1
- package/dist/contracts/output-schema-meta.d.ts +18 -4
- package/dist/contracts/output-schema-meta.d.ts.map +1 -1
- package/dist/contracts/output-schema-meta.js +35 -5
- package/dist/contracts/output-schema-meta.js.map +1 -1
- package/dist/contracts/output-schemas.d.ts +3 -5
- package/dist/contracts/output-schemas.d.ts.map +1 -1
- package/dist/contracts/output-schemas.js +21 -37
- package/dist/contracts/output-schemas.js.map +1 -1
- package/dist/echo/structural-history-client.d.ts.map +1 -1
- package/dist/echo/structural-history-client.js +12 -0
- package/dist/echo/structural-history-client.js.map +1 -1
- package/dist/echo/structural-reading-adapter.d.ts.map +1 -1
- package/dist/echo/structural-reading-adapter.js +55 -2
- package/dist/echo/structural-reading-adapter.js.map +1 -1
- package/dist/echo/structural-reading-generated-model.d.ts.map +1 -1
- package/dist/echo/structural-reading-generated-model.js +7 -3
- package/dist/echo/structural-reading-generated-model.js.map +1 -1
- package/dist/mcp/burden.d.ts.map +1 -1
- package/dist/mcp/burden.js +1 -0
- package/dist/mcp/burden.js.map +1 -1
- package/dist/mcp/daemon-control-plane.d.ts.map +1 -1
- package/dist/mcp/daemon-control-plane.js +6 -1
- package/dist/mcp/daemon-control-plane.js.map +1 -1
- package/dist/mcp/daemon-scheduler-config.d.ts +53 -0
- package/dist/mcp/daemon-scheduler-config.d.ts.map +1 -0
- package/dist/mcp/daemon-scheduler-config.js +33 -0
- package/dist/mcp/daemon-scheduler-config.js.map +1 -0
- package/dist/mcp/daemon-server.d.ts.map +1 -1
- package/dist/mcp/daemon-server.js +2 -1
- package/dist/mcp/daemon-server.js.map +1 -1
- package/dist/mcp/receipt.d.ts +3 -0
- package/dist/mcp/receipt.d.ts.map +1 -1
- package/dist/mcp/receipt.js +4 -0
- package/dist/mcp/receipt.js.map +1 -1
- package/dist/mcp/repo-tool-job.d.ts +2 -1
- package/dist/mcp/repo-tool-job.d.ts.map +1 -1
- package/dist/mcp/repo-tool-job.js.map +1 -1
- package/dist/mcp/repo-tool-worker-context.d.ts.map +1 -1
- package/dist/mcp/repo-tool-worker-context.js +1 -0
- package/dist/mcp/repo-tool-worker-context.js.map +1 -1
- package/dist/mcp/repo-workspace.d.ts.map +1 -1
- package/dist/mcp/repo-workspace.js +5 -1
- package/dist/mcp/repo-workspace.js.map +1 -1
- package/dist/mcp/server-invocation.d.ts.map +1 -1
- package/dist/mcp/server-invocation.js +52 -11
- package/dist/mcp/server-invocation.js.map +1 -1
- package/dist/mcp/server-tool-access.d.ts +2 -0
- package/dist/mcp/server-tool-access.d.ts.map +1 -1
- package/dist/mcp/server-tool-access.js +6 -11
- package/dist/mcp/server-tool-access.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +3 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +2 -0
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools/changed-since.d.ts.map +1 -1
- package/dist/mcp/tools/changed-since.js +8 -63
- package/dist/mcp/tools/changed-since.js.map +1 -1
- package/dist/mcp/tools/code-find.d.ts.map +1 -1
- package/dist/mcp/tools/code-find.js +1 -0
- package/dist/mcp/tools/code-find.js.map +1 -1
- package/dist/mcp/tools/code-refs.d.ts.map +1 -1
- package/dist/mcp/tools/code-refs.js +1 -0
- package/dist/mcp/tools/code-refs.js.map +1 -1
- package/dist/mcp/tools/code-show.d.ts.map +1 -1
- package/dist/mcp/tools/code-show.js +17 -10
- package/dist/mcp/tools/code-show.js.map +1 -1
- package/dist/mcp/tools/file-outline.d.ts.map +1 -1
- package/dist/mcp/tools/file-outline.js +18 -39
- package/dist/mcp/tools/file-outline.js.map +1 -1
- package/dist/mcp/tools/graft-diff.js +1 -1
- package/dist/mcp/tools/graft-diff.js.map +1 -1
- package/dist/mcp/tools/import-diagnostics.d.ts +3 -0
- package/dist/mcp/tools/import-diagnostics.d.ts.map +1 -0
- package/dist/mcp/tools/import-diagnostics.js +25 -0
- package/dist/mcp/tools/import-diagnostics.js.map +1 -0
- package/dist/mcp/tools/map.d.ts.map +1 -1
- package/dist/mcp/tools/map.js +1 -0
- package/dist/mcp/tools/map.js.map +1 -1
- package/dist/mcp/tools/precision-live.d.ts +8 -0
- package/dist/mcp/tools/precision-live.d.ts.map +1 -1
- package/dist/mcp/tools/precision-live.js +16 -3
- package/dist/mcp/tools/precision-live.js.map +1 -1
- package/dist/mcp/tools/precision.d.ts +1 -1
- package/dist/mcp/tools/precision.d.ts.map +1 -1
- package/dist/mcp/tools/precision.js +1 -1
- package/dist/mcp/tools/precision.js.map +1 -1
- package/dist/mcp/tools/read-range.d.ts.map +1 -1
- package/dist/mcp/tools/read-range.js +23 -8
- package/dist/mcp/tools/read-range.js.map +1 -1
- package/dist/mcp/tools/safe-read.js +1 -1
- package/dist/mcp/tools/safe-read.js.map +1 -1
- package/dist/mcp/tools/since.d.ts.map +1 -1
- package/dist/mcp/tools/since.js +1 -0
- package/dist/mcp/tools/since.js.map +1 -1
- package/dist/mcp/tools/structural-review.d.ts.map +1 -1
- package/dist/mcp/tools/structural-review.js +16 -13
- package/dist/mcp/tools/structural-review.js.map +1 -1
- package/dist/mcp/workspace-read-observation-model.d.ts +1 -0
- package/dist/mcp/workspace-read-observation-model.d.ts.map +1 -1
- package/dist/mcp/workspace-read-observation-model.js +1 -0
- package/dist/mcp/workspace-read-observation-model.js.map +1 -1
- package/dist/mcp/workspace-read-observation.d.ts.map +1 -1
- package/dist/mcp/workspace-read-observation.js +3 -1
- package/dist/mcp/workspace-read-observation.js.map +1 -1
- package/dist/mcp/workspace-router-model.d.ts +16 -0
- package/dist/mcp/workspace-router-model.d.ts.map +1 -1
- package/dist/mcp/workspace-router-model.js +15 -0
- package/dist/mcp/workspace-router-model.js.map +1 -1
- package/dist/mcp/workspace-router-resolution.d.ts.map +1 -1
- package/dist/mcp/workspace-router-resolution.js +19 -1
- package/dist/mcp/workspace-router-resolution.js.map +1 -1
- package/dist/mcp/workspace-router.d.ts +8 -1
- package/dist/mcp/workspace-router.d.ts.map +1 -1
- package/dist/mcp/workspace-router.js +89 -2
- package/dist/mcp/workspace-router.js.map +1 -1
- package/dist/operations/file-outline.d.ts +13 -4
- package/dist/operations/file-outline.d.ts.map +1 -1
- package/dist/operations/file-outline.js +12 -7
- package/dist/operations/file-outline.js.map +1 -1
- package/dist/operations/read-range.d.ts +9 -4
- package/dist/operations/read-range.d.ts.map +1 -1
- package/dist/operations/read-range.js +12 -7
- package/dist/operations/read-range.js.map +1 -1
- package/dist/operations/repo-workspace.d.ts +53 -3
- package/dist/operations/repo-workspace.d.ts.map +1 -1
- package/dist/operations/repo-workspace.js +125 -65
- package/dist/operations/repo-workspace.js.map +1 -1
- package/dist/operations/safe-read.d.ts +8 -5
- package/dist/operations/safe-read.d.ts.map +1 -1
- package/dist/operations/safe-read.js +34 -26
- package/dist/operations/safe-read.js.map +1 -1
- package/dist/operations/structural-review.d.ts +7 -1
- package/dist/operations/structural-review.d.ts.map +1 -1
- package/dist/operations/structural-review.js +13 -2
- package/dist/operations/structural-review.js.map +1 -1
- package/dist/operations/workspace-read-view.d.ts +208 -0
- package/dist/operations/workspace-read-view.d.ts.map +1 -0
- package/dist/operations/workspace-read-view.js +302 -0
- package/dist/operations/workspace-read-view.js.map +1 -0
- package/dist/ports/echo-kernel-transport.d.ts.map +1 -1
- package/dist/ports/echo-kernel-transport.js +12 -0
- package/dist/ports/echo-kernel-transport.js.map +1 -1
- package/dist/ports/filesystem.d.ts +2 -0
- package/dist/ports/filesystem.d.ts.map +1 -1
- package/dist/ports/structural-reading.d.ts +21 -1
- package/dist/ports/structural-reading.d.ts.map +1 -1
- package/dist/ports/structural-reading.js.map +1 -1
- package/dist/warp/ast-emitter.d.ts +4 -0
- package/dist/warp/ast-emitter.d.ts.map +1 -1
- package/dist/warp/ast-emitter.js +16 -10
- package/dist/warp/ast-emitter.js.map +1 -1
- package/dist/warp/ast-import-resolver.d.ts +7 -0
- package/dist/warp/ast-import-resolver.d.ts.map +1 -1
- package/dist/warp/ast-import-resolver.js +41 -20
- package/dist/warp/ast-import-resolver.js.map +1 -1
- package/dist/warp/committed-reference-scan.d.ts +38 -0
- package/dist/warp/committed-reference-scan.d.ts.map +1 -0
- package/dist/warp/committed-reference-scan.js +346 -0
- package/dist/warp/committed-reference-scan.js.map +1 -0
- package/dist/warp/go-reference-context.d.ts +8 -0
- package/dist/warp/go-reference-context.d.ts.map +1 -0
- package/dist/warp/go-reference-context.js +209 -0
- package/dist/warp/go-reference-context.js.map +1 -0
- package/dist/warp/import-diagnostic.d.ts +17 -0
- package/dist/warp/import-diagnostic.d.ts.map +1 -0
- package/dist/warp/import-diagnostic.js +2 -0
- package/dist/warp/import-diagnostic.js.map +1 -0
- package/dist/warp/index-head.d.ts.map +1 -1
- package/dist/warp/index-head.js +34 -8
- package/dist/warp/index-head.js.map +1 -1
- package/dist/warp/python-import-resolver.d.ts +10 -0
- package/dist/warp/python-import-resolver.d.ts.map +1 -0
- package/dist/warp/python-import-resolver.js +100 -0
- package/dist/warp/python-import-resolver.js.map +1 -0
- package/dist/warp/qualified-reference-bindings.d.ts +11 -0
- package/dist/warp/qualified-reference-bindings.d.ts.map +1 -0
- package/dist/warp/qualified-reference-bindings.js +483 -0
- package/dist/warp/qualified-reference-bindings.js.map +1 -0
- package/dist/warp/qualified-reference-contract.d.ts +76 -0
- package/dist/warp/qualified-reference-contract.d.ts.map +1 -0
- package/dist/warp/qualified-reference-contract.js +2 -0
- package/dist/warp/qualified-reference-contract.js.map +1 -0
- package/dist/warp/qualified-reference-language-adapters.d.ts +4 -0
- package/dist/warp/qualified-reference-language-adapters.d.ts.map +1 -0
- package/dist/warp/qualified-reference-language-adapters.js +148 -0
- package/dist/warp/qualified-reference-language-adapters.js.map +1 -0
- package/dist/warp/qualified-reference-resolver.d.ts +10 -0
- package/dist/warp/qualified-reference-resolver.d.ts.map +1 -0
- package/dist/warp/qualified-reference-resolver.js +222 -0
- package/dist/warp/qualified-reference-resolver.js.map +1 -0
- package/dist/warp/qualified-reference-shadows.d.ts +5 -0
- package/dist/warp/qualified-reference-shadows.d.ts.map +1 -0
- package/dist/warp/qualified-reference-shadows.js +601 -0
- package/dist/warp/qualified-reference-shadows.js.map +1 -0
- package/dist/warp/structural-reading-adapter.d.ts +2 -1
- package/dist/warp/structural-reading-adapter.d.ts.map +1 -1
- package/dist/warp/structural-reading-adapter.js +79 -27
- package/dist/warp/structural-reading-adapter.js.map +1 -1
- package/docs/CLI.md +10 -1
- package/docs/MCP.md +23 -1
- package/docs/SETUP.md +34 -0
- package/package.json +12 -7
- package/dist/operations/import-reference-impact.d.ts +0 -13
- package/dist/operations/import-reference-impact.d.ts.map +0 -1
- package/dist/operations/import-reference-impact.js +0 -101
- package/dist/operations/import-reference-impact.js.map +0 -1
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
import { isPythonPackageModulePath, pythonChildModuleSource, resolvePythonModulePath } from "./python-import-resolver.js";
|
|
2
|
+
function walk(node, visit) {
|
|
3
|
+
visit(node);
|
|
4
|
+
for (const child of node.namedChildren)
|
|
5
|
+
walk(child, visit);
|
|
6
|
+
}
|
|
7
|
+
function nearestAncestor(node, types) {
|
|
8
|
+
let cursor = node.parent;
|
|
9
|
+
while (cursor !== null) {
|
|
10
|
+
if (types.has(cursor.type))
|
|
11
|
+
return cursor;
|
|
12
|
+
cursor = cursor.parent;
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const RUST_IMPORT_SCOPE_TYPES = new Set(["block", "declaration_list"]);
|
|
17
|
+
const PYTHON_LEXICAL_SCOPE_TYPES = new Set(["function_definition", "lambda", "class_definition"]);
|
|
18
|
+
function compiledSpecifierSourceCandidates(raw) {
|
|
19
|
+
const pairs = [
|
|
20
|
+
[".js", [".ts", ".tsx"]], [".jsx", [".tsx", ".ts"]],
|
|
21
|
+
[".mjs", [".mts", ".ts"]], [".cjs", [".cts", ".ts"]],
|
|
22
|
+
];
|
|
23
|
+
for (const [extension, replacements] of pairs) {
|
|
24
|
+
if (!raw.endsWith(extension))
|
|
25
|
+
continue;
|
|
26
|
+
const base = raw.slice(0, -extension.length);
|
|
27
|
+
return replacements.map((replacement) => `${base}${replacement}`);
|
|
28
|
+
}
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
function resolveRelativeModule(language, source, importingFilePath, context) {
|
|
32
|
+
if (!source.startsWith(".") && !source.startsWith("/"))
|
|
33
|
+
return null;
|
|
34
|
+
const directory = importingFilePath.includes("/")
|
|
35
|
+
? importingFilePath.slice(0, importingFilePath.lastIndexOf("/"))
|
|
36
|
+
: "";
|
|
37
|
+
const raw = source.startsWith("/")
|
|
38
|
+
? context.pathOps.normalize(source.slice(1))
|
|
39
|
+
: directory === ""
|
|
40
|
+
? context.pathOps.normalize(source)
|
|
41
|
+
: context.pathOps.join(directory, source);
|
|
42
|
+
if (raw === "")
|
|
43
|
+
return null;
|
|
44
|
+
const sourceExtensions = language === "js"
|
|
45
|
+
? [".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".mts", ".cts"]
|
|
46
|
+
: [".ts", ".tsx", ".js", ".jsx", ".mts", ".cts"];
|
|
47
|
+
const candidates = [
|
|
48
|
+
raw,
|
|
49
|
+
...compiledSpecifierSourceCandidates(raw),
|
|
50
|
+
...sourceExtensions.map((extension) => `${raw}${extension}`),
|
|
51
|
+
`${raw}.d.ts`, `${raw}.d.mts`, `${raw}.d.cts`,
|
|
52
|
+
...sourceExtensions.map((extension) => `${raw}/index${extension}`),
|
|
53
|
+
`${raw}/index.d.ts`, `${raw}/index.d.mts`, `${raw}/index.d.cts`,
|
|
54
|
+
];
|
|
55
|
+
return candidates.find((candidate) => context.knownFiles.has(candidate)) ?? null;
|
|
56
|
+
}
|
|
57
|
+
function stringValue(node) {
|
|
58
|
+
const fragment = node.namedChildren.find((child) => child.type === "string_fragment");
|
|
59
|
+
if (fragment !== undefined)
|
|
60
|
+
return fragment.text;
|
|
61
|
+
const text = node.text;
|
|
62
|
+
return text.length >= 2 ? text.slice(1, -1) : null;
|
|
63
|
+
}
|
|
64
|
+
function* pythonImportClauses(root, filePath, context) {
|
|
65
|
+
const statements = [];
|
|
66
|
+
walk(root, (node) => {
|
|
67
|
+
if (node.type === "import_statement" || node.type === "import_from_statement") {
|
|
68
|
+
statements.push(node);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
for (const statement of statements) {
|
|
72
|
+
const lexicalScope = nearestAncestor(statement, PYTHON_LEXICAL_SCOPE_TYPES);
|
|
73
|
+
const scopeBody = lexicalScope?.childForFieldName("body") ?? lexicalScope;
|
|
74
|
+
const scope = {
|
|
75
|
+
scopeStartIndex: statement.endIndex,
|
|
76
|
+
scopeEndIndex: scopeBody?.endIndex ?? root.endIndex,
|
|
77
|
+
};
|
|
78
|
+
if (statement.type === "import_statement") {
|
|
79
|
+
for (const specifier of statement.namedChildren) {
|
|
80
|
+
const moduleNode = specifier.type === "aliased_import"
|
|
81
|
+
? specifier.childForFieldName("name") ?? specifier.namedChildren.find((child) => child.type === "dotted_name")
|
|
82
|
+
: specifier;
|
|
83
|
+
if (moduleNode?.type !== "dotted_name")
|
|
84
|
+
continue;
|
|
85
|
+
const alias = specifier.type === "aliased_import"
|
|
86
|
+
? specifier.childForFieldName("alias") ?? specifier.namedChildren.find((child) => child.type === "identifier")
|
|
87
|
+
: undefined;
|
|
88
|
+
yield { kind: "module", specifier, moduleNode, alias, ...scope };
|
|
89
|
+
}
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const packageNode = statement.childForFieldName("module_name") ??
|
|
93
|
+
statement.namedChildren.find((child) => child.type === "dotted_name" || child.type === "relative_import");
|
|
94
|
+
if (packageNode === undefined)
|
|
95
|
+
continue;
|
|
96
|
+
const packagePath = resolvePythonModulePath(packageNode.text, filePath, context.pathOps, context.knownFiles);
|
|
97
|
+
for (const specifier of statement.namedChildren.slice(statement.namedChildren.indexOf(packageNode) + 1)) {
|
|
98
|
+
if (specifier.type === "wildcard_import") {
|
|
99
|
+
yield { kind: "wildcard", specifier, packagePath, ...scope };
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const imported = specifier.type === "aliased_import"
|
|
103
|
+
? specifier.childForFieldName("name") ?? specifier.namedChildren.find((child) => child.type === "dotted_name")
|
|
104
|
+
: specifier;
|
|
105
|
+
if (imported?.type !== "dotted_name")
|
|
106
|
+
continue;
|
|
107
|
+
const alias = specifier.type === "aliased_import"
|
|
108
|
+
? specifier.childForFieldName("alias") ?? specifier.namedChildren.find((child) => child.type === "identifier")
|
|
109
|
+
: undefined;
|
|
110
|
+
const childPath = packagePath === null || isPythonPackageModulePath(packagePath)
|
|
111
|
+
? resolvePythonModulePath(pythonChildModuleSource(packageNode.text, imported.text), filePath, context.pathOps, context.knownFiles)
|
|
112
|
+
: null;
|
|
113
|
+
yield { kind: "from", specifier, packagePath, imported, alias, childPath, ...scope };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function pythonBindings(root, filePath, context) {
|
|
118
|
+
const bindings = [];
|
|
119
|
+
for (const clause of pythonImportClauses(root, filePath, context)) {
|
|
120
|
+
if (clause.kind === "module") {
|
|
121
|
+
const moduleParts = clause.moduleNode.text.split(".");
|
|
122
|
+
const bindingName = clause.alias?.text ?? moduleParts[0];
|
|
123
|
+
if (bindingName === undefined)
|
|
124
|
+
continue;
|
|
125
|
+
bindings.push({
|
|
126
|
+
name: bindingName,
|
|
127
|
+
targetFilePath: resolvePythonModulePath(clause.moduleNode.text, filePath, context.pathOps, context.knownFiles),
|
|
128
|
+
...(clause.alias === undefined && moduleParts.length > 1 ? { qualifiedPath: moduleParts.slice(1) } : {}),
|
|
129
|
+
scopeStartIndex: clause.scopeStartIndex,
|
|
130
|
+
scopeEndIndex: clause.scopeEndIndex,
|
|
131
|
+
importNode: clause.specifier,
|
|
132
|
+
});
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (clause.kind === "wildcard")
|
|
136
|
+
continue;
|
|
137
|
+
bindings.push({
|
|
138
|
+
name: clause.alias?.text ?? clause.imported.text,
|
|
139
|
+
targetFilePath: clause.childPath,
|
|
140
|
+
scopeStartIndex: clause.scopeStartIndex,
|
|
141
|
+
scopeEndIndex: clause.scopeEndIndex,
|
|
142
|
+
importNode: clause.specifier,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return bindings;
|
|
146
|
+
}
|
|
147
|
+
function typescriptBindings(language, root, filePath, context) {
|
|
148
|
+
const bindings = [];
|
|
149
|
+
for (const statement of root.namedChildren) {
|
|
150
|
+
if (statement.type !== "import_statement")
|
|
151
|
+
continue;
|
|
152
|
+
const importRequire = statement.namedChildren.find((child) => child.type === "import_require_clause");
|
|
153
|
+
const sourceNode = statement.childForFieldName("source") ??
|
|
154
|
+
importRequire?.childForFieldName("source") ??
|
|
155
|
+
statement.namedChildren.find((child) => child.type === "string");
|
|
156
|
+
const source = sourceNode === undefined ? null : stringValue(sourceNode);
|
|
157
|
+
if (source === null)
|
|
158
|
+
continue;
|
|
159
|
+
const importRequireAlias = importRequire?.namedChildren.find((child) => child.type === "identifier");
|
|
160
|
+
if (importRequire !== undefined && importRequireAlias !== undefined) {
|
|
161
|
+
bindings.push({
|
|
162
|
+
name: importRequireAlias.text,
|
|
163
|
+
targetFilePath: resolveRelativeModule(language, source, filePath, context),
|
|
164
|
+
importNode: importRequire,
|
|
165
|
+
});
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const namespace = statement.namedChildren
|
|
169
|
+
.find((child) => child.type === "import_clause")
|
|
170
|
+
?.namedChildren.find((child) => child.type === "namespace_import");
|
|
171
|
+
const alias = namespace?.namedChildren.find((child) => child.type === "identifier");
|
|
172
|
+
if (namespace !== undefined && alias !== undefined) {
|
|
173
|
+
bindings.push({
|
|
174
|
+
name: alias.text,
|
|
175
|
+
targetFilePath: resolveRelativeModule(language, source, filePath, context),
|
|
176
|
+
importNode: namespace,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return bindings;
|
|
181
|
+
}
|
|
182
|
+
function rustSourceRoot(filePath, knownFiles) {
|
|
183
|
+
const parts = filePath.split("/");
|
|
184
|
+
for (let length = parts.length - 1; length >= 0; length--) {
|
|
185
|
+
const directory = parts.slice(0, length).join("/");
|
|
186
|
+
const manifest = directory === "" ? "Cargo.toml" : `${directory}/Cargo.toml`;
|
|
187
|
+
if (!knownFiles.has(manifest))
|
|
188
|
+
continue;
|
|
189
|
+
const sourceRoot = directory === "" ? "src" : `${directory}/src`;
|
|
190
|
+
const autoTargetRoots = [
|
|
191
|
+
`${sourceRoot}/bin`,
|
|
192
|
+
directory === "" ? "examples" : `${directory}/examples`,
|
|
193
|
+
directory === "" ? "tests" : `${directory}/tests`,
|
|
194
|
+
directory === "" ? "benches" : `${directory}/benches`,
|
|
195
|
+
];
|
|
196
|
+
for (const targetRoot of autoTargetRoots) {
|
|
197
|
+
if (parentDirectory(filePath) === targetRoot)
|
|
198
|
+
return targetRoot;
|
|
199
|
+
if (!filePath.startsWith(`${targetRoot}/`))
|
|
200
|
+
continue;
|
|
201
|
+
const relative = filePath.slice(targetRoot.length + 1);
|
|
202
|
+
const targetName = relative.split("/")[0];
|
|
203
|
+
if (targetName === undefined)
|
|
204
|
+
continue;
|
|
205
|
+
const directoryTarget = `${targetRoot}/${targetName}`;
|
|
206
|
+
if (knownFiles.has(`${directoryTarget}/main.rs`))
|
|
207
|
+
return directoryTarget;
|
|
208
|
+
if (knownFiles.has(`${targetRoot}/${targetName}.rs`))
|
|
209
|
+
return targetRoot;
|
|
210
|
+
}
|
|
211
|
+
return sourceRoot;
|
|
212
|
+
}
|
|
213
|
+
const srcIndex = parts.lastIndexOf("src");
|
|
214
|
+
return srcIndex >= 0 ? parts.slice(0, srcIndex + 1).join("/") : "";
|
|
215
|
+
}
|
|
216
|
+
function parentDirectory(value) {
|
|
217
|
+
return value.includes("/") ? value.slice(0, value.lastIndexOf("/")) : "";
|
|
218
|
+
}
|
|
219
|
+
function rustLogicalModuleDirectory(filePath) {
|
|
220
|
+
const directory = parentDirectory(filePath);
|
|
221
|
+
const fileName = filePath.slice(directory.length === 0 ? 0 : directory.length + 1);
|
|
222
|
+
if (fileName === "lib.rs" || fileName === "main.rs" || fileName === "mod.rs") {
|
|
223
|
+
return directory;
|
|
224
|
+
}
|
|
225
|
+
const moduleName = fileName.endsWith(".rs") ? fileName.slice(0, -3) : fileName;
|
|
226
|
+
return directory === "" ? moduleName : `${directory}/${moduleName}`;
|
|
227
|
+
}
|
|
228
|
+
function rustInlineModuleSegments(node) {
|
|
229
|
+
const segments = [];
|
|
230
|
+
let cursor = node.parent;
|
|
231
|
+
while (cursor !== null) {
|
|
232
|
+
if (cursor.type === "mod_item") {
|
|
233
|
+
const body = cursor.childForFieldName("body") ??
|
|
234
|
+
cursor.namedChildren.find((child) => child.type === "declaration_list");
|
|
235
|
+
const name = cursor.childForFieldName("name") ??
|
|
236
|
+
cursor.namedChildren.find((child) => child.type === "identifier");
|
|
237
|
+
if (body !== undefined && name !== undefined)
|
|
238
|
+
segments.unshift(name.text);
|
|
239
|
+
}
|
|
240
|
+
cursor = cursor.parent;
|
|
241
|
+
}
|
|
242
|
+
return segments;
|
|
243
|
+
}
|
|
244
|
+
function rustModuleCandidatePath(source, filePath, context, importNode) {
|
|
245
|
+
const sourceRoot = rustSourceRoot(filePath, context.knownFiles);
|
|
246
|
+
const logicalDirectory = rustLogicalModuleDirectory(filePath);
|
|
247
|
+
const inlineSegments = importNode === undefined ? [] : rustInlineModuleSegments(importNode);
|
|
248
|
+
const moduleDirectory = inlineSegments.length === 0
|
|
249
|
+
? logicalDirectory
|
|
250
|
+
: context.pathOps.join(logicalDirectory, ...inlineSegments);
|
|
251
|
+
const segments = source.split("::");
|
|
252
|
+
const prefix = segments.shift();
|
|
253
|
+
let base;
|
|
254
|
+
if (prefix === "crate")
|
|
255
|
+
base = sourceRoot;
|
|
256
|
+
else if (prefix === "self")
|
|
257
|
+
base = moduleDirectory;
|
|
258
|
+
else if (prefix === "super") {
|
|
259
|
+
base = parentDirectory(moduleDirectory);
|
|
260
|
+
while (segments[0] === "super") {
|
|
261
|
+
segments.shift();
|
|
262
|
+
base = parentDirectory(base);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
else
|
|
266
|
+
return null;
|
|
267
|
+
return context.pathOps.normalize(context.pathOps.join(base, ...segments));
|
|
268
|
+
}
|
|
269
|
+
function resolveRustModule(source, filePath, context, importNode) {
|
|
270
|
+
const raw = rustModuleCandidatePath(source, filePath, context, importNode);
|
|
271
|
+
if (raw === null)
|
|
272
|
+
return null;
|
|
273
|
+
return [`${raw}.rs`, `${raw}/mod.rs`].find((candidate) => context.knownFiles.has(candidate)) ?? null;
|
|
274
|
+
}
|
|
275
|
+
function rustCrateRootFiles(filePath, sourceRoot, knownFiles) {
|
|
276
|
+
const directory = parentDirectory(filePath);
|
|
277
|
+
const fileName = filePath.slice(directory === "" ? 0 : directory.length + 1);
|
|
278
|
+
const isPackageSourceRoot = sourceRoot === "src" || sourceRoot.endsWith("/src");
|
|
279
|
+
if (directory === sourceRoot && fileName !== "lib.rs" && fileName !== "main.rs" && !isPackageSourceRoot) {
|
|
280
|
+
return [filePath];
|
|
281
|
+
}
|
|
282
|
+
return [`${sourceRoot}/lib.rs`, `${sourceRoot}/main.rs`]
|
|
283
|
+
.filter((candidate) => knownFiles.has(candidate));
|
|
284
|
+
}
|
|
285
|
+
function unresolvedRustModuleOwners(source, filePath, context, importNode) {
|
|
286
|
+
const sourceRoot = rustSourceRoot(filePath, context.knownFiles);
|
|
287
|
+
let candidate = rustModuleCandidatePath(source, filePath, context, importNode);
|
|
288
|
+
if (candidate === null)
|
|
289
|
+
return [];
|
|
290
|
+
while (candidate !== "") {
|
|
291
|
+
const owner = [`${candidate}.rs`, `${candidate}/mod.rs`]
|
|
292
|
+
.find((file) => context.knownFiles.has(file));
|
|
293
|
+
if (owner !== undefined)
|
|
294
|
+
return [owner];
|
|
295
|
+
if (candidate === sourceRoot) {
|
|
296
|
+
return rustCrateRootFiles(filePath, sourceRoot, context.knownFiles);
|
|
297
|
+
}
|
|
298
|
+
candidate = parentDirectory(candidate);
|
|
299
|
+
}
|
|
300
|
+
return [];
|
|
301
|
+
}
|
|
302
|
+
export function resolveRustQualifiedModule(source, filePath, context, sourceNode) {
|
|
303
|
+
const targetFilePath = resolveRustModule(source, filePath, context, sourceNode);
|
|
304
|
+
return {
|
|
305
|
+
targetFilePath,
|
|
306
|
+
unresolvedTargetFilePaths: targetFilePath === null
|
|
307
|
+
? unresolvedRustModuleOwners(source, filePath, context, sourceNode)
|
|
308
|
+
: [],
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
function joinRustUsePath(prefix, path) {
|
|
312
|
+
if (path === "self")
|
|
313
|
+
return prefix === "" ? path : prefix;
|
|
314
|
+
if (path === "crate" || path === "super" || path.startsWith("crate::") || path.startsWith("self::") || path.startsWith("super::")) {
|
|
315
|
+
return path;
|
|
316
|
+
}
|
|
317
|
+
return prefix === "" ? path : `${prefix}::${path}`;
|
|
318
|
+
}
|
|
319
|
+
function rustUseModuleCandidates(node, prefix = "") {
|
|
320
|
+
if (node.type === "use_as_clause") {
|
|
321
|
+
const path = node.childForFieldName("path") ?? node.namedChildren[0];
|
|
322
|
+
const alias = node.childForFieldName("alias") ?? node.namedChildren.at(-1);
|
|
323
|
+
if (path === undefined || alias === undefined)
|
|
324
|
+
return [];
|
|
325
|
+
return [{ name: alias.text, source: joinRustUsePath(prefix, path.text), importNode: node }];
|
|
326
|
+
}
|
|
327
|
+
if (node.type === "scoped_use_list") {
|
|
328
|
+
const path = node.childForFieldName("path") ?? node.namedChildren[0];
|
|
329
|
+
const list = node.namedChildren.find((child) => child.type === "use_list");
|
|
330
|
+
if (path === undefined || list === undefined)
|
|
331
|
+
return [];
|
|
332
|
+
const nestedPrefix = joinRustUsePath(prefix, path.text);
|
|
333
|
+
return list.namedChildren.flatMap((child) => rustUseModuleCandidates(child, nestedPrefix));
|
|
334
|
+
}
|
|
335
|
+
if (node.type === "use_list") {
|
|
336
|
+
return node.namedChildren.flatMap((child) => rustUseModuleCandidates(child, prefix));
|
|
337
|
+
}
|
|
338
|
+
if (node.type === "scoped_identifier") {
|
|
339
|
+
const name = node.childForFieldName("name") ?? node.namedChildren.at(-1);
|
|
340
|
+
return name === undefined
|
|
341
|
+
? []
|
|
342
|
+
: [{ name: name.text, source: joinRustUsePath(prefix, node.text), importNode: node }];
|
|
343
|
+
}
|
|
344
|
+
if (node.type === "identifier") {
|
|
345
|
+
return [{ name: node.text, source: joinRustUsePath(prefix, node.text), importNode: node }];
|
|
346
|
+
}
|
|
347
|
+
if (node.type === "self" && prefix !== "") {
|
|
348
|
+
const name = prefix.split("::").at(-1);
|
|
349
|
+
return name === undefined ? [] : [{ name, source: prefix, importNode: node }];
|
|
350
|
+
}
|
|
351
|
+
return [];
|
|
352
|
+
}
|
|
353
|
+
function rustBindings(root, filePath, context) {
|
|
354
|
+
const bindings = [];
|
|
355
|
+
const statements = [];
|
|
356
|
+
walk(root, (node) => {
|
|
357
|
+
if (node.type === "use_declaration")
|
|
358
|
+
statements.push(node);
|
|
359
|
+
});
|
|
360
|
+
for (const statement of statements) {
|
|
361
|
+
const argument = statement.childForFieldName("argument") ?? statement.namedChildren[0];
|
|
362
|
+
if (argument === undefined)
|
|
363
|
+
continue;
|
|
364
|
+
const scope = nearestAncestor(statement, RUST_IMPORT_SCOPE_TYPES);
|
|
365
|
+
const scopeStartIndex = scope?.startIndex ?? root.startIndex;
|
|
366
|
+
const scopeEndIndex = scope?.endIndex ?? root.endIndex;
|
|
367
|
+
for (const candidate of rustUseModuleCandidates(argument)) {
|
|
368
|
+
const resolution = resolveRustQualifiedModule(candidate.source, filePath, context, candidate.importNode);
|
|
369
|
+
bindings.push({
|
|
370
|
+
name: candidate.name,
|
|
371
|
+
targetFilePath: resolution.targetFilePath,
|
|
372
|
+
...(resolution.targetFilePath === null
|
|
373
|
+
? { unresolvedTargetFilePaths: resolution.unresolvedTargetFilePaths }
|
|
374
|
+
: {}),
|
|
375
|
+
scopeStartIndex,
|
|
376
|
+
scopeEndIndex,
|
|
377
|
+
importNode: candidate.importNode,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
walk(root, (node) => {
|
|
382
|
+
if (node.type !== "mod_item" || node.childForFieldName("body") !== null)
|
|
383
|
+
return;
|
|
384
|
+
const name = node.childForFieldName("name") ?? node.namedChildren.find((child) => child.type === "identifier");
|
|
385
|
+
if (name === undefined)
|
|
386
|
+
return;
|
|
387
|
+
const targetFilePath = resolveRustModule(`self::${name.text}`, filePath, context, node);
|
|
388
|
+
if (targetFilePath === null)
|
|
389
|
+
return;
|
|
390
|
+
const scope = nearestAncestor(node, RUST_IMPORT_SCOPE_TYPES);
|
|
391
|
+
bindings.push({
|
|
392
|
+
name: name.text,
|
|
393
|
+
targetFilePath,
|
|
394
|
+
scopeStartIndex: scope?.startIndex ?? root.startIndex,
|
|
395
|
+
scopeEndIndex: scope?.endIndex ?? root.endIndex,
|
|
396
|
+
importNode: node,
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
return bindings;
|
|
400
|
+
}
|
|
401
|
+
function goBindings(root, context) {
|
|
402
|
+
const go = context.go;
|
|
403
|
+
if (go === undefined)
|
|
404
|
+
return [];
|
|
405
|
+
const bindings = [];
|
|
406
|
+
walk(root, (node) => {
|
|
407
|
+
if (node.type !== "import_spec")
|
|
408
|
+
return;
|
|
409
|
+
const pathNode = node.childForFieldName("path") ?? node.namedChildren.find((child) => child.type.endsWith("string_literal"));
|
|
410
|
+
if (pathNode === undefined)
|
|
411
|
+
return;
|
|
412
|
+
const importPath = stringValue(pathNode);
|
|
413
|
+
if (importPath === null || (importPath !== go.modulePath && !importPath.startsWith(`${go.modulePath}/`)))
|
|
414
|
+
return;
|
|
415
|
+
const directory = importPath === go.modulePath ? "" : importPath.slice(go.modulePath.length + 1);
|
|
416
|
+
if (!go.packageNames.has(directory))
|
|
417
|
+
return;
|
|
418
|
+
const explicit = node.childForFieldName("name") ?? node.namedChildren.find((child) => child.type === "package_identifier");
|
|
419
|
+
const name = explicit?.text ?? go.packageNames.get(directory);
|
|
420
|
+
if (name === undefined || name === null || name === "_" || name === ".")
|
|
421
|
+
return;
|
|
422
|
+
bindings.push({ name, targetFilePath: null, packageDirectory: directory, importNode: node });
|
|
423
|
+
});
|
|
424
|
+
return bindings;
|
|
425
|
+
}
|
|
426
|
+
export function goTargetDirectoryPath(context, packageDirectory, pathOps) {
|
|
427
|
+
if (context.moduleDirectory === "")
|
|
428
|
+
return packageDirectory;
|
|
429
|
+
if (packageDirectory === "")
|
|
430
|
+
return context.moduleDirectory;
|
|
431
|
+
return pathOps.join(context.moduleDirectory, packageDirectory);
|
|
432
|
+
}
|
|
433
|
+
export function resolveQualifiedImportBindings(language, filePath, root, context) {
|
|
434
|
+
if (language === "python")
|
|
435
|
+
return pythonBindings(root, filePath, context);
|
|
436
|
+
if (language === "rust")
|
|
437
|
+
return rustBindings(root, filePath, context);
|
|
438
|
+
if (language === "go")
|
|
439
|
+
return goBindings(root, context);
|
|
440
|
+
return typescriptBindings(language, root, filePath, context);
|
|
441
|
+
}
|
|
442
|
+
export function analyzeDirectSymbolImportReferences(language, filePath, root, context) {
|
|
443
|
+
const references = [];
|
|
444
|
+
if (language === "python") {
|
|
445
|
+
for (const clause of pythonImportClauses(root, filePath, context)) {
|
|
446
|
+
if (clause.kind === "from" && clause.packagePath !== null && clause.childPath === null) {
|
|
447
|
+
references.push({ importedName: clause.imported.text, targetFilePath: clause.packagePath });
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
if (language === "rust") {
|
|
452
|
+
walk(root, (statement) => {
|
|
453
|
+
if (statement.type !== "use_declaration")
|
|
454
|
+
return;
|
|
455
|
+
const argument = statement.childForFieldName("argument") ?? statement.namedChildren[0];
|
|
456
|
+
if (argument === undefined)
|
|
457
|
+
return;
|
|
458
|
+
for (const candidate of rustUseModuleCandidates(argument)) {
|
|
459
|
+
if (resolveRustModule(candidate.source, filePath, context, candidate.importNode) !== null)
|
|
460
|
+
continue;
|
|
461
|
+
const segments = candidate.source.split("::");
|
|
462
|
+
const importedName = segments.pop();
|
|
463
|
+
if (importedName === undefined || segments.length === 0)
|
|
464
|
+
continue;
|
|
465
|
+
const targetFilePath = resolveRustModule(segments.join("::"), filePath, context, candidate.importNode);
|
|
466
|
+
if (targetFilePath !== null)
|
|
467
|
+
references.push({ importedName, targetFilePath });
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
return references;
|
|
472
|
+
}
|
|
473
|
+
export function analyzeUnsupportedWildcardImportTargets(language, filePath, root, context) {
|
|
474
|
+
if (language !== "python")
|
|
475
|
+
return [];
|
|
476
|
+
const targets = new Set();
|
|
477
|
+
for (const clause of pythonImportClauses(root, filePath, context)) {
|
|
478
|
+
if (clause.kind === "wildcard" && clause.packagePath !== null)
|
|
479
|
+
targets.add(clause.packagePath);
|
|
480
|
+
}
|
|
481
|
+
return [...targets];
|
|
482
|
+
}
|
|
483
|
+
//# sourceMappingURL=qualified-reference-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-reference-bindings.js","sourceRoot":"","sources":["../../src/warp/qualified-reference-bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { PathOps } from "../ports/paths.js";
|
|
2
|
+
import type { ImportBindingDiagnostic } from "./import-diagnostic.js";
|
|
3
|
+
export type TSNode = import("web-tree-sitter").SyntaxNode;
|
|
4
|
+
export type QualifiedReferenceLanguage = "python" | "ts" | "tsx" | "js" | "rust" | "go";
|
|
5
|
+
export type QualifiedReferenceNamespace = "value" | "type";
|
|
6
|
+
export interface GoReferenceContext {
|
|
7
|
+
readonly modulePath: string;
|
|
8
|
+
readonly moduleDirectory: string;
|
|
9
|
+
readonly packageNames: ReadonlyMap<string, string | null>;
|
|
10
|
+
readonly packageFiles: ReadonlyMap<string, readonly string[]>;
|
|
11
|
+
/** package directory -> exported name -> unique declaring file, or null when ambiguous */
|
|
12
|
+
readonly declarations: ReadonlyMap<string, ReadonlyMap<string, string | null>>;
|
|
13
|
+
}
|
|
14
|
+
export interface QualifiedReferenceContext {
|
|
15
|
+
readonly pathOps: PathOps;
|
|
16
|
+
readonly knownFiles: ReadonlySet<string>;
|
|
17
|
+
readonly go?: GoReferenceContext | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface ResolvedImportBinding {
|
|
20
|
+
readonly name: string;
|
|
21
|
+
readonly targetFilePath: string | null;
|
|
22
|
+
readonly unresolvedTargetFilePaths?: readonly string[] | undefined;
|
|
23
|
+
readonly qualifiedPath?: readonly string[] | undefined;
|
|
24
|
+
readonly scopeStartIndex?: number | undefined;
|
|
25
|
+
readonly scopeEndIndex?: number | undefined;
|
|
26
|
+
readonly packageDirectory?: string | undefined;
|
|
27
|
+
readonly importNode: TSNode;
|
|
28
|
+
}
|
|
29
|
+
export interface QualifiedReferenceAccess {
|
|
30
|
+
readonly binding: string;
|
|
31
|
+
readonly member: string;
|
|
32
|
+
readonly targetFilePath: string;
|
|
33
|
+
readonly node: TSNode;
|
|
34
|
+
readonly shadow: ImportBindingDiagnostic | null;
|
|
35
|
+
}
|
|
36
|
+
export interface UnresolvedQualifiedReferenceAccess {
|
|
37
|
+
readonly binding: string;
|
|
38
|
+
readonly member: string;
|
|
39
|
+
readonly targetDirectoryPath?: string | undefined;
|
|
40
|
+
readonly targetFilePath?: string | undefined;
|
|
41
|
+
readonly node: TSNode;
|
|
42
|
+
readonly shadow: ImportBindingDiagnostic | null;
|
|
43
|
+
}
|
|
44
|
+
export interface QualifiedReferenceAnalysis {
|
|
45
|
+
readonly bindings: readonly ResolvedImportBinding[];
|
|
46
|
+
readonly accesses: readonly QualifiedReferenceAccess[];
|
|
47
|
+
readonly unresolvedAccesses: readonly UnresolvedQualifiedReferenceAccess[];
|
|
48
|
+
readonly diagnostics: readonly ImportBindingDiagnostic[];
|
|
49
|
+
}
|
|
50
|
+
export interface DirectSymbolImportReference {
|
|
51
|
+
readonly importedName: string;
|
|
52
|
+
readonly targetFilePath: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ShadowRegion {
|
|
55
|
+
readonly binding: string;
|
|
56
|
+
readonly bindingImportStartIndex: number;
|
|
57
|
+
readonly startIndex: number;
|
|
58
|
+
readonly endIndex: number;
|
|
59
|
+
readonly diagnostic: ImportBindingDiagnostic;
|
|
60
|
+
readonly pythonClassScope?: TSNode | undefined;
|
|
61
|
+
readonly namespaces: ReadonlySet<QualifiedReferenceNamespace>;
|
|
62
|
+
}
|
|
63
|
+
export interface QualifiedAccessParts {
|
|
64
|
+
readonly binding: TSNode;
|
|
65
|
+
readonly qualifier: readonly string[];
|
|
66
|
+
readonly member: TSNode;
|
|
67
|
+
readonly namespace: QualifiedReferenceNamespace;
|
|
68
|
+
}
|
|
69
|
+
export interface QualifiedReferenceLanguageAdapter {
|
|
70
|
+
readonly languages: readonly QualifiedReferenceLanguage[];
|
|
71
|
+
resolveBindings(filePath: string, root: TSNode, context: QualifiedReferenceContext): readonly ResolvedImportBinding[];
|
|
72
|
+
collectShadows(filePath: string, root: TSNode, bindings: readonly ResolvedImportBinding[], context: QualifiedReferenceContext): readonly ShadowRegion[];
|
|
73
|
+
accessParts(node: TSNode): QualifiedAccessParts | null;
|
|
74
|
+
isUnsupportedWrite(node: TSNode): boolean;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=qualified-reference-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-reference-contract.d.ts","sourceRoot":"","sources":["../../src/warp/qualified-reference-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-reference-contract.js","sourceRoot":"","sources":["../../src/warp/qualified-reference-contract.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { QualifiedReferenceLanguage, QualifiedReferenceLanguageAdapter } from "./qualified-reference-contract.js";
|
|
2
|
+
export declare const registeredQualifiedReferenceLanguages: readonly QualifiedReferenceLanguage[];
|
|
3
|
+
export declare function qualifiedReferenceAdapterFor(language: QualifiedReferenceLanguage): QualifiedReferenceLanguageAdapter;
|
|
4
|
+
//# sourceMappingURL=qualified-reference-language-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-reference-language-adapters.d.ts","sourceRoot":"","sources":["../../src/warp/qualified-reference-language-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,iCAAiC,EAElC,MAAM,mCAAmC,CAAC;AAwJ3C,eAAO,MAAM,qCAAqC,uCAEjD,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,0BAA0B,GACnC,iCAAiC,CAEnC"}
|