@lzehrung/codegraph 2.3.31 → 3.0.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/README.md +33 -141
- package/codegraph-skill/codegraph/SKILL.md +8 -6
- package/dist/agent/artifact.d.ts +2 -0
- package/dist/agent/artifact.d.ts.map +1 -1
- package/dist/agent/artifact.js.map +1 -1
- package/dist/agent/call-hierarchy.js +2 -4
- package/dist/agent/call-hierarchy.js.map +1 -1
- package/dist/agent/explore.d.ts +1 -1
- package/dist/agent/explore.d.ts.map +1 -1
- package/dist/agent/explore.js +3 -2
- package/dist/agent/explore.js.map +1 -1
- package/dist/agent/refactor-plan.js +2 -4
- 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 +4 -3
- package/dist/agent/rename-preview.js.map +1 -1
- package/dist/agent/search.d.ts.map +1 -1
- package/dist/agent/search.js +5 -3
- package/dist/agent/search.js.map +1 -1
- package/dist/agent/semantic-symbols.d.ts.map +1 -1
- package/dist/agent/semantic-symbols.js +2 -3
- package/dist/agent/semantic-symbols.js.map +1 -1
- package/dist/agent/session.d.ts +3 -0
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +10 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/type-hierarchy.js +2 -4
- package/dist/agent/type-hierarchy.js.map +1 -1
- package/dist/agent/workspace-symbols.d.ts.map +1 -1
- package/dist/agent/workspace-symbols.js +2 -3
- package/dist/agent/workspace-symbols.js.map +1 -1
- package/dist/agent-tools.d.ts +0 -4
- package/dist/agent-tools.d.ts.map +1 -1
- package/dist/agent-tools.js +3 -6
- package/dist/agent-tools.js.map +1 -1
- package/dist/analysis-summary.d.ts +8 -4
- package/dist/analysis-summary.d.ts.map +1 -1
- package/dist/analysis-summary.js +15 -66
- package/dist/analysis-summary.js.map +1 -1
- package/dist/bin/cli.js +51145 -41770
- package/dist/bin/query-index-worker.js +122 -82
- package/dist/cli/affected.d.ts.map +1 -1
- package/dist/cli/affected.js +4 -1
- package/dist/cli/affected.js.map +1 -1
- package/dist/cli/command-catalog.js +1 -1
- package/dist/cli/command-catalog.js.map +1 -1
- package/dist/cli/command-table.d.ts.map +1 -1
- package/dist/cli/command-table.js +9 -17
- package/dist/cli/command-table.js.map +1 -1
- package/dist/cli/context.js +10 -10
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/drift.d.ts +0 -2
- package/dist/cli/drift.d.ts.map +1 -1
- package/dist/cli/drift.js +0 -1
- package/dist/cli/drift.js.map +1 -1
- package/dist/cli/graph-delta.d.ts +0 -2
- package/dist/cli/graph-delta.d.ts.map +1 -1
- package/dist/cli/graph-delta.js +0 -4
- package/dist/cli/graph-delta.js.map +1 -1
- package/dist/cli/graph-queries.d.ts.map +1 -1
- package/dist/cli/graph-queries.js +27 -1
- package/dist/cli/graph-queries.js.map +1 -1
- package/dist/cli/graph.d.ts +0 -3
- package/dist/cli/graph.d.ts.map +1 -1
- package/dist/cli/graph.js +4 -14
- package/dist/cli/graph.js.map +1 -1
- package/dist/cli/help.d.ts +34 -34
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +9 -14
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/impact.d.ts +0 -2
- package/dist/cli/impact.d.ts.map +1 -1
- package/dist/cli/impact.js +0 -1
- package/dist/cli/impact.js.map +1 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/inspect.d.ts +0 -2
- package/dist/cli/inspect.d.ts.map +1 -1
- package/dist/cli/inspect.js +5 -8
- package/dist/cli/inspect.js.map +1 -1
- package/dist/cli/invocation-context.d.ts +0 -3
- package/dist/cli/invocation-context.d.ts.map +1 -1
- package/dist/cli/invocation-context.js +4 -16
- package/dist/cli/invocation-context.js.map +1 -1
- package/dist/cli/navigation.d.ts +0 -2
- package/dist/cli/navigation.d.ts.map +1 -1
- package/dist/cli/navigation.js +0 -1
- package/dist/cli/navigation.js.map +1 -1
- package/dist/cli/options.d.ts.map +1 -1
- package/dist/cli/options.js +4 -14
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/review.d.ts +0 -2
- package/dist/cli/review.d.ts.map +1 -1
- package/dist/cli/review.js +0 -5
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/root-policy.d.ts +0 -2
- package/dist/cli/root-policy.d.ts.map +1 -1
- package/dist/cli/root-policy.js +0 -8
- package/dist/cli/root-policy.js.map +1 -1
- package/dist/cli/server.d.ts.map +1 -1
- package/dist/cli/server.js +0 -2
- package/dist/cli/server.js.map +1 -1
- package/dist/drift/artifact.d.ts.map +1 -1
- package/dist/drift/artifact.js +15 -18
- package/dist/drift/artifact.js.map +1 -1
- package/dist/drift/compare.js +1 -1
- package/dist/drift/compare.js.map +1 -1
- package/dist/drift/git.d.ts.map +1 -1
- package/dist/drift/git.js +0 -1
- package/dist/drift/git.js.map +1 -1
- package/dist/drift/snapshot.d.ts.map +1 -1
- package/dist/drift/snapshot.js +5 -7
- package/dist/drift/snapshot.js.map +1 -1
- package/dist/drift/types.d.ts +2 -2
- package/dist/drift/types.d.ts.map +1 -1
- package/dist/drift/types.js.map +1 -1
- package/dist/duplicates/unit-cache.d.ts +0 -1
- package/dist/duplicates/unit-cache.d.ts.map +1 -1
- package/dist/duplicates/unit-cache.js +3 -11
- package/dist/duplicates/unit-cache.js.map +1 -1
- package/dist/duplicates/units.d.ts +5 -5
- package/dist/duplicates/units.d.ts.map +1 -1
- package/dist/duplicates/units.js +25 -88
- package/dist/duplicates/units.js.map +1 -1
- package/dist/graph-builder.d.ts +0 -6
- package/dist/graph-builder.d.ts.map +1 -1
- package/dist/graph-builder.js +6 -11
- package/dist/graph-builder.js.map +1 -1
- package/dist/graph-edge-collector.d.ts +4 -6
- package/dist/graph-edge-collector.d.ts.map +1 -1
- package/dist/graph-edge-collector.js +31 -26
- package/dist/graph-edge-collector.js.map +1 -1
- package/dist/graphs/angularjs.d.ts.map +1 -1
- package/dist/graphs/angularjs.js +2 -1
- package/dist/graphs/angularjs.js.map +1 -1
- package/dist/graphs/edge-resolution.d.ts +4 -1
- package/dist/graphs/edge-resolution.d.ts.map +1 -1
- package/dist/graphs/edge-resolution.js +24 -76
- package/dist/graphs/edge-resolution.js.map +1 -1
- package/dist/graphs/specifiers.d.ts +4 -13
- package/dist/graphs/specifiers.d.ts.map +1 -1
- package/dist/graphs/specifiers.js +80 -173
- package/dist/graphs/specifiers.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/ast.d.ts +20 -0
- package/dist/graphs/symbol-graph-detailed/ast.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/ast.js +154 -15
- package/dist/graphs/symbol-graph-detailed/ast.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts +60 -8
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.js +997 -168
- package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts +2 -1
- package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/import-aliases.js +150 -7
- package/dist/graphs/symbol-graph-detailed/import-aliases.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/member-chains.d.ts +1 -0
- package/dist/graphs/symbol-graph-detailed/member-chains.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/member-chains.js +3 -1
- package/dist/graphs/symbol-graph-detailed/member-chains.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +141 -25
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js +1015 -166
- 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 +449 -46
- package/dist/graphs/symbol-graph-detailed.js.map +1 -1
- package/dist/graphs/symbol-graph.d.ts +2 -0
- package/dist/graphs/symbol-graph.d.ts.map +1 -1
- package/dist/graphs/symbol-graph.js +34 -16
- package/dist/graphs/symbol-graph.js.map +1 -1
- package/dist/graphs/types.d.ts +0 -4
- package/dist/graphs/types.d.ts.map +1 -1
- package/dist/graphs.d.ts +1 -1
- package/dist/graphs.d.ts.map +1 -1
- package/dist/impact/call-compatibility/providers/index.d.ts +4 -4
- package/dist/impact/call-compatibility/providers/index.d.ts.map +1 -1
- package/dist/impact/call-compatibility/providers/index.js +6 -6
- package/dist/impact/call-compatibility/providers/index.js.map +1 -1
- package/dist/impact/call-compatibility/providers/types.d.ts +2 -0
- package/dist/impact/call-compatibility/providers/types.d.ts.map +1 -1
- package/dist/impact/call-compatibility/types.d.ts +6 -0
- package/dist/impact/call-compatibility/types.d.ts.map +1 -1
- package/dist/impact/call-compatibility.d.ts.map +1 -1
- package/dist/impact/call-compatibility.js +316 -526
- package/dist/impact/call-compatibility.js.map +1 -1
- package/dist/impact/map.js +1 -0
- package/dist/impact/map.js.map +1 -1
- package/dist/impact/reference-cache.d.ts.map +1 -1
- package/dist/impact/reference-cache.js +2 -2
- package/dist/impact/reference-cache.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indexer/ambiguous-resolution.d.ts +11 -0
- package/dist/indexer/ambiguous-resolution.d.ts.map +1 -0
- package/dist/indexer/ambiguous-resolution.js +19 -0
- package/dist/indexer/ambiguous-resolution.js.map +1 -0
- package/dist/indexer/build-cache/module-cache.d.ts +39 -1
- package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache/module-cache.js +218 -21
- package/dist/indexer/build-cache/module-cache.js.map +1 -1
- package/dist/indexer/build-cache/options.d.ts +30 -44
- package/dist/indexer/build-cache/options.d.ts.map +1 -1
- package/dist/indexer/build-cache/options.js +32 -71
- package/dist/indexer/build-cache/options.js.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.d.ts +3 -3
- package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.js +164 -84
- package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
- package/dist/indexer/build-cache/reports.d.ts +0 -2
- package/dist/indexer/build-cache/reports.d.ts.map +1 -1
- package/dist/indexer/build-cache/reports.js +0 -97
- package/dist/indexer/build-cache/reports.js.map +1 -1
- package/dist/indexer/build-cache/resolver-environment.d.ts.map +1 -1
- package/dist/indexer/build-cache/resolver-environment.js +32 -2
- package/dist/indexer/build-cache/resolver-environment.js.map +1 -1
- package/dist/indexer/build-cache.d.ts +2 -2
- package/dist/indexer/build-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache.js +2 -2
- package/dist/indexer/build-cache.js.map +1 -1
- package/dist/indexer/build-index.d.ts.map +1 -1
- package/dist/indexer/build-index.js +656 -71
- package/dist/indexer/build-index.js.map +1 -1
- package/dist/indexer/build-workers.d.ts.map +1 -1
- package/dist/indexer/build-workers.js +9 -9
- package/dist/indexer/build-workers.js.map +1 -1
- package/dist/indexer/call-hierarchy.js +1 -1
- package/dist/indexer/call-hierarchy.js.map +1 -1
- package/dist/indexer/callable-identity.d.ts +24 -0
- package/dist/indexer/callable-identity.d.ts.map +1 -0
- package/dist/indexer/callable-identity.js +111 -0
- package/dist/indexer/callable-identity.js.map +1 -0
- package/dist/indexer/compilation-units.d.ts +103 -0
- package/dist/indexer/compilation-units.d.ts.map +1 -0
- package/dist/indexer/compilation-units.js +607 -0
- package/dist/indexer/compilation-units.js.map +1 -0
- package/dist/indexer/cpp-callables.d.ts +25 -0
- package/dist/indexer/cpp-callables.d.ts.map +1 -0
- package/dist/indexer/cpp-callables.js +562 -0
- package/dist/indexer/cpp-callables.js.map +1 -0
- package/dist/indexer/declaration-visibility.d.ts +43 -2
- package/dist/indexer/declaration-visibility.d.ts.map +1 -1
- package/dist/indexer/declaration-visibility.js +158 -2
- package/dist/indexer/declaration-visibility.js.map +1 -1
- package/dist/indexer/expand-star-imports.d.ts +6 -1
- package/dist/indexer/expand-star-imports.d.ts.map +1 -1
- package/dist/indexer/expand-star-imports.js +131 -37
- package/dist/indexer/expand-star-imports.js.map +1 -1
- package/dist/indexer/finalize.d.ts.map +1 -1
- package/dist/indexer/finalize.js +0 -1
- package/dist/indexer/finalize.js.map +1 -1
- package/dist/indexer/import-resolution-tables.d.ts +72 -0
- package/dist/indexer/import-resolution-tables.d.ts.map +1 -0
- package/dist/indexer/import-resolution-tables.js +137 -0
- package/dist/indexer/import-resolution-tables.js.map +1 -0
- package/dist/indexer/import-types.d.ts +54 -0
- package/dist/indexer/import-types.d.ts.map +1 -1
- package/dist/indexer/import-types.js +24 -1
- package/dist/indexer/import-types.js.map +1 -1
- package/dist/indexer/imports/context.d.ts +16 -1
- package/dist/indexer/imports/context.d.ts.map +1 -1
- package/dist/indexer/imports/import-binding-tables.d.ts +13 -1
- package/dist/indexer/imports/import-binding-tables.d.ts.map +1 -1
- package/dist/indexer/imports/import-binding-tables.js +149 -30
- package/dist/indexer/imports/import-binding-tables.js.map +1 -1
- package/dist/indexer/imports/js-text-imports.js +4 -4
- package/dist/indexer/imports/js-text-imports.js.map +1 -1
- package/dist/indexer/imports/native-captures.d.ts.map +1 -1
- package/dist/indexer/imports/native-captures.js +24 -6
- package/dist/indexer/imports/native-captures.js.map +1 -1
- package/dist/indexer/imports/python.d.ts +10 -2
- package/dist/indexer/imports/python.d.ts.map +1 -1
- package/dist/indexer/imports/python.js +128 -112
- package/dist/indexer/imports/python.js.map +1 -1
- package/dist/indexer/imports/text-import-extractors.d.ts.map +1 -1
- package/dist/indexer/imports/text-import-extractors.js +68 -19
- package/dist/indexer/imports/text-import-extractors.js.map +1 -1
- package/dist/indexer/imports.d.ts +3 -4
- package/dist/indexer/imports.d.ts.map +1 -1
- package/dist/indexer/imports.js +116 -72
- package/dist/indexer/imports.js.map +1 -1
- package/dist/indexer/incremental-plan.d.ts +33 -0
- package/dist/indexer/incremental-plan.d.ts.map +1 -1
- package/dist/indexer/incremental-plan.js +203 -1
- package/dist/indexer/incremental-plan.js.map +1 -1
- package/dist/indexer/locals-and-exports.d.ts +3 -2
- package/dist/indexer/locals-and-exports.d.ts.map +1 -1
- package/dist/indexer/locals-and-exports.js +659 -78
- package/dist/indexer/locals-and-exports.js.map +1 -1
- package/dist/indexer/member-selection.d.ts +46 -0
- package/dist/indexer/member-selection.d.ts.map +1 -0
- package/dist/indexer/member-selection.js +169 -0
- package/dist/indexer/member-selection.js.map +1 -0
- package/dist/indexer/name-lookup-policies/c-family.d.ts +7 -0
- package/dist/indexer/name-lookup-policies/c-family.d.ts.map +1 -0
- package/dist/indexer/name-lookup-policies/c-family.js +137 -0
- package/dist/indexer/name-lookup-policies/c-family.js.map +1 -0
- package/dist/indexer/name-lookup-policies/csharp-using-static.d.ts +11 -0
- package/dist/indexer/name-lookup-policies/csharp-using-static.d.ts.map +1 -0
- package/dist/indexer/name-lookup-policies/csharp-using-static.js +136 -0
- package/dist/indexer/name-lookup-policies/csharp-using-static.js.map +1 -0
- package/dist/indexer/name-lookup-policies/implicit-self.d.ts +10 -0
- package/dist/indexer/name-lookup-policies/implicit-self.d.ts.map +1 -0
- package/dist/indexer/name-lookup-policies/implicit-self.js +119 -0
- package/dist/indexer/name-lookup-policies/implicit-self.js.map +1 -0
- package/dist/indexer/name-lookup-policies/index.d.ts +3 -0
- package/dist/indexer/name-lookup-policies/index.d.ts.map +1 -0
- package/dist/indexer/name-lookup-policies/index.js +132 -0
- package/dist/indexer/name-lookup-policies/index.js.map +1 -0
- package/dist/indexer/name-lookup-policies/php.d.ts +3 -0
- package/dist/indexer/name-lookup-policies/php.d.ts.map +1 -0
- package/dist/indexer/name-lookup-policies/php.js +82 -0
- package/dist/indexer/name-lookup-policies/php.js.map +1 -0
- package/dist/indexer/name-resolution-types.d.ts +101 -0
- package/dist/indexer/name-resolution-types.d.ts.map +1 -0
- package/dist/indexer/name-resolution-types.js +2 -0
- package/dist/indexer/name-resolution-types.js.map +1 -0
- package/dist/indexer/name-resolution.d.ts +57 -0
- package/dist/indexer/name-resolution.d.ts.map +1 -0
- package/dist/indexer/name-resolution.js +204 -0
- package/dist/indexer/name-resolution.js.map +1 -0
- package/dist/indexer/navigation-cpp.d.ts +58 -0
- package/dist/indexer/navigation-cpp.d.ts.map +1 -0
- package/dist/indexer/navigation-cpp.js +935 -0
- package/dist/indexer/navigation-cpp.js.map +1 -0
- package/dist/indexer/navigation-goto.d.ts +115 -3
- package/dist/indexer/navigation-goto.d.ts.map +1 -1
- package/dist/indexer/navigation-goto.js +2469 -190
- package/dist/indexer/navigation-goto.js.map +1 -1
- package/dist/indexer/navigation-local.d.ts +21 -2
- package/dist/indexer/navigation-local.d.ts.map +1 -1
- package/dist/indexer/navigation-local.js +520 -63
- package/dist/indexer/navigation-local.js.map +1 -1
- package/dist/indexer/navigation-php.d.ts +66 -0
- package/dist/indexer/navigation-php.d.ts.map +1 -1
- package/dist/indexer/navigation-php.js +287 -4
- package/dist/indexer/navigation-php.js.map +1 -1
- package/dist/indexer/navigation-provenance.d.ts +1 -1
- package/dist/indexer/navigation-provenance.d.ts.map +1 -1
- package/dist/indexer/navigation-provenance.js +4 -13
- package/dist/indexer/navigation-provenance.js.map +1 -1
- package/dist/indexer/navigation-references.d.ts +73 -6
- package/dist/indexer/navigation-references.d.ts.map +1 -1
- package/dist/indexer/navigation-references.js +661 -67
- package/dist/indexer/navigation-references.js.map +1 -1
- package/dist/indexer/navigation-resolve.d.ts +46 -2
- package/dist/indexer/navigation-resolve.d.ts.map +1 -1
- package/dist/indexer/navigation-resolve.js +599 -193
- package/dist/indexer/navigation-resolve.js.map +1 -1
- package/dist/indexer/navigation.d.ts +29 -2
- package/dist/indexer/navigation.d.ts.map +1 -1
- package/dist/indexer/navigation.js +1092 -153
- package/dist/indexer/navigation.js.map +1 -1
- package/dist/indexer/parse-context.d.ts +2 -3
- package/dist/indexer/parse-context.d.ts.map +1 -1
- package/dist/indexer/parse-context.js +8 -21
- package/dist/indexer/parse-context.js.map +1 -1
- package/dist/indexer/php-namespace-symbols.d.ts +66 -0
- package/dist/indexer/php-namespace-symbols.d.ts.map +1 -0
- package/dist/indexer/php-namespace-symbols.js +342 -0
- package/dist/indexer/php-namespace-symbols.js.map +1 -0
- package/dist/indexer/reference-candidates.d.ts.map +1 -1
- package/dist/indexer/reference-candidates.js +13 -7
- package/dist/indexer/reference-candidates.js.map +1 -1
- package/dist/indexer/reference-context.d.ts +2 -0
- package/dist/indexer/reference-context.d.ts.map +1 -1
- package/dist/indexer/reference-context.js +4 -0
- package/dist/indexer/reference-context.js.map +1 -1
- package/dist/indexer/scope-nodes.d.ts +92 -13
- package/dist/indexer/scope-nodes.d.ts.map +1 -1
- package/dist/indexer/scope-nodes.js +212 -20
- package/dist/indexer/scope-nodes.js.map +1 -1
- package/dist/indexer/scope-types.d.ts +29 -1
- package/dist/indexer/scope-types.d.ts.map +1 -1
- package/dist/indexer/scope.d.ts +2 -3
- package/dist/indexer/scope.d.ts.map +1 -1
- package/dist/indexer/scope.js +968 -47
- package/dist/indexer/scope.js.map +1 -1
- package/dist/indexer/shared-owner-identity.d.ts +53 -0
- package/dist/indexer/shared-owner-identity.d.ts.map +1 -0
- package/dist/indexer/shared-owner-identity.js +460 -0
- package/dist/indexer/shared-owner-identity.js.map +1 -0
- package/dist/indexer/shared.d.ts +1 -1
- package/dist/indexer/shared.d.ts.map +1 -1
- package/dist/indexer/shared.js +1 -1
- package/dist/indexer/shared.js.map +1 -1
- package/dist/indexer/star-import-precedence.d.ts +113 -0
- package/dist/indexer/star-import-precedence.d.ts.map +1 -0
- package/dist/indexer/star-import-precedence.js +402 -0
- package/dist/indexer/star-import-precedence.js.map +1 -0
- package/dist/indexer/symbols.d.ts +3 -1
- package/dist/indexer/symbols.d.ts.map +1 -1
- package/dist/indexer/symbols.js +58 -18
- package/dist/indexer/symbols.js.map +1 -1
- package/dist/indexer/ts-callables.d.ts +42 -0
- package/dist/indexer/ts-callables.d.ts.map +1 -0
- package/dist/indexer/ts-callables.js +233 -0
- package/dist/indexer/ts-callables.js.map +1 -0
- package/dist/indexer/types.d.ts +41 -26
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/indexer/unused-exports.d.ts +13 -0
- package/dist/indexer/unused-exports.d.ts.map +1 -0
- package/dist/indexer/unused-exports.js +159 -0
- package/dist/indexer/unused-exports.js.map +1 -0
- package/dist/indexer/workspace-symbols.d.ts.map +1 -1
- package/dist/indexer/workspace-symbols.js +3 -2
- package/dist/indexer/workspace-symbols.js.map +1 -1
- package/dist/indexer.d.ts +3 -8
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +1 -1
- package/dist/indexer.js.map +1 -1
- package/dist/languages/callable-arity.d.ts +223 -0
- package/dist/languages/callable-arity.d.ts.map +1 -0
- package/dist/languages/callable-arity.js +1199 -0
- package/dist/languages/callable-arity.js.map +1 -0
- package/dist/languages/definitions/c-family.d.ts.map +1 -1
- package/dist/languages/definitions/c-family.js +30 -1
- package/dist/languages/definitions/c-family.js.map +1 -1
- package/dist/languages/definitions/c.d.ts +4 -0
- package/dist/languages/definitions/c.d.ts.map +1 -1
- package/dist/languages/definitions/c.js +19 -0
- package/dist/languages/definitions/c.js.map +1 -1
- package/dist/languages/definitions/cpp.d.ts.map +1 -1
- package/dist/languages/definitions/cpp.js +12 -0
- package/dist/languages/definitions/cpp.js.map +1 -1
- package/dist/languages/definitions/csharp.d.ts.map +1 -1
- package/dist/languages/definitions/csharp.js +2 -8
- package/dist/languages/definitions/csharp.js.map +1 -1
- package/dist/languages/definitions/go.d.ts.map +1 -1
- package/dist/languages/definitions/go.js +3 -0
- package/dist/languages/definitions/go.js.map +1 -1
- package/dist/languages/definitions/javascript.d.ts.map +1 -1
- package/dist/languages/definitions/javascript.js +10 -1
- package/dist/languages/definitions/javascript.js.map +1 -1
- package/dist/languages/definitions/js-family.d.ts +1 -1
- package/dist/languages/definitions/js-family.d.ts.map +1 -1
- package/dist/languages/definitions/js-family.js +7 -1
- package/dist/languages/definitions/js-family.js.map +1 -1
- package/dist/languages/definitions/php.d.ts.map +1 -1
- package/dist/languages/definitions/php.js +5 -1
- package/dist/languages/definitions/php.js.map +1 -1
- package/dist/languages/definitions/typescript.d.ts.map +1 -1
- package/dist/languages/definitions/typescript.js +8 -1
- package/dist/languages/definitions/typescript.js.map +1 -1
- package/dist/languages/definitions/zig.d.ts.map +1 -1
- package/dist/languages/definitions/zig.js +8 -0
- package/dist/languages/definitions/zig.js.map +1 -1
- package/dist/lifecycle/manifest.d.ts.map +1 -1
- package/dist/lifecycle/manifest.js +0 -1
- package/dist/lifecycle/manifest.js.map +1 -1
- package/dist/mcp/handlers.js +14 -7
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/native/byte-index.d.ts +6 -0
- package/dist/native/byte-index.d.ts.map +1 -1
- package/dist/native/byte-index.js +11 -6
- package/dist/native/byte-index.js.map +1 -1
- package/dist/native/contracts.d.ts +2 -3
- package/dist/native/contracts.d.ts.map +1 -1
- package/dist/native/execution.d.ts +9 -9
- package/dist/native/execution.d.ts.map +1 -1
- package/dist/native/execution.js +37 -77
- package/dist/native/execution.js.map +1 -1
- package/dist/native/js-bridge.d.ts +2 -15
- package/dist/native/js-bridge.d.ts.map +1 -1
- package/dist/native/js-bridge.js +2 -15
- package/dist/native/js-bridge.js.map +1 -1
- package/dist/native/query-results.js +2 -2
- package/dist/native/query-results.js.map +1 -1
- package/dist/native/runtime.d.ts +12 -12
- package/dist/native/runtime.d.ts.map +1 -1
- package/dist/native/runtime.js +24 -69
- package/dist/native/runtime.js.map +1 -1
- package/dist/native/tree-sitter-native.d.ts +3 -3
- package/dist/native/tree-sitter-native.d.ts.map +1 -1
- package/dist/native/tree-sitter-native.js +2 -2
- package/dist/native/tree-sitter-native.js.map +1 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +0 -4
- package/dist/presets.js.map +1 -1
- package/dist/review/candidates.d.ts.map +1 -1
- package/dist/review/candidates.js +1 -1
- package/dist/review/candidates.js.map +1 -1
- package/dist/review/deleted.d.ts +3 -3
- package/dist/review/deleted.d.ts.map +1 -1
- package/dist/review/deleted.js +82 -32
- package/dist/review/deleted.js.map +1 -1
- package/dist/review/report.d.ts +1 -0
- package/dist/review/report.d.ts.map +1 -1
- package/dist/review/report.js +1 -1
- package/dist/review/report.js.map +1 -1
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +3 -20
- package/dist/review.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +0 -5
- package/dist/session.js.map +1 -1
- package/dist/sql/navigation.d.ts.map +1 -1
- package/dist/sql/navigation.js +2 -1
- package/dist/sql/navigation.js.map +1 -1
- package/dist/sql/source-graph.d.ts.map +1 -1
- package/dist/sql/source-graph.js +2 -2
- package/dist/sql/source-graph.js.map +1 -1
- package/dist/sqlite/schema.d.ts +1 -1
- package/dist/sqlite/schema.d.ts.map +1 -1
- package/dist/sqlite/schema.js +8 -2
- package/dist/sqlite/schema.js.map +1 -1
- package/dist/sqlite/write.js +2 -2
- package/dist/sqlite/write.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util/bloom-filter.d.ts +8 -1
- package/dist/util/bloom-filter.d.ts.map +1 -1
- package/dist/util/bloom-filter.js +15 -2
- package/dist/util/bloom-filter.js.map +1 -1
- package/dist/util/glob.d.ts +32 -0
- package/dist/util/glob.d.ts.map +1 -0
- package/dist/util/glob.js +137 -0
- package/dist/util/glob.js.map +1 -0
- package/dist/util/graph-edges.d.ts +19 -1
- package/dist/util/graph-edges.d.ts.map +1 -1
- package/dist/util/graph-edges.js +30 -4
- package/dist/util/graph-edges.js.map +1 -1
- package/dist/util/identifiers.d.ts +15 -0
- package/dist/util/identifiers.d.ts.map +1 -1
- package/dist/util/identifiers.js +35 -0
- package/dist/util/identifiers.js.map +1 -1
- package/dist/util/member-access-tables.d.ts +61 -4
- package/dist/util/member-access-tables.d.ts.map +1 -1
- package/dist/util/member-access-tables.js +139 -19
- package/dist/util/member-access-tables.js.map +1 -1
- package/dist/util/member-access.d.ts +17 -0
- package/dist/util/member-access.d.ts.map +1 -1
- package/dist/util/member-access.js +98 -3
- package/dist/util/member-access.js.map +1 -1
- package/dist/util/project-files.d.ts +2 -10
- package/dist/util/project-files.d.ts.map +1 -1
- package/dist/util/project-files.js +29 -51
- package/dist/util/project-files.js.map +1 -1
- package/dist/util/python-type-checking.d.ts +18 -0
- package/dist/util/python-type-checking.d.ts.map +1 -0
- package/dist/util/python-type-checking.js +160 -0
- package/dist/util/python-type-checking.js.map +1 -0
- package/dist/util/resolution/cargo-targets.d.ts +11 -0
- package/dist/util/resolution/cargo-targets.d.ts.map +1 -1
- package/dist/util/resolution/cargo-targets.js +174 -13
- package/dist/util/resolution/cargo-targets.js.map +1 -1
- package/dist/util/resolution/csharp.d.ts +33 -1
- package/dist/util/resolution/csharp.d.ts.map +1 -1
- package/dist/util/resolution/csharp.js +145 -30
- package/dist/util/resolution/csharp.js.map +1 -1
- package/dist/util/resolution/jvm.d.ts +7 -3
- package/dist/util/resolution/jvm.d.ts.map +1 -1
- package/dist/util/resolution/jvm.js +56 -38
- package/dist/util/resolution/jvm.js.map +1 -1
- package/dist/util/resolution/php.d.ts.map +1 -1
- package/dist/util/resolution/php.js +35 -8
- package/dist/util/resolution/php.js.map +1 -1
- package/dist/util/resolution/python.d.ts +9 -0
- package/dist/util/resolution/python.d.ts.map +1 -1
- package/dist/util/resolution/python.js +46 -0
- package/dist/util/resolution/python.js.map +1 -1
- package/dist/util/resolution/rust.d.ts +0 -1
- package/dist/util/resolution/rust.d.ts.map +1 -1
- package/dist/util/resolution/rust.js +95 -35
- package/dist/util/resolution/rust.js.map +1 -1
- package/dist/util/resolution/specifier-targets.d.ts +44 -0
- package/dist/util/resolution/specifier-targets.d.ts.map +1 -0
- package/dist/util/resolution/specifier-targets.js +152 -0
- package/dist/util/resolution/specifier-targets.js.map +1 -0
- package/dist/util/resolution-candidates.d.ts +5 -0
- package/dist/util/resolution-candidates.d.ts.map +1 -1
- package/dist/util/resolution-candidates.js +16 -3
- package/dist/util/resolution-candidates.js.map +1 -1
- package/dist/util/resolution.d.ts +2 -1
- package/dist/util/resolution.d.ts.map +1 -1
- package/dist/util/resolution.js +101 -15
- package/dist/util/resolution.js.map +1 -1
- package/dist/util/specifiers.d.ts +29 -1
- package/dist/util/specifiers.d.ts.map +1 -1
- package/dist/util/specifiers.js +56 -8
- package/dist/util/specifiers.js.map +1 -1
- package/dist/util/trivia.d.ts.map +1 -1
- package/dist/util/trivia.js +49 -30
- package/dist/util/trivia.js.map +1 -1
- package/dist/util/workspace.d.ts.map +1 -1
- package/dist/util/workspace.js +32 -4
- package/dist/util/workspace.js.map +1 -1
- package/docs/mcp.md +3 -2
- package/package.json +5 -7
- package/dist/impact/call-compatibility/providers/profiles.d.ts +0 -80
- package/dist/impact/call-compatibility/providers/profiles.d.ts.map +0 -1
- package/dist/impact/call-compatibility/providers/profiles.js +0 -164
- package/dist/impact/call-compatibility/providers/profiles.js.map +0 -1
|
@@ -1,19 +1,122 @@
|
|
|
1
|
+
import { definitionWithoutDeferredSteps, moduleAliasIsUnshadowed, nameResolutionPreloadFiles, phpImportTypeAtPosition, resolveBareName, settleNameResolution, } from "../indexer/name-resolution.js";
|
|
2
|
+
import { recoverIncludedCallableStar } from "../indexer/navigation.js";
|
|
1
3
|
import { isUnsupportedParserInputError, prepareSourceInput } from "../languages/file-prep.js";
|
|
4
|
+
import { supportForFileWithoutHeaderSample } from "../languages.js";
|
|
2
5
|
import { logWithLevel } from "../logging.js";
|
|
3
6
|
import { ProjectedSyntaxTree } from "../native/projected-tree.js";
|
|
4
7
|
import { assertNativeRequiredAvailable, getNativeSyntaxTreeExecution, isNativeRequiredUnavailableError, } from "../native/tree-sitter-native.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
+
import { cppEquivalentCallableBindings } from "../indexer/cpp-callables.js";
|
|
9
|
+
import { cjsRequireValueBinding, resolveExport } from "../indexer/navigation-resolve.js";
|
|
10
|
+
import { typescriptCollapsedOverloadTarget, typescriptOverloadImplementationAcceptsCount, } from "../indexer/ts-callables.js";
|
|
11
|
+
import { isJsTsLanguage } from "../languages/js-family.js";
|
|
12
|
+
import { isGoExportedMemberName, languageHasDeclarationVisibility } from "../indexer/declaration-visibility.js";
|
|
13
|
+
import { inheritsMemberOverloads } from "../indexer/member-selection.js";
|
|
14
|
+
import { getPackageDeclarationName } from "../indexer/compilation-units.js";
|
|
15
|
+
import { innermostNamespaceImport, resolveMemberAccessDefinition, sameParameterTypes, } from "../indexer/navigation-goto.js";
|
|
16
|
+
import { inferPhpQualifiedReferenceImportType } from "../indexer/navigation-php.js";
|
|
17
|
+
import { ensurePhpNamespaceSymbolIndex } from "../indexer/php-namespace-symbols.js";
|
|
18
|
+
import { getOrBuildScopeIndex } from "../indexer/navigation-local.js";
|
|
19
|
+
import { ensureParsedContext } from "../indexer/parse-context.js";
|
|
20
|
+
import { SymbolKind, } from "../indexer/types.js";
|
|
8
21
|
import { fileIdentityKey, normalizePath } from "../util/paths.js";
|
|
9
|
-
import {
|
|
22
|
+
import { foldPhpIdentifierCase } from "../util/identifiers.js";
|
|
23
|
+
import { buildSymbolGraph, defNodeId } from "./symbol-graph.js";
|
|
10
24
|
import { collectDetailedDeclarations } from "./symbol-graph-detailed/ast.js";
|
|
11
|
-
import { emitClassInheritanceEdges, emitFunctionBodyEdges, emitMemberOwnershipEdges, emitMemberImplementationEdges,
|
|
25
|
+
import { emitClassInheritanceEdges, emitFunctionBodyEdges, emitMemberOwnershipEdges, emitMemberImplementationEdges, SPECIALIZED_EDGE_PASSES, } from "./symbol-graph-detailed/edge-passes.js";
|
|
12
26
|
import { buildImportAliasMaps } from "./symbol-graph-detailed/import-aliases.js";
|
|
13
27
|
import { createMemberChainResolver } from "./symbol-graph-detailed/member-chains.js";
|
|
14
|
-
import { emitReceiverCallEdges } from "./symbol-graph-detailed/receiver-calls.js";
|
|
28
|
+
import { emitReceiverCallEdges, inheritedReceiverMemberSignatures, } from "./symbol-graph-detailed/receiver-calls.js";
|
|
29
|
+
const CPP_CLASS_DECLARATION_TYPES = new Set(["class_specifier", "struct_specifier", "union_specifier"]);
|
|
30
|
+
function symbolDefForBinding(moduleEntry, binding) {
|
|
31
|
+
const bindingRange = binding.def;
|
|
32
|
+
if (!bindingRange)
|
|
33
|
+
return null;
|
|
34
|
+
return (moduleEntry.locals.find((candidate) => candidate.kind === SymbolKind.Function &&
|
|
35
|
+
candidate.range.start.index === bindingRange.start.index &&
|
|
36
|
+
candidate.range.end.index === bindingRange.end.index) ?? null);
|
|
37
|
+
}
|
|
38
|
+
function recordCallableDeclarationAliases(moduleEntry, languageId, bindings, nodeAliases) {
|
|
39
|
+
const recordGroup = (group) => {
|
|
40
|
+
if (group.length < 2)
|
|
41
|
+
return;
|
|
42
|
+
const canonicalBinding = group.find((binding) => !binding.callable?.definition) ?? group[0];
|
|
43
|
+
const canonicalDef = symbolDefForBinding(moduleEntry, canonicalBinding);
|
|
44
|
+
if (!canonicalDef)
|
|
45
|
+
return;
|
|
46
|
+
const canonicalId = defNodeId(canonicalDef);
|
|
47
|
+
for (const binding of group) {
|
|
48
|
+
const def = symbolDefForBinding(moduleEntry, binding);
|
|
49
|
+
if (!def)
|
|
50
|
+
continue;
|
|
51
|
+
const id = defNodeId(def);
|
|
52
|
+
if (id !== canonicalId)
|
|
53
|
+
nodeAliases.set(id, canonicalId);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
if (languageId === "c") {
|
|
57
|
+
const byName = new Map();
|
|
58
|
+
for (const binding of bindings) {
|
|
59
|
+
if (binding.kind !== "function" || !binding.def)
|
|
60
|
+
continue;
|
|
61
|
+
const key = binding.callable?.key ?? binding.canonicalName;
|
|
62
|
+
const group = byName.get(key) ?? [];
|
|
63
|
+
group.push(binding);
|
|
64
|
+
byName.set(key, group);
|
|
65
|
+
}
|
|
66
|
+
for (const group of byName.values())
|
|
67
|
+
recordGroup(group);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (languageId !== "cpp")
|
|
71
|
+
return;
|
|
72
|
+
const handled = new Set();
|
|
73
|
+
for (const binding of bindings) {
|
|
74
|
+
if (binding.kind !== "function" || handled.has(binding))
|
|
75
|
+
continue;
|
|
76
|
+
const group = cppEquivalentCallableBindings(binding);
|
|
77
|
+
for (const candidate of group)
|
|
78
|
+
handled.add(candidate);
|
|
79
|
+
recordGroup(group);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function recordTypeScriptCallableAliases(moduleEntry, languageId, nodeAliases) {
|
|
83
|
+
if (languageId !== "ts" && languageId !== "tsx")
|
|
84
|
+
return;
|
|
85
|
+
const groups = new Map();
|
|
86
|
+
for (const local of moduleEntry.locals) {
|
|
87
|
+
if (local.kind !== SymbolKind.Function || !local.callable || local.callable.role === "other")
|
|
88
|
+
continue;
|
|
89
|
+
const group = groups.get(local.callable.key) ?? [];
|
|
90
|
+
group.push(local);
|
|
91
|
+
groups.set(local.callable.key, group);
|
|
92
|
+
}
|
|
93
|
+
for (const group of groups.values()) {
|
|
94
|
+
if (group.length < 2)
|
|
95
|
+
continue;
|
|
96
|
+
const canonical = typescriptCollapsedOverloadTarget(group, (local) => local.callable);
|
|
97
|
+
if (!canonical)
|
|
98
|
+
continue;
|
|
99
|
+
const canonicalId = defNodeId(canonical);
|
|
100
|
+
for (const local of group) {
|
|
101
|
+
const id = defNodeId(local);
|
|
102
|
+
if (id !== canonicalId)
|
|
103
|
+
nodeAliases.set(id, canonicalId);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The indexed symbol a definition names (with its member metadata), or null for a parameter or
|
|
109
|
+
* block local, which has no graph node.
|
|
110
|
+
*/
|
|
111
|
+
function indexedSymbolFor(index, def) {
|
|
112
|
+
const module = index.byFile.get(fileIdentityKey(def.file));
|
|
113
|
+
return (module?.locals.find((local) => local.localName === def.localName &&
|
|
114
|
+
local.range.start.index === def.range.start.index &&
|
|
115
|
+
local.range.end.index === def.range.end.index) ?? null);
|
|
116
|
+
}
|
|
15
117
|
export async function buildSymbolGraphDetailed(index, opts) {
|
|
16
|
-
assertNativeRequiredAvailable(
|
|
118
|
+
assertNativeRequiredAvailable();
|
|
119
|
+
await ensurePhpNamespaceSymbolIndex(index);
|
|
17
120
|
const base = await buildSymbolGraph(index, opts?.files ? { files: opts.files } : undefined);
|
|
18
121
|
const configuredMaxEdges = typeof opts?.maxEdges === "number" && opts.maxEdges > 0 ? Math.floor(opts.maxEdges) : undefined;
|
|
19
122
|
const maxEdges = configuredMaxEdges ?? Number.POSITIVE_INFINITY;
|
|
@@ -49,15 +152,23 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
49
152
|
edgeCount++;
|
|
50
153
|
return true;
|
|
51
154
|
};
|
|
52
|
-
const
|
|
155
|
+
const edgeKey = (fromId, toId, label, site) => {
|
|
53
156
|
const siteKey = site ? `${site.file}:${site.range.start.index ?? ""}:${site.range.end.index ?? ""}` : "";
|
|
54
|
-
|
|
157
|
+
return `${fromId}->${toId}::${label ?? ""}::${siteKey}`;
|
|
158
|
+
};
|
|
159
|
+
const recordEdge = (fromId, toId, label, site) => {
|
|
160
|
+
const key = edgeKey(fromId, toId, label, site);
|
|
55
161
|
if (added.has(key))
|
|
56
162
|
return true;
|
|
57
163
|
added.add(key);
|
|
58
164
|
return maybePushEdge(fromId, toId, label, site);
|
|
59
165
|
};
|
|
60
|
-
const resolveExportNamespace = (file, exportedName) =>
|
|
166
|
+
const resolveExportNamespace = (file, exportedName) => {
|
|
167
|
+
const languageId = supportForFileWithoutHeaderSample(file, index.languageExtensions)?.id;
|
|
168
|
+
if (!isGoExportedMemberName(languageId, exportedName))
|
|
169
|
+
return null;
|
|
170
|
+
return resolveExport(index, file, exportedName);
|
|
171
|
+
};
|
|
61
172
|
const resolveExportDef = (file, exportedName) => {
|
|
62
173
|
const resolved = resolveExportNamespace(file, exportedName);
|
|
63
174
|
return resolved?.kind === "resolved" ? resolved.def : null;
|
|
@@ -68,7 +179,10 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
68
179
|
for (const segment of [...names].reverse()) {
|
|
69
180
|
if (!file)
|
|
70
181
|
break;
|
|
71
|
-
const
|
|
182
|
+
const languageId = supportForFileWithoutHeaderSample(file, index.languageExtensions)?.id;
|
|
183
|
+
const resolved = languageId && isJsTsLanguage(languageId)
|
|
184
|
+
? resolveExport(index, file, segment, { allowLocalFallback: false })
|
|
185
|
+
: resolveExportNamespace(file, segment);
|
|
72
186
|
if (!resolved) {
|
|
73
187
|
targetDef = null;
|
|
74
188
|
break;
|
|
@@ -81,32 +195,70 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
81
195
|
targetDef = resolved.def;
|
|
82
196
|
file = normalizePath(targetDef.file);
|
|
83
197
|
}
|
|
84
|
-
if (targetDef)
|
|
198
|
+
if (targetDef)
|
|
85
199
|
return targetDef;
|
|
86
|
-
|
|
200
|
+
const languageId = supportForFileWithoutHeaderSample(file ?? startFile, index.languageExtensions)?.id;
|
|
201
|
+
if (languageId === "c" ||
|
|
202
|
+
languageId === "cpp" ||
|
|
203
|
+
(languageId && (isJsTsLanguage(languageId) || languageHasDeclarationVisibility(languageId))))
|
|
204
|
+
return null;
|
|
87
205
|
const fileKey = typeof file === "string" ? fileIdentityKey(file) : null;
|
|
88
206
|
const moduleEntry = fileKey ? index.byFile.get(fileKey) : undefined;
|
|
89
207
|
const lastName = names[0];
|
|
208
|
+
if (languageId === "go" && (!lastName || !isGoExportedMemberName(languageId, lastName)))
|
|
209
|
+
return null;
|
|
90
210
|
return moduleEntry?.locals.find((entry) => entry.localName === lastName) ?? null;
|
|
91
211
|
};
|
|
92
212
|
const resolveExportFrom = (file, exportedName) => resolveExportDef(file, exportedName);
|
|
93
213
|
const receiverCalls = [];
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
214
|
+
const fileHiddenMemberIds = new Set();
|
|
215
|
+
const receiverMemberScopes = new Map();
|
|
216
|
+
const receiverMemberArities = new Map();
|
|
217
|
+
const sharedOwnerPeers = new Map();
|
|
218
|
+
const sharedOwnerAnchors = new Map();
|
|
219
|
+
const sharedOwnerAccessibleMembers = new Map();
|
|
220
|
+
const nodeAliases = new Map();
|
|
221
|
+
const ownershipParsedContexts = new Map();
|
|
222
|
+
const loadParsedFile = (file) => {
|
|
223
|
+
const fileKey = fileIdentityKey(file);
|
|
224
|
+
const cached = ownershipParsedContexts.get(fileKey);
|
|
225
|
+
if (cached)
|
|
226
|
+
return cached;
|
|
227
|
+
const pending = ensureParsedContext(file, index.parsed?.get(fileKey), index.languageExtensions).catch(() => null);
|
|
228
|
+
ownershipParsedContexts.set(fileKey, pending);
|
|
229
|
+
return pending;
|
|
230
|
+
};
|
|
231
|
+
// Receiver calls into runtime and dependency APIs dominate real call sites. Build these
|
|
232
|
+
// indexes lazily so a scoped graph that has no receiver calls pays no allocation cost.
|
|
98
233
|
let callableNames;
|
|
99
|
-
const
|
|
234
|
+
const ensureCallableNames = () => {
|
|
100
235
|
if (!callableNames) {
|
|
101
|
-
callableNames = new Set();
|
|
236
|
+
callableNames = { exact: new Set(), phpFolded: new Set() };
|
|
102
237
|
for (const entry of index.byFile.values()) {
|
|
238
|
+
const isPhp = supportForFileWithoutHeaderSample(entry.file, index.languageExtensions)?.id === "php";
|
|
103
239
|
for (const local of entry.locals) {
|
|
104
|
-
if (local.kind
|
|
105
|
-
|
|
240
|
+
if (local.kind !== SymbolKind.Function)
|
|
241
|
+
continue;
|
|
242
|
+
callableNames.exact.add(local.localName);
|
|
243
|
+
if (isPhp)
|
|
244
|
+
callableNames.phpFolded.add(foldPhpIdentifierCase(local.localName));
|
|
106
245
|
}
|
|
107
246
|
}
|
|
108
247
|
}
|
|
109
|
-
return callableNames
|
|
248
|
+
return callableNames;
|
|
249
|
+
};
|
|
250
|
+
const hasCallableNamed = (name, phpCaseInsensitive = false) => {
|
|
251
|
+
const names = ensureCallableNames();
|
|
252
|
+
return phpCaseInsensitive ? names.phpFolded.has(foldPhpIdentifierCase(name)) : names.exact.has(name);
|
|
253
|
+
};
|
|
254
|
+
// Function-valued bindings (`const helper = () => 1`) index as variables, so the
|
|
255
|
+
// kind scan above cannot see them; the detailed pass mirrors each name it proves
|
|
256
|
+
// callable here as its files are processed.
|
|
257
|
+
const noteCallableName = (name, phpCaseInsensitive = false) => {
|
|
258
|
+
const names = ensureCallableNames();
|
|
259
|
+
names.exact.add(name);
|
|
260
|
+
if (phpCaseInsensitive)
|
|
261
|
+
names.phpFolded.add(foldPhpIdentifierCase(name));
|
|
110
262
|
};
|
|
111
263
|
const optionFileKeys = opts?.files ? new Set(Array.from(opts.files, fileIdentityKey)) : undefined;
|
|
112
264
|
for (const moduleEntry of index.byFile.values()) {
|
|
@@ -135,7 +287,7 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
135
287
|
continue;
|
|
136
288
|
}
|
|
137
289
|
if (sup && src !== undefined && !tree) {
|
|
138
|
-
const nativeTreeExecution = getNativeSyntaxTreeExecution(src, sup
|
|
290
|
+
const nativeTreeExecution = getNativeSyntaxTreeExecution(src, sup);
|
|
139
291
|
if (nativeTreeExecution.tree) {
|
|
140
292
|
tree = new ProjectedSyntaxTree(src, nativeTreeExecution.tree);
|
|
141
293
|
}
|
|
@@ -147,7 +299,30 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
147
299
|
if (!sup || src === undefined || !tree) {
|
|
148
300
|
throw new Error(`Failed to parse ${file}`);
|
|
149
301
|
}
|
|
150
|
-
|
|
302
|
+
ownershipParsedContexts.set(fileIdentityKey(file), Promise.resolve({ source: src, tree, sup }));
|
|
303
|
+
const scopeIndex = getOrBuildScopeIndex(index, file, src, sup, moduleEntry, tree);
|
|
304
|
+
const { aliasToTargetDef, aliasToTargetModule } = buildImportAliasMaps(index, moduleEntry, resolveExportNamespace, resolveExportFrom, scopeIndex);
|
|
305
|
+
const aliasToSpecifier = new Map();
|
|
306
|
+
if (isJsTsLanguage(sup.id)) {
|
|
307
|
+
for (const imp of moduleEntry.imports) {
|
|
308
|
+
if (imp.kind !== "namespace" || typeof imp.resolved !== "string")
|
|
309
|
+
continue;
|
|
310
|
+
const target = aliasToTargetModule.get(imp.localNS);
|
|
311
|
+
if (target && fileIdentityKey(imp.resolved) === fileIdentityKey(target)) {
|
|
312
|
+
aliasToSpecifier.set(imp.localNS, imp.from);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
if (sup.id === "c" || sup.id === "cpp") {
|
|
317
|
+
for (const [alias, def] of [...aliasToTargetDef]) {
|
|
318
|
+
const exported = resolveExport(index, def.file, alias, {
|
|
319
|
+
allowLocalFallback: false,
|
|
320
|
+
...(sup.id === "c" ? { cNamespace: "ordinary" } : {}),
|
|
321
|
+
});
|
|
322
|
+
if (exported?.kind !== "resolved")
|
|
323
|
+
aliasToTargetDef.delete(alias);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
151
326
|
const { functionNodes, classNodes, constStringOf } = collectDetailedDeclarations(tree.rootNode, sup, src, moduleEntry.locals);
|
|
152
327
|
const memberResolver = createMemberChainResolver({
|
|
153
328
|
sup,
|
|
@@ -155,27 +330,82 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
155
330
|
constStringOf,
|
|
156
331
|
aliasToTargetModule,
|
|
157
332
|
resolveMemberPathFromModule,
|
|
333
|
+
resolveNamespaceAlias: (alias, useNode) => {
|
|
334
|
+
const imported = sup.id === "zig" || sup.id === "csharp" || isJsTsLanguage(sup.id)
|
|
335
|
+
? innermostNamespaceImport(moduleEntry.imports, alias, useNode, sup.normalizeIdentifier)
|
|
336
|
+
: undefined;
|
|
337
|
+
if (!moduleAliasIsUnshadowed(bareNameUse(alias, useNode), imported?.from ?? aliasToSpecifier.get(alias))) {
|
|
338
|
+
return undefined;
|
|
339
|
+
}
|
|
340
|
+
if (sup.id === "zig" || sup.id === "csharp" || isJsTsLanguage(sup.id)) {
|
|
341
|
+
if (isJsTsLanguage(sup.id) &&
|
|
342
|
+
imported?.mechanism === "cjs" &&
|
|
343
|
+
typeof imported.resolved === "string" &&
|
|
344
|
+
cjsRequireValueBinding(index, imported.resolved)) {
|
|
345
|
+
return undefined;
|
|
346
|
+
}
|
|
347
|
+
if (typeof imported?.resolved === "string")
|
|
348
|
+
return imported.resolved;
|
|
349
|
+
if (sup.id === "csharp" || sup.id === "zig")
|
|
350
|
+
return undefined;
|
|
351
|
+
}
|
|
352
|
+
return aliasToTargetModule.get(alias);
|
|
353
|
+
},
|
|
158
354
|
});
|
|
159
355
|
const { memberExpressionType, optionalMemberTypes, propertyIdentifierTypes, resolveMemberChainTarget } = memberResolver;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
if (
|
|
172
|
-
|
|
173
|
-
|
|
356
|
+
recordCallableDeclarationAliases(moduleEntry, sup.id, scopeIndex.all, nodeAliases);
|
|
357
|
+
recordTypeScriptCallableAliases(moduleEntry, sup.id, nodeAliases);
|
|
358
|
+
// Files the shared name lookup reads synchronously for this module (imports, C++ includes).
|
|
359
|
+
const parsedForResolution = new Map([
|
|
360
|
+
[fileIdentityKey(file), { source: src, tree, sup }],
|
|
361
|
+
]);
|
|
362
|
+
for (const preload of nameResolutionPreloadFiles(index, moduleEntry, sup.id)) {
|
|
363
|
+
const key = fileIdentityKey(preload);
|
|
364
|
+
if (parsedForResolution.has(key))
|
|
365
|
+
continue;
|
|
366
|
+
const parsedFile = await loadParsedFile(preload);
|
|
367
|
+
if (parsedFile)
|
|
368
|
+
parsedForResolution.set(key, parsedFile);
|
|
369
|
+
}
|
|
370
|
+
const resolutionFiles = {
|
|
371
|
+
get: (target) => parsedForResolution.get(fileIdentityKey(target)) ?? null,
|
|
372
|
+
};
|
|
373
|
+
const moduleParsed = { source: src, tree, sup };
|
|
374
|
+
const bareNameUse = (name, node) => {
|
|
375
|
+
const phpImportType = sup.id === "php"
|
|
376
|
+
? (phpImportTypeAtPosition(moduleEntry.imports, node.startPosition.row, node.startPosition.column) ??
|
|
377
|
+
inferPhpQualifiedReferenceImportType(node))
|
|
378
|
+
: undefined;
|
|
379
|
+
return {
|
|
380
|
+
index,
|
|
381
|
+
mod: moduleEntry,
|
|
382
|
+
file,
|
|
383
|
+
parsed: moduleParsed,
|
|
384
|
+
scopeIndex,
|
|
385
|
+
files: resolutionFiles,
|
|
386
|
+
node,
|
|
387
|
+
name,
|
|
388
|
+
...(phpImportType ? { phpImportType } : {}),
|
|
389
|
+
};
|
|
390
|
+
};
|
|
391
|
+
// The graph has nodes only for indexed symbols; a parameter or function-local binding
|
|
392
|
+
// that navigation resolves has no node, so it gets no edge.
|
|
393
|
+
const indexedOrNull = (definition) => definition ? indexedSymbolFor(index, definition) : null;
|
|
394
|
+
const resolveName = (name, node) => resolveBareName(bareNameUse(name, node));
|
|
395
|
+
const resolveIdentifier = (name, node) => indexedOrNull(definitionWithoutDeferredSteps(resolveName(name, node)));
|
|
396
|
+
const settleName = async (name, node, resolution) => {
|
|
397
|
+
const settled = await settleNameResolution(bareNameUse(name, node), resolution, {
|
|
398
|
+
// A member that cannot accept the call's argument count gets no edge and no fallback.
|
|
399
|
+
requireAcceptedArity: true,
|
|
400
|
+
recoverIncludedStar: (lookupName, cNamespace) => recoverIncludedCallableStar(index, moduleEntry, sup.id, lookupName, cNamespace, node, src),
|
|
401
|
+
});
|
|
402
|
+
return indexedOrNull(settled?.status === "ok" ? settled.definition : null);
|
|
174
403
|
};
|
|
175
404
|
const edgePassContext = {
|
|
176
405
|
index,
|
|
177
406
|
sup,
|
|
178
407
|
source: src,
|
|
408
|
+
tree,
|
|
179
409
|
moduleEntry,
|
|
180
410
|
nodes,
|
|
181
411
|
membersOnly,
|
|
@@ -185,17 +415,55 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
185
415
|
aliasToTargetDef,
|
|
186
416
|
aliasToTargetModule,
|
|
187
417
|
resolveIdentifier,
|
|
418
|
+
resolveName,
|
|
419
|
+
settleName,
|
|
420
|
+
moduleAliasIsUnshadowed: (name, node) => moduleAliasIsUnshadowed(bareNameUse(name, node), aliasToSpecifier.get(name)),
|
|
188
421
|
resolveExportFrom,
|
|
189
422
|
resolveMemberChainTarget,
|
|
423
|
+
cppDeclaresClass: (def) => {
|
|
424
|
+
const parsed = parsedForResolution.get(fileIdentityKey(def.file));
|
|
425
|
+
if (!parsed)
|
|
426
|
+
return false;
|
|
427
|
+
const start = def.range.start.index ?? 0;
|
|
428
|
+
const nameNode = parsed.tree.rootNode.descendantForIndex(start, def.range.end.index ?? start);
|
|
429
|
+
return CPP_CLASS_DECLARATION_TYPES.has(nameNode.parent?.type ?? "");
|
|
430
|
+
},
|
|
431
|
+
resolveMemberAccessTarget: async (node) => {
|
|
432
|
+
const useNode = tree.rootNode.descendantForIndex(node.startIndex, node.endIndex);
|
|
433
|
+
const resolved = await resolveMemberAccessDefinition({
|
|
434
|
+
index,
|
|
435
|
+
mod: moduleEntry,
|
|
436
|
+
node: useNode,
|
|
437
|
+
source: src,
|
|
438
|
+
tree,
|
|
439
|
+
sup,
|
|
440
|
+
resolveLexicalBinding: (expression) => {
|
|
441
|
+
const name = src.slice(expression.startIndex, expression.endIndex);
|
|
442
|
+
const imported = aliasToTargetDef.get(name);
|
|
443
|
+
if (imported)
|
|
444
|
+
return imported;
|
|
445
|
+
return resolveIdentifier(name, expression);
|
|
446
|
+
},
|
|
447
|
+
});
|
|
448
|
+
return resolved?.status === "ok" ? resolved.definition : null;
|
|
449
|
+
},
|
|
190
450
|
recordEdge,
|
|
191
451
|
receiverCalls,
|
|
192
|
-
|
|
452
|
+
receiverMemberScopes,
|
|
453
|
+
receiverMemberArities,
|
|
454
|
+
sharedOwnerPeers,
|
|
455
|
+
sharedOwnerAnchors,
|
|
456
|
+
sharedOwnerAccessibleMembers,
|
|
457
|
+
fileHiddenMemberIds,
|
|
458
|
+
nodeAliases,
|
|
459
|
+
noteCallableName,
|
|
460
|
+
loadParsedFile,
|
|
193
461
|
};
|
|
194
|
-
|
|
195
|
-
emitFunctionBodyEdges(edgePassContext, functionNodes);
|
|
196
|
-
emitMemberOwnershipEdges(edgePassContext, functionNodes, classNodes);
|
|
197
|
-
emitClassInheritanceEdges(edgePassContext, classNodes);
|
|
198
|
-
|
|
462
|
+
SPECIALIZED_EDGE_PASSES[sup.id]?.beforeModule?.(edgePassContext, tree.rootNode);
|
|
463
|
+
await emitFunctionBodyEdges(edgePassContext, functionNodes);
|
|
464
|
+
await emitMemberOwnershipEdges(edgePassContext, functionNodes, classNodes);
|
|
465
|
+
await emitClassInheritanceEdges(edgePassContext, classNodes);
|
|
466
|
+
SPECIALIZED_EDGE_PASSES[sup.id]?.afterModule?.(edgePassContext, tree.rootNode);
|
|
199
467
|
}
|
|
200
468
|
catch (error) {
|
|
201
469
|
if (isNativeRequiredUnavailableError(error)) {
|
|
@@ -207,12 +475,144 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
207
475
|
logWithLevel(opts?.logLevel, "warn", `Warning: Failed to build detailed symbol edges for ${file}:`, error);
|
|
208
476
|
}
|
|
209
477
|
}
|
|
210
|
-
|
|
478
|
+
// Function-valued bindings are proven while each file is processed. Apply the callable-name
|
|
479
|
+
// prefilter only after that pass so receiver calls do not depend on file iteration order.
|
|
480
|
+
const callableReceiverCalls = receiverCalls.filter((candidate) => hasCallableNamed(candidate.memberName, candidate.caseInsensitiveMemberName));
|
|
481
|
+
let typeScriptReceiverFiles;
|
|
482
|
+
let typeScriptReceiverNames;
|
|
483
|
+
for (const candidate of callableReceiverCalls) {
|
|
484
|
+
if (candidate.argumentCount === null)
|
|
485
|
+
continue;
|
|
486
|
+
const languageId = supportForFileWithoutHeaderSample(candidate.site.file, index.languageExtensions)?.id;
|
|
487
|
+
if (languageId !== "ts" && languageId !== "tsx")
|
|
488
|
+
continue;
|
|
489
|
+
(typeScriptReceiverFiles ??= new Set()).add(fileIdentityKey(candidate.site.file));
|
|
490
|
+
(typeScriptReceiverNames ??= new Set()).add(candidate.memberName);
|
|
491
|
+
}
|
|
492
|
+
const typeScriptReceiverTargets = typeScriptReceiverNames?.size
|
|
493
|
+
? new Map()
|
|
494
|
+
: undefined;
|
|
495
|
+
if (typeScriptReceiverTargets && typeScriptReceiverNames) {
|
|
496
|
+
for (const node of nodes.values()) {
|
|
497
|
+
if (!typeScriptReceiverNames.has(node.name))
|
|
498
|
+
continue;
|
|
499
|
+
const targetLanguageId = supportForFileWithoutHeaderSample(node.file, index.languageExtensions)?.id;
|
|
500
|
+
if (targetLanguageId !== "ts" && targetLanguageId !== "tsx")
|
|
501
|
+
continue;
|
|
502
|
+
const module = index.byFile.get(fileIdentityKey(node.file));
|
|
503
|
+
const def = module?.locals.find((candidate) => defNodeId(candidate) === node.id);
|
|
504
|
+
if (!module || !def || def.kind !== SymbolKind.Function)
|
|
505
|
+
continue;
|
|
506
|
+
if (!module.locals.some((candidate) => candidate.kind === SymbolKind.Function &&
|
|
507
|
+
candidate.localName === def.localName &&
|
|
508
|
+
candidate.range.start.index !== def.range.start.index)) {
|
|
509
|
+
continue;
|
|
510
|
+
}
|
|
511
|
+
const parsed = await loadParsedFile(def.file);
|
|
512
|
+
typeScriptReceiverTargets.set(node.id, { def, module, parsed });
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
const memberIdentities = new Map();
|
|
516
|
+
const hasHierarchyReceiver = callableReceiverCalls.some((candidate) => inheritsMemberOverloads(supportForFileWithoutHeaderSample(candidate.site.file, index.languageExtensions)?.id ?? ""));
|
|
517
|
+
const receiverMemberDefinitions = hasHierarchyReceiver ? new Map() : undefined;
|
|
518
|
+
if (callableReceiverCalls.length) {
|
|
519
|
+
const names = new Set(callableReceiverCalls.map((candidate) => candidate.memberName));
|
|
520
|
+
for (const mod of index.byFile.values()) {
|
|
521
|
+
for (const def of mod.locals) {
|
|
522
|
+
if (!def.callable || !names.has(def.localName))
|
|
523
|
+
continue;
|
|
524
|
+
const id = defNodeId(def);
|
|
525
|
+
memberIdentities.set(id, def.callable);
|
|
526
|
+
receiverMemberDefinitions?.set(id, def);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
const overridingSignatures = receiverMemberDefinitions
|
|
531
|
+
? await inheritedReceiverMemberSignatures({ nodes, edges }, callableReceiverCalls, receiverMemberDefinitions, sharedOwnerAnchors, sharedOwnerAccessibleMembers, index.languageExtensions, (derived, inherited) => sameParameterTypes(index, derived, inherited))
|
|
532
|
+
: undefined;
|
|
533
|
+
const removedReceiverEdges = emitReceiverCallEdges({ nodes, edges }, callableReceiverCalls, recordEdge, receiverMemberScopes, nodeAliases, receiverMemberArities, sharedOwnerAnchors, sharedOwnerAccessibleMembers, fileHiddenMemberIds, (targetId, candidate) => {
|
|
534
|
+
if (candidate.argumentCount === null || !typeScriptReceiverFiles?.has(fileIdentityKey(candidate.site.file))) {
|
|
535
|
+
return true;
|
|
536
|
+
}
|
|
537
|
+
const target = typeScriptReceiverTargets?.get(targetId);
|
|
538
|
+
if (!target)
|
|
539
|
+
return true;
|
|
540
|
+
if (!target.parsed)
|
|
541
|
+
return false;
|
|
542
|
+
return typescriptOverloadImplementationAcceptsCount({
|
|
543
|
+
implementation: target.def,
|
|
544
|
+
locals: target.module.locals,
|
|
545
|
+
argumentCount: candidate.argumentCount,
|
|
546
|
+
});
|
|
547
|
+
}, memberIdentities, index.languageExtensions, overridingSignatures, (memberId, useFile) => {
|
|
548
|
+
const member = receiverMemberDefinitions?.get(memberId);
|
|
549
|
+
if (!member?.javaPackagePrivate || member.javaProtectedMember)
|
|
550
|
+
return true;
|
|
551
|
+
const useLanguage = supportForFileWithoutHeaderSample(useFile, index.languageExtensions)?.id;
|
|
552
|
+
const memberPackage = getPackageDeclarationName(index, member.file, "java");
|
|
553
|
+
const usePackage = getPackageDeclarationName(index, useFile, useLanguage === "kotlin" ? "kotlin" : "java");
|
|
554
|
+
return memberPackage === usePackage;
|
|
555
|
+
});
|
|
556
|
+
edgeCount -= removedReceiverEdges.length;
|
|
557
|
+
for (const edge of removedReceiverEdges)
|
|
558
|
+
added.delete(edgeKey(edge.from, edge.to, edge.label, edge.site));
|
|
559
|
+
const canonicalNodeId = (id) => {
|
|
560
|
+
let current = id;
|
|
561
|
+
const seen = new Set();
|
|
562
|
+
while (nodeAliases.has(current) && !seen.has(current)) {
|
|
563
|
+
seen.add(current);
|
|
564
|
+
current = nodeAliases.get(current);
|
|
565
|
+
}
|
|
566
|
+
return current;
|
|
567
|
+
};
|
|
568
|
+
for (const [aliasId] of nodeAliases) {
|
|
569
|
+
const canonicalId = canonicalNodeId(aliasId);
|
|
570
|
+
nodeAliases.set(aliasId, canonicalId);
|
|
571
|
+
if (canonicalId === aliasId)
|
|
572
|
+
continue;
|
|
573
|
+
const aliasNode = nodes.get(aliasId);
|
|
574
|
+
const canonicalNode = nodes.get(canonicalId);
|
|
575
|
+
if (aliasNode && canonicalNode) {
|
|
576
|
+
if (!canonicalNode.docstring && aliasNode.docstring)
|
|
577
|
+
canonicalNode.docstring = aliasNode.docstring;
|
|
578
|
+
canonicalNode.lineSpan = Math.max(canonicalNode.lineSpan ?? 0, aliasNode.lineSpan ?? 0);
|
|
579
|
+
canonicalNode.complexity = Math.max(canonicalNode.complexity ?? 0, aliasNode.complexity ?? 0);
|
|
580
|
+
if (aliasNode.callable)
|
|
581
|
+
canonicalNode.callable = true;
|
|
582
|
+
if (aliasNode.implementationTarget)
|
|
583
|
+
canonicalNode.implementationTarget = true;
|
|
584
|
+
if (canonicalNode.memberArity === undefined && aliasNode.memberArity !== undefined) {
|
|
585
|
+
canonicalNode.memberArity = aliasNode.memberArity;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
nodes.delete(aliasId);
|
|
589
|
+
}
|
|
590
|
+
if (nodeAliases.size) {
|
|
591
|
+
const reconciledEdges = [];
|
|
592
|
+
const reconciledEdgeKeys = new Set();
|
|
593
|
+
for (const edge of edges) {
|
|
594
|
+
const reconciled = {
|
|
595
|
+
...edge,
|
|
596
|
+
from: canonicalNodeId(edge.from),
|
|
597
|
+
to: canonicalNodeId(edge.to),
|
|
598
|
+
};
|
|
599
|
+
const key = edgeKey(reconciled.from, reconciled.to, reconciled.label, reconciled.site);
|
|
600
|
+
if (reconciledEdgeKeys.has(key))
|
|
601
|
+
continue;
|
|
602
|
+
reconciledEdgeKeys.add(key);
|
|
603
|
+
reconciledEdges.push(reconciled);
|
|
604
|
+
}
|
|
605
|
+
edges.splice(0, edges.length, ...reconciledEdges);
|
|
606
|
+
added.clear();
|
|
607
|
+
for (const edge of edges)
|
|
608
|
+
added.add(edgeKey(edge.from, edge.to, edge.label, edge.site));
|
|
609
|
+
edgeCount = edges.length;
|
|
610
|
+
}
|
|
211
611
|
emitMemberImplementationEdges({ nodes, edges }, recordEdge);
|
|
212
612
|
if (skippedSyntaxTreeFiles > 0) {
|
|
213
613
|
logWithLevel(opts?.logLevel, "warn", `Warning: Skipped detailed symbol edges for ${skippedSyntaxTreeFiles} file(s) because no syntax-tree backend was available.`);
|
|
214
614
|
}
|
|
215
|
-
|
|
615
|
+
const graph = {
|
|
216
616
|
nodes,
|
|
217
617
|
edges,
|
|
218
618
|
...(configuredMaxEdges !== undefined
|
|
@@ -223,5 +623,8 @@ export async function buildSymbolGraphDetailed(index, opts) {
|
|
|
223
623
|
}
|
|
224
624
|
: {}),
|
|
225
625
|
};
|
|
626
|
+
if (nodeAliases.size)
|
|
627
|
+
Object.defineProperty(graph, "nodeAliases", { value: nodeAliases });
|
|
628
|
+
return graph;
|
|
226
629
|
}
|
|
227
630
|
//# sourceMappingURL=symbol-graph-detailed.js.map
|