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,310 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Spring dependency-injection field matcher for the generic `di` phase.
|
|
4
|
+
*
|
|
5
|
+
* Recognizes the fields Spring's container fills via collect-all-implementers
|
|
6
|
+
* collection injection: when a Java class declares a field carrying an
|
|
7
|
+
* injection annotation (`@Autowired` or `@Inject`) typed as `List<T>`,
|
|
8
|
+
* `Set<T>`, `Collection<T>`, or `Map<K,T>`, the container injects EVERY bean
|
|
9
|
+
* implementing interface `T`. The matcher reports the element type name `T`
|
|
10
|
+
* plus a human-readable reason naming the collection wrapper and the
|
|
11
|
+
* annotation that gated the match; the shared `di` phase turns that into
|
|
12
|
+
* `INJECTS` edges.
|
|
13
|
+
*
|
|
14
|
+
* The injection annotation is a hard precondition: a plain (non-annotated)
|
|
15
|
+
* collection field is never injected by the container and produces no match.
|
|
16
|
+
* `@Resource` (JSR-250) is DELIBERATELY excluded: it resolves by bean NAME
|
|
17
|
+
* first (defaulting to the field name), which injects a single named
|
|
18
|
+
* collection bean — the opposite of the collect-all-implementers fan-out
|
|
19
|
+
* INJECTS models. Including it would emit false edges.
|
|
20
|
+
*
|
|
21
|
+
* Matching happens on `rawDeclaredType` (the verbatim type text, generics
|
|
22
|
+
* preserved) — NOT `declaredType`, which is generics-stripped by design
|
|
23
|
+
* (`List<Shape>` → `List`) and can never match the collection patterns.
|
|
24
|
+
*
|
|
25
|
+
* Accepted type shapes (after whitespace normalization — internal runs of
|
|
26
|
+
* whitespace, including newlines from multi-line declarations, collapse to a
|
|
27
|
+
* single space):
|
|
28
|
+
* - `List<T>` / `Set<T>` / `Collection<T>` — element `T`.
|
|
29
|
+
* - `Map<K, T>` — element is the VALUE type `T`; the key `K` is irrelevant
|
|
30
|
+
* for DI resolution and may itself be generic (`Map<Pair<A,B>, T>` — the
|
|
31
|
+
* top-level-comma split is bracket-depth-aware, so nested commas in the
|
|
32
|
+
* key never bleed into the element).
|
|
33
|
+
* - Bounded wildcards `List<? extends T>` / `List<? super T>` — element `T`
|
|
34
|
+
* (both are idiomatic Spring collection injection; the container still
|
|
35
|
+
* collects every implementer of `T`).
|
|
36
|
+
* - Package-qualified wrappers `java.util.List<T>` — the wrapper is
|
|
37
|
+
* recognized by its LAST dotted segment. The ELEMENT keeps its dots
|
|
38
|
+
* (`List<com.a.Shape>` → `com.a.Shape`): dotted element names resolve via
|
|
39
|
+
* `qualifiedName` downstream in the `di` phase.
|
|
40
|
+
*
|
|
41
|
+
* Documented REJECTIONS (parse returns `null` — no INJECTS edges):
|
|
42
|
+
* - `Map<String, List<IFoo>>` — the element itself is generic; a nested
|
|
43
|
+
* generic is not resolvable as a single interface.
|
|
44
|
+
* - `List<?>` — unbounded wildcard; there is no element type to fan out to.
|
|
45
|
+
* - Arrays: `IFoo[]`, `List<IFoo>[]`, `List<IFoo[]>` — array injection is
|
|
46
|
+
* not the collect-all-implementers shape INJECTS models.
|
|
47
|
+
* - Non-collection types (`IFoo`, `Optional<IFoo>`, …) and wrong generic
|
|
48
|
+
* arity (`Map<String>`, `List<A, B>`).
|
|
49
|
+
* - Anything whose element is not a plain (possibly dotted) Java type name —
|
|
50
|
+
* this makes the parser fail closed on unanticipated syntax. In particular
|
|
51
|
+
* Java block comments inside the generic arguments (a `/* ... ` comment
|
|
52
|
+
* between `<` and the element) are NOT stripped and fail closed —
|
|
53
|
+
* acceptable.
|
|
54
|
+
*
|
|
55
|
+
* Registered for Java and Kotlin in `./index.ts` (`DI_RESOLVERS`); language
|
|
56
|
+
* routing is the registry's job, so the matcher itself never reads
|
|
57
|
+
* `node.properties.language`. Kotlin's AST-backed class metadata is the
|
|
58
|
+
* primary path because Kotlin Property extraction intentionally exposes less
|
|
59
|
+
* annotation/type syntax than Java's legacy field contract.
|
|
60
|
+
*/
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.springDiResolver = exports.springDiFieldMatcher = exports.SPRING_DI_CAPTURED_FIELD_PROPERTY = exports.SPRING_DI_PROVIDER_PROPERTY = exports.SPRING_DI_INJECTION_SITES_PROPERTY = void 0;
|
|
63
|
+
exports.parseSpringCollectionType = parseSpringCollectionType;
|
|
64
|
+
exports.parseSpringInjectionType = parseSpringInjectionType;
|
|
65
|
+
const env_js_1 = require("../utils/env.js");
|
|
66
|
+
const logger_js_1 = require("../../logger.js");
|
|
67
|
+
/**
|
|
68
|
+
* Annotations that trigger Spring's collect-all-implementers collection
|
|
69
|
+
* injection. `@Resource` is deliberately absent — JSR-250 resolves by bean
|
|
70
|
+
* NAME first (defaulting to the field name), injecting a single named
|
|
71
|
+
* collection bean rather than fanning out to every implementer, so an
|
|
72
|
+
* INJECTS fan-out for it would be a false edge.
|
|
73
|
+
*/
|
|
74
|
+
const INJECTION_ANNOTATIONS = new Set(['@Autowired', '@Inject']);
|
|
75
|
+
/** Collection wrappers whose generic element Spring fans out to every
|
|
76
|
+
* implementer. `Map` is special-cased for arity (2 args, element = value). */
|
|
77
|
+
const COLLECTION_WRAPPERS = new Set(['List', 'Set', 'Collection', 'Map']);
|
|
78
|
+
/** Bounded-wildcard prefixes stripped from the element position (single-spaced
|
|
79
|
+
* — the input is whitespace-normalized before these are checked). */
|
|
80
|
+
const WILDCARD_EXTENDS_PREFIX = '? extends ';
|
|
81
|
+
const WILDCARD_SUPER_PREFIX = '? super ';
|
|
82
|
+
/** A plain (possibly dotted) Java type name — the only element shape the
|
|
83
|
+
* parser accepts. Everything else (wildcards, arrays, comments, stray
|
|
84
|
+
* punctuation) fails closed. */
|
|
85
|
+
const JAVA_TYPE_NAME_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]*)*$/;
|
|
86
|
+
/** Ephemeral Class-node property populated by Java's post-resolution Spring
|
|
87
|
+
* metadata hook. It is consumed in the same pipeline run before persistence. */
|
|
88
|
+
exports.SPRING_DI_INJECTION_SITES_PROPERTY = 'springDiInjectionSites';
|
|
89
|
+
/** Ephemeral Class-node property carrying Spring bean names / @Primary. */
|
|
90
|
+
exports.SPRING_DI_PROVIDER_PROPERTY = 'springDiProvider';
|
|
91
|
+
/** Marker placed on Property nodes whose richer AST-backed field fact was
|
|
92
|
+
* attached to the owning Class, suppressing the legacy collection fallback. */
|
|
93
|
+
exports.SPRING_DI_CAPTURED_FIELD_PROPERTY = 'springDiCapturedField';
|
|
94
|
+
/**
|
|
95
|
+
* Split a generic-argument list on TOP-LEVEL commas only, tracking `<`/`>`
|
|
96
|
+
* bracket depth so nested generics (e.g. the `Pair<A,B>` key in
|
|
97
|
+
* `Map<Pair<A,B>, IFoo>`) never split mid-argument.
|
|
98
|
+
*
|
|
99
|
+
* @returns the top-level argument segments (untrimmed), or `null` when the
|
|
100
|
+
* brackets are unbalanced (fail closed on malformed input).
|
|
101
|
+
*/
|
|
102
|
+
function splitTopLevelGenericArgs(inner) {
|
|
103
|
+
const args = [];
|
|
104
|
+
let depth = 0;
|
|
105
|
+
let segmentStart = 0;
|
|
106
|
+
for (let i = 0; i < inner.length; i++) {
|
|
107
|
+
const ch = inner[i];
|
|
108
|
+
if (ch === '<') {
|
|
109
|
+
depth++;
|
|
110
|
+
}
|
|
111
|
+
else if (ch === '>') {
|
|
112
|
+
depth--;
|
|
113
|
+
if (depth < 0)
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
else if (ch === ',' && depth === 0) {
|
|
117
|
+
args.push(inner.slice(segmentStart, i));
|
|
118
|
+
segmentStart = i + 1;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (depth !== 0)
|
|
122
|
+
return null;
|
|
123
|
+
args.push(inner.slice(segmentStart));
|
|
124
|
+
return args;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Extract the injected bean type name from one (whitespace-normalized)
|
|
128
|
+
* generic-argument segment: strip a bounded-wildcard prefix, then require a
|
|
129
|
+
* plain dotted Java type name.
|
|
130
|
+
*
|
|
131
|
+
* @returns the element type name, or `null` for unbounded wildcards, nested
|
|
132
|
+
* generics, arrays, and any other non-type-name shape (fail closed).
|
|
133
|
+
*/
|
|
134
|
+
function parseElementTypeName(segment) {
|
|
135
|
+
let element = segment.trim();
|
|
136
|
+
// Bounded wildcards are idiomatic collection injection: the container
|
|
137
|
+
// still collects every implementer of the bound.
|
|
138
|
+
if (element.startsWith(WILDCARD_EXTENDS_PREFIX)) {
|
|
139
|
+
element = element.slice(WILDCARD_EXTENDS_PREFIX.length);
|
|
140
|
+
}
|
|
141
|
+
else if (element.startsWith(WILDCARD_SUPER_PREFIX)) {
|
|
142
|
+
element = element.slice(WILDCARD_SUPER_PREFIX.length);
|
|
143
|
+
}
|
|
144
|
+
// Final gate: a plain (possibly dotted) type name. Rejects nested generics
|
|
145
|
+
// (`Map<String, List<IFoo>>` — not resolvable as a single interface),
|
|
146
|
+
// arrays (`List<IFoo[]>` — not the fan-out shape INJECTS models), the
|
|
147
|
+
// unbounded wildcard `?`, un-stripped comments, and any other residue —
|
|
148
|
+
// all documented rejections; fail closed.
|
|
149
|
+
if (!JAVA_TYPE_NAME_PATTERN.test(element))
|
|
150
|
+
return null;
|
|
151
|
+
return element;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Parse a Spring DI collection field's raw declared type (verbatim source
|
|
155
|
+
* text, generics preserved) and return the injected bean type name.
|
|
156
|
+
*
|
|
157
|
+
* Whitespace-normalizes first (raw tree-sitter `.text` can span lines), then
|
|
158
|
+
* recognizes the wrapper by the LAST dotted segment before the first `<`
|
|
159
|
+
* (so `java.util.List<IFoo>` works), depth-aware-splits the generic argument
|
|
160
|
+
* list, and validates the element position. See the module docstring for the
|
|
161
|
+
* full accepted/rejected shape inventory.
|
|
162
|
+
*
|
|
163
|
+
* @returns the collection wrapper name + element type name, or `null` when
|
|
164
|
+
* the raw declared type is not a recognized Spring collection shape.
|
|
165
|
+
*/
|
|
166
|
+
function parseSpringCollectionType(rawDeclaredType) {
|
|
167
|
+
// Collapse ALL internal whitespace runs (spaces, tabs, newlines from
|
|
168
|
+
// multi-line declarations) to single spaces, then trim the ends.
|
|
169
|
+
const normalized = rawDeclaredType.replace(/\s+/g, ' ').trim();
|
|
170
|
+
const openIndex = normalized.indexOf('<');
|
|
171
|
+
// No generic argument list, or trailing residue after the closing `>`
|
|
172
|
+
// (e.g. the array suffix in `List<IFoo>[]`) — not a collection injection.
|
|
173
|
+
if (openIndex === -1 || !normalized.endsWith('>'))
|
|
174
|
+
return null;
|
|
175
|
+
// Wrapper = last dotted segment of the pre-`<` text: strips a package
|
|
176
|
+
// qualifier from the WRAPPER only (`java.util.List` → `List`).
|
|
177
|
+
const wrapperPath = normalized.slice(0, openIndex).trim();
|
|
178
|
+
const wrapperSegments = wrapperPath.split('.');
|
|
179
|
+
const wrapper = wrapperSegments[wrapperSegments.length - 1];
|
|
180
|
+
if (!COLLECTION_WRAPPERS.has(wrapper))
|
|
181
|
+
return null;
|
|
182
|
+
const inner = normalized.slice(openIndex + 1, normalized.length - 1);
|
|
183
|
+
const args = splitTopLevelGenericArgs(inner);
|
|
184
|
+
if (args === null)
|
|
185
|
+
return null;
|
|
186
|
+
// List/Set/Collection take exactly one type argument; Map exactly two,
|
|
187
|
+
// and the injected bean type is the VALUE (2nd argument) — the key is
|
|
188
|
+
// irrelevant for DI resolution.
|
|
189
|
+
const expectedArity = wrapper === 'Map' ? 2 : 1;
|
|
190
|
+
if (args.length !== expectedArity)
|
|
191
|
+
return null;
|
|
192
|
+
const elementTypeName = parseElementTypeName(args[expectedArity - 1]);
|
|
193
|
+
if (elementTypeName === null)
|
|
194
|
+
return null;
|
|
195
|
+
return { collectionType: wrapper, elementTypeName };
|
|
196
|
+
}
|
|
197
|
+
/** Parse either a supported collect-all type or a standard single bean type. */
|
|
198
|
+
function parseSpringInjectionType(rawDeclaredType) {
|
|
199
|
+
const collection = parseSpringCollectionType(rawDeclaredType);
|
|
200
|
+
if (collection !== null) {
|
|
201
|
+
return {
|
|
202
|
+
targetTypeName: collection.elementTypeName,
|
|
203
|
+
cardinality: 'collection',
|
|
204
|
+
displayType: `${collection.collectionType}<${collection.elementTypeName}>`,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const normalized = rawDeclaredType.replace(/\s+/g, '').trim();
|
|
208
|
+
if (!JAVA_TYPE_NAME_PATTERN.test(normalized))
|
|
209
|
+
return null;
|
|
210
|
+
return { targetTypeName: normalized, cardinality: 'single', displayType: normalized };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Match a `Property` node against Spring's collection-injection shape.
|
|
214
|
+
*
|
|
215
|
+
* Returns the parsed match (with a Spring-specific human-readable `reason`
|
|
216
|
+
* payload) or `null` when the field is not container-injected.
|
|
217
|
+
*/
|
|
218
|
+
const springDiFieldMatcher = (node) => {
|
|
219
|
+
// Injection-annotation gate: only fields the container actually
|
|
220
|
+
// injects (@Autowired / @Inject) are candidates. Plain collection
|
|
221
|
+
// fields are never injected; @Resource is deliberately excluded
|
|
222
|
+
// (by-name-first semantics — see INJECTION_ANNOTATIONS).
|
|
223
|
+
const matchedAnnotation = node.properties.annotations?.find((a) => INJECTION_ANNOTATIONS.has(a));
|
|
224
|
+
if (matchedAnnotation === undefined)
|
|
225
|
+
return null;
|
|
226
|
+
// Match on rawDeclaredType ONLY — no `?? declaredType` fallback:
|
|
227
|
+
// production `declaredType` is generics-stripped by design, so a
|
|
228
|
+
// fallback can never match real data and would only mask plumbing
|
|
229
|
+
// regressions as quiet no-ops.
|
|
230
|
+
const rawDeclaredType = node.properties.rawDeclaredType;
|
|
231
|
+
if (!rawDeclaredType) {
|
|
232
|
+
// An injection-annotated field with NO rawDeclaredType means the
|
|
233
|
+
// extraction plumbing broke its contract (U1 threads the raw type
|
|
234
|
+
// wherever annotations are threaded) — surface it, don't silently drop.
|
|
235
|
+
if (env_js_1.isDev) {
|
|
236
|
+
logger_js_1.logger.warn(`Spring DI: annotated field '${node.properties.name}' (${node.properties.filePath}) has no rawDeclaredType — extraction plumbing contract breach; skipping`);
|
|
237
|
+
}
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
const parsed = parseSpringCollectionType(rawDeclaredType);
|
|
241
|
+
if (!parsed)
|
|
242
|
+
return null;
|
|
243
|
+
return {
|
|
244
|
+
elementTypeName: parsed.elementTypeName,
|
|
245
|
+
// Honest reason: states the annotation actually found on the field and
|
|
246
|
+
// the collection wrapper it gated. Framework specifics live HERE, in the
|
|
247
|
+
// payload — never in the phase.
|
|
248
|
+
reason: `Spring DI: ${matchedAnnotation} ${parsed.collectionType}<${parsed.elementTypeName}>`,
|
|
249
|
+
};
|
|
250
|
+
};
|
|
251
|
+
exports.springDiFieldMatcher = springDiFieldMatcher;
|
|
252
|
+
function isInjectionMatch(value) {
|
|
253
|
+
if (value === null || typeof value !== 'object')
|
|
254
|
+
return false;
|
|
255
|
+
const match = value;
|
|
256
|
+
const namedSelection = match.namedSelection;
|
|
257
|
+
return (typeof match.targetTypeName === 'string' &&
|
|
258
|
+
(match.cardinality === 'single' || match.cardinality === 'collection') &&
|
|
259
|
+
typeof match.reason === 'string' &&
|
|
260
|
+
(match.edgeSource === undefined ||
|
|
261
|
+
match.edgeSource === 'owner-class' ||
|
|
262
|
+
match.edgeSource === 'site') &&
|
|
263
|
+
(namedSelection === undefined ||
|
|
264
|
+
(typeof namedSelection === 'object' &&
|
|
265
|
+
namedSelection !== null &&
|
|
266
|
+
typeof namedSelection.name === 'string' &&
|
|
267
|
+
typeof namedSelection.reason === 'string' &&
|
|
268
|
+
(namedSelection.fallbackToType === undefined ||
|
|
269
|
+
typeof namedSelection.fallbackToType === 'boolean'))));
|
|
270
|
+
}
|
|
271
|
+
function isProviderMatch(value) {
|
|
272
|
+
if (value === null || typeof value !== 'object')
|
|
273
|
+
return false;
|
|
274
|
+
const provider = value;
|
|
275
|
+
return (Array.isArray(provider.names) &&
|
|
276
|
+
provider.names.every((name) => typeof name === 'string') &&
|
|
277
|
+
(provider.providedTypeName === undefined || typeof provider.providedTypeName === 'string') &&
|
|
278
|
+
(provider.declaredByNodeId === undefined || typeof provider.declaredByNodeId === 'string') &&
|
|
279
|
+
(provider.preferenceReason === undefined || typeof provider.preferenceReason === 'string'));
|
|
280
|
+
}
|
|
281
|
+
/** JVM/Spring resolver registered behind the framework-neutral DI seam. */
|
|
282
|
+
exports.springDiResolver = {
|
|
283
|
+
matchInjectionSites(node) {
|
|
284
|
+
const matches = [];
|
|
285
|
+
// Preserve the existing Property-node collection contract for hand-built
|
|
286
|
+
// graphs and for compatibility with pre-#2414 extraction fixtures.
|
|
287
|
+
if (node.label === 'Property' && node.properties[exports.SPRING_DI_CAPTURED_FIELD_PROPERTY] !== true) {
|
|
288
|
+
const field = (0, exports.springDiFieldMatcher)(node);
|
|
289
|
+
if (field !== null) {
|
|
290
|
+
matches.push({
|
|
291
|
+
targetTypeName: field.elementTypeName,
|
|
292
|
+
cardinality: 'collection',
|
|
293
|
+
reason: field.reason,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const attached = node.properties[exports.SPRING_DI_INJECTION_SITES_PROPERTY];
|
|
298
|
+
if (Array.isArray(attached)) {
|
|
299
|
+
for (const candidate of attached) {
|
|
300
|
+
if (isInjectionMatch(candidate))
|
|
301
|
+
matches.push(candidate);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return matches;
|
|
305
|
+
},
|
|
306
|
+
matchProvider(node) {
|
|
307
|
+
const attached = node.properties[exports.SPRING_DI_PROVIDER_PROPERTY];
|
|
308
|
+
return isProviderMatch(attached) ? attached : null;
|
|
309
|
+
},
|
|
310
|
+
};
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 5 of the RFC #909 ingestion lifecycle: drain `ReferenceIndex`
|
|
4
|
+
* into the knowledge graph as labeled edges with `confidence` and
|
|
5
|
+
* `evidence` properties (Ring 2 PKG #925).
|
|
6
|
+
*
|
|
7
|
+
* The resolution phase (future PR) writes `Reference` records into
|
|
8
|
+
* `model.scopes.referenceSites`-derived `ReferenceIndex`; this module
|
|
9
|
+
* materializes those records as `GraphRelationship`s via
|
|
10
|
+
* `graph.addRelationship`. Every emitted edge carries:
|
|
11
|
+
*
|
|
12
|
+
* - `type`: one of `'CALLS' | 'ACCESSES' | 'INHERITS' | 'USES'`
|
|
13
|
+
* (mapped from `Reference.kind` — `'read'` and `'write'` both route
|
|
14
|
+
* to `ACCESSES`; `'type-reference'` and `'import-use'` route to
|
|
15
|
+
* `USES`; `'call'` stays `CALLS`; `'inherits'` stays `INHERITS`).
|
|
16
|
+
* - `confidence`: the pre-computed confidence from the Reference record.
|
|
17
|
+
* - `reason`: human-readable summary (`"scope-resolution: call | confidence 0.75"`).
|
|
18
|
+
* - `evidence`: the full `ResolutionEvidence[]` trace — additive graph
|
|
19
|
+
* property (see `GraphRelationship.evidence` in cgraph-shared),
|
|
20
|
+
* so queries that don't know about it are unaffected.
|
|
21
|
+
* - `step`: carries the reference's access-kind discriminant when
|
|
22
|
+
* available (`1` for read, `2` for write) so `ACCESSES` edges retain
|
|
23
|
+
* the read/write distinction without forcing a new edge type.
|
|
24
|
+
*
|
|
25
|
+
* ## Optional scope-tree flush
|
|
26
|
+
*
|
|
27
|
+
* When `INGESTION_EMIT_SCOPES=1` is set, this module also emits:
|
|
28
|
+
*
|
|
29
|
+
* - `Scope` nodes for every `Scope` in the tree
|
|
30
|
+
* - `CONTAINS` edges from parent scope to child scope
|
|
31
|
+
* - `DEFINES` edges from scope to its `ownedDefs` members
|
|
32
|
+
* - `IMPORTS` edges from scope to `targetModuleScope` of each finalized
|
|
33
|
+
* `ImportEdge` that carries one
|
|
34
|
+
*
|
|
35
|
+
* Off by default — existing queries that don't know about `Scope` nodes
|
|
36
|
+
* continue to work, and the storage cost is opt-in.
|
|
37
|
+
*
|
|
38
|
+
* ## Source-of-truth: the caller def for a reference
|
|
39
|
+
*
|
|
40
|
+
* A `Reference` says "some code inside `fromScope` references `toDef`".
|
|
41
|
+
* The graph wants `(callerNodeId, calleeNodeId)`. We resolve the caller
|
|
42
|
+
* by walking up the scope tree from `fromScope` until we find a scope
|
|
43
|
+
* whose `ownedDefs` contains a Function-like def. If no such ancestor
|
|
44
|
+
* exists, the edge is attributed to the first def owned by the innermost
|
|
45
|
+
* ancestor scope, and if THAT produces nothing either the edge is
|
|
46
|
+
* skipped (with a count returned in `EmitStats.skippedNoCaller`).
|
|
47
|
+
*/
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.emitReferencesToGraph = emitReferencesToGraph;
|
|
50
|
+
exports.emitScopeGraph = emitScopeGraph;
|
|
51
|
+
const line_base_js_1 = require("./utils/line-base.js");
|
|
52
|
+
/**
|
|
53
|
+
* Drain `referenceIndex.bySourceScope` into graph edges.
|
|
54
|
+
*
|
|
55
|
+
* The scope-tree flush is controlled separately by
|
|
56
|
+
* `INGESTION_EMIT_SCOPES` — callers can run `emitReferencesToGraph`
|
|
57
|
+
* without scope-node emission or layer the two calls as needed.
|
|
58
|
+
*/
|
|
59
|
+
function emitReferencesToGraph(input) {
|
|
60
|
+
const { graph, scopes, referenceIndex } = input;
|
|
61
|
+
const sourceLabel = input.sourceLabel ?? 'scope-resolution';
|
|
62
|
+
let edgesEmitted = 0;
|
|
63
|
+
let skippedNoCaller = 0;
|
|
64
|
+
let skippedMissingTarget = 0;
|
|
65
|
+
for (const [fromScope, refs] of referenceIndex.bySourceScope) {
|
|
66
|
+
for (const ref of refs) {
|
|
67
|
+
const targetDef = scopes.defs.get(ref.toDef);
|
|
68
|
+
if (targetDef === undefined) {
|
|
69
|
+
skippedMissingTarget++;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const callerId = resolveCallerNodeId(fromScope, scopes);
|
|
73
|
+
if (callerId === undefined) {
|
|
74
|
+
skippedNoCaller++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
graph.addRelationship(buildRelationship(ref, callerId, targetDef, sourceLabel));
|
|
78
|
+
edgesEmitted++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const scopeStats = isScopeEmissionEnabled()
|
|
82
|
+
? emitScopeGraph({ graph, scopes })
|
|
83
|
+
: { scopeNodesEmitted: 0, scopeEdgesEmitted: 0 };
|
|
84
|
+
return { edgesEmitted, skippedNoCaller, skippedMissingTarget, ...scopeStats };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Emit `Scope` nodes + `CONTAINS`/`DEFINES`/`IMPORTS` edges representing
|
|
88
|
+
* the lexical scope tree itself. Skipped unless `INGESTION_EMIT_SCOPES=1`
|
|
89
|
+
* at the public entry point; exported here for tests that want to
|
|
90
|
+
* exercise the path directly.
|
|
91
|
+
*/
|
|
92
|
+
function emitScopeGraph(input) {
|
|
93
|
+
const { graph, scopes } = input;
|
|
94
|
+
let scopeNodesEmitted = 0;
|
|
95
|
+
let scopeEdgesEmitted = 0;
|
|
96
|
+
for (const scope of scopes.scopeTree.byId.values()) {
|
|
97
|
+
graph.addNode({
|
|
98
|
+
id: scope.id,
|
|
99
|
+
label: 'CodeElement', // the generic bucket for non-symbol graph nodes
|
|
100
|
+
properties: {
|
|
101
|
+
name: scope.kind,
|
|
102
|
+
filePath: scope.filePath,
|
|
103
|
+
startLine: (0, line_base_js_1.toZeroBasedLine)(scope.range.startLine),
|
|
104
|
+
endLine: (0, line_base_js_1.toZeroBasedLine)(scope.range.endLine),
|
|
105
|
+
description: `Scope: ${scope.kind}`,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
scopeNodesEmitted++;
|
|
109
|
+
if (scope.parent !== null) {
|
|
110
|
+
graph.addRelationship({
|
|
111
|
+
id: `rel:contains:${scope.parent}->${scope.id}`,
|
|
112
|
+
sourceId: scope.parent,
|
|
113
|
+
targetId: scope.id,
|
|
114
|
+
type: 'CONTAINS',
|
|
115
|
+
confidence: 1,
|
|
116
|
+
reason: 'scope-tree parent/child',
|
|
117
|
+
});
|
|
118
|
+
scopeEdgesEmitted++;
|
|
119
|
+
}
|
|
120
|
+
for (const def of scope.ownedDefs) {
|
|
121
|
+
graph.addRelationship({
|
|
122
|
+
id: `rel:defines:${scope.id}->${def.nodeId}`,
|
|
123
|
+
sourceId: scope.id,
|
|
124
|
+
targetId: def.nodeId,
|
|
125
|
+
type: 'DEFINES',
|
|
126
|
+
confidence: 1,
|
|
127
|
+
reason: 'scope.ownedDefs',
|
|
128
|
+
});
|
|
129
|
+
scopeEdgesEmitted++;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
for (const [scopeId, edges] of scopes.imports) {
|
|
133
|
+
for (const edge of edges) {
|
|
134
|
+
if (edge.targetModuleScope === undefined)
|
|
135
|
+
continue;
|
|
136
|
+
graph.addRelationship({
|
|
137
|
+
id: `rel:imports:${scopeId}->${edge.targetModuleScope}:${edge.localName}`,
|
|
138
|
+
sourceId: scopeId,
|
|
139
|
+
targetId: edge.targetModuleScope,
|
|
140
|
+
type: 'IMPORTS',
|
|
141
|
+
confidence: edge.linkStatus === 'unresolved' ? 0.5 : 1,
|
|
142
|
+
reason: `import ${edge.kind} ${edge.localName}`,
|
|
143
|
+
});
|
|
144
|
+
scopeEdgesEmitted++;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { scopeNodesEmitted, scopeEdgesEmitted };
|
|
148
|
+
}
|
|
149
|
+
// ─── Internal ───────────────────────────────────────────────────────────────
|
|
150
|
+
/** Accepted truthy values for `INGESTION_EMIT_SCOPES`. */
|
|
151
|
+
const TRUTHY = new Set(['true', '1', 'yes']);
|
|
152
|
+
function isScopeEmissionEnabled() {
|
|
153
|
+
const raw = process.env['INGESTION_EMIT_SCOPES'];
|
|
154
|
+
if (raw === undefined)
|
|
155
|
+
return false;
|
|
156
|
+
return TRUTHY.has(raw.trim().toLowerCase());
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Walk up from `startScope` looking for the first ancestor scope whose
|
|
160
|
+
* `ownedDefs` contains a Function-like def (Function / Method /
|
|
161
|
+
* Constructor). Fall back to the innermost ancestor's first `ownedDef`
|
|
162
|
+
* if none is found; return `undefined` if all ancestors have no defs.
|
|
163
|
+
*/
|
|
164
|
+
function resolveCallerNodeId(startScope, scopes) {
|
|
165
|
+
const tree = scopes.scopeTree;
|
|
166
|
+
let current = startScope;
|
|
167
|
+
const visited = new Set();
|
|
168
|
+
let firstOwnedFallback;
|
|
169
|
+
while (current !== null) {
|
|
170
|
+
if (visited.has(current))
|
|
171
|
+
break;
|
|
172
|
+
visited.add(current);
|
|
173
|
+
const scope = tree.getScope(current);
|
|
174
|
+
if (scope === undefined)
|
|
175
|
+
break;
|
|
176
|
+
// Prefer a Function-like owner.
|
|
177
|
+
const fnDef = scope.ownedDefs.find((d) => isFunctionLike(d.type));
|
|
178
|
+
if (fnDef !== undefined)
|
|
179
|
+
return fnDef.nodeId;
|
|
180
|
+
// Stash the first owned def we see as a conservative fallback.
|
|
181
|
+
if (firstOwnedFallback === undefined && scope.ownedDefs.length > 0) {
|
|
182
|
+
firstOwnedFallback = scope.ownedDefs[0].nodeId;
|
|
183
|
+
}
|
|
184
|
+
current = scope.parent;
|
|
185
|
+
}
|
|
186
|
+
return firstOwnedFallback;
|
|
187
|
+
}
|
|
188
|
+
function isFunctionLike(type) {
|
|
189
|
+
return type === 'Function' || type === 'Method' || type === 'Constructor';
|
|
190
|
+
}
|
|
191
|
+
function buildRelationship(ref, callerId, targetDef, sourceLabel) {
|
|
192
|
+
const type = mapKindToType(ref.kind);
|
|
193
|
+
const reason = `${sourceLabel}: ${ref.kind} | confidence ${ref.confidence.toFixed(3)}`;
|
|
194
|
+
// `step` encodes read/write discriminator for ACCESSES edges (1=read, 2=write).
|
|
195
|
+
// Other kinds omit `step`.
|
|
196
|
+
const step = ref.kind === 'read' ? 1 : ref.kind === 'write' ? 2 : undefined;
|
|
197
|
+
return {
|
|
198
|
+
id: `rel:${type}:${callerId}->${targetDef.nodeId}:${ref.atRange.startLine}:${ref.atRange.startCol}`,
|
|
199
|
+
sourceId: callerId,
|
|
200
|
+
targetId: targetDef.nodeId,
|
|
201
|
+
type,
|
|
202
|
+
confidence: ref.confidence,
|
|
203
|
+
reason,
|
|
204
|
+
evidence: ref.evidence.map(serializeEvidence),
|
|
205
|
+
...(step !== undefined ? { step } : {}),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Map a `Reference.kind` to an existing `RelationshipType`. Read/write
|
|
210
|
+
* both fold into `ACCESSES`; `type-reference`, `import-use`, and `macro`
|
|
211
|
+
* all fold into `USES`. This keeps the graph schema additive — no new
|
|
212
|
+
* RelationshipType values are introduced by this module.
|
|
213
|
+
*
|
|
214
|
+
* `macro` folds into `USES` (not `CALLS`) deliberately: a macro
|
|
215
|
+
* invocation targets a `Macro` node, not a callable function, so keeping
|
|
216
|
+
* it out of the `CALLS` keyspace preserves the invariant that `CALLS`
|
|
217
|
+
* edges denote function/method dispatch.
|
|
218
|
+
*/
|
|
219
|
+
function mapKindToType(kind) {
|
|
220
|
+
switch (kind) {
|
|
221
|
+
case 'call':
|
|
222
|
+
return 'CALLS';
|
|
223
|
+
case 'read':
|
|
224
|
+
case 'write':
|
|
225
|
+
return 'ACCESSES';
|
|
226
|
+
case 'inherits':
|
|
227
|
+
return 'INHERITS';
|
|
228
|
+
case 'type-reference':
|
|
229
|
+
case 'import-use':
|
|
230
|
+
case 'macro':
|
|
231
|
+
// value-ref: function registered as an object-literal property value —
|
|
232
|
+
// a reference, not an invocation; CALLS are synthesized separately by
|
|
233
|
+
// the property-dispatch pass (#2437).
|
|
234
|
+
case 'value-ref':
|
|
235
|
+
return 'USES';
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function serializeEvidence(e) {
|
|
239
|
+
return {
|
|
240
|
+
kind: e.kind,
|
|
241
|
+
weight: e.weight,
|
|
242
|
+
...(e.note !== undefined ? { note: e.note } : {}),
|
|
243
|
+
};
|
|
244
|
+
}
|