cgraphx 2.0.2 → 2.0.6
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/dist/.claude-template/FLOW-MAP.md +13 -3
- package/dist/.claude-template/agents/task-history.md +186 -0
- package/dist/.claude-template/commands/end.md +1 -0
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +5 -3
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +8 -8
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +8 -8
- package/dist/.claude-template/skills/clarify-requirements/SKILL.md +13 -9
- package/dist/.claude-template/skills/db-query/SKILL.md +19 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +51 -23
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +3 -4
- package/dist/.claude-template/skills/run-api-test/SKILL.md +15 -15
- package/dist/.claude-template/skills/run-api-test/assets/{template-test-report.md → template-/346/216/245/345/217/243/346/265/213/350/257/225/346/212/245/345/221/212.md} +4 -4
- package/dist/.claude-template/skills/run-api-test/references/bru-run.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/run-api-test/references/report-format.md +6 -6
- package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/test-scope.md +6 -6
- package/dist/.claude-template/skills/run-ui-test/SKILL.md +186 -0
- package/dist/.claude-template/skills/run-ui-test/references/report-format.md +77 -0
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/SKILL.md +18 -18
- package/dist/.claude-template/skills/write-api/assets/{template-api-spec.md → template-/346/216/245/345/217/243/346/265/213/350/257/225-spec.md} +1 -1
- package/dist/.claude-template/skills/write-api/references/{api-spec-format.md → /346/216/245/345/217/243/346/265/213/350/257/225-spec-format.md} +3 -3
- package/dist/.claude-template/skills/write-plan/SKILL.md +4 -2
- package/dist/.claude-template/skills/write-ui-test/SKILL.md +125 -0
- package/dist/.claude-template/skills/write-ui-test/references//347/224/250/344/276/213/350/247/204/346/240/274-format.md +94 -0
- package/dist/core/code/engine/cli/analyze-config.js +320 -0
- package/dist/core/code/engine/cli/analyze.js +1086 -0
- package/dist/core/code/engine/cli/cli-message.js +83 -0
- package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
- package/dist/core/code/engine/cli/embedding-dims.js +43 -0
- package/dist/core/code/engine/cli/format-elapsed.js +12 -0
- package/dist/core/code/engine/cli/help-i18n.js +144 -0
- package/dist/core/code/engine/cli/i18n/en.js +110 -0
- package/dist/core/code/engine/cli/i18n/index.js +47 -0
- package/dist/core/code/engine/cli/i18n/resources.js +9 -0
- package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
- package/dist/core/code/engine/cli/lazy-action.js +67 -0
- package/dist/core/code/engine/cli/optional-grammars.js +136 -0
- package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
- package/dist/core/code/engine/cli/status.js +156 -0
- package/dist/core/code/engine/cli/tool.js +384 -0
- package/dist/core/code/engine/config/ignore-service.js +511 -0
- package/dist/core/code/engine/config/supported-languages.js +17 -0
- package/dist/core/code/engine/core/analysis-features.js +64 -0
- package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
- package/dist/core/code/engine/core/git-staleness.js +180 -0
- package/dist/core/code/engine/core/graph/graph.js +180 -0
- package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
- package/dist/core/code/engine/core/graph/types.js +2 -0
- package/dist/core/code/engine/core/index-freshness.js +12 -0
- package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
- package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
- package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
- package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
- package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
- package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
- package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
- package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
- package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
- package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
- package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
- package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
- package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
- package/dist/core/code/engine/core/ingestion/constants.js +26 -0
- package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
- package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
- package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
- package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
- package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
- package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
- package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
- package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
- package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
- package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
- package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
- package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
- package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
- package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
- package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
- package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
- package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
- package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
- package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
- package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
- package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
- package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
- package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
- package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
- package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
- package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
- package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
- package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
- package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
- package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
- package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
- package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
- package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
- package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
- package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
- package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
- package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
- package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
- package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
- package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
- package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
- package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
- package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
- package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
- package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
- package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
- package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
- package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
- package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
- package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
- package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
- package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
- package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
- package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
- package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
- package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
- package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
- package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
- package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
- package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
- package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
- package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
- package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
- package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
- package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
- package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
- package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
- package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
- package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
- package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
- package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
- package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
- package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
- package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
- package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
- package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
- package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
- package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
- package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
- package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
- package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
- package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
- package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
- package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
- package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
- package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
- package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
- package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
- package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
- package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
- package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
- package/dist/core/code/engine/core/lbug/native-check.js +435 -0
- package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
- package/dist/core/code/engine/core/lbug/query-params.js +25 -0
- package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
- package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
- package/dist/core/code/engine/core/lbug/schema.js +771 -0
- package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
- package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
- package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
- package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
- package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
- package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
- package/dist/core/code/engine/core/logger.js +339 -0
- package/dist/core/code/engine/core/platform/capabilities.js +91 -0
- package/dist/core/code/engine/core/run-analyze.js +1098 -0
- package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
- package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
- package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
- package/dist/core/code/engine/lib/utils.js +121 -0
- package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
- package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
- package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
- package/dist/core/code/engine/mcp/local/limits.js +15 -0
- package/dist/core/code/engine/mcp/local/line-display.js +6 -0
- package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
- package/dist/core/code/engine/storage/branch-index.js +72 -0
- package/dist/core/code/engine/storage/file-hash.js +95 -0
- package/dist/core/code/engine/storage/fs-atomic.js +34 -0
- package/dist/core/code/engine/storage/git.js +555 -0
- package/dist/core/code/engine/storage/index-lock.js +664 -0
- package/dist/core/code/engine/storage/parse-cache.js +650 -0
- package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
- package/dist/core/code/engine/storage/repo-manager.js +1061 -0
- package/dist/core/code/engine/storage/scope-index-store.js +247 -0
- package/dist/core/code/engine/types/pipeline.js +2 -0
- package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
- package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
- package/dist/core/code/shared/graph/types.js +8 -0
- package/dist/core/code/shared/index.js +105 -0
- package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
- package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
- package/dist/core/code/shared/integrations/retry.js +70 -0
- package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
- package/dist/core/code/shared/language-detection.js +162 -0
- package/dist/core/code/shared/languages.js +27 -0
- package/dist/core/code/shared/lbug/schema-constants.js +98 -0
- package/dist/core/code/shared/mro-strategy.js +2 -0
- package/dist/core/code/shared/pipeline.js +5 -0
- package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
- package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
- package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
- package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
- package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
- package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
- package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
- package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
- package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
- package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
- package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
- package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
- package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
- package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
- package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
- package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
- package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
- package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
- package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
- package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
- package/dist/core/code/shared/scope-resolution/types.js +25 -0
- package/dist/core/code/shared/test-helpers.js +17 -0
- package/dist/core/code/vendor/leiden/index.cjs +355 -0
- package/dist/core/code/vendor/leiden/utils.cjs +419 -0
- package/dist/core/dbquery/cli.d.ts.map +1 -1
- package/dist/core/dbquery/cli.js +5 -4
- package/dist/core/dbquery/cli.js.map +1 -1
- package/dist/core/dbquery/config.d.ts.map +1 -1
- package/dist/core/dbquery/config.js +39 -3
- package/dist/core/dbquery/config.js.map +1 -1
- package/dist/core/dbquery/drivers/http.d.ts +23 -0
- package/dist/core/dbquery/drivers/http.d.ts.map +1 -0
- package/dist/core/dbquery/drivers/http.js +125 -0
- package/dist/core/dbquery/drivers/http.js.map +1 -0
- package/dist/core/dbquery/drivers/mysql.js +1 -1
- package/dist/core/dbquery/drivers/mysql.js.map +1 -1
- package/dist/core/dbquery/drivers/postgres.js +1 -1
- package/dist/core/dbquery/drivers/postgres.js.map +1 -1
- package/dist/core/dbquery/executor.d.ts.map +1 -1
- package/dist/core/dbquery/executor.js +46 -12
- package/dist/core/dbquery/executor.js.map +1 -1
- package/dist/core/dbquery/format.d.ts.map +1 -1
- package/dist/core/dbquery/format.js +2 -1
- package/dist/core/dbquery/format.js.map +1 -1
- package/dist/core/dbquery/init.d.ts.map +1 -1
- package/dist/core/dbquery/init.js +7 -0
- package/dist/core/dbquery/init.js.map +1 -1
- package/dist/core/dbquery/types.d.ts +55 -7
- package/dist/core/dbquery/types.d.ts.map +1 -1
- package/dist/core/directory.d.ts +17 -0
- package/dist/core/directory.d.ts.map +1 -1
- package/dist/core/directory.js +37 -0
- package/dist/core/directory.js.map +1 -1
- package/dist/core/features/cli.d.ts.map +1 -1
- package/dist/core/features/cli.js +3 -2
- package/dist/core/features/cli.js.map +1 -1
- package/dist/core/features/scanner.d.ts +1 -1
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +20 -4
- package/dist/core/features/scanner.js.map +1 -1
- package/dist/core/markdown/cli.d.ts.map +1 -1
- package/dist/core/markdown/cli.js +9 -8
- package/dist/core/markdown/cli.js.map +1 -1
- package/dist/core/timeline/cli.d.ts.map +1 -1
- package/dist/core/timeline/cli.js +13 -6
- package/dist/core/timeline/cli.js.map +1 -1
- package/dist/core/timeline/debris.d.ts +20 -0
- package/dist/core/timeline/debris.d.ts.map +1 -0
- package/dist/core/timeline/debris.js +124 -0
- package/dist/core/timeline/debris.js.map +1 -0
- package/dist/core/timeline/hook-runner.d.ts.map +1 -1
- package/dist/core/timeline/hook-runner.js +3 -1
- package/dist/core/timeline/hook-runner.js.map +1 -1
- package/dist/core/timeline/hooks.d.ts.map +1 -1
- package/dist/core/timeline/hooks.js +13 -5
- package/dist/core/timeline/hooks.js.map +1 -1
- package/dist/core/timeline/installer.d.ts +2 -0
- package/dist/core/timeline/installer.d.ts.map +1 -1
- package/dist/core/timeline/installer.js +12 -0
- package/dist/core/timeline/installer.js.map +1 -1
- package/dist/core/timeline/project-root.d.ts +21 -0
- package/dist/core/timeline/project-root.d.ts.map +1 -0
- package/dist/core/timeline/project-root.js +83 -0
- package/dist/core/timeline/project-root.js.map +1 -0
- package/dist/web/register.d.ts.map +1 -1
- package/dist/web/register.js +2 -1
- package/dist/web/register.js.map +1 -1
- package/package.json +1 -1
- package/dist/.claude-template/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-deck/references/.cgraphx/timeline-current-turn.json +0 -1
- package/dist/.claude-template/skills/handdrawn-sketch-engine/.cgraphx/timeline-current-turn.json +0 -1
- /package/dist/.claude-template/skills/run-api-test/assets/{template-test-verify.jsonl → template-/346/216/245/345/217/243/346/265/213/350/257/225/351/252/214/350/257/201.jsonl"} +0 -0
|
@@ -0,0 +1,791 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emitJavaScopeCaptures = emitJavaScopeCaptures;
|
|
4
|
+
const bean_candidates_js_1 = require("../../frameworks/spring/bean-candidates.js");
|
|
5
|
+
const ast_helpers_js_1 = require("../../utils/ast-helpers.js");
|
|
6
|
+
const import_decomposer_js_1 = require("./import-decomposer.js");
|
|
7
|
+
const arity_metadata_js_1 = require("./arity-metadata.js");
|
|
8
|
+
const receiver_binding_js_1 = require("./receiver-binding.js");
|
|
9
|
+
const query_js_1 = require("./query.js");
|
|
10
|
+
const cache_stats_js_1 = require("./cache-stats.js");
|
|
11
|
+
const constants_js_1 = require("../../constants.js");
|
|
12
|
+
const safe_parse_js_1 = require("../../../tree-sitter/safe-parse.js");
|
|
13
|
+
const capture_side_channel_js_1 = require("./capture-side-channel.js");
|
|
14
|
+
const package_facts_js_1 = require("./package-facts.js");
|
|
15
|
+
const callable_flow_captures_js_1 = require("../../utils/callable-flow-captures.js");
|
|
16
|
+
const spring_config_bindings_js_1 = require("./spring-config-bindings.js");
|
|
17
|
+
const spring_di_js_1 = require("./spring-di.js");
|
|
18
|
+
const receiver_chain_captures_js_1 = require("../../utils/receiver-chain-captures.js");
|
|
19
|
+
const spring_aop_js_1 = require("./spring-aop.js");
|
|
20
|
+
const spring_conditionals_js_1 = require("./spring-conditionals.js");
|
|
21
|
+
/** Declaration anchors that carry function-like arity metadata. */
|
|
22
|
+
const FUNCTION_DECL_TAGS = ['@declaration.method', '@declaration.constructor'];
|
|
23
|
+
/** tree-sitter-java node types that the method extractor accepts. */
|
|
24
|
+
const FUNCTION_NODE_TYPES = [
|
|
25
|
+
'method_declaration',
|
|
26
|
+
'constructor_declaration',
|
|
27
|
+
'compact_constructor_declaration',
|
|
28
|
+
];
|
|
29
|
+
const JAVA_CALLABLE_CAPTURE_OPTIONS = {
|
|
30
|
+
functionNodeTypes: new Set([...FUNCTION_NODE_TYPES, 'lambda_expression']),
|
|
31
|
+
callNodeTypes: new Set(['method_invocation']),
|
|
32
|
+
parameterListNodeTypes: new Set(['formal_parameters', 'argument_list']),
|
|
33
|
+
parameterNodeTypes: new Set(['formal_parameter', 'spread_parameter', 'receiver_parameter']),
|
|
34
|
+
bindingNodeTypes: new Set(['variable_declarator']),
|
|
35
|
+
assignmentNodeTypes: new Set(['assignment_expression']),
|
|
36
|
+
identifierNodeTypes: new Set(['identifier', 'type_identifier']),
|
|
37
|
+
callableReferenceNodeTypes: new Set(['method_reference']),
|
|
38
|
+
// java.util.function SAM names, MINUS 'get' and 'test': those two collide
|
|
39
|
+
// with ubiquitous non-functional APIs (Map/List/Optional/Future.get,
|
|
40
|
+
// Predicate-unrelated test methods), emitting a spurious callable-object
|
|
41
|
+
// invoke fact for every container access (#2522 review). Supplier.get /
|
|
42
|
+
// Predicate.test dispatch is deliberately traded away until the check can
|
|
43
|
+
// gate on the receiver's declared type.
|
|
44
|
+
callableProtocolMethods: new Set(['run', 'apply', 'accept', 'call']),
|
|
45
|
+
normalizeQualifiedName: (raw) => raw.replaceAll('::', '.'),
|
|
46
|
+
};
|
|
47
|
+
/** Visibility of a local type begins at its declaration and ends with its
|
|
48
|
+
* immediately enclosing block (JLS 6.3). A Java-only synthetic Block scope
|
|
49
|
+
* models that range without changing shared resolver selection semantics. */
|
|
50
|
+
function javaLocalTypeVisibilityScope(node) {
|
|
51
|
+
const container = (0, ast_helpers_js_1.javaLocalTypeDeclarationContainer)(node);
|
|
52
|
+
if (container === null)
|
|
53
|
+
return undefined;
|
|
54
|
+
return {
|
|
55
|
+
'@scope.block': {
|
|
56
|
+
name: '@scope.block',
|
|
57
|
+
range: {
|
|
58
|
+
startLine: node.startPosition.row + 1,
|
|
59
|
+
startCol: node.startPosition.column,
|
|
60
|
+
endLine: container.endPosition.row + 1,
|
|
61
|
+
endCol: container.endPosition.column,
|
|
62
|
+
},
|
|
63
|
+
text: node.text,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** Suppress read.member emissions when the field_access is already
|
|
68
|
+
* covered by a method_invocation (object of a call) or an
|
|
69
|
+
* assignment_expression (write target). */
|
|
70
|
+
function shouldEmitReadMember(memberNode) {
|
|
71
|
+
const parent = memberNode.parent;
|
|
72
|
+
if (parent === null)
|
|
73
|
+
return true;
|
|
74
|
+
switch (parent.type) {
|
|
75
|
+
case 'assignment_expression':
|
|
76
|
+
return parent.childForFieldName('left')?.id !== memberNode.id;
|
|
77
|
+
default:
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function emitJavaScopeCaptures(sourceText, filePath, cachedTree) {
|
|
82
|
+
let tree = cachedTree;
|
|
83
|
+
if (tree === undefined) {
|
|
84
|
+
tree = (0, safe_parse_js_1.parseSourceSafe)((0, query_js_1.getJavaParser)(), sourceText, undefined, {
|
|
85
|
+
bufferSize: (0, constants_js_1.getTreeSitterBufferSize)(sourceText),
|
|
86
|
+
});
|
|
87
|
+
(0, cache_stats_js_1.recordCacheMiss)();
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
(0, cache_stats_js_1.recordCacheHit)();
|
|
91
|
+
}
|
|
92
|
+
(0, package_facts_js_1.captureJavaPackageFact)(filePath, tree.rootNode);
|
|
93
|
+
const rawMatches = (0, query_js_1.getJavaScopeQuery)().matches(tree.rootNode);
|
|
94
|
+
const out = [];
|
|
95
|
+
const classAnnotations = new Map();
|
|
96
|
+
const springAopFacts = [];
|
|
97
|
+
const springAopTypeNodeIds = new Set();
|
|
98
|
+
const springConditionalFacts = [];
|
|
99
|
+
const springDiFacts = [];
|
|
100
|
+
const springDiClassNodeIds = new Set();
|
|
101
|
+
for (const m of rawMatches) {
|
|
102
|
+
const grouped = {};
|
|
103
|
+
// Parallel tag -> captured SyntaxNode map. The tree-sitter query already
|
|
104
|
+
// hands us each matched node as `c.node`, so anchors resolve via a
|
|
105
|
+
// type-guarded lookup (`nodeIfType`) instead of re-deriving them with
|
|
106
|
+
// `findNodeAtRange(tree.rootNode, ...)` per match — the
|
|
107
|
+
// O(matches × rootChildren) root-walk fixed for go #1848 / python #1918 /
|
|
108
|
+
// rust/csharp #1915, mirrored here for java (#1951). Every Java scope-query
|
|
109
|
+
// anchor below captures directly ON the node the old root-walk re-derived
|
|
110
|
+
// (verified against JAVA_SCOPE_QUERY in query.ts), so the type check is exact.
|
|
111
|
+
const nodeMap = {};
|
|
112
|
+
for (const c of m.captures) {
|
|
113
|
+
const tag = '@' + c.name;
|
|
114
|
+
grouped[tag] = (0, ast_helpers_js_1.nodeToCapture)(tag, c.node);
|
|
115
|
+
nodeMap[tag] = c.node;
|
|
116
|
+
}
|
|
117
|
+
if (Object.keys(grouped).length === 0)
|
|
118
|
+
continue;
|
|
119
|
+
const springAopTypeNode = [
|
|
120
|
+
(0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.class'], 'class_declaration'),
|
|
121
|
+
(0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.class'], 'interface_declaration'),
|
|
122
|
+
].find((node) => node !== null);
|
|
123
|
+
if (springAopTypeNode !== undefined && !springAopTypeNodeIds.has(springAopTypeNode.id)) {
|
|
124
|
+
springAopTypeNodeIds.add(springAopTypeNode.id);
|
|
125
|
+
springAopFacts.push(...(0, spring_aop_js_1.captureJavaSpringAopFacts)(springAopTypeNode, filePath));
|
|
126
|
+
}
|
|
127
|
+
const springDiClassNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@scope.class'], 'class_declaration');
|
|
128
|
+
if (springDiClassNode !== null && !springDiClassNodeIds.has(springDiClassNode.id)) {
|
|
129
|
+
springDiClassNodeIds.add(springDiClassNode.id);
|
|
130
|
+
springConditionalFacts.push(...(0, spring_conditionals_js_1.captureJavaSpringConditionalFacts)(springDiClassNode, filePath));
|
|
131
|
+
const fact = (0, spring_di_js_1.captureJavaSpringDiClassFact)(springDiClassNode, filePath);
|
|
132
|
+
if (fact !== null)
|
|
133
|
+
springDiFacts.push(fact);
|
|
134
|
+
}
|
|
135
|
+
const annotatedClass = grouped['@class-annotation.class'];
|
|
136
|
+
const annotationName = grouped['@class-annotation.name'];
|
|
137
|
+
if (annotatedClass !== undefined && annotationName !== undefined) {
|
|
138
|
+
(0, bean_candidates_js_1.recordClassAnnotationCapture)(classAnnotations, filePath, annotatedClass, annotationName.text);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const typeDeclaration = [
|
|
142
|
+
nodeMap['@declaration.class'],
|
|
143
|
+
nodeMap['@declaration.enum'],
|
|
144
|
+
nodeMap['@declaration.record'],
|
|
145
|
+
nodeMap['@declaration.interface'],
|
|
146
|
+
].find((node) => node !== undefined);
|
|
147
|
+
const localTypeIdentity = typeDeclaration === undefined ? undefined : (0, ast_helpers_js_1.synthesizeJavaTypeIdentity)(typeDeclaration);
|
|
148
|
+
if (localTypeIdentity?.bindingName !== undefined &&
|
|
149
|
+
grouped['@declaration.name'] !== undefined &&
|
|
150
|
+
typeDeclaration !== undefined) {
|
|
151
|
+
grouped['@declaration.binding-name'] = grouped['@declaration.name'];
|
|
152
|
+
grouped['@declaration.name'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', typeDeclaration, localTypeIdentity.name);
|
|
153
|
+
const visibilityScope = javaLocalTypeVisibilityScope(typeDeclaration);
|
|
154
|
+
if (visibilityScope !== undefined)
|
|
155
|
+
out.push(visibilityScope);
|
|
156
|
+
}
|
|
157
|
+
// Decompose each `import_declaration`. `@import.statement` is captured
|
|
158
|
+
// directly on the `import_declaration` node.
|
|
159
|
+
if (grouped['@import.statement'] !== undefined) {
|
|
160
|
+
const stmtNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@import.statement'], 'import_declaration');
|
|
161
|
+
if (stmtNode !== null) {
|
|
162
|
+
const decomposed = (0, import_decomposer_js_1.splitImportDeclaration)(stmtNode);
|
|
163
|
+
if (decomposed !== null) {
|
|
164
|
+
out.push(decomposed);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
169
|
+
// expression, so resolution can type it by folding over structure
|
|
170
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
171
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
172
|
+
// all leave `grouped` untouched.
|
|
173
|
+
(0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
|
|
174
|
+
out.push(grouped);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// Skip free-call matches that are actually member calls. The query
|
|
178
|
+
// matches ALL method_invocations as @reference.call.free (without
|
|
179
|
+
// negation) because tree-sitter-java's query engine drops !object
|
|
180
|
+
// patterns when a positive object: pattern exists for the same node
|
|
181
|
+
// type. Filter here: if the match has @reference.call.free but also
|
|
182
|
+
// has @reference.receiver, it's a member call — skip the free match
|
|
183
|
+
// (the separate @reference.call.member match covers it).
|
|
184
|
+
if (grouped['@reference.call.free'] !== undefined &&
|
|
185
|
+
grouped['@reference.receiver'] !== undefined) {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
// Normalize a `new`-expression receiver to its constructed type's simple
|
|
189
|
+
// name: `new Local().inner()` binds the WHOLE `object_creation_expression`
|
|
190
|
+
// as `@reference.receiver`, so its raw text is `"new Local()"` — a string
|
|
191
|
+
// that can never match a scope binding, so the compound-receiver resolver
|
|
192
|
+
// silently falls through to name-only fallback resolution and picks the
|
|
193
|
+
// wrong same-named method on a collision (#2564). Rewriting the text to
|
|
194
|
+
// just `Local` lets Case 2 (class-name / static receiver) in
|
|
195
|
+
// receiver-bound-calls.ts resolve it via its normal MRO walk. Mirrors the
|
|
196
|
+
// established `normalizePhpReceiver` precedent (php/captures.ts) — a
|
|
197
|
+
// language-local capture rewrite, no shared-pipeline change.
|
|
198
|
+
if (grouped['@reference.receiver'] !== undefined) {
|
|
199
|
+
const receiverNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@reference.receiver'], 'object_creation_expression');
|
|
200
|
+
const typeNode = receiverNode?.childForFieldName('type');
|
|
201
|
+
const simpleName = typeNode ? javaBaseSimpleNameOf(typeNode) : undefined;
|
|
202
|
+
if (simpleName !== undefined) {
|
|
203
|
+
grouped['@reference.receiver'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.receiver', receiverNode, simpleName);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Filter read.member when it's a child of method_invocation or assignment.
|
|
207
|
+
// `@reference.read.member` is captured directly on the `field_access` node.
|
|
208
|
+
if (grouped['@reference.read.member'] !== undefined) {
|
|
209
|
+
const memberNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap['@reference.read.member'], 'field_access');
|
|
210
|
+
if (memberNode === null || !shouldEmitReadMember(memberNode)) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Synthesize `this` / `super` receiver type-bindings on every
|
|
215
|
+
// instance method-like.
|
|
216
|
+
if (grouped['@scope.function'] !== undefined) {
|
|
217
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
218
|
+
// expression, so resolution can type it by folding over structure
|
|
219
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
220
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
221
|
+
// all leave `grouped` untouched.
|
|
222
|
+
(0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
|
|
223
|
+
out.push(grouped);
|
|
224
|
+
// `@scope.function` is captured directly on the method/constructor node.
|
|
225
|
+
const fnNode = findFunctionNode(nodeMap['@scope.function']);
|
|
226
|
+
if (fnNode !== null) {
|
|
227
|
+
for (const synth of (0, receiver_binding_js_1.synthesizeJavaReceiverBinding)(fnNode)) {
|
|
228
|
+
out.push(synth);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
// Synthesize arity metadata on function-like declarations.
|
|
234
|
+
const declTag = FUNCTION_DECL_TAGS.find((t) => grouped[t] !== undefined);
|
|
235
|
+
if (declTag !== undefined) {
|
|
236
|
+
// FUNCTION_DECL_TAGS (@declaration.method/.constructor) are captured
|
|
237
|
+
// directly on the method/constructor node.
|
|
238
|
+
const fnNode = findFunctionNode(nodeMap[declTag]);
|
|
239
|
+
if (fnNode !== null) {
|
|
240
|
+
const arity = (0, arity_metadata_js_1.computeJavaArityMetadata)(fnNode);
|
|
241
|
+
if (arity.parameterCount !== undefined) {
|
|
242
|
+
grouped['@declaration.parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-count', fnNode, String(arity.parameterCount));
|
|
243
|
+
}
|
|
244
|
+
if (arity.requiredParameterCount !== undefined) {
|
|
245
|
+
grouped['@declaration.required-parameter-count'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.required-parameter-count', fnNode, String(arity.requiredParameterCount));
|
|
246
|
+
}
|
|
247
|
+
if (arity.parameterTypes !== undefined) {
|
|
248
|
+
grouped['@declaration.parameter-types'] = (0, ast_helpers_js_1.syntheticCapture)('@declaration.parameter-types', fnNode, JSON.stringify(arity.parameterTypes));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Synthesize `@reference.arity` on every callsite.
|
|
253
|
+
const callTag = ['@reference.call.free', '@reference.call.member', '@reference.call.constructor'].find((t) => grouped[t] !== undefined);
|
|
254
|
+
if (callTag !== undefined && grouped['@reference.arity'] === undefined) {
|
|
255
|
+
// @reference.call.free/.member are captured on the `method_invocation`;
|
|
256
|
+
// @reference.call.constructor on the `object_creation_expression`. The
|
|
257
|
+
// captured node IS the call node the old findNodeAtRange re-derived.
|
|
258
|
+
const callNode = (0, ast_helpers_js_1.nodeIfType)(nodeMap[callTag], 'method_invocation', 'object_creation_expression');
|
|
259
|
+
if (callNode !== null) {
|
|
260
|
+
const argList = callNode.childForFieldName('arguments');
|
|
261
|
+
// Exclude interleaved comments — tree-sitter-java emits `block_comment` /
|
|
262
|
+
// `line_comment` as named children of argument_list, which would inflate
|
|
263
|
+
// arity (and arity feeds call-processor symbol-ID generation). #1920
|
|
264
|
+
const args = argList === null
|
|
265
|
+
? []
|
|
266
|
+
: argList.namedChildren.filter((c) => c !== null && c.type !== 'block_comment' && c.type !== 'line_comment');
|
|
267
|
+
grouped['@reference.arity'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.arity', callNode, String(args.length));
|
|
268
|
+
const argTypes = args.map((arg) => inferArgType(arg));
|
|
269
|
+
grouped['@reference.parameter-types'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.parameter-types', callNode, JSON.stringify(argTypes));
|
|
270
|
+
const argNames = args.map((a) => (a.type === 'identifier' ? a.text : ''));
|
|
271
|
+
if (argNames.some((n) => n !== '')) {
|
|
272
|
+
grouped['@reference.arg-names'] = (0, ast_helpers_js_1.syntheticCapture)('@reference.arg-names', callNode, JSON.stringify(argNames));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
277
|
+
// expression, so resolution can type it by folding over structure
|
|
278
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
279
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
280
|
+
// all leave `grouped` untouched.
|
|
281
|
+
(0, receiver_chain_captures_js_1.synthesizeReceiverChainCapture)(grouped, nodeMap['@reference.receiver']);
|
|
282
|
+
out.push(grouped);
|
|
283
|
+
}
|
|
284
|
+
(0, capture_side_channel_js_1.setJavaClassAnnotationFacts)(filePath, (0, bean_candidates_js_1.materializeClassAnnotationFacts)(classAnnotations));
|
|
285
|
+
(0, capture_side_channel_js_1.setJavaSpringConfigConsumerFacts)(filePath, (0, spring_config_bindings_js_1.captureJavaSpringConfigConsumerFacts)(tree.rootNode, filePath));
|
|
286
|
+
(0, capture_side_channel_js_1.setJavaSpringAopFacts)(filePath, springAopFacts);
|
|
287
|
+
(0, capture_side_channel_js_1.setJavaSpringConditionalFacts)(filePath, springConditionalFacts);
|
|
288
|
+
(0, capture_side_channel_js_1.setJavaSpringDiFacts)(filePath, springDiFacts);
|
|
289
|
+
return [
|
|
290
|
+
...resolveVarTypeBindings(out),
|
|
291
|
+
...synthesizeJavaInheritanceReferences(tree.rootNode),
|
|
292
|
+
...synthesizeJavaExplicitConstructorReferences(tree.rootNode),
|
|
293
|
+
...synthesizeJavaAnonymousClassDeclarations(tree.rootNode),
|
|
294
|
+
...(0, callable_flow_captures_js_1.synthesizeCallableFlowCaptures)(tree.rootNode, JAVA_CALLABLE_CAPTURE_OPTIONS),
|
|
295
|
+
];
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Synthesize `@declaration.class` matches for anonymous class bodies
|
|
299
|
+
* (`new Runnable() { ... }`), named by the same javac-compatible authority
|
|
300
|
+
* (`synthesizeJavaTypeIdentity` → `Worker$N`) the structure phase
|
|
301
|
+
* uses — the two layers agree by construction (#2550).
|
|
302
|
+
*
|
|
303
|
+
* The anchor is the `class_body` node: it shares its range with the
|
|
304
|
+
* `(object_creation_expression (class_body) @scope.class)` scope rule in
|
|
305
|
+
* query.ts, so the def is owned by that Class scope's `ownedDefs`
|
|
306
|
+
* (making `populateClassOwnedMembers` stamp `ownerId` on the anonymous
|
|
307
|
+
* class's methods) and the name auto-hoists to the enclosing scope —
|
|
308
|
+
* exactly the binding shape a named class declaration produces.
|
|
309
|
+
*/
|
|
310
|
+
function synthesizeJavaAnonymousClassDeclarations(rootNode) {
|
|
311
|
+
const out = [];
|
|
312
|
+
for (const oce of rootNode.descendantsOfType('object_creation_expression')) {
|
|
313
|
+
const identity = (0, ast_helpers_js_1.synthesizeJavaTypeIdentity)(oce);
|
|
314
|
+
if (identity === undefined)
|
|
315
|
+
continue;
|
|
316
|
+
const body = oce.namedChildren.find((c) => c.type === 'class_body');
|
|
317
|
+
if (body === undefined)
|
|
318
|
+
continue;
|
|
319
|
+
out.push({
|
|
320
|
+
'@declaration.class': (0, ast_helpers_js_1.nodeToCapture)('@declaration.class', body),
|
|
321
|
+
'@declaration.name': (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', body, identity.name),
|
|
322
|
+
});
|
|
323
|
+
// Inheritance: the anonymous class extends/implements its constructed
|
|
324
|
+
// type. Anchor the `@reference.inherits` on the `class_body` — its
|
|
325
|
+
// range equals the anonymous Class scope, so the reference site's
|
|
326
|
+
// enclosing class resolves to the SYNTHESIZED `Worker$N` def (anchoring
|
|
327
|
+
// on the constructed-type node would sit OUTSIDE the anonymous scope
|
|
328
|
+
// and mis-attribute the edge to the lexically enclosing class). The
|
|
329
|
+
// synthetic `@reference.name` carries the base's simple name; a JDK
|
|
330
|
+
// type with no repo def simply resolves to nothing (no edge). Without
|
|
331
|
+
// this edge `mroFor(Worker$N)` is empty and the #2550 instance-
|
|
332
|
+
// ownership gate suppressed TRUE bare calls to inherited methods
|
|
333
|
+
// inside the anonymous body (empirically caught in review).
|
|
334
|
+
const constructedType = oce.childForFieldName?.('type');
|
|
335
|
+
const baseSimpleName = constructedType !== null && constructedType !== undefined
|
|
336
|
+
? javaBaseSimpleNameOf(constructedType)
|
|
337
|
+
: undefined;
|
|
338
|
+
if (baseSimpleName !== undefined) {
|
|
339
|
+
out.push({
|
|
340
|
+
'@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', body),
|
|
341
|
+
'@reference.name': (0, ast_helpers_js_1.syntheticCapture)('@reference.name', body, baseSimpleName),
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
// Receiver typeBinding: `Runnable handler = new Runnable() { ... }`
|
|
345
|
+
// binds `handler` to the ANONYMOUS class (`Worker$1`), not the declared
|
|
346
|
+
// interface — the instance is what `handler.run()` dispatches into, and
|
|
347
|
+
// the declared type is frequently a JDK interface with no repo def.
|
|
348
|
+
// Appended after the raw matches, so it overwrites the declared-type
|
|
349
|
+
// binding the `@type-binding.annotation` query rule produced for the
|
|
350
|
+
// same variable (pass-4 applies bindings in match order; last wins).
|
|
351
|
+
const declarator = oce.parent;
|
|
352
|
+
if (declarator !== null && declarator.type === 'variable_declarator') {
|
|
353
|
+
const varName = declarator.childForFieldName?.('name');
|
|
354
|
+
const declNode = declarator.parent ?? declarator;
|
|
355
|
+
if (varName !== null && varName !== undefined) {
|
|
356
|
+
out.push({
|
|
357
|
+
'@type-binding.annotation': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.annotation', declNode),
|
|
358
|
+
'@type-binding.name': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.name', varName),
|
|
359
|
+
'@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', oce, identity.name),
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// Enum constant bodies (`enum E { A { ... } }`) — javac's other
|
|
365
|
+
// anonymous shape (#2555). Same synthesis, same body anchor; the
|
|
366
|
+
// constant's class extends its HOST ENUM (javac semantics), so the
|
|
367
|
+
// inherits reference names the enum — giving `mroFor(E$N) ∋ E` and
|
|
368
|
+
// keeping bare calls from the body to the enum's own helpers alive
|
|
369
|
+
// through the ownership gate's MRO arm.
|
|
370
|
+
for (const constant of rootNode.descendantsOfType('enum_constant')) {
|
|
371
|
+
const hostEnum = javaEnclosingEnumNameOf(constant);
|
|
372
|
+
const bodyNode = constant.childForFieldName?.('body');
|
|
373
|
+
const isBodied = bodyNode !== null && bodyNode !== undefined && bodyNode.type === 'class_body';
|
|
374
|
+
const bodiedIdentity = (0, ast_helpers_js_1.synthesizeJavaTypeIdentity)(constant);
|
|
375
|
+
if (bodiedIdentity !== undefined && isBodied) {
|
|
376
|
+
out.push({
|
|
377
|
+
'@declaration.class': (0, ast_helpers_js_1.nodeToCapture)('@declaration.class', bodyNode),
|
|
378
|
+
'@declaration.name': (0, ast_helpers_js_1.syntheticCapture)('@declaration.name', bodyNode, bodiedIdentity.name),
|
|
379
|
+
});
|
|
380
|
+
if (hostEnum !== undefined) {
|
|
381
|
+
out.push({
|
|
382
|
+
'@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', bodyNode),
|
|
383
|
+
'@reference.name': (0, ast_helpers_js_1.syntheticCapture)('@reference.name', bodyNode, hostEnum),
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Receiver dispatch (#2561): `E.CONST.method()` resolves through the
|
|
388
|
+
// generic compound-receiver chain walk, which looks up each dotted
|
|
389
|
+
// segment via the owning class scope's `typeBindings` map — the same
|
|
390
|
+
// mechanism a field declaration uses (`private User user;` binds
|
|
391
|
+
// `user` on the class scope). Binding the constant's own simple name
|
|
392
|
+
// there — to its synthesized `E$N` class when bodied (MRO includes E,
|
|
393
|
+
// so members inherited from the enum still resolve), or to the host
|
|
394
|
+
// enum itself when body-less — makes `E.CONST.method()` resolve with
|
|
395
|
+
// no changes to the shared receiver-binding machinery.
|
|
396
|
+
//
|
|
397
|
+
// A bodied constant binds ONLY to its `E$N` class, never the host enum:
|
|
398
|
+
// if name synthesis fails on a malformed/error-recovery tree (`bodiedName`
|
|
399
|
+
// undefined despite a real body), emit nothing rather than silently
|
|
400
|
+
// misattributing an OVERRIDING constant's receiver to the enum's own
|
|
401
|
+
// (non-overridden) method — a wrong edge is worse than no edge. Mirrors
|
|
402
|
+
// the `object_creation_expression` branch, which skips on synthesis
|
|
403
|
+
// failure. `hostEnum` is used only for genuinely body-less constants.
|
|
404
|
+
const constantNameNode = constant.childForFieldName?.('name');
|
|
405
|
+
const constantType = isBodied ? bodiedIdentity?.name : hostEnum;
|
|
406
|
+
if (constantNameNode !== null && constantNameNode !== undefined && constantType !== undefined) {
|
|
407
|
+
out.push({
|
|
408
|
+
'@type-binding.annotation': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.annotation', constant),
|
|
409
|
+
'@type-binding.name': (0, ast_helpers_js_1.nodeToCapture)('@type-binding.name', constantNameNode),
|
|
410
|
+
'@type-binding.type': (0, ast_helpers_js_1.syntheticCapture)('@type-binding.type', constant, constantType),
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return out;
|
|
415
|
+
}
|
|
416
|
+
/** Simple name of the enum_declaration enclosing an enum_constant, or
|
|
417
|
+
* undefined (grammar guarantees one exists in well-formed source). */
|
|
418
|
+
function javaEnclosingEnumNameOf(constant) {
|
|
419
|
+
let cursor = constant.parent;
|
|
420
|
+
while (cursor !== null) {
|
|
421
|
+
if (cursor.type === 'enum_declaration') {
|
|
422
|
+
return cursor.childForFieldName?.('name')?.text ?? undefined;
|
|
423
|
+
}
|
|
424
|
+
cursor = cursor.parent;
|
|
425
|
+
}
|
|
426
|
+
return undefined;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Synthesize `@reference.call.constructor` captures for explicit constructor
|
|
430
|
+
* invocations — `super(...)` and `this(...)` (F38 #1928). tree-sitter-java
|
|
431
|
+
* models these as `explicit_constructor_invocation` nodes, which the scope
|
|
432
|
+
* query does not match, so the chained-constructor CALLS edges (subclass ctor →
|
|
433
|
+
* superclass ctor; ctor → sibling overload) were silently dropped.
|
|
434
|
+
*
|
|
435
|
+
* The grammar gives no constructor *name* at the call site (the child is a bare
|
|
436
|
+
* `(super)` / `(this)` token), so the target name is resolved structurally:
|
|
437
|
+
* - `this(...)` → the enclosing type's own simple name (constructor symbols
|
|
438
|
+
* are keyed by the declaring class name).
|
|
439
|
+
* - `super(...)` → the enclosing class's superclass simple-name tail (reusing
|
|
440
|
+
* `javaBaseLookupNameNode` so qualified/generic supers reduce
|
|
441
|
+
* to the bare class name, matching the EXTENDS synth). An
|
|
442
|
+
* implicit `Object` super (no `superclass` field) has no
|
|
443
|
+
* in-graph symbol, so it is skipped rather than emitting a
|
|
444
|
+
* dangling reference.
|
|
445
|
+
* Arity is attached so overloaded constructors disambiguate downstream, mirroring
|
|
446
|
+
* the call-site arity synthesized for `new X(...)`.
|
|
447
|
+
*/
|
|
448
|
+
function synthesizeJavaExplicitConstructorReferences(root) {
|
|
449
|
+
const out = [];
|
|
450
|
+
const stack = [root];
|
|
451
|
+
while (stack.length > 0) {
|
|
452
|
+
const node = stack.pop();
|
|
453
|
+
if (node.type === 'explicit_constructor_invocation') {
|
|
454
|
+
emitJavaExplicitConstructorRef(out, node);
|
|
455
|
+
}
|
|
456
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
457
|
+
const child = node.namedChild(i);
|
|
458
|
+
if (child !== null)
|
|
459
|
+
stack.push(child);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
return out;
|
|
463
|
+
}
|
|
464
|
+
const TYPE_DECL_NODE_TYPES = new Set([
|
|
465
|
+
'class_declaration',
|
|
466
|
+
'enum_declaration',
|
|
467
|
+
'record_declaration',
|
|
468
|
+
]);
|
|
469
|
+
function emitJavaExplicitConstructorRef(out, node) {
|
|
470
|
+
const ctor = node.childForFieldName('constructor');
|
|
471
|
+
if (ctor === null)
|
|
472
|
+
return;
|
|
473
|
+
const enclosingType = findEnclosingTypeDeclaration(node);
|
|
474
|
+
if (enclosingType === null)
|
|
475
|
+
return;
|
|
476
|
+
let targetNameNode = null;
|
|
477
|
+
if (ctor.type === 'this') {
|
|
478
|
+
targetNameNode = enclosingType.childForFieldName('name');
|
|
479
|
+
}
|
|
480
|
+
else if (ctor.type === 'super') {
|
|
481
|
+
// Only class_declaration carries a `superclass` field; enum/record cannot
|
|
482
|
+
// declare an explicit superclass, so `super(...)` there has no resolvable
|
|
483
|
+
// target symbol.
|
|
484
|
+
const superclass = enclosingType.childForFieldName('superclass');
|
|
485
|
+
if (superclass === null)
|
|
486
|
+
return;
|
|
487
|
+
for (const base of superclass.namedChildren) {
|
|
488
|
+
if (base === null)
|
|
489
|
+
continue;
|
|
490
|
+
const nameNode = javaBaseLookupNameNode(base);
|
|
491
|
+
if (nameNode !== null) {
|
|
492
|
+
targetNameNode = nameNode;
|
|
493
|
+
break;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
if (targetNameNode === null)
|
|
498
|
+
return;
|
|
499
|
+
const argList = node.childForFieldName('arguments');
|
|
500
|
+
const args = argList === null
|
|
501
|
+
? []
|
|
502
|
+
: argList.namedChildren.filter((c) => c !== null && c.type !== 'block_comment' && c.type !== 'line_comment');
|
|
503
|
+
out.push({
|
|
504
|
+
'@reference.call.constructor': (0, ast_helpers_js_1.nodeToCapture)('@reference.call.constructor', node),
|
|
505
|
+
'@reference.name': (0, ast_helpers_js_1.nodeToCapture)('@reference.name', targetNameNode),
|
|
506
|
+
'@reference.arity': (0, ast_helpers_js_1.syntheticCapture)('@reference.arity', node, String(args.length)),
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
function findEnclosingTypeDeclaration(node) {
|
|
510
|
+
let cur = node.parent;
|
|
511
|
+
while (cur !== null) {
|
|
512
|
+
if (TYPE_DECL_NODE_TYPES.has(cur.type))
|
|
513
|
+
return cur;
|
|
514
|
+
cur = cur.parent;
|
|
515
|
+
}
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Synthesize `@reference.inherits` captures from Java class heritage so the
|
|
520
|
+
* registry-primary scope-resolution path emits EXTENDS / IMPLEMENTS edges
|
|
521
|
+
* (mirrors C++ `emitCppInheritanceCaptures`). Without this, Java inheritance
|
|
522
|
+
* edges came only from the legacy heritage-capture leg (removed in #942), which
|
|
523
|
+
* is dropped for registry-primary languages in the worker pipeline (issue #1951).
|
|
524
|
+
*
|
|
525
|
+
* Scope covers `class_declaration` (`superclass` extends + `interfaces`
|
|
526
|
+
* implements clauses) AND `interface_declaration` (`extends_interfaces` →
|
|
527
|
+
* interface-to-interface EXTENDS), matching the legacy Java heritage query
|
|
528
|
+
* (tree-sitter-queries.ts), which has a dedicated `interface_declaration
|
|
529
|
+
* (extends_interfaces (type_list …))` arm. Without the interface arm the
|
|
530
|
+
* registry-primary synth silently dropped every `interface IA extends IB`
|
|
531
|
+
* edge while the legacy leg emitted it — the exact =0/=N parity break #1951
|
|
532
|
+
* targets. Enum/record heritage stays unemitted (no legacy arm). Generic
|
|
533
|
+
* bases (`extends Box<T>`, `implements IFoo<T>`) ARE emitted here: the legacy
|
|
534
|
+
* heritage query was widened to capture the inner `type_identifier` of a
|
|
535
|
+
* `generic_type` (tree-sitter-queries.ts), so both paths now agree on SIMPLE
|
|
536
|
+
* (unqualified) generic bases — the more-correct behavior, consistent with
|
|
537
|
+
* C#/Rust (#1951). Qualified bases (`a.b.Base`, `a.b.Box<T>`, `a.b.IFoo<T>`) are
|
|
538
|
+
* ALSO now at parity (#1956 tri-review U2): the synth resolves them by their
|
|
539
|
+
* `scoped_type_identifier` tail, and the legacy heritage query was widened
|
|
540
|
+
* with matching `scoped_type_identifier` arms (plain + generic-wrapped). The
|
|
541
|
+
* EXTENDS-vs-IMPLEMENTS split is decided downstream from the resolved target's
|
|
542
|
+
* symbol kind (`preEmitInheritanceEdges`): a superclass resolves to a class
|
|
543
|
+
* (EXTENDS), an implemented interface resolves to an interface (IMPLEMENTS).
|
|
544
|
+
* An `interface IA extends IB` base resolves to an Interface too, so it is
|
|
545
|
+
* emitted as IMPLEMENTS — matching the legacy `interface_declaration` arm,
|
|
546
|
+
* which tagged the bases as implements (`kind: 'implements'`) and likewise
|
|
547
|
+
* resolves them as interfaces. The synth therefore does not need to know the
|
|
548
|
+
* declaration's own kind; it only emits inherits sites and lets the resolved
|
|
549
|
+
* target decide the edge type.
|
|
550
|
+
* Base names are normalized to their bare simple identifier (`Box<T>` → `Box`,
|
|
551
|
+
* `java.io.Serializable` → `Serializable`) to match the V1 simple-name
|
|
552
|
+
* `findClassBindingInScope` contract.
|
|
553
|
+
*/
|
|
554
|
+
function synthesizeJavaInheritanceReferences(root) {
|
|
555
|
+
const out = [];
|
|
556
|
+
const stack = [root];
|
|
557
|
+
while (stack.length > 0) {
|
|
558
|
+
const node = stack.pop();
|
|
559
|
+
if (node.type === 'class_declaration') {
|
|
560
|
+
const superclass = node.childForFieldName('superclass');
|
|
561
|
+
if (superclass !== null) {
|
|
562
|
+
for (const base of superclass.namedChildren)
|
|
563
|
+
emitJavaInheritanceBase(out, base);
|
|
564
|
+
}
|
|
565
|
+
const interfaces = node.childForFieldName('interfaces');
|
|
566
|
+
if (interfaces !== null) {
|
|
567
|
+
for (const typeList of interfaces.namedChildren) {
|
|
568
|
+
if (typeList === null || typeList.type !== 'type_list')
|
|
569
|
+
continue;
|
|
570
|
+
for (const base of typeList.namedChildren)
|
|
571
|
+
emitJavaInheritanceBase(out, base);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
else if (node.type === 'interface_declaration') {
|
|
576
|
+
// `interface IA extends IB, IC<T>` — the `extends_interfaces` clause is
|
|
577
|
+
// NOT exposed via a tree-sitter field (unlike a class's `superclass` /
|
|
578
|
+
// `interfaces`), so scan named children for it. It wraps a `type_list`
|
|
579
|
+
// whose bases reuse `javaBaseLookupNameNode` (handles type_identifier /
|
|
580
|
+
// generic_type / scoped_type_identifier). These resolve to Interface
|
|
581
|
+
// targets, so `preEmitInheritanceEdges` emits them as IMPLEMENTS, at
|
|
582
|
+
// parity with the legacy `interface_declaration` implements arm.
|
|
583
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
584
|
+
const extendsInterfaces = node.namedChild(i);
|
|
585
|
+
if (extendsInterfaces === null || extendsInterfaces.type !== 'extends_interfaces')
|
|
586
|
+
continue;
|
|
587
|
+
for (const typeList of extendsInterfaces.namedChildren) {
|
|
588
|
+
if (typeList === null || typeList.type !== 'type_list')
|
|
589
|
+
continue;
|
|
590
|
+
for (const base of typeList.namedChildren)
|
|
591
|
+
emitJavaInheritanceBase(out, base);
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
// Named children only: every type/heritage node we care about is named,
|
|
596
|
+
// so skipping unnamed punctuation tokens keeps the walk single-pass and
|
|
597
|
+
// lighter on large files.
|
|
598
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
599
|
+
const child = node.namedChild(i);
|
|
600
|
+
if (child !== null)
|
|
601
|
+
stack.push(child);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
return out;
|
|
605
|
+
}
|
|
606
|
+
function emitJavaInheritanceBase(out, base) {
|
|
607
|
+
if (base === null)
|
|
608
|
+
return;
|
|
609
|
+
const nameNode = javaBaseLookupNameNode(base);
|
|
610
|
+
if (nameNode === null)
|
|
611
|
+
return;
|
|
612
|
+
out.push({
|
|
613
|
+
'@reference.inherits': (0, ast_helpers_js_1.nodeToCapture)('@reference.inherits', base),
|
|
614
|
+
'@reference.name': (0, ast_helpers_js_1.nodeToCapture)('@reference.name', nameNode),
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
/** Resolve a Java base-type node to its bare simple-name identifier node. */
|
|
618
|
+
/** Simple name of a constructed/base type node, reusing the same node
|
|
619
|
+
* shapes `javaBaseLookupNameNode` handles (`Runnable`, `a.b.Base`,
|
|
620
|
+
* `Box<T>`). Returns undefined when the node is none of those. */
|
|
621
|
+
function javaBaseSimpleNameOf(typeNode) {
|
|
622
|
+
const nameNode = javaBaseLookupNameNode(typeNode);
|
|
623
|
+
return nameNode === null ? undefined : nameNode.text;
|
|
624
|
+
}
|
|
625
|
+
function javaBaseLookupNameNode(node) {
|
|
626
|
+
switch (node.type) {
|
|
627
|
+
case 'type_identifier':
|
|
628
|
+
return node;
|
|
629
|
+
case 'scoped_type_identifier':
|
|
630
|
+
// `java.io.Serializable` → trailing `type_identifier` (`Serializable`).
|
|
631
|
+
return node.lastNamedChild;
|
|
632
|
+
case 'generic_type': {
|
|
633
|
+
// `Box<String>` → recurse into the base type (`Box`).
|
|
634
|
+
const first = node.firstNamedChild;
|
|
635
|
+
return first === null ? null : javaBaseLookupNameNode(first);
|
|
636
|
+
}
|
|
637
|
+
default:
|
|
638
|
+
return null;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
function resolveVarTypeBindings(matches) {
|
|
642
|
+
const returnTypes = new Map();
|
|
643
|
+
const varTypes = new Map();
|
|
644
|
+
const ambiguousReturns = new Set();
|
|
645
|
+
const ambiguousVars = new Set();
|
|
646
|
+
for (const m of matches) {
|
|
647
|
+
if (m['@type-binding.return'] !== undefined &&
|
|
648
|
+
m['@type-binding.type'] !== undefined &&
|
|
649
|
+
m['@type-binding.name'] !== undefined) {
|
|
650
|
+
const name = m['@type-binding.name'].text;
|
|
651
|
+
const type = m['@type-binding.type'].text;
|
|
652
|
+
const existing = returnTypes.get(name);
|
|
653
|
+
if (existing !== undefined && existing !== type) {
|
|
654
|
+
ambiguousReturns.add(name);
|
|
655
|
+
returnTypes.delete(name);
|
|
656
|
+
}
|
|
657
|
+
else if (!ambiguousReturns.has(name)) {
|
|
658
|
+
returnTypes.set(name, type);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
if (m['@type-binding.annotation'] !== undefined &&
|
|
662
|
+
m['@type-binding.type'] !== undefined &&
|
|
663
|
+
m['@type-binding.name'] !== undefined) {
|
|
664
|
+
const name = m['@type-binding.name'].text;
|
|
665
|
+
const t = m['@type-binding.type'].text;
|
|
666
|
+
if (t !== 'var') {
|
|
667
|
+
const existing = varTypes.get(name);
|
|
668
|
+
if (existing !== undefined && existing !== t) {
|
|
669
|
+
ambiguousVars.add(name);
|
|
670
|
+
varTypes.delete(name);
|
|
671
|
+
}
|
|
672
|
+
else if (!ambiguousVars.has(name)) {
|
|
673
|
+
varTypes.set(name, t);
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
if (m['@type-binding.constructor'] !== undefined &&
|
|
678
|
+
m['@type-binding.type'] !== undefined &&
|
|
679
|
+
m['@type-binding.name'] !== undefined) {
|
|
680
|
+
const name = m['@type-binding.name'].text;
|
|
681
|
+
const type = m['@type-binding.type'].text;
|
|
682
|
+
const existing = varTypes.get(name);
|
|
683
|
+
if (existing !== undefined && existing !== type) {
|
|
684
|
+
ambiguousVars.add(name);
|
|
685
|
+
varTypes.delete(name);
|
|
686
|
+
}
|
|
687
|
+
else if (!ambiguousVars.has(name)) {
|
|
688
|
+
varTypes.set(name, type);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
const resolved = [];
|
|
693
|
+
for (const m of matches) {
|
|
694
|
+
if (m['@type-binding.call-result'] !== undefined && m['@type-binding.type'] !== undefined) {
|
|
695
|
+
const methodName = m['@type-binding.type'].text;
|
|
696
|
+
const resolvedType = returnTypes.get(methodName);
|
|
697
|
+
if (resolvedType !== undefined) {
|
|
698
|
+
const patched = { ...m };
|
|
699
|
+
patched['@type-binding.type'] = { ...m['@type-binding.type'], text: resolvedType };
|
|
700
|
+
patched['@type-binding.annotation'] = m['@type-binding.call-result'];
|
|
701
|
+
delete patched['@type-binding.call-result'];
|
|
702
|
+
resolved.push(patched);
|
|
703
|
+
continue;
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
if (m['@type-binding.alias'] !== undefined && m['@type-binding.type'] !== undefined) {
|
|
707
|
+
const sourceName = m['@type-binding.type'].text;
|
|
708
|
+
const resolvedType = varTypes.get(sourceName);
|
|
709
|
+
if (resolvedType !== undefined) {
|
|
710
|
+
const patched = { ...m };
|
|
711
|
+
patched['@type-binding.type'] = { ...m['@type-binding.type'], text: resolvedType };
|
|
712
|
+
patched['@type-binding.annotation'] = m['@type-binding.alias'];
|
|
713
|
+
delete patched['@type-binding.alias'];
|
|
714
|
+
resolved.push(patched);
|
|
715
|
+
continue;
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
if (m['@reference.arg-names'] !== undefined && m['@reference.parameter-types'] !== undefined) {
|
|
719
|
+
try {
|
|
720
|
+
const types = JSON.parse(m['@reference.parameter-types'].text);
|
|
721
|
+
const names = JSON.parse(m['@reference.arg-names'].text);
|
|
722
|
+
let patched = false;
|
|
723
|
+
for (let i = 0; i < types.length; i++) {
|
|
724
|
+
if (types[i] === '' && names[i] !== undefined && names[i] !== '') {
|
|
725
|
+
const rt = varTypes.get(names[i]);
|
|
726
|
+
if (rt !== undefined) {
|
|
727
|
+
types[i] = rt;
|
|
728
|
+
patched = true;
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
if (patched) {
|
|
733
|
+
const patchedMatch = { ...m };
|
|
734
|
+
patchedMatch['@reference.parameter-types'] = {
|
|
735
|
+
...m['@reference.parameter-types'],
|
|
736
|
+
text: JSON.stringify(types),
|
|
737
|
+
};
|
|
738
|
+
delete patchedMatch['@reference.arg-names'];
|
|
739
|
+
resolved.push(patchedMatch);
|
|
740
|
+
continue;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
catch {
|
|
744
|
+
// pass through
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
resolved.push(m);
|
|
748
|
+
}
|
|
749
|
+
return resolved;
|
|
750
|
+
}
|
|
751
|
+
/** Infer a Java argument's static type from literal patterns. */
|
|
752
|
+
function inferArgType(argNode) {
|
|
753
|
+
switch (argNode.type) {
|
|
754
|
+
case 'decimal_integer_literal':
|
|
755
|
+
case 'hex_integer_literal':
|
|
756
|
+
case 'octal_integer_literal':
|
|
757
|
+
case 'binary_integer_literal':
|
|
758
|
+
return 'int';
|
|
759
|
+
case 'decimal_floating_point_literal':
|
|
760
|
+
case 'hex_floating_point_literal':
|
|
761
|
+
return 'double';
|
|
762
|
+
case 'string_literal':
|
|
763
|
+
return 'String';
|
|
764
|
+
case 'character_literal':
|
|
765
|
+
return 'char';
|
|
766
|
+
case 'true':
|
|
767
|
+
case 'false':
|
|
768
|
+
return 'boolean';
|
|
769
|
+
case 'null_literal':
|
|
770
|
+
return 'null';
|
|
771
|
+
case 'object_creation_expression': {
|
|
772
|
+
const typeNode = argNode.childForFieldName('type');
|
|
773
|
+
return typeNode?.text ?? '';
|
|
774
|
+
}
|
|
775
|
+
default:
|
|
776
|
+
return '';
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Resolve a Java function-like node from a query-captured node.
|
|
781
|
+
*
|
|
782
|
+
* The `@scope.function` / `@declaration.method` / `@declaration.constructor`
|
|
783
|
+
* anchors all capture directly on the `method_declaration` /
|
|
784
|
+
* `constructor_declaration` node (per JAVA_SCOPE_QUERY), so this is a type
|
|
785
|
+
* guard against `FUNCTION_NODE_TYPES` — the threaded-node equivalent of the
|
|
786
|
+
* old `findNodeAtRange(tree.rootNode, range, type)` root-walk, minus the
|
|
787
|
+
* O(matches × rootChildren) traversal.
|
|
788
|
+
*/
|
|
789
|
+
function findFunctionNode(node) {
|
|
790
|
+
return (0, ast_helpers_js_1.nodeIfType)(node, ...FUNCTION_NODE_TYPES);
|
|
791
|
+
}
|