@lzehrung/codegraph 3.0.1 → 3.1.1
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 +17 -17
- package/codegraph-skill/codegraph/SKILL.md +6 -2
- package/dist/agent/artifact.d.ts.map +1 -1
- package/dist/agent/artifact.js +4 -9
- package/dist/agent/artifact.js.map +1 -1
- package/dist/agent/call-hierarchy.d.ts +4 -2
- package/dist/agent/call-hierarchy.d.ts.map +1 -1
- package/dist/agent/call-hierarchy.js +20 -29
- package/dist/agent/call-hierarchy.js.map +1 -1
- package/dist/agent/explain.d.ts.map +1 -1
- package/dist/agent/explain.js +24 -18
- package/dist/agent/explain.js.map +1 -1
- package/dist/agent/explore.d.ts.map +1 -1
- package/dist/agent/explore.js +2 -11
- package/dist/agent/explore.js.map +1 -1
- package/dist/agent/file-view.d.ts.map +1 -1
- package/dist/agent/file-view.js +4 -12
- package/dist/agent/file-view.js.map +1 -1
- package/dist/agent/normalize.d.ts +0 -3
- package/dist/agent/normalize.d.ts.map +1 -1
- package/dist/agent/normalize.js +1 -7
- package/dist/agent/normalize.js.map +1 -1
- package/dist/agent/orient.d.ts.map +1 -1
- package/dist/agent/orient.js +2 -6
- package/dist/agent/orient.js.map +1 -1
- package/dist/agent/packet.d.ts.map +1 -1
- package/dist/agent/packet.js +2 -5
- package/dist/agent/packet.js.map +1 -1
- package/dist/agent/query-index/content.d.ts.map +1 -1
- package/dist/agent/query-index/content.js +2 -6
- package/dist/agent/query-index/content.js.map +1 -1
- package/dist/agent/query-index/update.d.ts.map +1 -1
- package/dist/agent/query-index/update.js +8 -45
- package/dist/agent/query-index/update.js.map +1 -1
- package/dist/agent/query-index/worker-pool.d.ts.map +1 -1
- package/dist/agent/query-index/worker-pool.js +2 -1
- package/dist/agent/query-index/worker-pool.js.map +1 -1
- package/dist/agent/refactor-plan.d.ts +2 -2
- package/dist/agent/refactor-plan.d.ts.map +1 -1
- package/dist/agent/refactor-plan.js +11 -57
- package/dist/agent/refactor-plan.js.map +1 -1
- package/dist/agent/rename-preview.d.ts.map +1 -1
- package/dist/agent/rename-preview.js +166 -23
- package/dist/agent/rename-preview.js.map +1 -1
- package/dist/agent/search.d.ts +13 -0
- package/dist/agent/search.d.ts.map +1 -1
- package/dist/agent/search.js +17 -26
- package/dist/agent/search.js.map +1 -1
- package/dist/agent/semantic-symbols.d.ts +1 -1
- package/dist/agent/semantic-symbols.d.ts.map +1 -1
- package/dist/agent/semantic-symbols.js +2 -5
- package/dist/agent/semantic-symbols.js.map +1 -1
- package/dist/agent/semantic.d.ts +5 -0
- package/dist/agent/semantic.d.ts.map +1 -1
- package/dist/agent/semantic.js +12 -1
- package/dist/agent/semantic.js.map +1 -1
- package/dist/agent/session.d.ts +9 -0
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +59 -41
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/type-hierarchy.d.ts +4 -2
- package/dist/agent/type-hierarchy.d.ts.map +1 -1
- package/dist/agent/type-hierarchy.js +19 -31
- package/dist/agent/type-hierarchy.js.map +1 -1
- package/dist/agent/workspace-symbols.d.ts +1 -1
- package/dist/agent/workspace-symbols.d.ts.map +1 -1
- package/dist/agent/workspace-symbols.js +7 -15
- package/dist/agent/workspace-symbols.js.map +1 -1
- package/dist/analysis-summary.d.ts +1 -4
- package/dist/analysis-summary.d.ts.map +1 -1
- package/dist/analysis-summary.js +58 -19
- package/dist/analysis-summary.js.map +1 -1
- package/dist/bin/cli.js +41060 -27641
- package/dist/bin/query-index-worker.js +268 -241
- package/dist/bootstrap/tree-sitter-languages.d.ts +2 -0
- package/dist/bootstrap/tree-sitter-languages.d.ts.map +1 -1
- package/dist/bootstrap/tree-sitter-languages.js +6 -19
- package/dist/bootstrap/tree-sitter-languages.js.map +1 -1
- package/dist/chunking/chunk-matches.d.ts.map +1 -1
- package/dist/chunking/chunk-matches.js +6 -42
- package/dist/chunking/chunk-matches.js.map +1 -1
- package/dist/chunking/chunk-split.d.ts +7 -0
- package/dist/chunking/chunk-split.d.ts.map +1 -1
- package/dist/chunking/chunk-split.js +3 -3
- package/dist/chunking/chunk-split.js.map +1 -1
- package/dist/chunking/chunk-text-file.js +2 -30
- package/dist/chunking/chunk-text-file.js.map +1 -1
- package/dist/cli/affected.d.ts.map +1 -1
- package/dist/cli/affected.js +1 -9
- package/dist/cli/affected.js.map +1 -1
- package/dist/cli/call-hierarchy.js +3 -6
- package/dist/cli/call-hierarchy.js.map +1 -1
- package/dist/cli/chunk.d.ts.map +1 -1
- package/dist/cli/chunk.js +4 -11
- package/dist/cli/chunk.js.map +1 -1
- package/dist/cli/command-table.d.ts.map +1 -1
- package/dist/cli/command-table.js +7 -0
- package/dist/cli/command-table.js.map +1 -1
- package/dist/cli/context.d.ts +1 -0
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +1 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +1 -11
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/duplicates.d.ts +5 -0
- package/dist/cli/duplicates.d.ts.map +1 -1
- package/dist/cli/duplicates.js +15 -2
- package/dist/cli/duplicates.js.map +1 -1
- package/dist/cli/graph.d.ts +4 -12
- package/dist/cli/graph.d.ts.map +1 -1
- package/dist/cli/graph.js +17 -8
- package/dist/cli/graph.js.map +1 -1
- package/dist/cli/help.d.ts +4 -4
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +17 -9
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +2 -12
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/links.d.ts.map +1 -1
- package/dist/cli/links.js +4 -10
- package/dist/cli/links.js.map +1 -1
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +5 -0
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/module-locals.d.ts +8 -0
- package/dist/cli/module-locals.d.ts.map +1 -0
- package/dist/cli/module-locals.js +9 -0
- package/dist/cli/module-locals.js.map +1 -0
- package/dist/cli/navigation.d.ts +2 -0
- package/dist/cli/navigation.d.ts.map +1 -1
- package/dist/cli/navigation.js +3 -5
- package/dist/cli/navigation.js.map +1 -1
- package/dist/cli/options.d.ts.map +1 -1
- package/dist/cli/options.js +6 -1
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/pretty.d.ts +1 -0
- package/dist/cli/pretty.d.ts.map +1 -1
- package/dist/cli/pretty.js +6 -8
- package/dist/cli/pretty.js.map +1 -1
- package/dist/cli/progress.d.ts.map +1 -1
- package/dist/cli/progress.js +42 -16
- package/dist/cli/progress.js.map +1 -1
- package/dist/cli/refactor-plan.js +2 -5
- package/dist/cli/refactor-plan.js.map +1 -1
- package/dist/cli/rename-preview.js +2 -5
- package/dist/cli/rename-preview.js.map +1 -1
- package/dist/cli/review.d.ts +6 -16
- package/dist/cli/review.d.ts.map +1 -1
- package/dist/cli/review.js +2 -0
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/server.d.ts.map +1 -1
- package/dist/cli/server.js +9 -10
- package/dist/cli/server.js.map +1 -1
- package/dist/cli/type-hierarchy.js +8 -8
- package/dist/cli/type-hierarchy.js.map +1 -1
- package/dist/cli/viewer.js +1 -1
- package/dist/cli/viewer.js.map +1 -1
- package/dist/document-links/asciidoc.d.ts.map +1 -1
- package/dist/document-links/asciidoc.js +4 -16
- package/dist/document-links/asciidoc.js.map +1 -1
- package/dist/document-links/check.d.ts.map +1 -1
- package/dist/document-links/check.js +1 -3
- package/dist/document-links/check.js.map +1 -1
- package/dist/document-links/html.d.ts.map +1 -1
- package/dist/document-links/html.js +6 -44
- 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 +4 -13
- 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 +7 -31
- 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 +2 -5
- package/dist/document-links/sfc.js.map +1 -1
- package/dist/document-links/shared.d.ts +2 -0
- package/dist/document-links/shared.d.ts.map +1 -1
- package/dist/document-links/shared.js +13 -0
- package/dist/document-links/shared.js.map +1 -1
- package/dist/drift/artifact.d.ts.map +1 -1
- package/dist/drift/artifact.js +4 -27
- package/dist/drift/artifact.js.map +1 -1
- package/dist/drift/git.d.ts.map +1 -1
- package/dist/drift/git.js +10 -2
- package/dist/drift/git.js.map +1 -1
- package/dist/drift/graph-edges.d.ts +4 -0
- package/dist/drift/graph-edges.d.ts.map +1 -0
- package/dist/drift/graph-edges.js +15 -0
- package/dist/drift/graph-edges.js.map +1 -0
- package/dist/drift/snapshot.d.ts.map +1 -1
- package/dist/drift/snapshot.js +2 -17
- package/dist/drift/snapshot.js.map +1 -1
- package/dist/duplicates/candidates.d.ts +61 -0
- package/dist/duplicates/candidates.d.ts.map +1 -0
- package/dist/duplicates/candidates.js +873 -0
- package/dist/duplicates/candidates.js.map +1 -0
- package/dist/duplicates/progress.d.ts +17 -0
- package/dist/duplicates/progress.d.ts.map +1 -0
- package/dist/duplicates/progress.js +57 -0
- package/dist/duplicates/progress.js.map +1 -0
- package/dist/duplicates/scoring.d.ts +9 -40
- package/dist/duplicates/scoring.d.ts.map +1 -1
- package/dist/duplicates/scoring.js +34 -414
- package/dist/duplicates/scoring.js.map +1 -1
- package/dist/duplicates/types.d.ts +30 -1
- package/dist/duplicates/types.d.ts.map +1 -1
- package/dist/duplicates/unit-cache.d.ts +11 -1
- package/dist/duplicates/unit-cache.d.ts.map +1 -1
- package/dist/duplicates/unit-cache.js +20 -2
- package/dist/duplicates/unit-cache.js.map +1 -1
- package/dist/duplicates/units.d.ts +4 -2
- package/dist/duplicates/units.d.ts.map +1 -1
- package/dist/duplicates/units.js +47 -25
- package/dist/duplicates/units.js.map +1 -1
- package/dist/duplicates.d.ts +1 -0
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +116 -62
- package/dist/duplicates.js.map +1 -1
- package/dist/graph-builder.d.ts +1 -1
- package/dist/graph-builder.d.ts.map +1 -1
- package/dist/graph-builder.js +3 -2
- package/dist/graph-builder.js.map +1 -1
- package/dist/graph-edge-collector.d.ts +3 -1
- package/dist/graph-edge-collector.d.ts.map +1 -1
- package/dist/graph-edge-collector.js +38 -6
- package/dist/graph-edge-collector.js.map +1 -1
- package/dist/graphs/angularjs.d.ts.map +1 -1
- package/dist/graphs/angularjs.js +2 -9
- package/dist/graphs/angularjs.js.map +1 -1
- package/dist/graphs/edge-resolution.d.ts +4 -0
- package/dist/graphs/edge-resolution.d.ts.map +1 -1
- package/dist/graphs/edge-resolution.js +2 -0
- package/dist/graphs/edge-resolution.js.map +1 -1
- package/dist/graphs/external/manifests.d.ts.map +1 -1
- package/dist/graphs/external/manifests.js +1 -6
- package/dist/graphs/external/manifests.js.map +1 -1
- package/dist/graphs/specifiers.d.ts.map +1 -1
- package/dist/graphs/specifiers.js +47 -26
- package/dist/graphs/specifiers.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts +2 -0
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.js +9 -3
- package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +3 -3
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js +2 -26
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed.js +38 -1
- package/dist/graphs/symbol-graph-detailed.js.map +1 -1
- package/dist/impact/analyzer.d.ts.map +1 -1
- package/dist/impact/analyzer.js +23 -17
- package/dist/impact/analyzer.js.map +1 -1
- package/dist/impact/budgets.d.ts.map +1 -1
- package/dist/impact/budgets.js +3 -9
- package/dist/impact/budgets.js.map +1 -1
- package/dist/impact/call-compatibility.d.ts.map +1 -1
- package/dist/impact/call-compatibility.js +3 -12
- package/dist/impact/call-compatibility.js.map +1 -1
- package/dist/impact/context.d.ts +6 -0
- package/dist/impact/context.d.ts.map +1 -1
- package/dist/impact/context.js +2 -2
- package/dist/impact/context.js.map +1 -1
- package/dist/impact/direct.d.ts.map +1 -1
- package/dist/impact/direct.js +2 -6
- package/dist/impact/direct.js.map +1 -1
- package/dist/impact/map.d.ts +3 -1
- package/dist/impact/map.d.ts.map +1 -1
- package/dist/impact/map.js +12 -5
- package/dist/impact/map.js.map +1 -1
- package/dist/impact/providers/base.js +1 -1
- package/dist/impact/providers/base.js.map +1 -1
- package/dist/impact/reference-cache.d.ts.map +1 -1
- package/dist/impact/reference-cache.js +1 -24
- package/dist/impact/reference-cache.js.map +1 -1
- package/dist/impact/report-shared.d.ts +2 -1
- package/dist/impact/report-shared.d.ts.map +1 -1
- package/dist/impact/report-shared.js +10 -0
- package/dist/impact/report-shared.js.map +1 -1
- package/dist/impact/report-suggestions.d.ts.map +1 -1
- package/dist/impact/report-suggestions.js +2 -8
- package/dist/impact/report-suggestions.js.map +1 -1
- package/dist/impact/report.d.ts.map +1 -1
- package/dist/impact/report.js +2 -8
- package/dist/impact/report.js.map +1 -1
- package/dist/impact/streaming.d.ts.map +1 -1
- package/dist/impact/streaming.js +3 -8
- package/dist/impact/streaming.js.map +1 -1
- package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
- package/dist/indexer/build-cache/manifest.js +10 -108
- package/dist/indexer/build-cache/manifest.js.map +1 -1
- package/dist/indexer/build-cache/module-cache.d.ts +6 -1
- package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache/module-cache.js +25 -2
- package/dist/indexer/build-cache/module-cache.js.map +1 -1
- package/dist/indexer/build-cache/options.d.ts +38 -1
- package/dist/indexer/build-cache/options.d.ts.map +1 -1
- package/dist/indexer/build-cache/options.js +38 -1
- 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 +48 -99
- package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
- package/dist/indexer/build-cache/reports.d.ts +1 -0
- package/dist/indexer/build-cache/reports.d.ts.map +1 -1
- package/dist/indexer/build-cache/reports.js +10 -0
- package/dist/indexer/build-cache/reports.js.map +1 -1
- package/dist/indexer/build-index.d.ts +2 -0
- package/dist/indexer/build-index.d.ts.map +1 -1
- package/dist/indexer/build-index.js +187 -57
- package/dist/indexer/build-index.js.map +1 -1
- package/dist/indexer/build-workers.d.ts +7 -1
- package/dist/indexer/build-workers.d.ts.map +1 -1
- package/dist/indexer/build-workers.js +12 -0
- package/dist/indexer/build-workers.js.map +1 -1
- package/dist/indexer/call-hierarchy.d.ts.map +1 -1
- package/dist/indexer/call-hierarchy.js +5 -17
- package/dist/indexer/call-hierarchy.js.map +1 -1
- package/dist/indexer/compilation-units.d.ts +32 -20
- package/dist/indexer/compilation-units.d.ts.map +1 -1
- package/dist/indexer/compilation-units.js +139 -145
- package/dist/indexer/compilation-units.js.map +1 -1
- package/dist/indexer/cpp-callables.d.ts.map +1 -1
- package/dist/indexer/cpp-callables.js +2 -7
- package/dist/indexer/cpp-callables.js.map +1 -1
- package/dist/indexer/import-types.d.ts +5 -0
- package/dist/indexer/import-types.d.ts.map +1 -1
- package/dist/indexer/import-types.js.map +1 -1
- package/dist/indexer/imports/binding-ranges.d.ts +5 -12
- package/dist/indexer/imports/binding-ranges.d.ts.map +1 -1
- package/dist/indexer/imports/binding-ranges.js +13 -19
- package/dist/indexer/imports/binding-ranges.js.map +1 -1
- package/dist/indexer/imports/context.d.ts +6 -0
- package/dist/indexer/imports/context.d.ts.map +1 -1
- package/dist/indexer/imports/import-binding-tables.d.ts +28 -13
- package/dist/indexer/imports/import-binding-tables.d.ts.map +1 -1
- package/dist/indexer/imports/import-binding-tables.js +179 -178
- package/dist/indexer/imports/import-binding-tables.js.map +1 -1
- package/dist/indexer/imports/js-text-imports.d.ts +0 -1
- package/dist/indexer/imports/js-text-imports.d.ts.map +1 -1
- package/dist/indexer/imports/js-text-imports.js +0 -176
- 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 +4 -8
- package/dist/indexer/imports/language-specific.js.map +1 -1
- package/dist/indexer/imports/python.d.ts +0 -1
- package/dist/indexer/imports/python.d.ts.map +1 -1
- package/dist/indexer/imports/python.js +1 -29
- package/dist/indexer/imports/python.js.map +1 -1
- package/dist/indexer/imports/text-import-extractors.d.ts +2 -9
- package/dist/indexer/imports/text-import-extractors.d.ts.map +1 -1
- package/dist/indexer/imports/text-import-extractors.js +0 -284
- package/dist/indexer/imports/text-import-extractors.js.map +1 -1
- package/dist/indexer/imports.d.ts +15 -0
- package/dist/indexer/imports.d.ts.map +1 -1
- package/dist/indexer/imports.js +82 -44
- package/dist/indexer/imports.js.map +1 -1
- package/dist/indexer/incremental-plan.d.ts +0 -1
- package/dist/indexer/incremental-plan.d.ts.map +1 -1
- package/dist/indexer/incremental-plan.js +6 -12
- package/dist/indexer/incremental-plan.js.map +1 -1
- package/dist/indexer/name-lookup-policies/implicit-self.d.ts.map +1 -1
- package/dist/indexer/name-lookup-policies/implicit-self.js +25 -4
- package/dist/indexer/name-lookup-policies/implicit-self.js.map +1 -1
- package/dist/indexer/name-resolution-types.d.ts +5 -0
- package/dist/indexer/name-resolution-types.d.ts.map +1 -1
- package/dist/indexer/name-resolution.d.ts.map +1 -1
- package/dist/indexer/name-resolution.js +2 -0
- package/dist/indexer/name-resolution.js.map +1 -1
- package/dist/indexer/navigation-cpp.d.ts.map +1 -1
- package/dist/indexer/navigation-cpp.js +3 -5
- package/dist/indexer/navigation-cpp.js.map +1 -1
- package/dist/indexer/navigation-goto.d.ts +49 -3
- package/dist/indexer/navigation-goto.d.ts.map +1 -1
- package/dist/indexer/navigation-goto.js +500 -106
- package/dist/indexer/navigation-goto.js.map +1 -1
- package/dist/indexer/navigation-local.d.ts +7 -0
- package/dist/indexer/navigation-local.d.ts.map +1 -1
- package/dist/indexer/navigation-local.js +22 -2
- package/dist/indexer/navigation-local.js.map +1 -1
- package/dist/indexer/navigation-php.d.ts +0 -1
- package/dist/indexer/navigation-php.d.ts.map +1 -1
- package/dist/indexer/navigation-php.js +1 -7
- package/dist/indexer/navigation-php.js.map +1 -1
- package/dist/indexer/navigation-references.d.ts +1 -0
- package/dist/indexer/navigation-references.d.ts.map +1 -1
- package/dist/indexer/navigation-references.js +134 -23
- package/dist/indexer/navigation-references.js.map +1 -1
- package/dist/indexer/navigation-resolve.d.ts +22 -0
- package/dist/indexer/navigation-resolve.d.ts.map +1 -1
- package/dist/indexer/navigation-resolve.js +73 -8
- package/dist/indexer/navigation-resolve.js.map +1 -1
- package/dist/indexer/navigation.d.ts +4 -1
- package/dist/indexer/navigation.d.ts.map +1 -1
- package/dist/indexer/navigation.js +398 -95
- package/dist/indexer/navigation.js.map +1 -1
- package/dist/indexer/python-property-decorator.d.ts +11 -0
- package/dist/indexer/python-property-decorator.d.ts.map +1 -0
- package/dist/indexer/python-property-decorator.js +30 -0
- package/dist/indexer/python-property-decorator.js.map +1 -0
- package/dist/indexer/shared-owner-identity.d.ts +3 -1
- package/dist/indexer/shared-owner-identity.d.ts.map +1 -1
- package/dist/indexer/shared-owner-identity.js +40 -12
- package/dist/indexer/shared-owner-identity.js.map +1 -1
- package/dist/indexer/shared.d.ts +10 -0
- package/dist/indexer/shared.d.ts.map +1 -1
- package/dist/indexer/shared.js +8 -0
- package/dist/indexer/shared.js.map +1 -1
- package/dist/indexer/star-import-precedence.d.ts +5 -1
- package/dist/indexer/star-import-precedence.d.ts.map +1 -1
- package/dist/indexer/star-import-precedence.js +12 -19
- package/dist/indexer/star-import-precedence.js.map +1 -1
- package/dist/indexer/type-hierarchy.d.ts.map +1 -1
- package/dist/indexer/type-hierarchy.js +8 -9
- package/dist/indexer/type-hierarchy.js.map +1 -1
- package/dist/indexer/types.d.ts +49 -1
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/indexer/types.js.map +1 -1
- package/dist/indexer/workspace-symbols.d.ts.map +1 -1
- package/dist/indexer/workspace-symbols.js +3 -13
- package/dist/indexer/workspace-symbols.js.map +1 -1
- package/dist/installer/locks.d.ts +1 -0
- package/dist/installer/locks.d.ts.map +1 -1
- package/dist/installer/locks.js +4 -8
- package/dist/installer/locks.js.map +1 -1
- package/dist/installer/registry.d.ts.map +1 -1
- package/dist/installer/registry.js +9 -15
- package/dist/installer/registry.js.map +1 -1
- package/dist/languages/callable-arity.d.ts.map +1 -1
- package/dist/languages/callable-arity.js +1 -38
- package/dist/languages/callable-arity.js.map +1 -1
- package/dist/languages/definitions/csharp.d.ts.map +1 -1
- package/dist/languages/definitions/csharp.js +5 -13
- package/dist/languages/definitions/csharp.js.map +1 -1
- package/dist/languages/definitions/java.d.ts.map +1 -1
- package/dist/languages/definitions/java.js +4 -13
- package/dist/languages/definitions/java.js.map +1 -1
- package/dist/languages/definitions/kotlin.d.ts.map +1 -1
- package/dist/languages/definitions/kotlin.js +4 -8
- package/dist/languages/definitions/kotlin.js.map +1 -1
- package/dist/languages/definitions/python.d.ts.map +1 -1
- package/dist/languages/definitions/python.js +5 -3
- package/dist/languages/definitions/python.js.map +1 -1
- package/dist/languages/import-statement-parsers.d.ts +0 -30
- package/dist/languages/import-statement-parsers.d.ts.map +1 -1
- package/dist/languages/import-statement-parsers.js +1 -81
- package/dist/languages/import-statement-parsers.js.map +1 -1
- package/dist/languages/sfc.d.ts.map +1 -1
- package/dist/languages/sfc.js +8 -43
- package/dist/languages/sfc.js.map +1 -1
- package/dist/lifecycle/manifest.d.ts.map +1 -1
- package/dist/lifecycle/manifest.js +11 -29
- package/dist/lifecycle/manifest.js.map +1 -1
- package/dist/mcp/cancellation.d.ts +6 -0
- package/dist/mcp/cancellation.d.ts.map +1 -0
- package/dist/mcp/cancellation.js +11 -0
- package/dist/mcp/cancellation.js.map +1 -0
- package/dist/mcp/handlers.d.ts +54 -3
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js +186 -42
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/http-transport.d.ts.map +1 -1
- package/dist/mcp/http-transport.js +9 -2
- package/dist/mcp/http-transport.js.map +1 -1
- package/dist/mcp/index-readiness.d.ts +114 -0
- package/dist/mcp/index-readiness.d.ts.map +1 -0
- package/dist/mcp/index-readiness.js +264 -0
- package/dist/mcp/index-readiness.js.map +1 -0
- package/dist/mcp/project-watcher.d.ts +125 -0
- package/dist/mcp/project-watcher.d.ts.map +1 -0
- package/dist/mcp/project-watcher.js +643 -0
- package/dist/mcp/project-watcher.js.map +1 -0
- package/dist/mcp/protocol.d.ts.map +1 -1
- package/dist/mcp/protocol.js +23 -10
- package/dist/mcp/protocol.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/stale-install.d.ts +13 -0
- package/dist/mcp/stale-install.d.ts.map +1 -0
- package/dist/mcp/stale-install.js +30 -0
- package/dist/mcp/stale-install.js.map +1 -0
- package/dist/native/byte-index.d.ts +1 -0
- package/dist/native/byte-index.d.ts.map +1 -1
- package/dist/native/byte-index.js +1 -1
- package/dist/native/byte-index.js.map +1 -1
- package/dist/native/contracts.d.ts +1 -0
- package/dist/native/contracts.d.ts.map +1 -1
- package/dist/native/native-backend-report.d.ts +2 -1
- package/dist/native/native-backend-report.d.ts.map +1 -1
- package/dist/native/native-backend-report.js +23 -0
- package/dist/native/native-backend-report.js.map +1 -1
- package/dist/native/tree-shape.d.ts +5 -7
- package/dist/native/tree-shape.d.ts.map +1 -1
- package/dist/native/tree-shape.js +11 -10
- package/dist/native/tree-shape.js.map +1 -1
- package/dist/presentation/bounds.d.ts +2 -0
- package/dist/presentation/bounds.d.ts.map +1 -1
- package/dist/presentation/bounds.js +8 -0
- package/dist/presentation/bounds.js.map +1 -1
- package/dist/review/candidates.d.ts.map +1 -1
- package/dist/review/candidates.js +4 -25
- package/dist/review/candidates.js.map +1 -1
- package/dist/review/deleted.js +1 -1
- package/dist/review/deleted.js.map +1 -1
- package/dist/review/report.d.ts.map +1 -1
- package/dist/review/report.js +4 -2
- package/dist/review/report.js.map +1 -1
- package/dist/review/summaries.d.ts.map +1 -1
- package/dist/review/summaries.js +14 -35
- package/dist/review/summaries.js.map +1 -1
- package/dist/review.d.ts +6 -0
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +5 -6
- package/dist/review.js.map +1 -1
- package/dist/scss/navigation.d.ts +13 -0
- package/dist/scss/navigation.d.ts.map +1 -0
- package/dist/scss/navigation.js +150 -0
- package/dist/scss/navigation.js.map +1 -0
- package/dist/scss/resolution.d.ts +190 -0
- package/dist/scss/resolution.d.ts.map +1 -0
- package/dist/scss/resolution.js +1802 -0
- package/dist/scss/resolution.js.map +1 -0
- package/dist/scss/syntax.d.ts +181 -0
- package/dist/scss/syntax.d.ts.map +1 -0
- package/dist/scss/syntax.js +1436 -0
- package/dist/scss/syntax.js.map +1 -0
- package/dist/sql/classify-sql-file.d.ts +7 -0
- package/dist/sql/classify-sql-file.d.ts.map +1 -1
- package/dist/sql/classify-sql-file.js +9 -0
- package/dist/sql/classify-sql-file.js.map +1 -1
- package/dist/sql/extract-facts.d.ts.map +1 -1
- package/dist/sql/extract-facts.js +517 -77
- package/dist/sql/extract-facts.js.map +1 -1
- package/dist/sql/lex.d.ts +100 -1
- package/dist/sql/lex.d.ts.map +1 -1
- package/dist/sql/lex.js +473 -11
- package/dist/sql/lex.js.map +1 -1
- package/dist/sql/lookup.d.ts +17 -0
- package/dist/sql/lookup.d.ts.map +1 -1
- package/dist/sql/lookup.js +21 -0
- package/dist/sql/lookup.js.map +1 -1
- package/dist/sql/navigation.d.ts +28 -1
- package/dist/sql/navigation.d.ts.map +1 -1
- package/dist/sql/navigation.js +474 -84
- package/dist/sql/navigation.js.map +1 -1
- package/dist/sql/object-mentions.d.ts +24 -0
- package/dist/sql/object-mentions.d.ts.map +1 -0
- package/dist/sql/object-mentions.js +233 -0
- package/dist/sql/object-mentions.js.map +1 -0
- package/dist/sql/review.d.ts +3 -0
- package/dist/sql/review.d.ts.map +1 -1
- package/dist/sql/review.js +15 -14
- package/dist/sql/review.js.map +1 -1
- package/dist/sql/routine-mentions.d.ts +61 -0
- package/dist/sql/routine-mentions.d.ts.map +1 -0
- package/dist/sql/routine-mentions.js +868 -0
- package/dist/sql/routine-mentions.js.map +1 -0
- package/dist/sql/source-graph.d.ts +18 -3
- package/dist/sql/source-graph.d.ts.map +1 -1
- package/dist/sql/source-graph.js +109 -32
- package/dist/sql/source-graph.js.map +1 -1
- package/dist/sqlite/raw-query-worker-pool.d.ts.map +1 -1
- package/dist/sqlite/raw-query-worker-pool.js +2 -0
- package/dist/sqlite/raw-query-worker-pool.js.map +1 -1
- package/dist/sqlite/types.d.ts +6 -5
- package/dist/sqlite/types.d.ts.map +1 -1
- package/dist/sqlite/write.d.ts.map +1 -1
- package/dist/sqlite/write.js.map +1 -1
- package/dist/sqlite-driver.d.ts +0 -1
- package/dist/sqlite-driver.d.ts.map +1 -1
- package/dist/sqlite-driver.js +0 -11
- package/dist/sqlite-driver.js.map +1 -1
- package/dist/terraform/navigation.d.ts.map +1 -1
- package/dist/terraform/navigation.js +1 -3
- package/dist/terraform/navigation.js.map +1 -1
- package/dist/terraform/syntax.d.ts.map +1 -1
- package/dist/terraform/syntax.js +1 -4
- package/dist/terraform/syntax.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util/ast.d.ts +5 -0
- package/dist/util/ast.d.ts.map +1 -1
- package/dist/util/ast.js +10 -0
- package/dist/util/ast.js.map +1 -1
- package/dist/util/atomic-file.d.ts +22 -0
- package/dist/util/atomic-file.d.ts.map +1 -0
- package/dist/util/atomic-file.js +106 -0
- package/dist/util/atomic-file.js.map +1 -0
- package/dist/util/collections.d.ts +5 -0
- package/dist/util/collections.d.ts.map +1 -1
- package/dist/util/collections.js +26 -0
- package/dist/util/collections.js.map +1 -1
- package/dist/util/concurrency.d.ts +8 -0
- package/dist/util/concurrency.d.ts.map +1 -1
- package/dist/util/concurrency.js +16 -0
- package/dist/util/concurrency.js.map +1 -1
- package/dist/util/confined-file.d.ts.map +1 -1
- package/dist/util/confined-file.js +1 -3
- package/dist/util/confined-file.js.map +1 -1
- package/dist/util/csharp-tree.d.ts +65 -0
- package/dist/util/csharp-tree.d.ts.map +1 -0
- package/dist/util/csharp-tree.js +266 -0
- package/dist/util/csharp-tree.js.map +1 -0
- package/dist/util/errors.d.ts +1 -0
- package/dist/util/errors.d.ts.map +1 -1
- package/dist/util/errors.js +3 -0
- package/dist/util/errors.js.map +1 -1
- package/dist/util/graph-edges.d.ts +2 -0
- package/dist/util/graph-edges.d.ts.map +1 -1
- package/dist/util/graph-edges.js +11 -0
- package/dist/util/graph-edges.js.map +1 -1
- package/dist/util/guards.d.ts +1 -0
- package/dist/util/guards.d.ts.map +1 -1
- package/dist/util/guards.js +6 -0
- package/dist/util/guards.js.map +1 -1
- package/dist/util/identifiers.d.ts +0 -24
- package/dist/util/identifiers.d.ts.map +1 -1
- package/dist/util/identifiers.js +0 -24
- package/dist/util/identifiers.js.map +1 -1
- package/dist/util/jvm-tree.d.ts +58 -0
- package/dist/util/jvm-tree.d.ts.map +1 -0
- package/dist/util/jvm-tree.js +153 -0
- package/dist/util/jvm-tree.js.map +1 -0
- package/dist/util/package-exports.d.ts +0 -22
- package/dist/util/package-exports.d.ts.map +1 -1
- package/dist/util/package-exports.js +25 -5
- package/dist/util/package-exports.js.map +1 -1
- package/dist/util/paths.d.ts +1 -0
- package/dist/util/paths.d.ts.map +1 -1
- package/dist/util/paths.js +10 -4
- package/dist/util/paths.js.map +1 -1
- package/dist/util/resolution/csharp.d.ts +20 -8
- package/dist/util/resolution/csharp.d.ts.map +1 -1
- package/dist/util/resolution/csharp.js +126 -127
- package/dist/util/resolution/csharp.js.map +1 -1
- 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 +74 -21
- package/dist/util/resolution/files.js.map +1 -1
- package/dist/util/resolution/jvm.d.ts +21 -1
- package/dist/util/resolution/jvm.d.ts.map +1 -1
- package/dist/util/resolution/jvm.js +168 -100
- package/dist/util/resolution/jvm.js.map +1 -1
- package/dist/util/resolution/project-symbols.d.ts +1 -1
- package/dist/util/resolution/project-symbols.d.ts.map +1 -1
- package/dist/util/resolution/project-symbols.js.map +1 -1
- package/dist/util/resolution/specifier-targets.d.ts +4 -0
- package/dist/util/resolution/specifier-targets.d.ts.map +1 -1
- package/dist/util/resolution/specifier-targets.js +11 -3
- package/dist/util/resolution/specifier-targets.js.map +1 -1
- package/dist/util/resolution.d.ts.map +1 -1
- package/dist/util/resolution.js +21 -7
- package/dist/util/resolution.js.map +1 -1
- package/dist/util/syntax-tree.d.ts +16 -0
- package/dist/util/syntax-tree.d.ts.map +1 -0
- package/dist/util/syntax-tree.js +34 -0
- package/dist/util/syntax-tree.js.map +1 -0
- package/dist/util/text-scanning.d.ts +6 -0
- package/dist/util/text-scanning.d.ts.map +1 -0
- package/dist/util/text-scanning.js +35 -0
- package/dist/util/text-scanning.js.map +1 -0
- package/dist/util/trivia-tables.d.ts +13 -8
- package/dist/util/trivia-tables.d.ts.map +1 -1
- package/dist/util/trivia-tables.js +13 -72
- package/dist/util/trivia-tables.js.map +1 -1
- package/dist/util/trivia.d.ts +10 -3
- package/dist/util/trivia.d.ts.map +1 -1
- package/dist/util/trivia.js +209 -79
- package/dist/util/trivia.js.map +1 -1
- package/dist/util/windows-process-drain.d.ts.map +1 -1
- package/dist/util/windows-process-drain.js.map +1 -1
- package/dist/util/worker-threads.d.ts +16 -0
- package/dist/util/worker-threads.d.ts.map +1 -1
- package/dist/util/worker-threads.js +118 -0
- package/dist/util/worker-threads.js.map +1 -1
- package/dist/worker/native-worker-pool.d.ts.map +1 -1
- package/dist/worker/native-worker-pool.js +2 -1
- package/dist/worker/native-worker-pool.js.map +1 -1
- package/docs/mcp.md +82 -8
- package/package.json +7 -7
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { supportForFileWithoutHeaderSample } from "../languages.js";
|
|
3
|
+
import { isJsTsLanguage } from "../languages/js-family.js";
|
|
4
|
+
import { pythonPropertyDecorator } from "./python-property-decorator.js";
|
|
2
5
|
import { ensureParsedContext } from "./parse-context.js";
|
|
3
6
|
import { getCompilationUnitPeers, IMPLICIT_UNIT_LANGUAGES } from "./compilation-units.js";
|
|
4
7
|
import { getReverseNeighbors, graphAdjacencyFor } from "../graphs/adjacency.js";
|
|
@@ -6,6 +9,7 @@ import { isGoExportedMemberName } from "./declaration-visibility.js";
|
|
|
6
9
|
import { memberSyntaxNamesFreeFunction } from "../util/member-access-tables.js";
|
|
7
10
|
import { phpObjectCreationKeyword } from "../graphs/symbol-graph-detailed/receiver-calls.js";
|
|
8
11
|
import { findCsharpPartialTypeEquivalents, innermostNamespaceImport, resolveMemberAccessDefinition, resolvePhpObjectCreationTarget, resolveRubySuperDefinition, sharedOwnerMemberUnitComplete, supportsReceiverMemberNavigation, } from "./navigation-goto.js";
|
|
12
|
+
import { isPythonReceiverAttributeAssignmentName } from "../languages/definitions/python.js";
|
|
9
13
|
import { findClosestBinding, findClosestScopeBinding, findDeclarationNameNode, getOrBuildScopeIndex, toModuleRef, } from "./navigation-local.js";
|
|
10
14
|
import { typescriptCallableCandidatesInContainer } from "./ts-callables.js";
|
|
11
15
|
import { isExplicitMethodCall, scopeNodesFor } from "./scope-nodes.js";
|
|
@@ -14,24 +18,28 @@ import { effectiveExplicitBinding, findRubyReopenedConstantParts, isExpandedStar
|
|
|
14
18
|
import { createNavigationProvenance, okGoToResult } from "./navigation-provenance.js";
|
|
15
19
|
import { getPhpQualifiedReference, inferPhpQualifiedReferenceImportType, isPhpCaseInsensitiveSymbolKind, normalizePhpQualifiedReference, phpLastIdentifierSegment, } from "./navigation-php.js";
|
|
16
20
|
import { ensurePhpNamespaceSymbolIndex, phpReferenceRoleMatchesKind } from "./php-namespace-symbols.js";
|
|
17
|
-
import { buildIndexedCandidateCoverage, buildPhpQualifiedNames, cppCanonicalStructuralExport, describeReferenceStrategies, collectVerifiedNamedNodeReferences, isMemberAccessPropertyRange, getCachedScope, exportFromIdentifier, getCachedReferenceCandidateFiles, getCandidateReferenceNames, hasExpandedNamedImport, pythonParentPackageNamespacePaths, importBindingDeclarationRangeKeys, importBindingIdentityVerificationSites, importBindingReferenceSites, rangeIdentityKey, referenceSiteKey, } from "./navigation-references.js";
|
|
18
|
-
import { directModuleValueEntry, javaStaticNamedImportIncludes, resolveExport, resolveImported, resolveModuleExports, resolvePhpExportByImportType, } from "./navigation-resolve.js";
|
|
21
|
+
import { buildIndexedCandidateCoverage, buildPhpQualifiedNames, markNameEquivalenceGap, cppCanonicalStructuralExport, describeReferenceStrategies, collectVerifiedNamedNodeReferences, isMemberAccessPropertyRange, getCachedScope, exportFromIdentifier, getCachedReferenceCandidateFiles, getCandidateReferenceNames, hasExpandedNamedImport, pythonParentPackageNamespacePaths, importBindingDeclarationRangeKeys, importBindingIdentityVerificationSites, importBindingReferenceSites, rangeIdentityKey, referenceSiteKey, } from "./navigation-references.js";
|
|
22
|
+
import { directModuleValueEntry, csharpNamespaceImportDirectories, csharpShadowedImports, javaStaticNamedImportIncludes, resolveExport, resolveImported, resolveModuleExports, resolvePhpExportByImportType, } from "./navigation-resolve.js";
|
|
19
23
|
import { extractEnclosingBlock, extractLineContext, rangeContains, sameDef } from "./reference-context.js";
|
|
20
24
|
import { DEFAULT_REF_CONTEXT_LINES } from "./shared.js";
|
|
21
25
|
import {} from "../types.js";
|
|
22
26
|
import { loadNearestTsconfigFor, resolveImportSpecifier } from "../util/resolution.js";
|
|
23
|
-
import { fileIdentityKey } from "../util/paths.js";
|
|
27
|
+
import { fileIdentityKey, normalizePath } from "../util/paths.js";
|
|
24
28
|
import { sliceText, toRange } from "../util/ast.js";
|
|
25
29
|
import { foldPhpIdentifierCase } from "../util/identifiers.js";
|
|
26
|
-
import { getMemberAccessParts, isMemberAccessNode, isMemberObjectIdentifier, isMemberReferencePropertyIdentifier, isReceiverNameNode, } from "../util/member-access.js";
|
|
30
|
+
import { collectMemberAccessChain, getMemberAccessParts, isMemberAccessNode, isMemberObjectIdentifier, isMemberReferencePropertyIdentifier, isReceiverNameNode, } from "../util/member-access.js";
|
|
27
31
|
import { cppOutOfLineOwnerPath, cppOutOfLineMemberName, cppOutOfLineMemberDeclarationNode, cppQualifiedNameSegments, } from "../graphs/symbol-graph-detailed/receiver-calls.js";
|
|
28
32
|
import { cppEquivalentCallableBindings } from "./cpp-callables.js";
|
|
29
33
|
import { resolveCppExportedCallables, resolveCppQualifiedMemberContainer } from "./navigation-cpp.js";
|
|
30
34
|
import { SymbolKind, } from "./types.js";
|
|
31
|
-
import { findSqlReferences, goToSqlDefinition } from "../sql/navigation.js";
|
|
35
|
+
import { findSqlReferences, goToSqlDefinition, sqlPositionIsProvenObjectOrRoutineMention } from "../sql/navigation.js";
|
|
36
|
+
import { findScssReferences, goToScssDefinition } from "../scss/navigation.js";
|
|
37
|
+
import { scssBlockLocalExistenceUnproven, scssFactsForFile, scssFlowLocalUnproven, scssLocalSpellingGap, scssMemberForDefinition, scssNearerEquivalentLocal, scssScopedCallableDynamicUnproven, scssScopedCallableReferences, } from "../scss/resolution.js";
|
|
32
38
|
import { findTerraformReferences, goToTerraformDefinition } from "../terraform/navigation.js";
|
|
33
39
|
import { createLoadingParsedFileProvider, fileBindingIsUnshadowed, phpImportTypeAtPosition, resolveBareName, settleNameResolution, withParsedFiles, } from "./name-resolution.js";
|
|
34
40
|
import { resolveCppQualifiedName } from "./name-lookup-policies/c-family.js";
|
|
41
|
+
import { createUnionFind } from "../util/collections.js";
|
|
42
|
+
import { toTreeSitterPosition } from "./shared.js";
|
|
35
43
|
export { resolveExport, resolveImported } from "./navigation-resolve.js";
|
|
36
44
|
const CPP_MEMBER_CONTAINER_TYPES = new Set(["class_specifier", "struct_specifier", "union_specifier"]);
|
|
37
45
|
const MAX_REFERENCE_NAMESPACE_DEPTH = 8;
|
|
@@ -47,6 +55,9 @@ export async function goToDefinition(index, req, parsedContext) {
|
|
|
47
55
|
const terraformResult = await goToTerraformDefinition(index, req);
|
|
48
56
|
if (terraformResult)
|
|
49
57
|
return terraformResult;
|
|
58
|
+
const scssResult = await goToScssDefinition(index, req);
|
|
59
|
+
if (scssResult)
|
|
60
|
+
return scssResult;
|
|
50
61
|
const context = parsedContext ??
|
|
51
62
|
(await ensureParsedContext(file, index.parsed?.get(fileIdentityKey(file)), index.languageExtensions));
|
|
52
63
|
const sup = context.sup;
|
|
@@ -54,10 +65,7 @@ export async function goToDefinition(index, req, parsedContext) {
|
|
|
54
65
|
const tree = context.tree;
|
|
55
66
|
if (sup.id === "php")
|
|
56
67
|
await ensurePhpNamespaceSymbolIndex(index);
|
|
57
|
-
const pos = {
|
|
58
|
-
row: Math.max(0, line - 1),
|
|
59
|
-
column: Math.max(0, column - 1),
|
|
60
|
-
};
|
|
68
|
+
const pos = toTreeSitterPosition({ line, column });
|
|
61
69
|
let node = tree.rootNode.descendantForPosition(pos, pos);
|
|
62
70
|
// A position at the start of `b` in `a?.b` also touches the end of the `?.` token, which the
|
|
63
71
|
// parser reports first. The use is the name that starts at the position.
|
|
@@ -366,22 +374,7 @@ export async function recoverIncludedCallableStar(index, mod, languageId, name,
|
|
|
366
374
|
familyOf.set(key, defs);
|
|
367
375
|
return defs;
|
|
368
376
|
};
|
|
369
|
-
const
|
|
370
|
-
const find = (start) => {
|
|
371
|
-
let current = start;
|
|
372
|
-
while (parent[current] !== current) {
|
|
373
|
-
const next = parent[current];
|
|
374
|
-
parent[current] = parent[next] ?? next;
|
|
375
|
-
current = next;
|
|
376
|
-
}
|
|
377
|
-
return current;
|
|
378
|
-
};
|
|
379
|
-
const unite = (left, right) => {
|
|
380
|
-
const leftRoot = find(left);
|
|
381
|
-
const rightRoot = find(right);
|
|
382
|
-
if (leftRoot !== rightRoot)
|
|
383
|
-
parent[rightRoot] = leftRoot;
|
|
384
|
-
};
|
|
377
|
+
const { find, unite } = createUnionFind(functions.length);
|
|
385
378
|
for (let left = 0; left < functions.length; left += 1) {
|
|
386
379
|
const defs = await family(functions[left].def);
|
|
387
380
|
for (let right = left + 1; right < functions.length; right += 1) {
|
|
@@ -426,7 +419,7 @@ export async function getCppEquivalentCallableDefinitions(index, def, parsedCont
|
|
|
426
419
|
return [family.definition, ...family.equivalents];
|
|
427
420
|
}
|
|
428
421
|
/** Adds the requested `line` or `block` context to each reference, parsing each file once. */
|
|
429
|
-
async function attachReferenceContext(index, refs, opts) {
|
|
422
|
+
export async function attachReferenceContext(index, refs, opts) {
|
|
430
423
|
if (!opts?.context)
|
|
431
424
|
return;
|
|
432
425
|
const perFileCache = new Map();
|
|
@@ -448,22 +441,67 @@ async function attachReferenceContext(index, refs, opts) {
|
|
|
448
441
|
}
|
|
449
442
|
}
|
|
450
443
|
}
|
|
444
|
+
export async function canonicalizePythonReceiverAttributeDefinition(index, def, position = {
|
|
445
|
+
file: def.file,
|
|
446
|
+
line: def.range.start.line,
|
|
447
|
+
column: def.range.start.column,
|
|
448
|
+
}) {
|
|
449
|
+
if (supportForFileWithoutHeaderSample(position.file, index.languageExtensions)?.id !== "python")
|
|
450
|
+
return null;
|
|
451
|
+
const context = await ensureParsedContext(position.file, index.parsed?.get(fileIdentityKey(position.file)), index.languageExtensions);
|
|
452
|
+
if (context.sup.id !== "python")
|
|
453
|
+
return null;
|
|
454
|
+
const nodePosition = { row: position.line - 1, column: position.column - 1 };
|
|
455
|
+
const node = context.tree.rootNode.descendantForPosition(nodePosition, nodePosition);
|
|
456
|
+
if (!isPythonReceiverAttributeAssignmentName(node))
|
|
457
|
+
return null;
|
|
458
|
+
return await goToDefinition(index, position, context);
|
|
459
|
+
}
|
|
451
460
|
async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
452
461
|
let def = null;
|
|
453
462
|
let provenance;
|
|
454
463
|
if ("def" in req) {
|
|
455
464
|
def = req.def;
|
|
456
465
|
provenance = createNavigationProvenance("exact", "high");
|
|
466
|
+
const canonical = await canonicalizePythonReceiverAttributeDefinition(index, def);
|
|
467
|
+
if (canonical?.status === "ok") {
|
|
468
|
+
def = canonical.definition;
|
|
469
|
+
provenance = canonical.provenance;
|
|
470
|
+
}
|
|
457
471
|
}
|
|
458
472
|
else {
|
|
459
473
|
const module = index.byFile.get(fileIdentityKey(req.file));
|
|
474
|
+
// A SQL definition spans its whole statement, so a position inside it can name another object: the
|
|
475
|
+
// function a trigger runs, a call in a routine body, or a table a view reads. Resolve that name first.
|
|
476
|
+
const sqlTarget = module ? await goToSqlDefinition(index, req) : null;
|
|
460
477
|
const localAtPosition = module?.locals.find((local) => rangeContains(local.range, {
|
|
461
478
|
row: req.line,
|
|
462
479
|
column: req.column,
|
|
463
480
|
}));
|
|
464
|
-
|
|
481
|
+
// A column can share a table's name. Only a syntactically proven object or routine mention
|
|
482
|
+
// overrides the definition that encloses the position; a column stays on that definition.
|
|
483
|
+
const namesObject = sqlTarget && localAtPosition ? await sqlPositionIsProvenObjectOrRoutineMention(index, req) : false;
|
|
484
|
+
// A proven mention that no single definition owns, such as an overloaded callee, is unresolved.
|
|
485
|
+
// It is not a reference to the definition around it.
|
|
486
|
+
if (namesObject && sqlTarget?.status === "not_found")
|
|
487
|
+
return { status: "not_found", reason: sqlTarget.reason };
|
|
488
|
+
const sqlMention = sqlTarget?.status === "ok" && (!localAtPosition || namesObject);
|
|
489
|
+
if (sqlMention && sqlTarget?.status === "ok") {
|
|
490
|
+
def = sqlTarget.definition;
|
|
491
|
+
provenance = sqlTarget.provenance;
|
|
492
|
+
}
|
|
493
|
+
else if (localAtPosition) {
|
|
465
494
|
def = localAtPosition;
|
|
466
495
|
provenance = createNavigationProvenance("exact", "high");
|
|
496
|
+
const canonical = await canonicalizePythonReceiverAttributeDefinition(index, def, {
|
|
497
|
+
file: req.file,
|
|
498
|
+
line: req.line,
|
|
499
|
+
column: req.column,
|
|
500
|
+
});
|
|
501
|
+
if (canonical?.status === "ok") {
|
|
502
|
+
def = canonical.definition;
|
|
503
|
+
provenance = canonical.provenance;
|
|
504
|
+
}
|
|
467
505
|
}
|
|
468
506
|
else {
|
|
469
507
|
const gotoResult = await goToDefinition(index, req);
|
|
@@ -489,7 +527,10 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
489
527
|
}
|
|
490
528
|
const maxReferences = typeof opts?.maxReferences === "number" && opts.maxReferences > 0 ? opts.maxReferences : undefined;
|
|
491
529
|
const sqlReferences = await findSqlReferences(index, def, {
|
|
492
|
-
|
|
530
|
+
// A SQL definition spans its whole statement, so rename finds the declaration's name through here.
|
|
531
|
+
includeDefinition: collectionMode !== "usages",
|
|
532
|
+
// Rename edits the name in `public.f`, not the qualifier that comes with it.
|
|
533
|
+
renameRanges: collectionMode === "rename",
|
|
493
534
|
...(maxReferences === undefined ? {} : { maxReferences }),
|
|
494
535
|
});
|
|
495
536
|
if (sqlReferences)
|
|
@@ -503,8 +544,18 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
503
544
|
await attachReferenceContext(index, terraformReferences.references, opts);
|
|
504
545
|
return terraformReferences;
|
|
505
546
|
}
|
|
547
|
+
const scssReferences = await findScssReferences(index, def, {
|
|
548
|
+
includeDefinition: collectionMode === "all",
|
|
549
|
+
...(maxReferences === undefined ? {} : { maxReferences }),
|
|
550
|
+
});
|
|
551
|
+
if (scssReferences) {
|
|
552
|
+
if (scssReferences.status === "ok")
|
|
553
|
+
await attachReferenceContext(index, scssReferences.references, opts);
|
|
554
|
+
return scssReferences;
|
|
555
|
+
}
|
|
506
556
|
const definitionFile = def.file;
|
|
507
557
|
const definitionSiteKey = referenceSiteKey(definitionFile, def.range);
|
|
558
|
+
const explicitNamespaceMemberAliasFiles = new Set();
|
|
508
559
|
const includeReference = (ref) => {
|
|
509
560
|
if (collectionMode === "all")
|
|
510
561
|
return true;
|
|
@@ -512,6 +563,10 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
512
563
|
return false;
|
|
513
564
|
if (collectionMode === "usages")
|
|
514
565
|
return ref.via?.importBinding === undefined;
|
|
566
|
+
if (ref.via?.namespaceMember) {
|
|
567
|
+
const hasExplicitAlias = namespaceBindingHasExplicitAlias(ref.via.import);
|
|
568
|
+
return ref.via.namespaceMember === def.localName && !hasExplicitAlias;
|
|
569
|
+
}
|
|
515
570
|
const binding = ref.via?.import;
|
|
516
571
|
if (!binding || binding.kind === "star" || binding.kind === "namespace")
|
|
517
572
|
return true;
|
|
@@ -583,6 +638,78 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
583
638
|
}
|
|
584
639
|
const matchesReferenceDefinition = (candidate) => sameDef(candidate, definition, index.languageExtensions) ||
|
|
585
640
|
equivalentDefinitions.some((equivalent) => sameDef(candidate, equivalent, index.languageExtensions));
|
|
641
|
+
const hasExplicitExportAliasForDefinition = async (candidateModule) => {
|
|
642
|
+
const definitionExportNames = new Set();
|
|
643
|
+
for (const entry of candidateModule.exports) {
|
|
644
|
+
if (!("exportedAs" in entry))
|
|
645
|
+
continue;
|
|
646
|
+
const hit = resolveExport(index, candidateModule.file, entry.exportedAs, exportOptions);
|
|
647
|
+
if (hit?.kind === "resolved" && matchesReferenceDefinition(hit.def)) {
|
|
648
|
+
definitionExportNames.add(entry.exportedAs);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
if (!definitionExportNames.size)
|
|
652
|
+
return false;
|
|
653
|
+
const parsedModule = await ensureParsedContext(candidateModule.file, index.parsed?.get(fileIdentityKey(candidateModule.file)), index.languageExtensions);
|
|
654
|
+
const pending = [parsedModule.tree.rootNode];
|
|
655
|
+
while (pending.length) {
|
|
656
|
+
const node = pending.pop();
|
|
657
|
+
const alias = node.type === "export_specifier" ? node.childForFieldName("alias") : undefined;
|
|
658
|
+
if (alias && definitionExportNames.has(alias.text))
|
|
659
|
+
return true;
|
|
660
|
+
pending.push(...node.namedChildren);
|
|
661
|
+
}
|
|
662
|
+
return false;
|
|
663
|
+
};
|
|
664
|
+
// Alias uncertainty only affects rename safety; reference and usage queries skip the scan.
|
|
665
|
+
for (const candidateModule of collectionMode === "rename" ? index.byFile.values() : []) {
|
|
666
|
+
if (await hasExplicitExportAliasForDefinition(candidateModule)) {
|
|
667
|
+
explicitNamespaceMemberAliasFiles.add(fileIdentityKey(candidateModule.file));
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
let namespaceExportAliasUncertainty = false;
|
|
671
|
+
const namespaceBindingHasExplicitAlias = (binding) => {
|
|
672
|
+
if (!binding)
|
|
673
|
+
return false;
|
|
674
|
+
const namespaceFiles = [];
|
|
675
|
+
if (binding.kind === "namespace" && typeof binding.resolved === "string") {
|
|
676
|
+
namespaceFiles.push(binding.resolved);
|
|
677
|
+
}
|
|
678
|
+
else if (binding.kind === "named" && typeof binding.resolved === "string") {
|
|
679
|
+
const target = resolveExport(index, binding.resolved, binding.imported);
|
|
680
|
+
if (target?.kind === "namespace")
|
|
681
|
+
namespaceFiles.push(target.file);
|
|
682
|
+
}
|
|
683
|
+
const visited = new Set();
|
|
684
|
+
const modulePathHasAlias = (file) => {
|
|
685
|
+
const fileKey = fileIdentityKey(file);
|
|
686
|
+
if (visited.has(fileKey))
|
|
687
|
+
return false;
|
|
688
|
+
visited.add(fileKey);
|
|
689
|
+
if (explicitNamespaceMemberAliasFiles.has(fileKey))
|
|
690
|
+
return true;
|
|
691
|
+
const targetModule = index.byFile.get(fileKey);
|
|
692
|
+
for (const entry of targetModule?.exports ?? []) {
|
|
693
|
+
// A star or namespace forward keeps an aliased export reachable under the forwarding module's own names.
|
|
694
|
+
if ((entry.type === "namespaceReexport" || entry.type === "exportStar") &&
|
|
695
|
+
modulePathHasAlias(entry.fromModule)) {
|
|
696
|
+
return true;
|
|
697
|
+
}
|
|
698
|
+
if (entry.type !== "reexport")
|
|
699
|
+
continue;
|
|
700
|
+
const hit = resolveExport(index, file, entry.exportedAs, exportOptions);
|
|
701
|
+
// A named re-export forwards the definition itself or a namespace that can reach it.
|
|
702
|
+
const forwardsDefinition = hit?.kind === "resolved" && matchesReferenceDefinition(hit.def);
|
|
703
|
+
if ((forwardsDefinition || hit?.kind === "namespace") && modulePathHasAlias(entry.fromModule))
|
|
704
|
+
return true;
|
|
705
|
+
}
|
|
706
|
+
return false;
|
|
707
|
+
};
|
|
708
|
+
const hasAlias = namespaceFiles.some(modulePathHasAlias);
|
|
709
|
+
if (hasAlias)
|
|
710
|
+
namespaceExportAliasUncertainty = true;
|
|
711
|
+
return hasAlias;
|
|
712
|
+
};
|
|
586
713
|
const exportedNames = [];
|
|
587
714
|
for (const candidate of [definition, ...equivalentDefinitions]) {
|
|
588
715
|
const candidateModule = index.byFile.get(fileIdentityKey(candidate.file));
|
|
@@ -773,6 +900,61 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
773
900
|
}
|
|
774
901
|
return scopeIndex;
|
|
775
902
|
};
|
|
903
|
+
const scannedNamespaceMemberRoots = new Set();
|
|
904
|
+
const scanNamespaceMemberPaths = async (importBinding, namespacePaths) => {
|
|
905
|
+
const rootPath = namespacePaths[0];
|
|
906
|
+
if (!rootPath)
|
|
907
|
+
return;
|
|
908
|
+
const rootKey = fileIdentityKey(rootPath.file) + "::" + rootPath.name;
|
|
909
|
+
if (scannedNamespaceMemberRoots.has(rootKey))
|
|
910
|
+
return;
|
|
911
|
+
scannedNamespaceMemberRoots.add(rootKey);
|
|
912
|
+
for (let pathIndex = 0; pathIndex < namespacePaths.length; pathIndex++) {
|
|
913
|
+
if (hasReachedCollectionLimit())
|
|
914
|
+
return;
|
|
915
|
+
if (pathIndex >= MAX_REFERENCE_NAMESPACE_PATHS) {
|
|
916
|
+
receiverProofUnavailableFiles.set(fileIdentityKey(fileId), fileId);
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
919
|
+
const namespacePath = namespacePaths[pathIndex];
|
|
920
|
+
const namespaceExports = resolveModuleExports(index, namespacePath.file, { allowLocalFallback: false });
|
|
921
|
+
if (namespacePath.depth) {
|
|
922
|
+
for (const [visibleMemberName, nestedHit] of namespaceExports) {
|
|
923
|
+
if (nestedHit.kind !== "resolved" || !matchesReferenceDefinition(nestedHit.def))
|
|
924
|
+
continue;
|
|
925
|
+
const parsed = await ensureCandidateParsed();
|
|
926
|
+
const ranges = await collectNamespaceMemberRefs(fileId, namespacePath.name, visibleMemberName, parsed, index.languageExtensions, importBinding, module.imports, await ensureScope());
|
|
927
|
+
for (const range of ranges) {
|
|
928
|
+
if (hasReachedCollectionLimit())
|
|
929
|
+
return;
|
|
930
|
+
const proof = await goToDefinition(index, { file: fileId, line: range.start.line, column: range.start.column }, parsed);
|
|
931
|
+
if (proof.status !== "ok" || !matchesReferenceDefinition(proof.definition))
|
|
932
|
+
continue;
|
|
933
|
+
pushRef({
|
|
934
|
+
file: fileId,
|
|
935
|
+
range,
|
|
936
|
+
via: { import: importBinding, namespaceMember: visibleMemberName },
|
|
937
|
+
});
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
if (namespacePath.depth >= MAX_REFERENCE_NAMESPACE_DEPTH) {
|
|
942
|
+
if ([...namespaceExports.values()].some((entry) => entry.kind === "namespace")) {
|
|
943
|
+
receiverProofUnavailableFiles.set(fileIdentityKey(fileId), fileId);
|
|
944
|
+
}
|
|
945
|
+
continue;
|
|
946
|
+
}
|
|
947
|
+
for (const [alias, entry] of namespaceExports) {
|
|
948
|
+
if (entry.kind !== "namespace")
|
|
949
|
+
continue;
|
|
950
|
+
namespacePaths.push({
|
|
951
|
+
file: entry.file,
|
|
952
|
+
name: `${namespacePath.name}.${alias}`,
|
|
953
|
+
depth: namespacePath.depth + 1,
|
|
954
|
+
});
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
};
|
|
776
958
|
if (supportForFileWithoutHeaderSample(fileId, index.languageExtensions)?.supportsExportFromReferences) {
|
|
777
959
|
for (const entry of module.exports) {
|
|
778
960
|
if (hasReachedCollectionLimit())
|
|
@@ -800,7 +982,31 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
800
982
|
break;
|
|
801
983
|
if (cNamespace && imp.kind === "named" && (imp.cNamespace ?? "ordinary") !== cNamespace)
|
|
802
984
|
continue;
|
|
803
|
-
|
|
985
|
+
// A C# directive that an enclosing namespace shadows resolves nothing, so it is verified like an unresolved import.
|
|
986
|
+
const targetFile = typeof imp.resolved === "string" && !csharpShadowedImports(index).has(imp) ? imp.resolved : undefined;
|
|
987
|
+
if (!targetFile && parsedContext.sup.id === "csharp" && imp.kind === "namespace") {
|
|
988
|
+
const namespaceTargets = csharpNamespaceImportDirectories(index).get(imp) ?? [];
|
|
989
|
+
const targetDirectories = new Set(namespaceTargets.map((target) => fileIdentityKey(path.posix.dirname(normalizePath(target)))));
|
|
990
|
+
const definitionIsTargeted = [definition, ...equivalentDefinitions].some((candidate) => targetDirectories.has(fileIdentityKey(path.posix.dirname(normalizePath(candidate.file)))));
|
|
991
|
+
if (definitionIsTargeted) {
|
|
992
|
+
for (const exportedName of exportedNames) {
|
|
993
|
+
if (hasReachedCollectionLimit())
|
|
994
|
+
break;
|
|
995
|
+
const ranges = await collectVerifiedNamedNodeReferences(index, fileId, exportedName, definition, (params, parsed) => goToDefinition(index, params, parsed), remainingCollectionSlots(), verifiedReferenceFilter(fileId), (unavailableFile) => receiverProofUnavailableFiles.set(fileIdentityKey(unavailableFile), unavailableFile), equivalentDefinitions);
|
|
996
|
+
for (const { range, provenance, via } of ranges) {
|
|
997
|
+
if (hasReachedCollectionLimit())
|
|
998
|
+
break;
|
|
999
|
+
pushRef({
|
|
1000
|
+
file: fileId,
|
|
1001
|
+
range,
|
|
1002
|
+
via: { import: imp, ...(via ?? {}) },
|
|
1003
|
+
...(provenance ? { provenance } : {}),
|
|
1004
|
+
});
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
continue;
|
|
1009
|
+
}
|
|
804
1010
|
const bindingSites = importBindingReferenceSites(imp);
|
|
805
1011
|
let verifiedBindingMatches;
|
|
806
1012
|
const bindingMatchesDefinition = async () => {
|
|
@@ -873,65 +1079,25 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
873
1079
|
// Python binds the first segment of an unaliased dotted import, while an alias
|
|
874
1080
|
// binds the whole module. Other namespaces use their local name directly.
|
|
875
1081
|
const namespaceSearchName = imp.mechanism === "python" && imp.from.includes(".") && !imp.explicitAlias ? imp.from : imp.localNS;
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
continue;
|
|
880
|
-
}
|
|
881
|
-
// A namespace re-export exposes a member at paths such as W.helpers.helper,
|
|
1082
|
+
const targetModule = index.byFile.get(fileIdentityKey(targetFile));
|
|
1083
|
+
if (targetModule?.exports.some((entry) => entry.type === "namespaceReexport" || entry.type === "exportStar" || entry.type === "reexport")) {
|
|
1084
|
+
// A forwarded namespace can expose a member at paths such as W.helpers.helper,
|
|
882
1085
|
// not as a bare export of the intermediate module. Follow only export-proven
|
|
883
1086
|
// namespace edges, then verify each use through the same goto resolver.
|
|
884
|
-
|
|
885
|
-
{ file: targetFile, name: namespaceSearchName, depth: 0 },
|
|
886
|
-
];
|
|
887
|
-
for (let pathIndex = 0; pathIndex < namespacePaths.length; pathIndex++) {
|
|
888
|
-
if (pathIndex >= MAX_REFERENCE_NAMESPACE_PATHS) {
|
|
889
|
-
receiverProofUnavailableFiles.set(fileIdentityKey(fileId), fileId);
|
|
890
|
-
break;
|
|
891
|
-
}
|
|
892
|
-
const namespacePath = namespacePaths[pathIndex];
|
|
893
|
-
if (namespacePath.depth) {
|
|
894
|
-
const nestedHit = resolveExport(index, namespacePath.file, exportedName, {
|
|
895
|
-
allowLocalFallback: false,
|
|
896
|
-
...(exportOptions ?? {}),
|
|
897
|
-
});
|
|
898
|
-
if (nestedHit?.kind === "resolved" && matchesReferenceDefinition(nestedHit.def)) {
|
|
899
|
-
const parsed = await ensureCandidateParsed();
|
|
900
|
-
const ranges = await collectNamespaceMemberRefs(fileId, namespacePath.name, exportedName, parsed, index.languageExtensions, imp, module.imports, await ensureScope());
|
|
901
|
-
for (const range of ranges) {
|
|
902
|
-
if (hasReachedCollectionLimit())
|
|
903
|
-
break;
|
|
904
|
-
const proof = await goToDefinition(index, { file: fileId, line: range.start.line, column: range.start.column }, parsed);
|
|
905
|
-
if (proof.status !== "ok" || !matchesReferenceDefinition(proof.definition))
|
|
906
|
-
continue;
|
|
907
|
-
pushRef({ file: fileId, range, via: { import: imp, namespaceMember: exportedName } });
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
}
|
|
911
|
-
const exports = resolveModuleExports(index, namespacePath.file, { allowLocalFallback: false });
|
|
912
|
-
if (namespacePath.depth >= MAX_REFERENCE_NAMESPACE_DEPTH) {
|
|
913
|
-
if ([...exports.values()].some((entry) => entry.kind === "namespace")) {
|
|
914
|
-
receiverProofUnavailableFiles.set(fileIdentityKey(fileId), fileId);
|
|
915
|
-
}
|
|
916
|
-
continue;
|
|
917
|
-
}
|
|
918
|
-
for (const [alias, entry] of exports) {
|
|
919
|
-
if (entry.kind !== "namespace")
|
|
920
|
-
continue;
|
|
921
|
-
namespacePaths.push({
|
|
922
|
-
file: entry.file,
|
|
923
|
-
name: `${namespacePath.name}.${alias}`,
|
|
924
|
-
depth: namespacePath.depth + 1,
|
|
925
|
-
});
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
continue;
|
|
1087
|
+
await scanNamespaceMemberPaths(imp, [{ file: targetFile, name: namespaceSearchName, depth: 0 }]);
|
|
929
1088
|
}
|
|
1089
|
+
if (!matchesDef)
|
|
1090
|
+
continue;
|
|
930
1091
|
const parsed = await ensureCandidateParsed();
|
|
931
1092
|
const ranges = await collectNamespaceMemberRefs(fileId, namespaceSearchName, exportedName, parsed, index.languageExtensions, imp, module.imports, await ensureScope());
|
|
932
1093
|
for (const range of ranges) {
|
|
933
1094
|
if (hasReachedCollectionLimit())
|
|
934
1095
|
break;
|
|
1096
|
+
if (parsed.sup.id === "csharp" && imp.localRange) {
|
|
1097
|
+
const proof = await goToDefinition(index, { file: fileId, line: range.start.line, column: range.start.column }, parsed);
|
|
1098
|
+
if (proof.status !== "ok" || !matchesReferenceDefinition(proof.definition))
|
|
1099
|
+
continue;
|
|
1100
|
+
}
|
|
935
1101
|
pushRef({
|
|
936
1102
|
file: fileId,
|
|
937
1103
|
range,
|
|
@@ -1030,6 +1196,17 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
1030
1196
|
continue;
|
|
1031
1197
|
}
|
|
1032
1198
|
}
|
|
1199
|
+
const candidateLanguage = supportForFileWithoutHeaderSample(fileId, index.languageExtensions)?.id;
|
|
1200
|
+
if (!matchesDef &&
|
|
1201
|
+
imp.kind === "named" &&
|
|
1202
|
+
hit?.kind === "namespace" &&
|
|
1203
|
+
candidateLanguage &&
|
|
1204
|
+
isJsTsLanguage(candidateLanguage)) {
|
|
1205
|
+
// `import { nested }` binds the namespace object. Member lookup starts in that
|
|
1206
|
+
// module; `import * as ns` still starts at the barrel and descends. Goto proves the site.
|
|
1207
|
+
await scanNamespaceMemberPaths(imp, [{ file: hit.file, name: imp.local, depth: 1 }]);
|
|
1208
|
+
continue;
|
|
1209
|
+
}
|
|
1033
1210
|
if (!matchesDef) {
|
|
1034
1211
|
// The requested export slot itself does not exist at all (as opposed to existing
|
|
1035
1212
|
// and structurally naming a different, already-proven definition): the binding may
|
|
@@ -1167,6 +1344,38 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
1167
1344
|
}
|
|
1168
1345
|
}
|
|
1169
1346
|
}
|
|
1347
|
+
// A scoped mixin or function is not a module member. The scope walker misses function calls
|
|
1348
|
+
// (`function_name` is not an identifier) and treats `-` and `_` as different spellings, and a
|
|
1349
|
+
// later include outside the block can attach to the nested mixin. Bare same-kind calls and
|
|
1350
|
+
// includes inside the scanned scope are the references; anything else the walker added is not.
|
|
1351
|
+
let scssScopedCallableUnproven = false;
|
|
1352
|
+
if (parsedContext.sup.id === "scss") {
|
|
1353
|
+
const scoped = await scssScopedCallableReferences(index, definition);
|
|
1354
|
+
if (scoped?.unproven) {
|
|
1355
|
+
scssScopedCallableUnproven = true;
|
|
1356
|
+
}
|
|
1357
|
+
else if (scoped) {
|
|
1358
|
+
const owned = new Set(scoped.ranges.map((range) => referenceSiteKey(definitionFile, range)));
|
|
1359
|
+
const definitionKey = referenceSiteKey(definition.file, definition.range);
|
|
1360
|
+
const kept = [];
|
|
1361
|
+
seenRefs.clear();
|
|
1362
|
+
for (const ref of refs) {
|
|
1363
|
+
const key = referenceSiteKey(ref.file, ref.range);
|
|
1364
|
+
if (key !== definitionSiteKey && key !== definitionKey && !owned.has(key))
|
|
1365
|
+
continue;
|
|
1366
|
+
seenRefs.set(key, kept.length);
|
|
1367
|
+
kept.push(ref);
|
|
1368
|
+
}
|
|
1369
|
+
refs.length = 0;
|
|
1370
|
+
refs.push(...kept);
|
|
1371
|
+
for (const range of scoped.ranges)
|
|
1372
|
+
pushRef({ file: definitionFile, range });
|
|
1373
|
+
// Those static uses stay. A lookup in the same span may still name the callable by a
|
|
1374
|
+
// string, which this walk does not edit, so coverage must not claim to be complete.
|
|
1375
|
+
if (await scssScopedCallableDynamicUnproven(index, definition))
|
|
1376
|
+
scssScopedCallableUnproven = true;
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1170
1379
|
const truncated = maxReferences !== undefined && refs.length > maxReferences;
|
|
1171
1380
|
if (truncated) {
|
|
1172
1381
|
refs.length = maxReferences;
|
|
@@ -1179,6 +1388,40 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
1179
1388
|
}
|
|
1180
1389
|
return left.file.localeCompare(right.file);
|
|
1181
1390
|
});
|
|
1391
|
+
// A block local's lexical scope can run past the block. A use the SCSS resolver proves is a
|
|
1392
|
+
// module member is not a reference of that local. The local's own uses stay: they resolve as a
|
|
1393
|
+
// shadow and the generic walker keeps them. A nearer binding with the same Sass name and a
|
|
1394
|
+
// different `-`/`_` spelling owns the read; the exact-name walk would keep it on this declaration.
|
|
1395
|
+
let scssNearerSpellingDropped = false;
|
|
1396
|
+
if (parsedContext.sup.id === "scss" &&
|
|
1397
|
+
definition.localName.startsWith("$") &&
|
|
1398
|
+
!(await scssMemberForDefinition(index, definition))) {
|
|
1399
|
+
const facts = await scssFactsForFile(index, definition.file);
|
|
1400
|
+
const definitionKey = fileIdentityKey(definition.file);
|
|
1401
|
+
const kept = [];
|
|
1402
|
+
for (const ref of refs) {
|
|
1403
|
+
if (referenceSiteKey(ref.file, ref.range) === definitionSiteKey) {
|
|
1404
|
+
kept.push(ref);
|
|
1405
|
+
continue;
|
|
1406
|
+
}
|
|
1407
|
+
const resolved = await goToScssDefinition(index, {
|
|
1408
|
+
file: ref.file,
|
|
1409
|
+
line: ref.range.start.line,
|
|
1410
|
+
column: ref.range.start.column,
|
|
1411
|
+
});
|
|
1412
|
+
if (resolved?.status === "ok")
|
|
1413
|
+
continue;
|
|
1414
|
+
if (facts &&
|
|
1415
|
+
fileIdentityKey(ref.file) === definitionKey &&
|
|
1416
|
+
scssNearerEquivalentLocal(facts, definition, ref.range.start)) {
|
|
1417
|
+
scssNearerSpellingDropped = true;
|
|
1418
|
+
continue;
|
|
1419
|
+
}
|
|
1420
|
+
kept.push(ref);
|
|
1421
|
+
}
|
|
1422
|
+
refs.length = 0;
|
|
1423
|
+
refs.push(...kept);
|
|
1424
|
+
}
|
|
1182
1425
|
await attachReferenceContext(index, refs, opts);
|
|
1183
1426
|
const scannedFiles = [definitionFile, ...candidateFiles, ...receiverScannedFiles];
|
|
1184
1427
|
// Top-level implicit-unit names and C# partial / Swift shared-owner members are both bounded
|
|
@@ -1186,6 +1429,26 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
1186
1429
|
const implicitUnitComplete = !definition.isMember && IMPLICIT_UNIT_LANGUAGES[parsedContext.sup.id]
|
|
1187
1430
|
? getCompilationUnitPeers(index, definitionFile, parsedContext.sup.id === "csharp" ? { csharpQualifiedName: true } : undefined).complete
|
|
1188
1431
|
: await sharedOwnerMemberUnitComplete(index, definition);
|
|
1432
|
+
const strategyUnavailableFiles = [
|
|
1433
|
+
...receiverProofUnavailableFiles.values(),
|
|
1434
|
+
...(rubyReopen?.incomplete ? [definition.file] : []),
|
|
1435
|
+
...(namespaceExportAliasUncertainty ? [definition.file] : []),
|
|
1436
|
+
];
|
|
1437
|
+
if (parsedContext.sup.id === "scss" && definition.localName.startsWith("$")) {
|
|
1438
|
+
const facts = await scssFactsForFile(index, definition.file);
|
|
1439
|
+
if (scssNearerSpellingDropped || (facts && scssLocalSpellingGap(facts, definition))) {
|
|
1440
|
+
markNameEquivalenceGap(index, definition);
|
|
1441
|
+
}
|
|
1442
|
+
if (await scssFlowLocalUnproven(index, definition))
|
|
1443
|
+
strategyUnavailableFiles.push(definition.file);
|
|
1444
|
+
if (await scssBlockLocalExistenceUnproven(index, definition))
|
|
1445
|
+
strategyUnavailableFiles.push(definition.file);
|
|
1446
|
+
}
|
|
1447
|
+
if (parsedContext.sup.id === "python" && pythonPropertyAccessorNeedsPartialCoverage(parsedContext, definition)) {
|
|
1448
|
+
strategyUnavailableFiles.push(definition.file);
|
|
1449
|
+
}
|
|
1450
|
+
if (scssScopedCallableUnproven)
|
|
1451
|
+
strategyUnavailableFiles.push(definition.file);
|
|
1189
1452
|
const referenceCoverage = buildIndexedCandidateCoverage({
|
|
1190
1453
|
index,
|
|
1191
1454
|
def: definition,
|
|
@@ -1210,10 +1473,7 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
1210
1473
|
? { implicitUnitPeers: { applicable: true, executed: implicitUnitComplete } }
|
|
1211
1474
|
: {}),
|
|
1212
1475
|
}),
|
|
1213
|
-
strategyUnavailableFiles
|
|
1214
|
-
...receiverProofUnavailableFiles.values(),
|
|
1215
|
-
...(rubyReopen?.incomplete ? [definition.file] : []),
|
|
1216
|
-
],
|
|
1476
|
+
strategyUnavailableFiles,
|
|
1217
1477
|
});
|
|
1218
1478
|
return {
|
|
1219
1479
|
status: "ok",
|
|
@@ -1223,11 +1483,43 @@ async function findReferencesInternal(index, req, opts, collectionMode) {
|
|
|
1223
1483
|
...(provenance ? { provenance } : {}),
|
|
1224
1484
|
};
|
|
1225
1485
|
}
|
|
1486
|
+
function pythonPropertyAccessorNeedsPartialCoverage(parsedContext, definition) {
|
|
1487
|
+
const nameNode = syntaxNodeForDefinition(parsedContext, definition);
|
|
1488
|
+
if (nameNode.type !== "identifier")
|
|
1489
|
+
return false;
|
|
1490
|
+
const assignment = nameNode.parent;
|
|
1491
|
+
if (assignment?.type === "assignment" && assignment.childForFieldName("left")?.id === nameNode.id) {
|
|
1492
|
+
const value = assignment.childForFieldName("right");
|
|
1493
|
+
const argumentsNode = value?.childForFieldName("arguments");
|
|
1494
|
+
if (value?.type === "call" && value.childForFieldName("function")?.text === "property" && argumentsNode) {
|
|
1495
|
+
const positionalArguments = argumentsNode.namedChildren.filter((argument) => argument.type !== "keyword_argument");
|
|
1496
|
+
if (positionalArguments[1] && positionalArguments[1].text !== "None")
|
|
1497
|
+
return true;
|
|
1498
|
+
return argumentsNode.namedChildren.some((argument) => argument.type === "keyword_argument" &&
|
|
1499
|
+
argument.childForFieldName("name")?.text === "fset" &&
|
|
1500
|
+
argument.childForFieldName("value")?.text !== "None");
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
let functionNode = nameNode;
|
|
1504
|
+
while (functionNode && functionNode.type !== "function_definition")
|
|
1505
|
+
functionNode = functionNode.parent;
|
|
1506
|
+
if (functionNode?.type !== "function_definition")
|
|
1507
|
+
return false;
|
|
1508
|
+
const functionName = functionNode.childForFieldName("name");
|
|
1509
|
+
if (functionName?.startIndex !== nameNode.startIndex || functionName.endIndex !== nameNode.endIndex)
|
|
1510
|
+
return false;
|
|
1511
|
+
const decoratedDefinition = functionNode.parent;
|
|
1512
|
+
if (decoratedDefinition?.type !== "decorated_definition")
|
|
1513
|
+
return false;
|
|
1514
|
+
return decoratedDefinition.namedChildren.some((child) => {
|
|
1515
|
+
const decorator = pythonPropertyDecorator(child);
|
|
1516
|
+
if (decorator?.kind === "property")
|
|
1517
|
+
return true;
|
|
1518
|
+
return decorator?.kind === "accessor" && decorator.propertyName === definition.localName;
|
|
1519
|
+
});
|
|
1520
|
+
}
|
|
1226
1521
|
function syntaxNodeForDefinition(parsedContext, def) {
|
|
1227
|
-
const position =
|
|
1228
|
-
row: def.range.start.line - 1,
|
|
1229
|
-
column: def.range.start.column - 1,
|
|
1230
|
-
};
|
|
1522
|
+
const position = toTreeSitterPosition(def.range.start);
|
|
1231
1523
|
return parsedContext.tree.rootNode.descendantForPosition(position, position);
|
|
1232
1524
|
}
|
|
1233
1525
|
/**
|
|
@@ -1593,6 +1885,7 @@ export async function collectNamespaceMemberRefs(file, ns, member, parsedContext
|
|
|
1593
1885
|
// Identifier equality follows the language rule, so C# `@X::@Target` matches alias `X` member `Target`.
|
|
1594
1886
|
const normalize = sup.normalizeIdentifier;
|
|
1595
1887
|
const normalizedNs = normalize(ns);
|
|
1888
|
+
const namespaceSegments = normalizedNs.includes(".") ? normalizedNs.split(".") : undefined;
|
|
1596
1889
|
const normalizedMember = normalize(member);
|
|
1597
1890
|
let effectivePythonBinding;
|
|
1598
1891
|
if (sup.id === "python" && importBinding && imports) {
|
|
@@ -1616,13 +1909,23 @@ export async function collectNamespaceMemberRefs(file, ns, member, parsedContext
|
|
|
1616
1909
|
if (obj && prop && isMemberReferencePropertyIdentifier(sup, prop.type)) {
|
|
1617
1910
|
const objectName = sliceText(obj, source);
|
|
1618
1911
|
const propertyName = sliceText(prop, source);
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1912
|
+
let objectMatches = false;
|
|
1913
|
+
if (namespaceSegments) {
|
|
1914
|
+
const chain = collectMemberAccessChain({ sup, source, chainNode: obj });
|
|
1915
|
+
if (chain &&
|
|
1916
|
+
isMemberObjectIdentifier(chain.base.type) &&
|
|
1917
|
+
chain.names.length === namespaceSegments.length - 1) {
|
|
1918
|
+
objectMatches = normalize(sliceText(chain.base, source)) === namespaceSegments[0];
|
|
1919
|
+
for (let segmentIndex = 0; objectMatches && segmentIndex < chain.names.length; segmentIndex += 1) {
|
|
1920
|
+
objectMatches =
|
|
1921
|
+
normalize(chain.names[segmentIndex]) ===
|
|
1922
|
+
namespaceSegments[namespaceSegments.length - 1 - segmentIndex];
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
}
|
|
1926
|
+
else {
|
|
1927
|
+
objectMatches = isMemberObjectIdentifier(obj.type) && normalize(objectName) === normalizedNs;
|
|
1928
|
+
}
|
|
1626
1929
|
if (objectMatches && normalize(propertyName) === normalizedMember) {
|
|
1627
1930
|
let receiver = obj;
|
|
1628
1931
|
while (!isMemberObjectIdentifier(receiver.type) && receiver.namedChildren.length) {
|