@lzehrung/codegraph 2.3.30 → 2.4.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 +30 -137
- package/codegraph-skill/codegraph/SKILL.md +5 -3
- 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/search.d.ts.map +1 -1
- package/dist/agent/search.js +3 -0
- package/dist/agent/search.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/bin/cli.js +42229 -28876
- package/dist/bin/query-index-worker.js +73 -11
- 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/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/help.d.ts +2 -2
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +4 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/options.js +2 -2
- package/dist/cli/options.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/snapshot.d.ts.map +1 -1
- package/dist/drift/snapshot.js +5 -6
- package/dist/drift/snapshot.js.map +1 -1
- package/dist/drift/types.d.ts +2 -0
- package/dist/drift/types.d.ts.map +1 -1
- package/dist/drift/types.js.map +1 -1
- package/dist/graph-builder.d.ts.map +1 -1
- package/dist/graph-builder.js +4 -6
- package/dist/graph-builder.js.map +1 -1
- package/dist/graph-edge-collector.d.ts +3 -0
- package/dist/graph-edge-collector.d.ts.map +1 -1
- package/dist/graph-edge-collector.js +8 -5
- 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 +26 -2
- package/dist/graphs/edge-resolution.js.map +1 -1
- package/dist/graphs/specifiers.d.ts.map +1 -1
- package/dist/graphs/specifiers.js +6 -2
- 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 +51 -8
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.js +823 -132
- 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 +139 -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 +128 -22
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js +872 -125
- 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 +434 -40
- 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/impact/call-compatibility/providers/index.d.ts +12 -0
- package/dist/impact/call-compatibility/providers/index.d.ts.map +1 -1
- package/dist/impact/call-compatibility/providers/index.js +16 -22
- 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 -552
- 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/member-resolution-coverage.d.ts.map +1 -1
- package/dist/impact/member-resolution-coverage.js +1 -1
- package/dist/impact/member-resolution-coverage.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 +1 -1
- 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 +38 -0
- package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache/module-cache.js +151 -9
- package/dist/indexer/build-cache/module-cache.js.map +1 -1
- package/dist/indexer/build-cache/options.d.ts +16 -43
- package/dist/indexer/build-cache/options.d.ts.map +1 -1
- package/dist/indexer/build-cache/options.js +16 -43
- package/dist/indexer/build-cache/options.js.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.d.ts +1 -0
- package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.js +117 -24
- package/dist/indexer/build-cache/project-snapshot.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 +1 -1
- package/dist/indexer/build-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache.js +1 -1
- 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 +593 -22
- package/dist/indexer/build-index.js.map +1 -1
- package/dist/indexer/call-hierarchy.js +1 -1
- package/dist/indexer/call-hierarchy.js.map +1 -1
- package/dist/indexer/compilation-units.d.ts +101 -0
- package/dist/indexer/compilation-units.d.ts.map +1 -0
- package/dist/indexer/compilation-units.js +605 -0
- package/dist/indexer/compilation-units.js.map +1 -0
- package/dist/indexer/cpp-callables.d.ts +20 -0
- package/dist/indexer/cpp-callables.d.ts.map +1 -0
- package/dist/indexer/cpp-callables.js +554 -0
- package/dist/indexer/cpp-callables.js.map +1 -0
- package/dist/indexer/declaration-visibility.d.ts +36 -2
- package/dist/indexer/declaration-visibility.d.ts.map +1 -1
- package/dist/indexer/declaration-visibility.js +136 -2
- package/dist/indexer/declaration-visibility.js.map +1 -1
- package/dist/indexer/expand-star-imports.d.ts.map +1 -1
- package/dist/indexer/expand-star-imports.js +28 -6
- package/dist/indexer/expand-star-imports.js.map +1 -1
- package/dist/indexer/import-types.d.ts +37 -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/binding-ranges.d.ts +1 -1
- package/dist/indexer/imports/binding-ranges.d.ts.map +1 -1
- package/dist/indexer/imports/context.d.ts +11 -1
- package/dist/indexer/imports/context.d.ts.map +1 -1
- package/dist/indexer/imports/import-binding-tables.d.ts +75 -0
- package/dist/indexer/imports/import-binding-tables.d.ts.map +1 -0
- package/dist/indexer/imports/import-binding-tables.js +544 -0
- package/dist/indexer/imports/import-binding-tables.js.map +1 -0
- 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/language-specific.d.ts +3 -22
- package/dist/indexer/imports/language-specific.d.ts.map +1 -1
- package/dist/indexer/imports/language-specific.js +29 -362
- package/dist/indexer/imports/language-specific.js.map +1 -1
- package/dist/indexer/imports/native-captures.d.ts.map +1 -1
- package/dist/indexer/imports/native-captures.js +18 -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 +91 -40
- 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 +51 -12
- package/dist/indexer/imports/text-import-extractors.js.map +1 -1
- package/dist/indexer/imports.d.ts.map +1 -1
- package/dist/indexer/imports.js +25 -5
- 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 +187 -1
- package/dist/indexer/incremental-plan.js.map +1 -1
- package/dist/indexer/locals-and-exports.d.ts +2 -0
- package/dist/indexer/locals-and-exports.d.ts.map +1 -1
- package/dist/indexer/locals-and-exports.js +565 -54
- package/dist/indexer/locals-and-exports.js.map +1 -1
- 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 +117 -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 +113 -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 +106 -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 +75 -0
- package/dist/indexer/name-lookup-policies/php.js.map +1 -0
- package/dist/indexer/name-resolution-types.d.ts +99 -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 +52 -0
- package/dist/indexer/name-resolution.d.ts.map +1 -0
- package/dist/indexer/name-resolution.js +189 -0
- package/dist/indexer/name-resolution.js.map +1 -0
- package/dist/indexer/navigation-cpp.d.ts +50 -0
- package/dist/indexer/navigation-cpp.d.ts.map +1 -0
- package/dist/indexer/navigation-cpp.js +654 -0
- package/dist/indexer/navigation-cpp.js.map +1 -0
- package/dist/indexer/navigation-goto.d.ts +107 -4
- package/dist/indexer/navigation-goto.d.ts.map +1 -1
- package/dist/indexer/navigation-goto.js +2075 -137
- package/dist/indexer/navigation-goto.js.map +1 -1
- package/dist/indexer/navigation-local.d.ts +18 -2
- package/dist/indexer/navigation-local.d.ts.map +1 -1
- package/dist/indexer/navigation-local.js +498 -61
- 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-references.d.ts +72 -5
- package/dist/indexer/navigation-references.d.ts.map +1 -1
- package/dist/indexer/navigation-references.js +620 -54
- package/dist/indexer/navigation-references.js.map +1 -1
- package/dist/indexer/navigation-resolve.d.ts +33 -2
- package/dist/indexer/navigation-resolve.d.ts.map +1 -1
- package/dist/indexer/navigation-resolve.js +446 -193
- package/dist/indexer/navigation-resolve.js.map +1 -1
- package/dist/indexer/navigation.d.ts +28 -2
- package/dist/indexer/navigation.d.ts.map +1 -1
- package/dist/indexer/navigation.js +1082 -151
- package/dist/indexer/navigation.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-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 +25 -1
- package/dist/indexer/scope-types.d.ts.map +1 -1
- package/dist/indexer/scope.d.ts.map +1 -1
- package/dist/indexer/scope.js +894 -45
- 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 +114 -0
- package/dist/indexer/star-import-precedence.d.ts.map +1 -0
- package/dist/indexer/star-import-precedence.js +396 -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 +51 -0
- package/dist/indexer/ts-callables.d.ts.map +1 -0
- package/dist/indexer/ts-callables.js +264 -0
- package/dist/indexer/ts-callables.js.map +1 -0
- package/dist/indexer/types.d.ts +23 -1
- 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 +2 -2
- 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 +202 -0
- package/dist/languages/callable-arity.d.ts.map +1 -0
- package/dist/languages/callable-arity.js +1182 -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 +2 -0
- package/dist/languages/definitions/zig.js.map +1 -1
- package/dist/mcp/handlers.js +14 -7
- package/dist/mcp/handlers.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 +1 -0
- package/dist/review.js.map +1 -1
- package/dist/sql/navigation.d.ts.map +1 -1
- package/dist/sql/navigation.js +1 -0
- 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 +7 -1
- package/dist/util/bloom-filter.d.ts.map +1 -1
- package/dist/util/bloom-filter.js +12 -2
- package/dist/util/bloom-filter.js.map +1 -1
- package/dist/util/dynamic-import-tables.d.ts +88 -0
- package/dist/util/dynamic-import-tables.d.ts.map +1 -0
- package/dist/util/dynamic-import-tables.js +100 -0
- package/dist/util/dynamic-import-tables.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 +129 -0
- package/dist/util/member-access-tables.d.ts.map +1 -0
- package/dist/util/member-access-tables.js +285 -0
- package/dist/util/member-access-tables.js.map +1 -0
- 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 +138 -93
- package/dist/util/member-access.js.map +1 -1
- 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/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.map +1 -1
- package/dist/util/resolution/rust.js +95 -26
- package/dist/util/resolution/rust.js.map +1 -1
- 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 +96 -5
- package/dist/util/resolution.js.map +1 -1
- package/dist/util/specifiers.d.ts +20 -0
- package/dist/util/specifiers.d.ts.map +1 -1
- package/dist/util/specifiers.js +39 -93
- package/dist/util/specifiers.js.map +1 -1
- package/docs/mcp.md +3 -2
- package/package.json +3 -3
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-language member-access, receiver, and ancestry tables for `./member-access.ts`, keyword
|
|
3
|
+
* navigation, and the detailed graph passes. Rows are keyed by language id, following the
|
|
4
|
+
* trivia-table precedent in `./trivia-tables.ts`: walkers keep the algorithms; this table keeps
|
|
5
|
+
* the per-language node types, extraction shapes, receiver keywords, and ancestry forms.
|
|
6
|
+
*
|
|
7
|
+
* Every registered language has a row. A document, style, or data format row carries only
|
|
8
|
+
* `omittedReason`; a source-language row declares each capability it has and names a one-line
|
|
9
|
+
* reason for each capability it omits, so an omission cannot flip silently.
|
|
10
|
+
* `tests/member-access-tables.test.ts` asserts both halves and re-derives every declared node
|
|
11
|
+
* type from that language's pinned grammar.
|
|
12
|
+
*/
|
|
13
|
+
/** C models dotted access as `field_expression`; C++ also exposes scoped `qualified_identifier`. */
|
|
14
|
+
const C_FIELD_ACCESS_SHAPE = {
|
|
15
|
+
nodeTypes: ["field_expression"],
|
|
16
|
+
object: { field: "argument", fallbackIndex: 0 },
|
|
17
|
+
property: { field: "field", fallbackIndex: 2 },
|
|
18
|
+
};
|
|
19
|
+
const CPP_QUALIFIED_ACCESS_SHAPE = {
|
|
20
|
+
nodeTypes: ["qualified_identifier"],
|
|
21
|
+
object: { field: "scope", fallbackIndex: 0 },
|
|
22
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
23
|
+
};
|
|
24
|
+
const THIS_SUPER_RECEIVERS = { own: ["this"], instanceOwn: ["this"], supertype: ["super"] };
|
|
25
|
+
const SELF_RECEIVERS = { own: ["self"], instanceOwn: ["self"], supertype: ["super"] };
|
|
26
|
+
export const MEMBER_ACCESS_ROWS = {
|
|
27
|
+
adoc: { omittedReason: "AsciiDoc document format; embedded code blocks parse as their own language." },
|
|
28
|
+
astro: { omittedReason: "Astro document format; scripts parse as js/ts and templates as html." },
|
|
29
|
+
c: {
|
|
30
|
+
memberAccessShapes: [C_FIELD_ACCESS_SHAPE],
|
|
31
|
+
receiverKeywordsOmittedReason: "C has no receiver keyword; member access always names an explicit object or pointer.",
|
|
32
|
+
memberCallNamesFreeFunctionOmittedReason: "A member expression names a field of an object, not a free function.",
|
|
33
|
+
},
|
|
34
|
+
cpp: {
|
|
35
|
+
memberAccessShapes: [C_FIELD_ACCESS_SHAPE, CPP_QUALIFIED_ACCESS_SHAPE],
|
|
36
|
+
receiverKeywords: { own: ["this"], instanceOwn: ["this"], supertype: [] },
|
|
37
|
+
receiverAncestry: { clauses: [{ nodeType: "base_class_clause", relation: "extends" }] },
|
|
38
|
+
memberCallNamesFreeFunctionOmittedReason: "A member call on an object or parameter cannot name a namespace free function.",
|
|
39
|
+
},
|
|
40
|
+
css: { omittedReason: "Style language; no member-access concept." },
|
|
41
|
+
csharp: {
|
|
42
|
+
extraTraversalTypes: ["qualified_name", "alias_qualified_name"],
|
|
43
|
+
extraMemberAccessTypes: ["alias_qualified_name"],
|
|
44
|
+
memberAccessShapes: [
|
|
45
|
+
{
|
|
46
|
+
nodeTypes: ["alias_qualified_name"],
|
|
47
|
+
object: { field: "alias", fallbackIndex: 0 },
|
|
48
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
49
|
+
},
|
|
50
|
+
{ object: { index: 0 }, property: { index: 2 } },
|
|
51
|
+
],
|
|
52
|
+
receiverKeywords: { own: ["this"], instanceOwn: ["this"], supertype: ["base"] },
|
|
53
|
+
receiverAncestry: {
|
|
54
|
+
clauses: [{ nodeType: "base_list", relation: "superclass-first", supertype: "first-child" }],
|
|
55
|
+
},
|
|
56
|
+
memberCallNamesFreeFunctionOmittedReason: "Extension methods are members; a free function is not called with member syntax.",
|
|
57
|
+
},
|
|
58
|
+
go: {
|
|
59
|
+
extraTraversalTypes: ["qualified_type"],
|
|
60
|
+
extraMemberAccessTypes: ["qualified_type"],
|
|
61
|
+
memberAccessShapes: [{ nodeTypes: ["qualified_type"], object: { namedIndex: 0 }, property: { namedIndex: 1 } }],
|
|
62
|
+
// Go has no receiver keyword: a method call's receiver is an ordinary value. The row still
|
|
63
|
+
// exists so go receivers must be proven rather than falling back to a bare name.
|
|
64
|
+
receiverKeywords: { own: [], instanceOwn: [], supertype: [] },
|
|
65
|
+
receiverAncestry: {
|
|
66
|
+
clauses: [],
|
|
67
|
+
embeds: [
|
|
68
|
+
{ body: "interface_type", member: "type_elem" },
|
|
69
|
+
{
|
|
70
|
+
body: "struct_type",
|
|
71
|
+
memberList: "field_declaration_list",
|
|
72
|
+
member: "field_declaration",
|
|
73
|
+
typeField: "type",
|
|
74
|
+
nameless: true,
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
memberCallNamesFreeFunction: true,
|
|
79
|
+
},
|
|
80
|
+
hbs: { omittedReason: "Handlebars document format; embedded scripts parse as their own language." },
|
|
81
|
+
html: { omittedReason: "Document format; embedded scripts parse as their own language." },
|
|
82
|
+
java: {
|
|
83
|
+
memberAccessShapes: [
|
|
84
|
+
{
|
|
85
|
+
nodeTypes: ["method_invocation"],
|
|
86
|
+
object: { field: "object", fallbackIndex: 0 },
|
|
87
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
nodeTypes: ["scoped_identifier", "scoped_type_identifier"],
|
|
91
|
+
object: { field: "scope", fallbackIndex: 0 },
|
|
92
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
receiverKeywords: THIS_SUPER_RECEIVERS,
|
|
96
|
+
receiverAncestry: {
|
|
97
|
+
clauses: [
|
|
98
|
+
{ nodeType: "superclass", relation: "extends", supertype: "all" },
|
|
99
|
+
{ nodeType: "super_interfaces", relation: "implements" },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
memberCallNamesFreeFunctionOmittedReason: "A method call names a member of the receiver type, not a free function.",
|
|
103
|
+
},
|
|
104
|
+
js: {
|
|
105
|
+
memberAccessOmittedReason: "The shared generic default already reads member_expression's object and property fields.",
|
|
106
|
+
receiverKeywords: THIS_SUPER_RECEIVERS,
|
|
107
|
+
receiverAncestry: { clauses: [{ nodeType: "class_heritage", relation: "extends", supertype: "all" }] },
|
|
108
|
+
memberCallNamesFreeFunctionOmittedReason: "Member syntax names an object property; a free function is not called that way.",
|
|
109
|
+
},
|
|
110
|
+
kotlin: {
|
|
111
|
+
memberAccessShapes: [
|
|
112
|
+
{ nodeTypes: ["navigation_expression"], object: { namedIndex: 0 }, property: { navigation: true } },
|
|
113
|
+
],
|
|
114
|
+
navigationFallbackLastChild: true,
|
|
115
|
+
receiverKeywords: THIS_SUPER_RECEIVERS,
|
|
116
|
+
receiverAncestry: {
|
|
117
|
+
clauses: [{ nodeType: "delegation_specifiers", relation: "superclass-first", supertype: "first-child" }],
|
|
118
|
+
},
|
|
119
|
+
memberCallNamesFreeFunction: true,
|
|
120
|
+
},
|
|
121
|
+
less: { omittedReason: "Style language; no member-access concept." },
|
|
122
|
+
markdown: { omittedReason: "Document format; fenced code blocks parse as their own language." },
|
|
123
|
+
mdx: { omittedReason: "MDX document format; scripts parse as js/ts and templates as html." },
|
|
124
|
+
php: {
|
|
125
|
+
extraMemberAccessTypes: [
|
|
126
|
+
"member_call_expression",
|
|
127
|
+
"nullsafe_member_call_expression",
|
|
128
|
+
"scoped_call_expression",
|
|
129
|
+
"class_constant_access_expression",
|
|
130
|
+
],
|
|
131
|
+
memberAccessShapes: [
|
|
132
|
+
{
|
|
133
|
+
nodeTypes: ["member_call_expression", "nullsafe_member_call_expression"],
|
|
134
|
+
object: { field: "object", fallbackIndex: 0 },
|
|
135
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
nodeTypes: ["scoped_call_expression"],
|
|
139
|
+
object: { field: "scope", fallbackIndex: 0 },
|
|
140
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
nodeTypes: ["class_constant_access_expression"],
|
|
144
|
+
object: { namedIndex: 0 },
|
|
145
|
+
property: { namedIndex: 1 },
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
receiverKeywords: { own: ["$this", "self", "static"], instanceOwn: ["$this"], supertype: ["parent"] },
|
|
149
|
+
receiverAncestry: {
|
|
150
|
+
clauses: [
|
|
151
|
+
{ nodeType: "base_clause", relation: "extends", supertype: "all" },
|
|
152
|
+
{ nodeType: "class_interface_clause", relation: "implements" },
|
|
153
|
+
{ nodeType: "use_declaration", relation: "trait", each: true },
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
memberCallNamesFreeFunctionOmittedReason: "A member or scoped call names a class member, not a free function.",
|
|
157
|
+
},
|
|
158
|
+
python: {
|
|
159
|
+
memberExpressionType: "attribute",
|
|
160
|
+
memberAccessShapes: [
|
|
161
|
+
{ object: { field: "object", fallbackIndex: 0 }, property: { field: "attribute", fallbackIndex: 2 } },
|
|
162
|
+
],
|
|
163
|
+
receiverKeywords: { own: ["self", "cls"], instanceOwn: ["self"], supertype: ["super"] },
|
|
164
|
+
receiverKeywordCallShape: true,
|
|
165
|
+
receiverAncestry: { clauses: [{ nodeType: "argument_list", relation: "extends" }] },
|
|
166
|
+
memberCallNamesFreeFunctionOmittedReason: "Attribute access names a member; a free function is not called that way.",
|
|
167
|
+
},
|
|
168
|
+
rst: { omittedReason: "reStructuredText document format; embedded code blocks parse as their own language." },
|
|
169
|
+
ruby: {
|
|
170
|
+
memberExpressionType: "call",
|
|
171
|
+
memberAccessShapes: [
|
|
172
|
+
{
|
|
173
|
+
nodeTypes: ["scope_resolution"],
|
|
174
|
+
object: { field: "scope", fallbackIndex: 0 },
|
|
175
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
176
|
+
},
|
|
177
|
+
// Ruby models every other member access as a `call` node with receiver and method fields.
|
|
178
|
+
{ object: { field: "receiver", fallbackIndex: 0 }, property: { field: "method", fallbackIndex: 2 } },
|
|
179
|
+
],
|
|
180
|
+
receiverKeywords: { own: ["self"], instanceOwn: ["self"], supertype: [] },
|
|
181
|
+
receiverAncestry: {
|
|
182
|
+
clauses: [{ nodeType: "superclass", relation: "extends", supertype: "all" }],
|
|
183
|
+
mixinCalls: ["include", "extend", "prepend"],
|
|
184
|
+
},
|
|
185
|
+
memberCallNamesFreeFunctionOmittedReason: "A call with a receiver names a method, not a free function.",
|
|
186
|
+
},
|
|
187
|
+
rust: {
|
|
188
|
+
memberAccessShapes: [
|
|
189
|
+
{
|
|
190
|
+
nodeTypes: ["scoped_identifier"],
|
|
191
|
+
object: { field: "path", fallbackIndex: 0 },
|
|
192
|
+
property: { field: "name", fallbackIndex: 2 },
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
receiverKeywords: { own: ["self", "Self"], instanceOwn: ["self"], supertype: [] },
|
|
196
|
+
memberCallNamesFreeFunctionOmittedReason: "Methods are members; a free function is not invoked with member syntax.",
|
|
197
|
+
},
|
|
198
|
+
scss: { omittedReason: "Style language; no member-access concept." },
|
|
199
|
+
svelte: { omittedReason: "Svelte component format; script blocks parse as js/ts and templates as html." },
|
|
200
|
+
sql: { omittedReason: "Data language; no member-access concept." },
|
|
201
|
+
swift: {
|
|
202
|
+
memberAccessShapes: [
|
|
203
|
+
{ nodeTypes: ["navigation_expression"], object: { namedIndex: 0 }, property: { navigation: true } },
|
|
204
|
+
],
|
|
205
|
+
receiverKeywords: SELF_RECEIVERS,
|
|
206
|
+
receiverAncestry: {
|
|
207
|
+
clauses: [
|
|
208
|
+
{
|
|
209
|
+
nodeType: "inheritance_specifier",
|
|
210
|
+
relation: "superclass-first",
|
|
211
|
+
each: true,
|
|
212
|
+
supertype: "first-match",
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
},
|
|
216
|
+
memberCallNamesFreeFunctionOmittedReason: "Extension methods are members; a free function is not called with member syntax.",
|
|
217
|
+
},
|
|
218
|
+
ts: {
|
|
219
|
+
memberAccessOmittedReason: "The shared generic default already reads member_expression's object and property fields.",
|
|
220
|
+
receiverKeywords: THIS_SUPER_RECEIVERS,
|
|
221
|
+
receiverAncestry: {
|
|
222
|
+
clauses: [
|
|
223
|
+
{ nodeType: "extends_clause", relation: "extends", field: "value", supertype: "all" },
|
|
224
|
+
{ nodeType: "implements_clause", relation: "implements" },
|
|
225
|
+
],
|
|
226
|
+
},
|
|
227
|
+
memberCallNamesFreeFunctionOmittedReason: "Member syntax names an object property; a free function is not called that way.",
|
|
228
|
+
},
|
|
229
|
+
tsx: {
|
|
230
|
+
memberAccessOmittedReason: "The shared generic default already reads member_expression's object and property fields.",
|
|
231
|
+
receiverKeywords: THIS_SUPER_RECEIVERS,
|
|
232
|
+
receiverAncestry: {
|
|
233
|
+
clauses: [
|
|
234
|
+
{ nodeType: "extends_clause", relation: "extends", field: "value", supertype: "all" },
|
|
235
|
+
{ nodeType: "implements_clause", relation: "implements" },
|
|
236
|
+
],
|
|
237
|
+
},
|
|
238
|
+
memberCallNamesFreeFunctionOmittedReason: "Member syntax names an object property; a free function is not called that way.",
|
|
239
|
+
},
|
|
240
|
+
vue: { omittedReason: "Vue component format; script blocks parse as js/ts and templates as html." },
|
|
241
|
+
zig: {
|
|
242
|
+
memberAccessOmittedReason: "No per-language extraction today; the shared generic default is zig's behavior.",
|
|
243
|
+
receiverKeywords: { own: ["self"], instanceOwn: ["self"], supertype: [] },
|
|
244
|
+
memberCallNamesFreeFunctionOmittedReason: "A member call names a container member, not a free function.",
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
/** Every language that declares receiver keywords, guarded by the registry-consistency test. */
|
|
248
|
+
export const receiverKeywordLanguageIds = Object.keys(MEMBER_ACCESS_ROWS).filter((languageId) => MEMBER_ACCESS_ROWS[languageId].receiverKeywords !== undefined);
|
|
249
|
+
/** Languages that emit proven receiver `calls` edges from the shared keyword table. */
|
|
250
|
+
export function supportsReceiverCallEdges(languageId) {
|
|
251
|
+
return MEMBER_ACCESS_ROWS[languageId]?.receiverKeywords !== undefined;
|
|
252
|
+
}
|
|
253
|
+
/** Languages where goto and references require proven receivers and do not fall back to a bare name. */
|
|
254
|
+
export function supportsReceiverMemberNavigation(languageId) {
|
|
255
|
+
return MEMBER_ACCESS_ROWS[languageId]?.receiverKeywords !== undefined;
|
|
256
|
+
}
|
|
257
|
+
export function keywordReceiverKind(languageId, receiverName) {
|
|
258
|
+
const keywords = MEMBER_ACCESS_ROWS[languageId]?.receiverKeywords;
|
|
259
|
+
if (!keywords)
|
|
260
|
+
return null;
|
|
261
|
+
if (keywords.own.includes(receiverName))
|
|
262
|
+
return "own";
|
|
263
|
+
if (keywords.supertype.includes(receiverName))
|
|
264
|
+
return "supertype";
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Instance-own keywords (`this`, `$this`) require instance members.
|
|
269
|
+
* Other own keywords name the declaring type and may still bind instance members
|
|
270
|
+
* (PHP `self::` / `static::` late static binding), so they do not force a static-only filter.
|
|
271
|
+
*/
|
|
272
|
+
export function ownReceiverMemberScope(languageId, receiverName) {
|
|
273
|
+
const keywords = MEMBER_ACCESS_ROWS[languageId]?.receiverKeywords;
|
|
274
|
+
if (!keywords?.own.includes(receiverName))
|
|
275
|
+
return null;
|
|
276
|
+
return keywords.instanceOwn.includes(receiverName) ? "instance" : "any";
|
|
277
|
+
}
|
|
278
|
+
export function isKeywordReceiver(languageId, receiverName) {
|
|
279
|
+
return keywordReceiverKind(languageId, receiverName) !== null;
|
|
280
|
+
}
|
|
281
|
+
/** Whether `receiver.name()` can refer to a free function rather than only a member. */
|
|
282
|
+
export function memberSyntaxNamesFreeFunction(languageId) {
|
|
283
|
+
return !!MEMBER_ACCESS_ROWS[languageId]?.memberCallNamesFreeFunction;
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=member-access-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-access-tables.js","sourceRoot":"","sources":["../../src/util/member-access-tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,14 @@ export declare function isMemberObjectIdentifier(nodeType: string): boolean;
|
|
|
17
17
|
/** Identifier-like nodes that can name a receiver, including Ruby `@ivar`/`@@cvar`. */
|
|
18
18
|
export declare function isReceiverNameNode(sup: LanguageSupport, nodeType: string): boolean;
|
|
19
19
|
export declare function isMemberReferencePropertyIdentifier(sup: LanguageSupport, nodeType: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* The text used to classify a receiver as an own-type or supertype keyword. Ordinarily this is
|
|
22
|
+
* the receiver node's own source spelling, but a language whose row sets `receiverKeywordCallShape`
|
|
23
|
+
* may also spell a keyword receiver as a zero-argument call to that keyword - Python's `super()`,
|
|
24
|
+
* which (unlike `self`/`cls`) has no bare-name form. Only unwrap that call when its callee is
|
|
25
|
+
* not shadowed by a visible lexical binding.
|
|
26
|
+
*/
|
|
27
|
+
export declare function receiverKeywordText(sup: LanguageSupport, node: SyntaxNodeLike, source: string, hasLexicalBinding: (callee: SyntaxNodeLike) => boolean): string;
|
|
20
28
|
export declare function getNavigationExpressionProperty(sup: LanguageSupport, expr: SyntaxNodeLike): SyntaxNodeLike | null;
|
|
21
29
|
export declare function getMemberAccessParts(sup: LanguageSupport, memberNode: SyntaxNodeLike): MemberAccessParts;
|
|
22
30
|
export declare function collectMemberAccessChain(args: {
|
|
@@ -25,4 +33,13 @@ export declare function collectMemberAccessChain(args: {
|
|
|
25
33
|
chainNode: SyntaxNodeLike;
|
|
26
34
|
constStringOf?: Map<string, string>;
|
|
27
35
|
}): MemberAccessChain | null;
|
|
36
|
+
/**
|
|
37
|
+
* Whether a name inside a Rust macro token tree follows a `.` or `::` separator, ignoring comments:
|
|
38
|
+
* `counter.bump()` with a block comment after the dot is still a member call, and `m::run()` with
|
|
39
|
+
* one after the `::` is still a path call. Raw
|
|
40
|
+
* tokens cannot prove such a receiver, so both consumers stay conservative there.
|
|
41
|
+
*/
|
|
42
|
+
export declare function rustTokenTreeNameFollowsSeparator(name: SyntaxNodeLike): boolean;
|
|
43
|
+
/** Whether a Rust token tree is (nested in) the arguments of a standard expression macro. */
|
|
44
|
+
export declare function rustTokenTreeHoldsExpressions(tokenTree: SyntaxNodeLike): boolean;
|
|
28
45
|
//# sourceMappingURL=member-access.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-access.d.ts","sourceRoot":"","sources":["../../src/util/member-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"member-access.d.ts","sourceRoot":"","sources":["../../src/util/member-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAsBF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAGpE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CAE5E;AAED,wBAAgB,sCAAsC,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CAErF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAS5E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAMtF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWlE;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElF;AAED,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnG;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,GACrD,MAAM,CAUR;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,IAAI,CAajH;AAgBD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,GAAG,iBAAiB,CAiBxG;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,GAAG,EAAE,eAAe,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,GAAG,iBAAiB,GAAG,IAAI,CA+C3B;AAID;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAU/E;AAgCD,6FAA6F;AAC7F,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAYhF"}
|
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
import { sliceText, unquote } from "./ast.js";
|
|
2
|
+
import { isKeywordReceiver, MEMBER_ACCESS_ROWS } from "./member-access-tables.js";
|
|
3
|
+
/**
|
|
4
|
+
* Member-access node types accepted for every language. The list is deliberately wider than any
|
|
5
|
+
* one grammar: node types are language-scoped in practice, so an over-broad shared list cannot
|
|
6
|
+
* cross-match between two parses.
|
|
7
|
+
*/
|
|
8
|
+
const GENERIC_MEMBER_ACCESS_TYPES = {
|
|
9
|
+
member_access_expression: true,
|
|
10
|
+
qualified_name: true,
|
|
11
|
+
field_access: true,
|
|
12
|
+
method_invocation: true,
|
|
13
|
+
scoped_identifier: true,
|
|
14
|
+
scoped_type_identifier: true,
|
|
15
|
+
qualified_identifier: true,
|
|
16
|
+
call: true,
|
|
17
|
+
scope_resolution: true,
|
|
18
|
+
field_expression: true,
|
|
19
|
+
attribute: true,
|
|
20
|
+
navigation_expression: true,
|
|
21
|
+
};
|
|
2
22
|
export function memberExpressionTypeFor(sup) {
|
|
3
23
|
if (sup.nodeTypes.memberExpression)
|
|
4
24
|
return sup.nodeTypes.memberExpression;
|
|
5
|
-
|
|
6
|
-
return "attribute";
|
|
7
|
-
if (sup.id === "ruby")
|
|
8
|
-
return "call";
|
|
9
|
-
return "member_expression";
|
|
25
|
+
return MEMBER_ACCESS_ROWS[sup.id]?.memberExpressionType ?? "member_expression";
|
|
10
26
|
}
|
|
11
27
|
export function memberPropertyIdentifierTypes(sup) {
|
|
12
28
|
return [...(sup.nodeTypes.propertyIdentifier ?? ["property_identifier"])];
|
|
@@ -21,34 +37,14 @@ export function memberAccessTraversalTypes(sup) {
|
|
|
21
37
|
"subscript_expression",
|
|
22
38
|
"optional_chain",
|
|
23
39
|
]);
|
|
24
|
-
|
|
25
|
-
types.add(
|
|
26
|
-
if (sup.id === "python")
|
|
27
|
-
types.add("attribute");
|
|
28
|
-
if (sup.id === "kotlin" || sup.id === "swift")
|
|
29
|
-
types.add("navigation_expression");
|
|
40
|
+
for (const nodeType of MEMBER_ACCESS_ROWS[sup.id]?.extraTraversalTypes ?? [])
|
|
41
|
+
types.add(nodeType);
|
|
30
42
|
return types;
|
|
31
43
|
}
|
|
32
44
|
export function isMemberAccessNode(sup, node) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
(sup.id
|
|
36
|
-
(sup.id === "php" &&
|
|
37
|
-
(node.type === "member_call_expression" ||
|
|
38
|
-
node.type === "nullsafe_member_call_expression" ||
|
|
39
|
-
node.type === "scoped_call_expression")) ||
|
|
40
|
-
node.type === "member_access_expression" ||
|
|
41
|
-
node.type === "qualified_name" ||
|
|
42
|
-
node.type === "field_access" ||
|
|
43
|
-
node.type === "method_invocation" ||
|
|
44
|
-
node.type === "scoped_identifier" ||
|
|
45
|
-
node.type === "scoped_type_identifier" ||
|
|
46
|
-
node.type === "qualified_identifier" ||
|
|
47
|
-
node.type === "call" ||
|
|
48
|
-
node.type === "scope_resolution" ||
|
|
49
|
-
node.type === "field_expression" ||
|
|
50
|
-
node.type === "attribute" ||
|
|
51
|
-
node.type === "navigation_expression");
|
|
45
|
+
return (node.type === memberExpressionTypeFor(sup) ||
|
|
46
|
+
GENERIC_MEMBER_ACCESS_TYPES[node.type] ||
|
|
47
|
+
(MEMBER_ACCESS_ROWS[sup.id]?.extraMemberAccessTypes?.includes(node.type) ?? false));
|
|
52
48
|
}
|
|
53
49
|
export function isMemberObjectIdentifier(nodeType) {
|
|
54
50
|
return (nodeType === "identifier" ||
|
|
@@ -67,6 +63,26 @@ export function isReceiverNameNode(sup, nodeType) {
|
|
|
67
63
|
export function isMemberReferencePropertyIdentifier(sup, nodeType) {
|
|
68
64
|
return memberReferencePropertyIdentifierTypes(sup).includes(nodeType);
|
|
69
65
|
}
|
|
66
|
+
const RECEIVER_KEYWORD_CALL_NODE_TYPES = { call: true, call_expression: true };
|
|
67
|
+
/**
|
|
68
|
+
* The text used to classify a receiver as an own-type or supertype keyword. Ordinarily this is
|
|
69
|
+
* the receiver node's own source spelling, but a language whose row sets `receiverKeywordCallShape`
|
|
70
|
+
* may also spell a keyword receiver as a zero-argument call to that keyword - Python's `super()`,
|
|
71
|
+
* which (unlike `self`/`cls`) has no bare-name form. Only unwrap that call when its callee is
|
|
72
|
+
* not shadowed by a visible lexical binding.
|
|
73
|
+
*/
|
|
74
|
+
export function receiverKeywordText(sup, node, source, hasLexicalBinding) {
|
|
75
|
+
const text = sliceText(node, source).trim();
|
|
76
|
+
if (!MEMBER_ACCESS_ROWS[sup.id]?.receiverKeywordCallShape || !RECEIVER_KEYWORD_CALL_NODE_TYPES[node.type]) {
|
|
77
|
+
return text;
|
|
78
|
+
}
|
|
79
|
+
const callee = node.childForFieldName("function") ?? node.namedChildren[0] ?? null;
|
|
80
|
+
const args = node.childForFieldName("arguments") ?? node.childForFieldName("argument_list");
|
|
81
|
+
if (!callee || (args && args.namedChildren.length))
|
|
82
|
+
return text;
|
|
83
|
+
const calleeText = sliceText(callee, source).trim();
|
|
84
|
+
return isKeywordReceiver(sup.id, calleeText) && !hasLexicalBinding(callee) ? calleeText : text;
|
|
85
|
+
}
|
|
70
86
|
export function getNavigationExpressionProperty(sup, expr) {
|
|
71
87
|
const suffix = expr.namedChildren.find((child) => child.type === "navigation_suffix") ?? expr.child(1);
|
|
72
88
|
if (!suffix)
|
|
@@ -77,77 +93,34 @@ export function getNavigationExpressionProperty(sup, expr) {
|
|
|
77
93
|
suffix.child(0);
|
|
78
94
|
if (fromSuffix)
|
|
79
95
|
return fromSuffix;
|
|
80
|
-
if (sup.id
|
|
96
|
+
if (MEMBER_ACCESS_ROWS[sup.id]?.navigationFallbackLastChild) {
|
|
81
97
|
return expr.namedChildren[expr.namedChildren.length - 1] ?? expr.child(2);
|
|
82
98
|
}
|
|
83
99
|
return null;
|
|
84
100
|
}
|
|
85
101
|
/**
|
|
86
|
-
*
|
|
87
|
-
* field
|
|
88
|
-
* property → child 2) when a field is absent.
|
|
102
|
+
* Extracts one member-access child by tree-sitter field name, falling back to a positional child
|
|
103
|
+
* when the field is absent, or reading it directly by (named) child index.
|
|
89
104
|
*
|
|
90
105
|
* Most languages model member access as `<object>.<property>`, so per-language
|
|
91
|
-
*
|
|
106
|
+
* rows in `./member-access-tables.ts` only supply their field names instead of
|
|
107
|
+
* repeating this shape.
|
|
92
108
|
*/
|
|
93
|
-
function
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
109
|
+
function shapeChild(memberNode, child) {
|
|
110
|
+
if ("field" in child)
|
|
111
|
+
return memberNode.childForFieldName(child.field) ?? memberNode.child(child.fallbackIndex);
|
|
112
|
+
if ("index" in child)
|
|
113
|
+
return memberNode.child(child.index);
|
|
114
|
+
return memberNode.namedChildren[child.namedIndex] ?? memberNode.child(child.namedIndex);
|
|
98
115
|
}
|
|
99
116
|
export function getMemberAccessParts(sup, memberNode) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return fieldParts(memberNode, "object", "attribute");
|
|
108
|
-
}
|
|
109
|
-
if (sup.id === "csharp") {
|
|
110
|
-
return {
|
|
111
|
-
object: memberNode.child(0),
|
|
112
|
-
property: memberNode.child(2),
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
if (sup.id === "java") {
|
|
116
|
-
if (memberNode.type === "method_invocation") {
|
|
117
|
-
return fieldParts(memberNode, "object", "name");
|
|
118
|
-
}
|
|
119
|
-
if (memberNode.type === "scoped_identifier" || memberNode.type === "scoped_type_identifier") {
|
|
120
|
-
return fieldParts(memberNode, "scope", "name");
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (sup.id === "ruby") {
|
|
124
|
-
if (memberNode.type === "scope_resolution") {
|
|
125
|
-
return fieldParts(memberNode, "scope", "name");
|
|
126
|
-
}
|
|
127
|
-
return fieldParts(memberNode, "receiver", "method");
|
|
128
|
-
}
|
|
129
|
-
if (sup.id === "php") {
|
|
130
|
-
if (memberNode.type === "member_call_expression" || memberNode.type === "nullsafe_member_call_expression") {
|
|
131
|
-
return fieldParts(memberNode, "object", "name");
|
|
132
|
-
}
|
|
133
|
-
if (memberNode.type === "scoped_call_expression") {
|
|
134
|
-
return fieldParts(memberNode, "scope", "name");
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (sup.id === "rust" && memberNode.type === "scoped_identifier") {
|
|
138
|
-
return fieldParts(memberNode, "path", "name");
|
|
139
|
-
}
|
|
140
|
-
if (sup.id === "go" && memberNode.type === "qualified_type") {
|
|
141
|
-
return {
|
|
142
|
-
object: memberNode.namedChildren[0] ?? memberNode.child(0),
|
|
143
|
-
property: memberNode.namedChildren[1] ?? memberNode.child(1),
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
if ((sup.id === "kotlin" || sup.id === "swift") && memberNode.type === "navigation_expression") {
|
|
147
|
-
return {
|
|
148
|
-
object: memberNode.namedChildren[0] ?? memberNode.child(0),
|
|
149
|
-
property: getNavigationExpressionProperty(sup, memberNode),
|
|
150
|
-
};
|
|
117
|
+
// A shape without `nodeTypes` is the language's catch-all and must be its row's last entry.
|
|
118
|
+
const shape = MEMBER_ACCESS_ROWS[sup.id]?.memberAccessShapes?.find((candidate) => candidate.nodeTypes === undefined || candidate.nodeTypes.includes(memberNode.type));
|
|
119
|
+
if (shape) {
|
|
120
|
+
const property = "navigation" in shape.property
|
|
121
|
+
? getNavigationExpressionProperty(sup, memberNode)
|
|
122
|
+
: shapeChild(memberNode, shape.property);
|
|
123
|
+
return { object: shapeChild(memberNode, shape.object), property };
|
|
151
124
|
}
|
|
152
125
|
return {
|
|
153
126
|
object: memberNode.childForFieldName("object") ?? memberNode.child(0),
|
|
@@ -171,12 +144,18 @@ export function collectMemberAccessChain(args) {
|
|
|
171
144
|
names.push(unquote(sliceText(propNode, args.source)));
|
|
172
145
|
return;
|
|
173
146
|
}
|
|
174
|
-
|
|
147
|
+
let nameNode = propNode;
|
|
148
|
+
if (args.sup.id === "csharp" && nameNode.type === "generic_name") {
|
|
149
|
+
nameNode = nameNode.childForFieldName("name") ?? nameNode.namedChildren[0] ?? nameNode;
|
|
150
|
+
}
|
|
151
|
+
if (nameNode.type !== "identifier")
|
|
175
152
|
return;
|
|
176
|
-
const keyName = sliceText(
|
|
153
|
+
const keyName = sliceText(nameNode, args.source);
|
|
177
154
|
const value = args.constStringOf?.get(keyName);
|
|
178
155
|
if (typeof value === "string")
|
|
179
156
|
names.push(value);
|
|
157
|
+
else if (args.sup.id === "csharp")
|
|
158
|
+
names.push(keyName);
|
|
180
159
|
};
|
|
181
160
|
while (current && traversalTypes.has(current.type)) {
|
|
182
161
|
if (current.type === "subscript_expression") {
|
|
@@ -198,4 +177,70 @@ export function collectMemberAccessChain(args) {
|
|
|
198
177
|
return null;
|
|
199
178
|
return { base: current, names };
|
|
200
179
|
}
|
|
180
|
+
const RUST_COMMENT_NODE_TYPES = new Set(["line_comment", "block_comment"]);
|
|
181
|
+
/**
|
|
182
|
+
* Whether a name inside a Rust macro token tree follows a `.` or `::` separator, ignoring comments:
|
|
183
|
+
* `counter.bump()` with a block comment after the dot is still a member call, and `m::run()` with
|
|
184
|
+
* one after the `::` is still a path call. Raw
|
|
185
|
+
* tokens cannot prove such a receiver, so both consumers stay conservative there.
|
|
186
|
+
*/
|
|
187
|
+
export function rustTokenTreeNameFollowsSeparator(name) {
|
|
188
|
+
const tree = name.parent;
|
|
189
|
+
if (tree?.type !== "token_tree")
|
|
190
|
+
return false;
|
|
191
|
+
let previous = null;
|
|
192
|
+
for (let index = 0;; index += 1) {
|
|
193
|
+
const child = tree.child(index);
|
|
194
|
+
if (!child || child.startIndex >= name.startIndex)
|
|
195
|
+
break;
|
|
196
|
+
if (!RUST_COMMENT_NODE_TYPES.has(child.type))
|
|
197
|
+
previous = child;
|
|
198
|
+
}
|
|
199
|
+
return previous?.type === "." || previous?.type === "::";
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Standard Rust macros whose arguments are ordinary expressions (after an optional format string
|
|
203
|
+
* or target). Any other macro, and every `macro_rules!` definition, takes raw tokens whose meaning
|
|
204
|
+
* depends on its expansion, so `name(...)` inside them is not a proven call.
|
|
205
|
+
*/
|
|
206
|
+
const RUST_EXPRESSION_ARGUMENT_MACROS = new Set([
|
|
207
|
+
"assert",
|
|
208
|
+
"assert_eq",
|
|
209
|
+
"assert_ne",
|
|
210
|
+
"debug_assert",
|
|
211
|
+
"debug_assert_eq",
|
|
212
|
+
"debug_assert_ne",
|
|
213
|
+
"dbg",
|
|
214
|
+
"eprint",
|
|
215
|
+
"eprintln",
|
|
216
|
+
"format",
|
|
217
|
+
"format_args",
|
|
218
|
+
"panic",
|
|
219
|
+
"print",
|
|
220
|
+
"println",
|
|
221
|
+
"todo",
|
|
222
|
+
"unimplemented",
|
|
223
|
+
"unreachable",
|
|
224
|
+
"vec",
|
|
225
|
+
"write",
|
|
226
|
+
"writeln",
|
|
227
|
+
]);
|
|
228
|
+
const RUST_STANDARD_CRATES = new Set(["std", "core", "alloc"]);
|
|
229
|
+
/** Whether a Rust token tree is (nested in) the arguments of a standard expression macro. */
|
|
230
|
+
export function rustTokenTreeHoldsExpressions(tokenTree) {
|
|
231
|
+
let current = tokenTree;
|
|
232
|
+
while (current?.type === "token_tree")
|
|
233
|
+
current = current.parent;
|
|
234
|
+
if (current?.type !== "macro_invocation")
|
|
235
|
+
return false;
|
|
236
|
+
const macro = current.childForFieldName("macro");
|
|
237
|
+
if (!macro)
|
|
238
|
+
return false;
|
|
239
|
+
// `my_dsl::println!` is a custom macro that only shares a name; a path proves a standard macro
|
|
240
|
+
// only when it is rooted at a standard crate (`std::println!`, `::core::assert!`).
|
|
241
|
+
const segments = macro.text.replace(/\s+/g, "").replace(/^::/, "").split("::");
|
|
242
|
+
const name = segments.pop();
|
|
243
|
+
const standardPath = !segments.length || (segments.length === 1 && RUST_STANDARD_CRATES.has(segments[0]));
|
|
244
|
+
return standardPath && RUST_EXPRESSION_ARGUMENT_MACROS.has(name);
|
|
245
|
+
}
|
|
201
246
|
//# sourceMappingURL=member-access.js.map
|