cgraphx 2.0.1 → 2.0.3
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 +7 -5
- package/dist/.claude-template/commands/end.md +1 -1
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
- package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
- package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
- package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
- package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
- package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
- 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/features/scanner.d.ts +2 -0
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +27 -6
- package/dist/core/features/scanner.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/package.json +1 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pipeline orchestrator — dependency-ordered ingestion pipeline.
|
|
4
|
+
*
|
|
5
|
+
* The pipeline is composed of named phases with explicit dependencies.
|
|
6
|
+
* Each phase is defined in its own file under `pipeline-phases/`.
|
|
7
|
+
* The runner in `pipeline-phases/runner.ts` executes phases in
|
|
8
|
+
* topological order, passing typed outputs from upstream phases as
|
|
9
|
+
* inputs to downstream phases.
|
|
10
|
+
*
|
|
11
|
+
* To add a new phase:
|
|
12
|
+
* 1. Create a new file in `pipeline-phases/` following the pattern
|
|
13
|
+
* 2. Export it from `pipeline-phases/index.ts`
|
|
14
|
+
* 3. Add it to the `ALL_PHASES` array below
|
|
15
|
+
*
|
|
16
|
+
* See ARCHITECTURE.md for the full phase dependency diagram.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.runPipelineFromRepo = void 0;
|
|
20
|
+
exports.buildPhaseList = buildPhaseList;
|
|
21
|
+
const graph_js_1 = require("../graph/graph.js");
|
|
22
|
+
const graph_emit_sink_js_1 = require("../lbug/graph-emit-sink.js");
|
|
23
|
+
const index_js_1 = require("./pipeline-phases/index.js");
|
|
24
|
+
// ── Phase registry ─────────────────────────────────────────────────────────
|
|
25
|
+
/**
|
|
26
|
+
* All pipeline phases with their dependency relationships.
|
|
27
|
+
*
|
|
28
|
+
* Phase dependency graph:
|
|
29
|
+
*
|
|
30
|
+
* scan → structure → springConfig → parse → [routes, tools, rpcEdges, httpApiCalls, orm]
|
|
31
|
+
* → crossFile → scopeResolution → [springAutoConfiguration, springAop] → pruneLocalSymbols
|
|
32
|
+
* → mro → springAopInheritance → di → communities → processes
|
|
33
|
+
*
|
|
34
|
+
* rpcEdges (deps: parse) and httpApiCalls (deps: parse, rpcEdges) are the
|
|
35
|
+
* cross-service contract phases (spec §5.4, §6): they emit RCALLS /
|
|
36
|
+
* HTTP_CALLS edges and ExternalService nodes from workspace-config annotations.
|
|
37
|
+
*
|
|
38
|
+
* To add a new phase: create a file in pipeline-phases/, export the phase
|
|
39
|
+
* object, and `.register()` it at the appropriate position below. Opt-in
|
|
40
|
+
* phases pass an `enabledWhen` predicate (issue #2080 phase-registry seam) —
|
|
41
|
+
* the legacy `if (!skipGraphPhases)` guard is now expressed that way on the
|
|
42
|
+
* five graph phases, with no change in behaviour.
|
|
43
|
+
*/
|
|
44
|
+
function buildPhaseList(options) {
|
|
45
|
+
return (new index_js_1.PhaseRegistry()
|
|
46
|
+
.register(index_js_1.scanPhase)
|
|
47
|
+
.register(index_js_1.structurePhase)
|
|
48
|
+
.register(index_js_1.springConfigPhase)
|
|
49
|
+
.register(index_js_1.parsePhase)
|
|
50
|
+
.register(index_js_1.routesPhase)
|
|
51
|
+
.register(index_js_1.toolsPhase)
|
|
52
|
+
.register(index_js_1.rpcEdgesPhase)
|
|
53
|
+
.register(index_js_1.httpApiCallsPhase)
|
|
54
|
+
.register(index_js_1.ormPhase)
|
|
55
|
+
.register(index_js_1.crossFilePhase)
|
|
56
|
+
.register(index_js_1.scopeResolutionPhase)
|
|
57
|
+
.register(index_js_1.springAutoConfigurationPhase)
|
|
58
|
+
.register(index_js_1.springAopPhase)
|
|
59
|
+
.register(index_js_1.pruneLocalSymbolsPhase)
|
|
60
|
+
.register(index_js_1.mroPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
61
|
+
.register(index_js_1.springAopInheritancePhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
62
|
+
.register(index_js_1.diPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
63
|
+
.register(index_js_1.communitiesPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
64
|
+
.register(index_js_1.processesPhase, { enabledWhen: (o) => !o.skipGraphPhases })
|
|
65
|
+
.build(options ?? {}));
|
|
66
|
+
}
|
|
67
|
+
// ── Pipeline orchestrator ─────────────────────────────────────────────────
|
|
68
|
+
const runPipelineFromRepo = async (repoPath, onProgress, options) => {
|
|
69
|
+
const graph = (0, graph_js_1.createKnowledgeGraph)();
|
|
70
|
+
const pipelineStart = Date.now();
|
|
71
|
+
// Streamed structural emit (#2680). The sink is a write-routing façade over
|
|
72
|
+
// `graph`; it streams nothing until `beginStreaming()` fires at the parse
|
|
73
|
+
// boundary.
|
|
74
|
+
//
|
|
75
|
+
// A missing `graphEmitCsvDir` is a caller bug, not a reason to quietly skip
|
|
76
|
+
// streaming: this is on by default, so a programmatic host that builds its own
|
|
77
|
+
// `PipelineOptions` (eval-server, the MCP daemon, a test) would otherwise ask
|
|
78
|
+
// for streaming, silently not get it, and still see a successful run. Fail
|
|
79
|
+
// loudly instead — the whole point of the surrounding work is that a degraded
|
|
80
|
+
// outcome must never look like a clean one.
|
|
81
|
+
let graphEmitSink;
|
|
82
|
+
if (options?.streamGraphEmit === true) {
|
|
83
|
+
if (options.graphEmitCsvDir === undefined) {
|
|
84
|
+
throw new Error('streamGraphEmit was requested but graphEmitCsvDir is missing. The caller owns ' +
|
|
85
|
+
'storage-path resolution (see resolveNativeSafeStorageDir in run-analyze.ts); ' +
|
|
86
|
+
'pass the directory, or leave streamGraphEmit unset to run without streaming.');
|
|
87
|
+
}
|
|
88
|
+
graphEmitSink = new graph_emit_sink_js_1.GraphEmitSink(graph, options.graphEmitCsvDir);
|
|
89
|
+
}
|
|
90
|
+
const phases = buildPhaseList(options);
|
|
91
|
+
let graphEmitManifest;
|
|
92
|
+
let results;
|
|
93
|
+
try {
|
|
94
|
+
results = await (0, index_js_1.runPipeline)(phases, {
|
|
95
|
+
repoPath,
|
|
96
|
+
graph: graphEmitSink ?? graph,
|
|
97
|
+
onProgress,
|
|
98
|
+
options,
|
|
99
|
+
pipelineStart,
|
|
100
|
+
graphEmit: graphEmitSink,
|
|
101
|
+
});
|
|
102
|
+
graphEmitManifest = graphEmitSink?.finalize();
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
// Release per-pair fds when the pipeline threw before finalize ran.
|
|
106
|
+
graphEmitSink?.close();
|
|
107
|
+
}
|
|
108
|
+
// Extract final results for the PipelineResult contract
|
|
109
|
+
const { totalFiles, usedWorkerPool } = (0, index_js_1.getPhaseOutput)(results, 'parse');
|
|
110
|
+
let communityResult;
|
|
111
|
+
let processResult;
|
|
112
|
+
const scopeResolutionOutput = (0, index_js_1.getPhaseOutput)(results, 'scopeResolution');
|
|
113
|
+
const resolutionOutcomes = scopeResolutionOutput.resolutionOutcomes;
|
|
114
|
+
// Presence check, not `!skipGraphPhases`: phases can now be filtered out by
|
|
115
|
+
// any `enabledWhen` predicate (streamGraphEmit disables communities/processes
|
|
116
|
+
// too), and `getPhaseOutput` THROWS on a phase that was never resolved. Keying
|
|
117
|
+
// off the options flag alone made every filtered-out combination crash here
|
|
118
|
+
// rather than return undefined results.
|
|
119
|
+
if (results.has('communities') && results.has('processes')) {
|
|
120
|
+
communityResult = (0, index_js_1.getPhaseOutput)(results, 'communities').communityResult;
|
|
121
|
+
processResult = (0, index_js_1.getPhaseOutput)(results, 'processes').processResult;
|
|
122
|
+
}
|
|
123
|
+
onProgress({
|
|
124
|
+
phase: 'complete',
|
|
125
|
+
percent: 100,
|
|
126
|
+
message: communityResult && processResult
|
|
127
|
+
? `Graph complete! ${communityResult.stats.totalCommunities} communities, ${processResult.stats.totalProcesses} processes detected.`
|
|
128
|
+
: 'Graph complete! (graph phases skipped)',
|
|
129
|
+
stats: {
|
|
130
|
+
filesProcessed: totalFiles,
|
|
131
|
+
totalFiles,
|
|
132
|
+
nodesCreated: graph.nodeCount,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
// The RAW graph, deliberately — NOT `graphEmitSink`. Phases above received
|
|
137
|
+
// the sink so their reads are complete, but `loadGraphToLbug` feeds this to
|
|
138
|
+
// `streamAllCSVsToDisk`, and the sink's complete iterator would then emit
|
|
139
|
+
// every streamed edge a SECOND time on top of the per-pair CSVs the sink
|
|
140
|
+
// already wrote and the manifest already COPYs. Returning the sink here
|
|
141
|
+
// silently doubles every streamed relationship in the persisted graph.
|
|
142
|
+
graph,
|
|
143
|
+
repoPath,
|
|
144
|
+
totalFileCount: totalFiles,
|
|
145
|
+
graphEmitManifest,
|
|
146
|
+
communityResult,
|
|
147
|
+
processResult,
|
|
148
|
+
resolutionOutcomes,
|
|
149
|
+
usedWorkerPool,
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
exports.runPipelineFromRepo = runPipelineFromRepo;
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Process Detection Processor
|
|
4
|
+
*
|
|
5
|
+
* Detects execution flows (Processes) in the code graph by:
|
|
6
|
+
* 1. Finding entry points (functions with no internal callers)
|
|
7
|
+
* 2. Tracing forward via CALLS edges (BFS)
|
|
8
|
+
* 3. Grouping and deduplicating similar paths
|
|
9
|
+
* 4. Labeling with heuristic names
|
|
10
|
+
*
|
|
11
|
+
* Processes help agents understand how features work through the codebase.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.processProcesses = void 0;
|
|
15
|
+
const entry_point_scoring_js_1 = require("./entry-point-scoring.js");
|
|
16
|
+
const index_js_1 = require("../../../shared/index.js");
|
|
17
|
+
const env_js_1 = require("./utils/env.js");
|
|
18
|
+
const logger_js_1 = require("../logger.js");
|
|
19
|
+
const DEFAULT_CONFIG = {
|
|
20
|
+
maxTraceDepth: 10,
|
|
21
|
+
maxBranching: 4,
|
|
22
|
+
maxProcesses: 75,
|
|
23
|
+
minSteps: 3, // 3+ steps = genuine multi-hop flow (2-step is just "A calls B")
|
|
24
|
+
};
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// MAIN PROCESSOR
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Detect processes (execution flows) in the knowledge graph
|
|
30
|
+
*
|
|
31
|
+
* This runs AFTER community detection, using CALLS edges to trace flows.
|
|
32
|
+
*/
|
|
33
|
+
const processProcesses = async (knowledgeGraph, memberships, onProgress, config = {}) => {
|
|
34
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
35
|
+
onProgress?.('Finding entry points...', 0);
|
|
36
|
+
// Build lookup maps
|
|
37
|
+
const membershipMap = new Map();
|
|
38
|
+
memberships.forEach((m) => membershipMap.set(m.nodeId, m.communityId));
|
|
39
|
+
const callsEdges = buildCallsGraph(knowledgeGraph);
|
|
40
|
+
const reverseCallsEdges = buildReverseCallsGraph(knowledgeGraph);
|
|
41
|
+
const nodeMap = new Map();
|
|
42
|
+
for (const n of knowledgeGraph.iterNodes())
|
|
43
|
+
nodeMap.set(n.id, n);
|
|
44
|
+
// Step 1: Find entry points (functions that call others but have few callers)
|
|
45
|
+
const entryPoints = findEntryPoints(knowledgeGraph, reverseCallsEdges, callsEdges);
|
|
46
|
+
onProgress?.(`Found ${entryPoints.length} entry points, tracing flows...`, 20);
|
|
47
|
+
onProgress?.(`Found ${entryPoints.length} entry points, tracing flows...`, 20);
|
|
48
|
+
// Step 2: Trace processes from each entry point
|
|
49
|
+
const allTraces = [];
|
|
50
|
+
for (let i = 0; i < entryPoints.length && allTraces.length < cfg.maxProcesses * 2; i++) {
|
|
51
|
+
const entryId = entryPoints[i];
|
|
52
|
+
const traces = traceFromEntryPoint(entryId, callsEdges, cfg);
|
|
53
|
+
// Filter out traces that are too short
|
|
54
|
+
traces.filter((t) => t.length >= cfg.minSteps).forEach((t) => allTraces.push(t));
|
|
55
|
+
if (i % 10 === 0) {
|
|
56
|
+
onProgress?.(`Tracing entry point ${i + 1}/${entryPoints.length}...`, 20 + (i / entryPoints.length) * 40);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
onProgress?.(`Found ${allTraces.length} traces, deduplicating...`, 60);
|
|
60
|
+
// Step 3: Deduplicate similar traces (subset removal)
|
|
61
|
+
const uniqueTraces = deduplicateTraces(allTraces);
|
|
62
|
+
// Step 3b: Deduplicate by entry+terminal pair (keep longest path per pair)
|
|
63
|
+
const endpointDeduped = deduplicateByEndpoints(uniqueTraces);
|
|
64
|
+
onProgress?.(`Deduped ${uniqueTraces.length} → ${endpointDeduped.length} unique endpoint pairs`, 70);
|
|
65
|
+
// Step 4: Limit to max processes (prioritize longer traces)
|
|
66
|
+
const limitedTraces = endpointDeduped
|
|
67
|
+
.sort((a, b) => b.length - a.length)
|
|
68
|
+
.slice(0, cfg.maxProcesses);
|
|
69
|
+
onProgress?.(`Creating ${limitedTraces.length} process nodes...`, 80);
|
|
70
|
+
// Step 5: Create process nodes
|
|
71
|
+
const processes = [];
|
|
72
|
+
const steps = [];
|
|
73
|
+
limitedTraces.forEach((trace, idx) => {
|
|
74
|
+
const entryPointId = trace[0];
|
|
75
|
+
const terminalId = trace[trace.length - 1];
|
|
76
|
+
// Get communities touched
|
|
77
|
+
const communitiesSet = new Set();
|
|
78
|
+
trace.forEach((nodeId) => {
|
|
79
|
+
const comm = membershipMap.get(nodeId);
|
|
80
|
+
if (comm)
|
|
81
|
+
communitiesSet.add(comm);
|
|
82
|
+
});
|
|
83
|
+
const communities = Array.from(communitiesSet);
|
|
84
|
+
// Determine process type
|
|
85
|
+
const processType = communities.length > 1 ? 'cross_community' : 'intra_community';
|
|
86
|
+
// Generate label
|
|
87
|
+
const entryNode = nodeMap.get(entryPointId);
|
|
88
|
+
const terminalNode = nodeMap.get(terminalId);
|
|
89
|
+
const entryName = entryNode?.properties.name || 'Unknown';
|
|
90
|
+
const terminalName = terminalNode?.properties.name || 'Unknown';
|
|
91
|
+
const heuristicLabel = `${capitalize(entryName)} → ${capitalize(terminalName)}`;
|
|
92
|
+
const processId = `proc_${idx}_${sanitizeId(entryName)}`;
|
|
93
|
+
processes.push({
|
|
94
|
+
id: processId,
|
|
95
|
+
label: heuristicLabel,
|
|
96
|
+
heuristicLabel,
|
|
97
|
+
processType,
|
|
98
|
+
stepCount: trace.length,
|
|
99
|
+
communities,
|
|
100
|
+
entryPointId,
|
|
101
|
+
terminalId,
|
|
102
|
+
trace,
|
|
103
|
+
});
|
|
104
|
+
// Create step relationships
|
|
105
|
+
trace.forEach((nodeId, stepIdx) => {
|
|
106
|
+
steps.push({
|
|
107
|
+
nodeId,
|
|
108
|
+
processId,
|
|
109
|
+
step: stepIdx + 1, // 1-indexed
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
onProgress?.('Process detection complete!', 100);
|
|
114
|
+
// Calculate stats
|
|
115
|
+
const crossCommunityCount = processes.filter((p) => p.processType === 'cross_community').length;
|
|
116
|
+
const avgStepCount = processes.length > 0
|
|
117
|
+
? processes.reduce((sum, p) => sum + p.stepCount, 0) / processes.length
|
|
118
|
+
: 0;
|
|
119
|
+
return {
|
|
120
|
+
processes,
|
|
121
|
+
steps,
|
|
122
|
+
stats: {
|
|
123
|
+
totalProcesses: processes.length,
|
|
124
|
+
crossCommunityCount,
|
|
125
|
+
avgStepCount: Math.round(avgStepCount * 10) / 10,
|
|
126
|
+
entryPointsFound: entryPoints.length,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
exports.processProcesses = processProcesses;
|
|
131
|
+
/**
|
|
132
|
+
* Minimum edge confidence for process tracing.
|
|
133
|
+
* Filters out ambiguous fuzzy-global matches (0.3) that cause
|
|
134
|
+
* traces to jump across unrelated code areas.
|
|
135
|
+
*/
|
|
136
|
+
const MIN_TRACE_CONFIDENCE = 0.5;
|
|
137
|
+
const buildCallsGraph = (graph) => {
|
|
138
|
+
const adj = new Map();
|
|
139
|
+
// Field-wise scan (#2680) — whole-graph walk, four fields, no object needed.
|
|
140
|
+
graph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
|
|
141
|
+
if (type !== 'CALLS' || confidence < MIN_TRACE_CONFIDENCE)
|
|
142
|
+
return;
|
|
143
|
+
const existing = adj.get(sourceId);
|
|
144
|
+
if (existing === undefined)
|
|
145
|
+
adj.set(sourceId, [targetId]);
|
|
146
|
+
else
|
|
147
|
+
existing.push(targetId);
|
|
148
|
+
});
|
|
149
|
+
return adj;
|
|
150
|
+
};
|
|
151
|
+
const buildReverseCallsGraph = (graph) => {
|
|
152
|
+
const adj = new Map();
|
|
153
|
+
graph.forEachRelationshipFields((sourceId, targetId, type, confidence) => {
|
|
154
|
+
if (type !== 'CALLS' || confidence < MIN_TRACE_CONFIDENCE)
|
|
155
|
+
return;
|
|
156
|
+
const existing = adj.get(targetId);
|
|
157
|
+
if (existing === undefined)
|
|
158
|
+
adj.set(targetId, [sourceId]);
|
|
159
|
+
else
|
|
160
|
+
existing.push(sourceId);
|
|
161
|
+
});
|
|
162
|
+
return adj;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Find functions/methods that are good entry points for tracing.
|
|
166
|
+
*
|
|
167
|
+
* Entry points are scored based on:
|
|
168
|
+
* 1. Call ratio (calls many, called by few)
|
|
169
|
+
* 2. Export status (exported/public functions rank higher)
|
|
170
|
+
* 3. Name patterns (handle*, on*, *Controller, etc.)
|
|
171
|
+
*
|
|
172
|
+
* Test files are excluded entirely.
|
|
173
|
+
*/
|
|
174
|
+
const findEntryPoints = (graph, reverseCallsEdges, callsEdges) => {
|
|
175
|
+
const symbolTypes = new Set(['Function', 'Method']);
|
|
176
|
+
const entryPointCandidates = [];
|
|
177
|
+
for (const node of graph.iterNodes()) {
|
|
178
|
+
if (!symbolTypes.has(node.label))
|
|
179
|
+
continue;
|
|
180
|
+
const filePath = node.properties.filePath || '';
|
|
181
|
+
// Skip test files entirely
|
|
182
|
+
if ((0, entry_point_scoring_js_1.isTestFile)(filePath))
|
|
183
|
+
continue;
|
|
184
|
+
const callers = reverseCallsEdges.get(node.id) || [];
|
|
185
|
+
const callees = callsEdges.get(node.id) || [];
|
|
186
|
+
// Must have at least 1 outgoing call to trace forward
|
|
187
|
+
if (callees.length === 0)
|
|
188
|
+
continue;
|
|
189
|
+
// Calculate entry point score using new scoring system
|
|
190
|
+
const { score: baseScore, reasons } = (0, entry_point_scoring_js_1.calculateEntryPointScore)(node.properties.name, (node.properties.language ?? index_js_1.SupportedLanguages.JavaScript), node.properties.isExported ?? false, callers.length, callees.length, filePath);
|
|
191
|
+
let score = baseScore;
|
|
192
|
+
const astFrameworkMultiplier = node.properties.astFrameworkMultiplier ?? 1.0;
|
|
193
|
+
if (astFrameworkMultiplier > 1.0) {
|
|
194
|
+
score *= astFrameworkMultiplier;
|
|
195
|
+
reasons.push(`framework-ast:${node.properties.astFrameworkReason || 'decorator'}`);
|
|
196
|
+
}
|
|
197
|
+
if (score > 0) {
|
|
198
|
+
entryPointCandidates.push({ id: node.id, score, reasons });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Sort by score descending and return top candidates
|
|
202
|
+
const sorted = entryPointCandidates.sort((a, b) => b.score - a.score);
|
|
203
|
+
// DEBUG: Log top candidates with new scoring details
|
|
204
|
+
if (sorted.length > 0 && env_js_1.isDev) {
|
|
205
|
+
logger_js_1.logger.info(`[Process] Top 10 entry point candidates (new scoring):`);
|
|
206
|
+
sorted.slice(0, 10).forEach((c, i) => {
|
|
207
|
+
const node = graph.getNode(c.id);
|
|
208
|
+
const exported = node?.properties.isExported ? '✓' : '✗';
|
|
209
|
+
const shortPath = node?.properties.filePath?.split('/').slice(-2).join('/') || '';
|
|
210
|
+
logger_js_1.logger.info(` ${i + 1}. ${node?.properties.name} [exported:${exported}] (${shortPath})`);
|
|
211
|
+
logger_js_1.logger.info(` score: ${c.score.toFixed(2)} = [${c.reasons.join(' × ')}]`);
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
return sorted
|
|
215
|
+
.slice(0, 200) // Limit to prevent explosion
|
|
216
|
+
.map((c) => c.id);
|
|
217
|
+
};
|
|
218
|
+
// ============================================================================
|
|
219
|
+
// HELPER: Trace from entry point (BFS)
|
|
220
|
+
// ============================================================================
|
|
221
|
+
/**
|
|
222
|
+
* Trace forward from an entry point using BFS.
|
|
223
|
+
* Returns all distinct paths up to maxDepth.
|
|
224
|
+
*/
|
|
225
|
+
const traceFromEntryPoint = (entryId, callsEdges, config) => {
|
|
226
|
+
const traces = [];
|
|
227
|
+
// BFS with path tracking
|
|
228
|
+
// Each queue item: [currentNodeId, pathSoFar]
|
|
229
|
+
const queue = [[entryId, [entryId]]];
|
|
230
|
+
while (queue.length > 0 && traces.length < config.maxBranching * 3) {
|
|
231
|
+
const [currentId, path] = queue.shift();
|
|
232
|
+
// Get outgoing calls
|
|
233
|
+
const callees = callsEdges.get(currentId) || [];
|
|
234
|
+
if (callees.length === 0) {
|
|
235
|
+
// Terminal node - this is a complete trace
|
|
236
|
+
if (path.length >= config.minSteps) {
|
|
237
|
+
traces.push([...path]);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else if (path.length >= config.maxTraceDepth) {
|
|
241
|
+
// Max depth reached - save what we have
|
|
242
|
+
if (path.length >= config.minSteps) {
|
|
243
|
+
traces.push([...path]);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// Continue tracing - limit branching
|
|
248
|
+
const limitedCallees = callees.slice(0, config.maxBranching);
|
|
249
|
+
let addedBranch = false;
|
|
250
|
+
for (const calleeId of limitedCallees) {
|
|
251
|
+
// Avoid cycles
|
|
252
|
+
if (!path.includes(calleeId)) {
|
|
253
|
+
queue.push([calleeId, [...path, calleeId]]);
|
|
254
|
+
addedBranch = true;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// If all branches were cycles, save current path as terminal
|
|
258
|
+
if (!addedBranch && path.length >= config.minSteps) {
|
|
259
|
+
traces.push([...path]);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return traces;
|
|
264
|
+
};
|
|
265
|
+
// ============================================================================
|
|
266
|
+
// HELPER: Deduplicate traces
|
|
267
|
+
// ============================================================================
|
|
268
|
+
/**
|
|
269
|
+
* Merge traces that are subsets of other traces.
|
|
270
|
+
* Keep longer traces, remove redundant shorter ones.
|
|
271
|
+
*/
|
|
272
|
+
const deduplicateTraces = (traces) => {
|
|
273
|
+
if (traces.length === 0)
|
|
274
|
+
return [];
|
|
275
|
+
// Sort by length descending
|
|
276
|
+
const sorted = [...traces].sort((a, b) => b.length - a.length);
|
|
277
|
+
const unique = [];
|
|
278
|
+
for (const trace of sorted) {
|
|
279
|
+
// Check if this trace is a subset of any already-added trace
|
|
280
|
+
const traceKey = trace.join('->');
|
|
281
|
+
const isSubset = unique.some((existing) => {
|
|
282
|
+
const existingKey = existing.join('->');
|
|
283
|
+
return existingKey.includes(traceKey);
|
|
284
|
+
});
|
|
285
|
+
if (!isSubset) {
|
|
286
|
+
unique.push(trace);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return unique;
|
|
290
|
+
};
|
|
291
|
+
// ============================================================================
|
|
292
|
+
// HELPER: Deduplicate by entry+terminal endpoints
|
|
293
|
+
// ============================================================================
|
|
294
|
+
/**
|
|
295
|
+
* Keep only the longest trace per unique entry→terminal pair.
|
|
296
|
+
* Multiple paths between the same two endpoints are redundant for agents.
|
|
297
|
+
*/
|
|
298
|
+
const deduplicateByEndpoints = (traces) => {
|
|
299
|
+
if (traces.length === 0)
|
|
300
|
+
return [];
|
|
301
|
+
const byEndpoints = new Map();
|
|
302
|
+
// Sort longest first so the first seen per key is the longest
|
|
303
|
+
const sorted = [...traces].sort((a, b) => b.length - a.length);
|
|
304
|
+
for (const trace of sorted) {
|
|
305
|
+
const key = `${trace[0]}::${trace[trace.length - 1]}`;
|
|
306
|
+
if (!byEndpoints.has(key)) {
|
|
307
|
+
byEndpoints.set(key, trace);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return Array.from(byEndpoints.values());
|
|
311
|
+
};
|
|
312
|
+
// ============================================================================
|
|
313
|
+
// HELPER: String utilities
|
|
314
|
+
// ============================================================================
|
|
315
|
+
const capitalize = (s) => {
|
|
316
|
+
if (!s)
|
|
317
|
+
return s;
|
|
318
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
319
|
+
};
|
|
320
|
+
const sanitizeId = (s) => {
|
|
321
|
+
return s
|
|
322
|
+
.replace(/[^a-zA-Z0-9]/g, '_')
|
|
323
|
+
.substring(0, 20)
|
|
324
|
+
.toLowerCase();
|
|
325
|
+
};
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `resolveReferenceSites` — drain `ReferenceSite[]` from a finalized
|
|
4
|
+
* `ScopeResolutionIndexes` into a `ReferenceIndex` by routing each site
|
|
5
|
+
* through the appropriate scope-aware `Registry.lookup` (RFC §3.2 Phase 4).
|
|
6
|
+
*
|
|
7
|
+
* This is the missing producer that `emit-references.ts` (#925) was
|
|
8
|
+
* waiting on. The two together form the registry-primary resolution
|
|
9
|
+
* pipeline:
|
|
10
|
+
*
|
|
11
|
+
* ScopeResolutionIndexes.referenceSites
|
|
12
|
+
* │ resolveReferenceSites
|
|
13
|
+
* ▼
|
|
14
|
+
* ReferenceIndex
|
|
15
|
+
* │ emitReferencesToGraph
|
|
16
|
+
* ▼
|
|
17
|
+
* graph: CALLS / ACCESSES / INHERITS / USES edges
|
|
18
|
+
*
|
|
19
|
+
* ## What this module does
|
|
20
|
+
*
|
|
21
|
+
* - For each `ReferenceSite`, picks the registry by `kind`:
|
|
22
|
+
* · `call` / `inherits` → MethodRegistry / ClassRegistry (call-form aware)
|
|
23
|
+
* · `read` / `write` → FieldRegistry (falls through to MethodRegistry for free names)
|
|
24
|
+
* · `type-reference` → ClassRegistry
|
|
25
|
+
* · `import-use` → all three (best-effort name-lookup)
|
|
26
|
+
* - Calls `Registry.lookup` with the site's `inScope`, optional
|
|
27
|
+
* explicit receiver, and arity.
|
|
28
|
+
* - Takes the top-ranked `Resolution` (best by confidence + tie-break
|
|
29
|
+
* cascade); folds it into a `Reference` record and bins by source scope.
|
|
30
|
+
*
|
|
31
|
+
* ## What this module does NOT do
|
|
32
|
+
*
|
|
33
|
+
* - No AST walks. The `ReferenceSite[]` is already extracted.
|
|
34
|
+
* - No language switches. Per-language behavior flows through
|
|
35
|
+
* `RegistryProviders.arityCompatibility` (see `RegistryContext`).
|
|
36
|
+
* - No multi-candidate fan-out. We pick `[0]` per RFC §4.3 ("one-shot
|
|
37
|
+
* answer"). The full ranked list is preserved in the per-site
|
|
38
|
+
* resolution but not emitted as multiple edges; callers that want
|
|
39
|
+
* branch-on-ambiguity behavior should consume the registries directly.
|
|
40
|
+
*/
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.FIELD_KINDS = exports.METHOD_KINDS = exports.CLASS_KINDS = void 0;
|
|
43
|
+
exports.resolveReferenceSites = resolveReferenceSites;
|
|
44
|
+
const index_js_1 = require("../../../shared/index.js");
|
|
45
|
+
Object.defineProperty(exports, "CLASS_KINDS", { enumerable: true, get: function () { return index_js_1.CLASS_KINDS; } });
|
|
46
|
+
Object.defineProperty(exports, "FIELD_KINDS", { enumerable: true, get: function () { return index_js_1.FIELD_KINDS; } });
|
|
47
|
+
Object.defineProperty(exports, "METHOD_KINDS", { enumerable: true, get: function () { return index_js_1.METHOD_KINDS; } });
|
|
48
|
+
/**
|
|
49
|
+
* Resolve every `ReferenceSite` in `scopes.referenceSites` against the
|
|
50
|
+
* matching registry and produce a `ReferenceIndex` keyed by source scope
|
|
51
|
+
* + target def.
|
|
52
|
+
*/
|
|
53
|
+
function resolveReferenceSites(input) {
|
|
54
|
+
const { scopes } = input;
|
|
55
|
+
const providers = input.providers ?? {};
|
|
56
|
+
const ctx = {
|
|
57
|
+
scopes: scopes.scopeTree,
|
|
58
|
+
defs: scopes.defs,
|
|
59
|
+
qualifiedNames: scopes.qualifiedNames,
|
|
60
|
+
moduleScopes: scopes.moduleScopes,
|
|
61
|
+
ownedMembersByOwner: input.ownedMembersByOwner,
|
|
62
|
+
methodDispatch: scopes.methodDispatch,
|
|
63
|
+
providers,
|
|
64
|
+
};
|
|
65
|
+
const classRegistry = (0, index_js_1.buildClassRegistry)(ctx);
|
|
66
|
+
const methodRegistry = (0, index_js_1.buildMethodRegistry)(ctx);
|
|
67
|
+
const fieldRegistry = (0, index_js_1.buildFieldRegistry)(ctx);
|
|
68
|
+
const macroRegistry = (0, index_js_1.buildMacroRegistry)(ctx);
|
|
69
|
+
// bySourceScope is the canonical index; byTargetDef is derived from it.
|
|
70
|
+
const bySourceScope = new Map();
|
|
71
|
+
const byTargetDef = new Map();
|
|
72
|
+
let sitesProcessed = 0;
|
|
73
|
+
let referencesEmitted = 0;
|
|
74
|
+
let unresolved = 0;
|
|
75
|
+
for (const site of scopes.referenceSites) {
|
|
76
|
+
// value-ref sites resolve post-finalize (imports live in finalized
|
|
77
|
+
// bindings the registries can't see — same reason free calls need
|
|
78
|
+
// `emitFreeCallFallback`). `emitPropertyDispatchCalls` owns their
|
|
79
|
+
// resolution and emission entirely (#2437).
|
|
80
|
+
if (site.kind === 'value-ref')
|
|
81
|
+
continue;
|
|
82
|
+
sitesProcessed++;
|
|
83
|
+
const resolutions = lookupForSite(site, classRegistry, methodRegistry, fieldRegistry, macroRegistry);
|
|
84
|
+
if (resolutions.length === 0) {
|
|
85
|
+
unresolved++;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const top = resolutions[0];
|
|
89
|
+
const ref = buildReference(site, top);
|
|
90
|
+
referencesEmitted++;
|
|
91
|
+
let bySource = bySourceScope.get(site.inScope);
|
|
92
|
+
if (bySource === undefined) {
|
|
93
|
+
bySource = [];
|
|
94
|
+
bySourceScope.set(site.inScope, bySource);
|
|
95
|
+
}
|
|
96
|
+
bySource.push(ref);
|
|
97
|
+
let byTarget = byTargetDef.get(top.def.nodeId);
|
|
98
|
+
if (byTarget === undefined) {
|
|
99
|
+
byTarget = [];
|
|
100
|
+
byTargetDef.set(top.def.nodeId, byTarget);
|
|
101
|
+
}
|
|
102
|
+
byTarget.push(ref);
|
|
103
|
+
}
|
|
104
|
+
// Freeze inner arrays so consumers don't accidentally mutate.
|
|
105
|
+
const frozenBySource = new Map();
|
|
106
|
+
for (const [k, v] of bySourceScope)
|
|
107
|
+
frozenBySource.set(k, Object.freeze([...v]));
|
|
108
|
+
const frozenByTarget = new Map();
|
|
109
|
+
for (const [k, v] of byTargetDef)
|
|
110
|
+
frozenByTarget.set(k, Object.freeze([...v]));
|
|
111
|
+
return {
|
|
112
|
+
referenceIndex: { bySourceScope: frozenBySource, byTargetDef: frozenByTarget },
|
|
113
|
+
stats: { sitesProcessed, referencesEmitted, unresolved },
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// ─── Internal ───────────────────────────────────────────────────────────────
|
|
117
|
+
/**
|
|
118
|
+
* Pick the right registry for the site's `kind` and call `lookup`.
|
|
119
|
+
*
|
|
120
|
+
* The kind→registry mapping mirrors `mapKindToType` in `emit-references.ts`:
|
|
121
|
+
*
|
|
122
|
+
* | site.kind | primary registry | acceptedKinds source |
|
|
123
|
+
* |------------------|-------------------|------------------------------|
|
|
124
|
+
* | `call` | MethodRegistry | METHOD_KINDS (Method/Func/Ctor)
|
|
125
|
+
* | `inherits` | ClassRegistry | CLASS_KINDS |
|
|
126
|
+
* | `type-reference` | ClassRegistry | CLASS_KINDS |
|
|
127
|
+
* | `read`/`write` | FieldRegistry | FIELD_KINDS |
|
|
128
|
+
* | `import-use` | tiered fallback | METHOD ∪ CLASS ∪ FIELD |
|
|
129
|
+
* | `value-ref` | (skipped here) | post-finalize walker in `emitPropertyDispatchCalls` |
|
|
130
|
+
* | `macro` | MacroRegistry | MACRO_KINDS (`Macro` only) |
|
|
131
|
+
*
|
|
132
|
+
* `macro` has its own single-kind registry so a macro invocation
|
|
133
|
+
* (`log!(…)`) resolves ONLY to a `macro_rules! log` definition and never
|
|
134
|
+
* to a same-named free function — macros and functions are disjoint
|
|
135
|
+
* namespaces (the false-`CALLS`-edge class flagged in the #1934 review).
|
|
136
|
+
*
|
|
137
|
+
* `import-use` doesn't have a single registry — the imported name might
|
|
138
|
+
* be a class, a function, or a constant. Try each in priority order and
|
|
139
|
+
* return the first non-empty result. Provenance still flows through the
|
|
140
|
+
* scope's `bindings` (Step 1 lexical hit), so the lookup is correct
|
|
141
|
+
* regardless of which registry surfaces the def.
|
|
142
|
+
*/
|
|
143
|
+
function lookupForSite(site, classRegistry, methodRegistry, fieldRegistry, macroRegistry) {
|
|
144
|
+
switch (site.kind) {
|
|
145
|
+
case 'call': {
|
|
146
|
+
const opts = {
|
|
147
|
+
...(site.arity !== undefined ? { callsite: { arity: site.arity } } : {}),
|
|
148
|
+
...(site.explicitReceiver !== undefined ? { explicitReceiver: site.explicitReceiver } : {}),
|
|
149
|
+
};
|
|
150
|
+
return methodRegistry.lookup(site.name, site.inScope, opts);
|
|
151
|
+
}
|
|
152
|
+
case 'inherits':
|
|
153
|
+
case 'type-reference': {
|
|
154
|
+
return classRegistry.lookup(site.name, site.inScope);
|
|
155
|
+
}
|
|
156
|
+
case 'read':
|
|
157
|
+
case 'write': {
|
|
158
|
+
// Try field first; fall through to method then class so bare-name
|
|
159
|
+
// reads of a function (e.g. `cb = save`) still resolve.
|
|
160
|
+
const fieldOpts = {
|
|
161
|
+
...(site.explicitReceiver !== undefined ? { explicitReceiver: site.explicitReceiver } : {}),
|
|
162
|
+
};
|
|
163
|
+
const fieldHits = fieldRegistry.lookup(site.name, site.inScope, fieldOpts);
|
|
164
|
+
if (fieldHits.length > 0)
|
|
165
|
+
return fieldHits;
|
|
166
|
+
const methodHits = methodRegistry.lookup(site.name, site.inScope);
|
|
167
|
+
if (methodHits.length > 0)
|
|
168
|
+
return methodHits;
|
|
169
|
+
return classRegistry.lookup(site.name, site.inScope);
|
|
170
|
+
}
|
|
171
|
+
case 'import-use': {
|
|
172
|
+
// Try class, method, then field. The lexical-hit Step 1 in
|
|
173
|
+
// `lookupCore` handles the actual binding lookup; the choice of
|
|
174
|
+
// registry only narrows `acceptedKinds`.
|
|
175
|
+
const classHits = classRegistry.lookup(site.name, site.inScope);
|
|
176
|
+
if (classHits.length > 0)
|
|
177
|
+
return classHits;
|
|
178
|
+
const methodHits = methodRegistry.lookup(site.name, site.inScope);
|
|
179
|
+
if (methodHits.length > 0)
|
|
180
|
+
return methodHits;
|
|
181
|
+
return fieldRegistry.lookup(site.name, site.inScope);
|
|
182
|
+
}
|
|
183
|
+
case 'value-ref': {
|
|
184
|
+
// Unreachable — filtered before lookup (post-finalize resolution in
|
|
185
|
+
// `emitPropertyDispatchCalls`, #2437). Kept for switch exhaustiveness.
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
case 'macro': {
|
|
189
|
+
// Macro-only namespace: resolves against `Macro`-labeled defs, never
|
|
190
|
+
// functions. No receiver, no arity — see `MacroRegistry`.
|
|
191
|
+
return macroRegistry.lookup(site.name, site.inScope);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** Compose a `Reference` record from a site + its top resolution. */
|
|
196
|
+
function buildReference(site, top) {
|
|
197
|
+
return {
|
|
198
|
+
fromScope: site.inScope,
|
|
199
|
+
toDef: top.def.nodeId,
|
|
200
|
+
atRange: site.atRange,
|
|
201
|
+
kind: site.kind,
|
|
202
|
+
confidence: top.confidence,
|
|
203
|
+
evidence: top.evidence,
|
|
204
|
+
};
|
|
205
|
+
}
|