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,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Decompose a C# `using_directive` into a `CaptureMatch` carrying the
|
|
4
|
+
* synthesized markers `@import.kind` / `@import.source` / `@import.name`
|
|
5
|
+
* / `@import.alias` that `interpretCsharpImport` consumes.
|
|
6
|
+
*
|
|
7
|
+
* Unlike Python's decomposer this is 1:1 — each `using` produces exactly
|
|
8
|
+
* one import. The split layer exists to expose the kind (namespace vs
|
|
9
|
+
* alias vs static) without pushing raw-text parsing into `interpret.ts`.
|
|
10
|
+
*
|
|
11
|
+
* using System; → namespace
|
|
12
|
+
* using System.Collections.Generic; → namespace
|
|
13
|
+
* using Foo = System.Bar; → alias
|
|
14
|
+
* using static System.Math; → static
|
|
15
|
+
* global using System.IO; → namespace (treated as file-scoped)
|
|
16
|
+
* using global::System.IO; → namespace (global:: alias stripped)
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.splitUsingDirective = splitUsingDirective;
|
|
20
|
+
const ast_helpers_js_1 = require("../../utils/ast-helpers.js");
|
|
21
|
+
function splitUsingDirective(stmtNode) {
|
|
22
|
+
if (stmtNode.type !== 'using_directive')
|
|
23
|
+
return null;
|
|
24
|
+
const spec = parseUsingDirective(stmtNode);
|
|
25
|
+
if (spec === null)
|
|
26
|
+
return null;
|
|
27
|
+
return buildImportMatch(stmtNode, spec);
|
|
28
|
+
}
|
|
29
|
+
function parseUsingDirective(node) {
|
|
30
|
+
// tree-sitter-c-sharp's using_directive exposes named children
|
|
31
|
+
// corresponding to the parts of the directive but omits keyword tokens
|
|
32
|
+
// (`using`, `static`, `global`) from the named-child list. We inspect
|
|
33
|
+
// the raw source text to detect the flavor — the grammar doesn't give
|
|
34
|
+
// us a cleaner signal.
|
|
35
|
+
const raw = node.text;
|
|
36
|
+
// Named child layout:
|
|
37
|
+
// namespace form: [pathNode]
|
|
38
|
+
// alias form: [aliasIdNode, pathNode] (name field = aliasId)
|
|
39
|
+
// static form: [pathNode] (same as namespace)
|
|
40
|
+
// global using: [pathNode] (same as namespace)
|
|
41
|
+
const aliasField = node.childForFieldName('name');
|
|
42
|
+
const children = node.namedChildren;
|
|
43
|
+
if (children.length === 0)
|
|
44
|
+
return null;
|
|
45
|
+
// Alias form — the `name:` field is the alias identifier; the
|
|
46
|
+
// remaining named child is the type/namespace path.
|
|
47
|
+
if (aliasField !== null) {
|
|
48
|
+
const pathNode = children.find((c) => c !== null && c.startIndex !== aliasField.startIndex);
|
|
49
|
+
if (pathNode === undefined)
|
|
50
|
+
return null;
|
|
51
|
+
return {
|
|
52
|
+
kind: 'alias',
|
|
53
|
+
source: stripGenericArgs(unwrapGlobalAlias(pathNode.text)),
|
|
54
|
+
name: aliasField.text,
|
|
55
|
+
alias: aliasField.text,
|
|
56
|
+
atNode: node,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const pathNode = children[0];
|
|
60
|
+
if (pathNode === null)
|
|
61
|
+
return null;
|
|
62
|
+
const source = stripGenericArgs(unwrapGlobalAlias(pathNode.text));
|
|
63
|
+
if (source === '')
|
|
64
|
+
return null;
|
|
65
|
+
const lastSegment = source.split('.').pop() ?? source;
|
|
66
|
+
// `using static X.Y;` — detect by scanning the raw text before the path.
|
|
67
|
+
// `global using` behaves semantically as a file-scoped using for our
|
|
68
|
+
// purposes, so it isn't a separate kind here.
|
|
69
|
+
if (/^\s*(?:global\s+)?using\s+static\s/.test(raw)) {
|
|
70
|
+
return { kind: 'static', source, name: '*', atNode: node };
|
|
71
|
+
}
|
|
72
|
+
return { kind: 'namespace', source, name: lastSegment, atNode: node };
|
|
73
|
+
}
|
|
74
|
+
/** Strip `global::` prefix — `global::System.IO` → `System.IO`. */
|
|
75
|
+
function unwrapGlobalAlias(text) {
|
|
76
|
+
return text.replace(/^global::/, '');
|
|
77
|
+
}
|
|
78
|
+
/** Strip generic type arguments — `Dictionary<string, int>` → `Dictionary`. */
|
|
79
|
+
function stripGenericArgs(text) {
|
|
80
|
+
const lt = text.indexOf('<');
|
|
81
|
+
if (lt === -1)
|
|
82
|
+
return text;
|
|
83
|
+
return text.slice(0, lt);
|
|
84
|
+
}
|
|
85
|
+
function buildImportMatch(stmtNode, spec) {
|
|
86
|
+
const m = {
|
|
87
|
+
'@import.statement': (0, ast_helpers_js_1.nodeToCapture)('@import.statement', stmtNode),
|
|
88
|
+
'@import.kind': (0, ast_helpers_js_1.syntheticCapture)('@import.kind', spec.atNode, spec.kind),
|
|
89
|
+
'@import.source': (0, ast_helpers_js_1.syntheticCapture)('@import.source', spec.atNode, spec.source),
|
|
90
|
+
'@import.name': (0, ast_helpers_js_1.syntheticCapture)('@import.name', spec.atNode, spec.name),
|
|
91
|
+
};
|
|
92
|
+
if (spec.alias !== undefined) {
|
|
93
|
+
m['@import.alias'] = (0, ast_helpers_js_1.syntheticCapture)('@import.alias', spec.atNode, spec.alias);
|
|
94
|
+
}
|
|
95
|
+
return m;
|
|
96
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapter from `(ParsedImport, WorkspaceIndex)` → concrete file path.
|
|
4
|
+
*
|
|
5
|
+
* Unit 2 shape: suffix-match against the repo's `.cs` files. Each
|
|
6
|
+
* `using System.Collections.Generic;` could legally expand to multiple
|
|
7
|
+
* files (every `.cs` that declares `namespace System.Collections.Generic`
|
|
8
|
+
* — partial classes, assembly-wide namespaces). The scope-resolver
|
|
9
|
+
* contract returns a single primary target, so we pick the first
|
|
10
|
+
* match. Cross-file partial-class aggregation runs at graph-bridge
|
|
11
|
+
* time (Unit 6) via `populateOwners`.
|
|
12
|
+
*
|
|
13
|
+
* When `.csproj` configs are available, consults the legacy
|
|
14
|
+
* namespace-directory resolver first. Both that resolver's suffix
|
|
15
|
+
* fallback and the progressive prefix stripping below are gated on
|
|
16
|
+
* declared in-repo namespaces so BCL usings like `System.Threading.Tasks`
|
|
17
|
+
* cannot spuriously match a local `Tasks.cs` (#1881).
|
|
18
|
+
*
|
|
19
|
+
* Returning `null` lets the finalize algorithm mark the edge as
|
|
20
|
+
* `linkStatus: 'unresolved'`.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.resolveCsharpImportTarget = resolveCsharpImportTarget;
|
|
24
|
+
const csharp_js_1 = require("../../import-resolvers/csharp.js");
|
|
25
|
+
const utils_js_1 = require("../../import-resolvers/utils.js");
|
|
26
|
+
const csharp_namespace_gate_js_1 = require("../../csharp-namespace-gate.js");
|
|
27
|
+
// Memoize on Set identity: the orchestrator passes the SAME `allFilePaths`
|
|
28
|
+
// Set through every `resolveImportTarget` call in a pass, so this rebuilds
|
|
29
|
+
// the normalized list + suffix index once instead of once per import (#1881 #2).
|
|
30
|
+
const workspaceFileIndexCache = new WeakMap();
|
|
31
|
+
function getWorkspaceFileIndex(allFilePaths) {
|
|
32
|
+
const cached = workspaceFileIndexCache.get(allFilePaths);
|
|
33
|
+
if (cached)
|
|
34
|
+
return cached;
|
|
35
|
+
const all = [...allFilePaths];
|
|
36
|
+
const normalized = all.map((f) => f.replace(/\\/g, '/'));
|
|
37
|
+
const built = { normalized, all, index: (0, utils_js_1.buildSuffixIndex)(normalized, all) };
|
|
38
|
+
workspaceFileIndexCache.set(allFilePaths, built);
|
|
39
|
+
return built;
|
|
40
|
+
}
|
|
41
|
+
function resolveCsharpImportTarget(parsedImport, workspaceIndex) {
|
|
42
|
+
const ctx = narrowContext(workspaceIndex);
|
|
43
|
+
if (ctx === null)
|
|
44
|
+
return null;
|
|
45
|
+
if (parsedImport.kind === 'dynamic-unresolved')
|
|
46
|
+
return null;
|
|
47
|
+
if (parsedImport.targetRaw === null || parsedImport.targetRaw === '')
|
|
48
|
+
return null;
|
|
49
|
+
const targetRaw = parsedImport.targetRaw;
|
|
50
|
+
const evidence = ctx.namespaces;
|
|
51
|
+
const csharpConfigs = ctx.csharpConfigs ?? [];
|
|
52
|
+
if (csharpConfigs.length > 0) {
|
|
53
|
+
const { normalized, all, index } = getWorkspaceFileIndex(ctx.allFilePaths);
|
|
54
|
+
const fromCsproj = (0, csharp_js_1.resolveCSharpImportInternal)(targetRaw, [...csharpConfigs], normalized, all, index, evidence);
|
|
55
|
+
if (fromCsproj.length > 0)
|
|
56
|
+
return fromCsproj[0];
|
|
57
|
+
// csproj configs are authoritative: mirror legacy `configs/csharp.ts`,
|
|
58
|
+
// which returns an empty result to STOP the chain. Falling through to the
|
|
59
|
+
// ungated `resolveDirectMatch` would re-introduce the BCL→local match the
|
|
60
|
+
// internal resolver's gate just suppressed (#1881 parity, #2).
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
// Namespace path: `System.Collections.Generic` → `System/Collections/Generic`.
|
|
64
|
+
const pathLike = targetRaw.replace(/\./g, '/');
|
|
65
|
+
// Gate the WHOLE no-csproj path on declared in-repo namespaces — the direct
|
|
66
|
+
// path/suffix match INCLUDED — so a BCL using can't resolve to a
|
|
67
|
+
// coincidentally path-aligned local file (e.g. `Legacy/System/Threading/
|
|
68
|
+
// Tasks.cs` satisfying `using System.Threading.Tasks;`). Running the gate
|
|
69
|
+
// before `resolveDirectMatch` mirrors the legacy leg's gate-first ordering
|
|
70
|
+
// (`import-resolvers/configs/csharp.ts`), so the two legs are equivalent
|
|
71
|
+
// (#1881 parity, Codex F2). The gate keeps its fail-open for
|
|
72
|
+
// undefined/truncated evidence, so legitimate edges in unscanned repos are
|
|
73
|
+
// unaffected.
|
|
74
|
+
if (!(0, csharp_namespace_gate_js_1.csharpSuffixFallbackAllowed)(targetRaw, evidence)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// Exact file / nested-suffix / namespace-dir direct-child match.
|
|
78
|
+
const direct = resolveDirectMatch(ctx.allFilePaths, pathLike);
|
|
79
|
+
if (direct !== null)
|
|
80
|
+
return direct;
|
|
81
|
+
// Progressive prefix stripping — mirrors csproj's root-namespace mapping
|
|
82
|
+
// without the csproj.
|
|
83
|
+
return resolveByProgressiveStripping(ctx.allFilePaths, pathLike);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* `WorkspaceIndex` is an opaque `unknown` placeholder in the shared contract;
|
|
87
|
+
* the orchestrator hands us a `CsharpResolveContext`-shaped object. Narrow
|
|
88
|
+
* structurally rather than via a cast chain so unexpected shapes fail cleanly.
|
|
89
|
+
*/
|
|
90
|
+
function narrowContext(workspaceIndex) {
|
|
91
|
+
const ctx = workspaceIndex;
|
|
92
|
+
if (ctx === undefined ||
|
|
93
|
+
typeof ctx.fromFile !== 'string' ||
|
|
94
|
+
!(ctx.allFilePaths instanceof Set)) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return ctx;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* First-pass resolution against the full namespace path:
|
|
101
|
+
* exact whole-path file > nested suffix file > first `.cs` directly inside
|
|
102
|
+
* the namespace directory.
|
|
103
|
+
*/
|
|
104
|
+
function resolveDirectMatch(allFilePaths, pathLike) {
|
|
105
|
+
const exactName = `${pathLike}.cs`;
|
|
106
|
+
const nestedSuffix = `/${exactName}`;
|
|
107
|
+
let suffixFile = null;
|
|
108
|
+
for (const raw of allFilePaths) {
|
|
109
|
+
const f = raw.replace(/\\/g, '/');
|
|
110
|
+
if (!f.endsWith('.cs'))
|
|
111
|
+
continue;
|
|
112
|
+
if (f === exactName)
|
|
113
|
+
return raw; // exact whole-path match wins
|
|
114
|
+
if (suffixFile === null && f.endsWith(nestedSuffix))
|
|
115
|
+
suffixFile = raw;
|
|
116
|
+
}
|
|
117
|
+
if (suffixFile !== null)
|
|
118
|
+
return suffixFile;
|
|
119
|
+
return findDirectChild(allFilePaths, pathLike);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* First `.cs` file that lives directly inside the namespace directory
|
|
123
|
+
* `dirSegment` (at repo root or nested under a project prefix), not deeper.
|
|
124
|
+
* The legacy resolver emits all of them; the scope-resolver contract is
|
|
125
|
+
* single-target so we take one.
|
|
126
|
+
*/
|
|
127
|
+
function findDirectChild(allFilePaths, dirSegment) {
|
|
128
|
+
const dirPrefix = `${dirSegment}/`;
|
|
129
|
+
const nestedDirPrefix = `/${dirPrefix}`;
|
|
130
|
+
for (const raw of allFilePaths) {
|
|
131
|
+
const f = raw.replace(/\\/g, '/');
|
|
132
|
+
if (!f.endsWith('.cs'))
|
|
133
|
+
continue;
|
|
134
|
+
const atRoot = f.startsWith(dirPrefix);
|
|
135
|
+
const atNested = f.includes(nestedDirPrefix);
|
|
136
|
+
if (!atRoot && !atNested)
|
|
137
|
+
continue;
|
|
138
|
+
const idx = atRoot ? 0 : f.indexOf(nestedDirPrefix) + 1;
|
|
139
|
+
const after = f.slice(idx + dirPrefix.length);
|
|
140
|
+
if (after.length > 0 && !after.includes('/'))
|
|
141
|
+
return raw;
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Try each suffix of the namespace path against `.cs` files and directories,
|
|
147
|
+
* stripping leading segments one at a time. Models `using CrossFile.Models;`
|
|
148
|
+
* resolving to `Models/User.cs` in a repo laid out without the `CrossFile/`
|
|
149
|
+
* prefix (the scope-resolver layer has no csproj to consult).
|
|
150
|
+
*/
|
|
151
|
+
function resolveByProgressiveStripping(allFilePaths, pathLike) {
|
|
152
|
+
const segments = pathLike.split('/').filter(Boolean);
|
|
153
|
+
for (let skip = 1; skip < segments.length; skip++) {
|
|
154
|
+
const tail = segments.slice(skip).join('/');
|
|
155
|
+
if (tail === '')
|
|
156
|
+
continue;
|
|
157
|
+
const tailFile = `${tail}.cs`;
|
|
158
|
+
const tailSuffix = `/${tailFile}`;
|
|
159
|
+
let tailFileMatch = null;
|
|
160
|
+
for (const raw of allFilePaths) {
|
|
161
|
+
const f = raw.replace(/\\/g, '/');
|
|
162
|
+
if (!f.endsWith('.cs'))
|
|
163
|
+
continue;
|
|
164
|
+
if (f === tailFile || f.endsWith(tailSuffix)) {
|
|
165
|
+
tailFileMatch = raw;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (tailFileMatch !== null)
|
|
170
|
+
return tailFileMatch;
|
|
171
|
+
const child = findDirectChild(allFilePaths, tail);
|
|
172
|
+
if (child !== null)
|
|
173
|
+
return child;
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* C# scope-resolution hooks (RFC #909 Ring 3, RFC §5).
|
|
4
|
+
*
|
|
5
|
+
* Public API barrel. Consumers should import from this file rather than
|
|
6
|
+
* the individual modules.
|
|
7
|
+
*
|
|
8
|
+
* Module layout (each file is a single concern):
|
|
9
|
+
*
|
|
10
|
+
* - `query.ts` — tree-sitter query + lazy parser/query singletons
|
|
11
|
+
* - `captures.ts` — `emitCsharpScopeCaptures` orchestrator
|
|
12
|
+
* - `import-decomposer.ts` — each `using` → ParsedImport-shaped captures
|
|
13
|
+
* - `interpret.ts` — capture-match → `ParsedImport` / `ParsedTypeBinding`
|
|
14
|
+
* - `simple-hooks.ts` — small/no-op hooks made explicit
|
|
15
|
+
* - `receiver-binding.ts` — synthesize `this`/`base` type-bindings on
|
|
16
|
+
* instance-method entry
|
|
17
|
+
* - `merge-bindings.ts` — C# `using` precedence
|
|
18
|
+
* - `arity.ts` — C# arity compatibility (`params`, default values)
|
|
19
|
+
* - `arity-metadata.ts` — synthesize arity metadata from declarations
|
|
20
|
+
* - `accessor-unwrap.ts` — `.Values` / `.Keys` receiver-type unwrap for
|
|
21
|
+
* `Dictionary<K,V>` chains
|
|
22
|
+
* - `namespace-siblings.ts` — AST-driven cross-file implicit-namespace
|
|
23
|
+
* visibility (file/namespace attribution, no
|
|
24
|
+
* regex; reuses orchestrator's treeCache)
|
|
25
|
+
* - `import-target.ts` — `(ParsedImport, WorkspaceIndex) → file path` adapter
|
|
26
|
+
* - `scope-resolver.ts` — `ScopeResolver` registered in `SCOPE_RESOLVERS`
|
|
27
|
+
* - `cache-stats.ts` — PROF_SCOPE_RESOLUTION cache hit/miss counters
|
|
28
|
+
*
|
|
29
|
+
* ## Known limitations
|
|
30
|
+
*
|
|
31
|
+
* The C# registry-primary path intentionally does NOT resolve the
|
|
32
|
+
* following. Each is a conscious trade-off at migration time.
|
|
33
|
+
*
|
|
34
|
+
* 1. **csproj-driven namespace resolution** — the legacy path
|
|
35
|
+
* consults `csharpConfigs` (the parsed .csproj workspace) to map
|
|
36
|
+
* `using X.Y;` back to the exact files declaring `namespace X.Y`.
|
|
37
|
+
* The scope-resolver contract passes only `allFilePaths`, so we
|
|
38
|
+
* fall back to suffix matching on `.cs` files. Unit 7's parity
|
|
39
|
+
* gate flags any divergence.
|
|
40
|
+
* 2. **Multi-file namespace expansion** — a single `using X.Y;` in
|
|
41
|
+
* the legacy path can emit multiple IMPORTS edges (every file
|
|
42
|
+
* declaring that namespace). The scope-resolver contract returns
|
|
43
|
+
* a single target, so we pick the first match; partial-class
|
|
44
|
+
* aggregation runs at graph-bridge time.
|
|
45
|
+
* 3. **Overload resolution by parameter type** — arity narrowing is
|
|
46
|
+
* wired (`arity.ts` + `arity-metadata.ts`), but type-based
|
|
47
|
+
* disambiguation (`F(int)` vs `F(string)` at a call with a typed
|
|
48
|
+
* argument) is left to the registry's type-binding layer.
|
|
49
|
+
* 4. **Generic type parameter resolution** — `List<User>` binds the
|
|
50
|
+
* bound name to `User` via the single-arg-generic stripper;
|
|
51
|
+
* nested generics (`Dictionary<K, List<V>>`) fall through the
|
|
52
|
+
* receiver-type heuristic.
|
|
53
|
+
* 5. **`dynamic` typed expressions** — runtime dispatch through
|
|
54
|
+
* `dynamic` is not followed.
|
|
55
|
+
* 6. **Preprocessor-conditional code** — `#if DEBUG` blocks parse
|
|
56
|
+
* as usual; branch selection is ignored, so both arms contribute
|
|
57
|
+
* bindings.
|
|
58
|
+
* 7. **Global using propagation across files** — treated as a
|
|
59
|
+
* file-scoped using for the declaring file. Unit 7 parity gate
|
|
60
|
+
* will flag cases where this matters.
|
|
61
|
+
* 8. **Expression-bodied `=>` members** — handled by the method
|
|
62
|
+
* extractor, but receiver synthesis for `=> this.Field` shortcuts
|
|
63
|
+
* follows the same path as block-bodied methods.
|
|
64
|
+
* 9. **Multi-namespace file attribution** — when a single file
|
|
65
|
+
* declares two namespaces (rare), all top-level classes are
|
|
66
|
+
* attributed to the first declared namespace via a `first-wins`
|
|
67
|
+
* rule in `namespace-siblings.ts`. Namespace detection itself is
|
|
68
|
+
* AST-driven (tree-sitter), so `global using static`, aliased
|
|
69
|
+
* `using static X = Y.Z;`, attributes, and preprocessor-gated
|
|
70
|
+
* declarations are all recognized correctly.
|
|
71
|
+
*
|
|
72
|
+
* The `test/integration/resolvers/csharp.test.ts` resolver suite is the
|
|
73
|
+
* authoritative signal for which of these matter in practice; it runs in
|
|
74
|
+
* the standard CI test workflow, so a regression blocks the merge.
|
|
75
|
+
*/
|
|
76
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
77
|
+
exports.csharpReceiverBinding = exports.csharpImportOwningScope = exports.csharpBindingScopeFor = exports.resolveCsharpImportTarget = exports.csharpArityCompatibility = exports.csharpMergeBindings = exports.interpretCsharpTypeBinding = exports.interpretCsharpImport = exports.resetCsharpCaptureCacheStats = exports.getCsharpCaptureCacheStats = exports.emitCsharpScopeCaptures = void 0;
|
|
78
|
+
var captures_js_1 = require("./captures.js");
|
|
79
|
+
Object.defineProperty(exports, "emitCsharpScopeCaptures", { enumerable: true, get: function () { return captures_js_1.emitCsharpScopeCaptures; } });
|
|
80
|
+
var cache_stats_js_1 = require("./cache-stats.js");
|
|
81
|
+
Object.defineProperty(exports, "getCsharpCaptureCacheStats", { enumerable: true, get: function () { return cache_stats_js_1.getCsharpCaptureCacheStats; } });
|
|
82
|
+
Object.defineProperty(exports, "resetCsharpCaptureCacheStats", { enumerable: true, get: function () { return cache_stats_js_1.resetCsharpCaptureCacheStats; } });
|
|
83
|
+
var interpret_js_1 = require("./interpret.js");
|
|
84
|
+
Object.defineProperty(exports, "interpretCsharpImport", { enumerable: true, get: function () { return interpret_js_1.interpretCsharpImport; } });
|
|
85
|
+
Object.defineProperty(exports, "interpretCsharpTypeBinding", { enumerable: true, get: function () { return interpret_js_1.interpretCsharpTypeBinding; } });
|
|
86
|
+
var merge_bindings_js_1 = require("./merge-bindings.js");
|
|
87
|
+
Object.defineProperty(exports, "csharpMergeBindings", { enumerable: true, get: function () { return merge_bindings_js_1.csharpMergeBindings; } });
|
|
88
|
+
var arity_js_1 = require("./arity.js");
|
|
89
|
+
Object.defineProperty(exports, "csharpArityCompatibility", { enumerable: true, get: function () { return arity_js_1.csharpArityCompatibility; } });
|
|
90
|
+
var import_target_js_1 = require("./import-target.js");
|
|
91
|
+
Object.defineProperty(exports, "resolveCsharpImportTarget", { enumerable: true, get: function () { return import_target_js_1.resolveCsharpImportTarget; } });
|
|
92
|
+
var simple_hooks_js_1 = require("./simple-hooks.js");
|
|
93
|
+
Object.defineProperty(exports, "csharpBindingScopeFor", { enumerable: true, get: function () { return simple_hooks_js_1.csharpBindingScopeFor; } });
|
|
94
|
+
Object.defineProperty(exports, "csharpImportOwningScope", { enumerable: true, get: function () { return simple_hooks_js_1.csharpImportOwningScope; } });
|
|
95
|
+
Object.defineProperty(exports, "csharpReceiverBinding", { enumerable: true, get: function () { return simple_hooks_js_1.csharpReceiverBinding; } });
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Capture-match → semantic-shape interpreters for C#.
|
|
4
|
+
*
|
|
5
|
+
* - `interpretCsharpImport` → `ParsedImport`
|
|
6
|
+
* - `interpretCsharpTypeBinding` → `ParsedTypeBinding`
|
|
7
|
+
*
|
|
8
|
+
* The using-directive matches arrive pre-decomposed by
|
|
9
|
+
* `emitCsharpScopeCaptures` (one import per match, with synthesized
|
|
10
|
+
* `@import.kind/source/name/alias` markers). Type-binding matches arrive
|
|
11
|
+
* from the raw query captures — each `@type-binding.*` anchor carries
|
|
12
|
+
* `@type-binding.name` + `@type-binding.type`.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.interpretCsharpImport = interpretCsharpImport;
|
|
16
|
+
exports.interpretCsharpTypeBinding = interpretCsharpTypeBinding;
|
|
17
|
+
// ─── interpretImport ──────────────────────────────────────────────────────
|
|
18
|
+
function interpretCsharpImport(captures) {
|
|
19
|
+
const kindCap = captures['@import.kind'];
|
|
20
|
+
const sourceCap = captures['@import.source'];
|
|
21
|
+
const nameCap = captures['@import.name'];
|
|
22
|
+
const aliasCap = captures['@import.alias'];
|
|
23
|
+
const kind = kindCap?.text;
|
|
24
|
+
if (kind === undefined || sourceCap === undefined)
|
|
25
|
+
return null;
|
|
26
|
+
switch (kind) {
|
|
27
|
+
case 'namespace': {
|
|
28
|
+
// `using System;` / `using System.Collections.Generic;`
|
|
29
|
+
// Bind the last segment as the local name so `Generic.Foo`-style
|
|
30
|
+
// qualifier references resolve. Full path is the resolution target.
|
|
31
|
+
return {
|
|
32
|
+
kind: 'namespace',
|
|
33
|
+
localName: nameCap?.text ?? sourceCap.text.split('.').pop() ?? sourceCap.text,
|
|
34
|
+
importedName: sourceCap.text,
|
|
35
|
+
targetRaw: sourceCap.text,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
case 'alias': {
|
|
39
|
+
// `using Dict = System.Collections.Generic.Dictionary<string, int>;`
|
|
40
|
+
// The decomposer already stripped generic args from source.
|
|
41
|
+
if (aliasCap === undefined)
|
|
42
|
+
return null;
|
|
43
|
+
const importedName = sourceCap.text.split('.').pop() ?? sourceCap.text;
|
|
44
|
+
return {
|
|
45
|
+
kind: 'alias',
|
|
46
|
+
localName: aliasCap.text,
|
|
47
|
+
importedName,
|
|
48
|
+
alias: aliasCap.text,
|
|
49
|
+
targetRaw: sourceCap.text,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
case 'static': {
|
|
53
|
+
// `using static System.Math;` — brings static members of Math into
|
|
54
|
+
// unqualified scope. Semantically closest to a wildcard, but we
|
|
55
|
+
// map to `namespace` here so finalize emits the File→File IMPORTS
|
|
56
|
+
// edge without requiring `expandsWildcardTo` (which would list
|
|
57
|
+
// every exported member). Static-member unqualified-access is a
|
|
58
|
+
// deferred limitation; the usual cross-file lookup via
|
|
59
|
+
// namespace-siblings covers `Target.Member` calls.
|
|
60
|
+
const lastSegment = sourceCap.text.split('.').pop() ?? sourceCap.text;
|
|
61
|
+
return {
|
|
62
|
+
kind: 'namespace',
|
|
63
|
+
localName: lastSegment,
|
|
64
|
+
importedName: sourceCap.text,
|
|
65
|
+
targetRaw: sourceCap.text,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
default:
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// ─── interpretTypeBinding ─────────────────────────────────────────────────
|
|
73
|
+
function interpretCsharpTypeBinding(captures) {
|
|
74
|
+
const nameCap = captures['@type-binding.name'];
|
|
75
|
+
const typeCap = captures['@type-binding.type'];
|
|
76
|
+
if (nameCap === undefined || typeCap === undefined)
|
|
77
|
+
return null;
|
|
78
|
+
// Strip nullable suffix (`User?` → `User`), single-arg generic wrapper
|
|
79
|
+
// (`List<User>` → `User`), and qualifier (`System.User` → `User`) so
|
|
80
|
+
// receiver-typed resolution treats these identically.
|
|
81
|
+
const rawType = stripQualifier(stripGeneric(stripNullable(typeCap.text.trim())));
|
|
82
|
+
// Anchor captures distinguish the source of the binding. Order
|
|
83
|
+
// matters: more-specific anchors take precedence.
|
|
84
|
+
let source = 'parameter-annotation';
|
|
85
|
+
if (captures['@type-binding.self'] !== undefined)
|
|
86
|
+
source = 'self';
|
|
87
|
+
else if (captures['@type-binding.constructor'] !== undefined)
|
|
88
|
+
source = 'constructor-inferred';
|
|
89
|
+
else if (captures['@type-binding.annotation'] !== undefined)
|
|
90
|
+
source = 'annotation';
|
|
91
|
+
else if (captures['@type-binding.alias'] !== undefined)
|
|
92
|
+
source = 'assignment-inferred';
|
|
93
|
+
else if (captures['@type-binding.return'] !== undefined)
|
|
94
|
+
source = 'return-annotation';
|
|
95
|
+
return { boundName: nameCap.text, rawTypeName: rawType, source };
|
|
96
|
+
}
|
|
97
|
+
/** Member accesses we want to preserve through qualifier stripping.
|
|
98
|
+
* Dictionary/collection views (`data.Values`, `data.Keys`) survive
|
|
99
|
+
* so the compound-receiver pass can unwrap the receiver's generic
|
|
100
|
+
* type (Dictionary<K,V>) based on the suffix. */
|
|
101
|
+
const COLLECTION_ACCESSOR_SUFFIXES = new Set(['Values', 'Keys']);
|
|
102
|
+
/** `User?` → `User`. */
|
|
103
|
+
function stripNullable(text) {
|
|
104
|
+
if (text.endsWith('?'))
|
|
105
|
+
return text.slice(0, -1).trim();
|
|
106
|
+
return text;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Unwrap a single-arg generic collection wrapper — `List<User>`,
|
|
110
|
+
* `IEnumerable<User>`, `Task<User>` — to its element type. Mirrors
|
|
111
|
+
* Python's `stripGeneric` behavior so for-loop and chain propagation
|
|
112
|
+
* work on the element type.
|
|
113
|
+
*
|
|
114
|
+
* Multi-arg generics (`Dictionary<string, User>`, `Func<int, User>`)
|
|
115
|
+
* are left alone — element semantics aren't unambiguous.
|
|
116
|
+
*/
|
|
117
|
+
function stripGeneric(text) {
|
|
118
|
+
const single = text.match(/^(?:[A-Za-z_][A-Za-z0-9_.]*\.)?(?:List|IList|IEnumerable|ICollection|IReadOnlyList|IReadOnlyCollection|HashSet|ISet|Task|ValueTask|Nullable|IAsyncEnumerable)<([^,<>]+)>$/);
|
|
119
|
+
if (single !== null)
|
|
120
|
+
return single[1].trim();
|
|
121
|
+
return text;
|
|
122
|
+
}
|
|
123
|
+
/** `System.Collections.User` → `User`. Preserves dotted paths whose
|
|
124
|
+
* final segment is a known Dictionary/collection accessor (`.Values`,
|
|
125
|
+
* `.Keys`, `.Count`, etc.) so downstream resolvers can unwrap the
|
|
126
|
+
* receiver's generic type based on the suffix — `data.Values` →
|
|
127
|
+
* element type of `data`'s Dictionary<K,V>. */
|
|
128
|
+
function stripQualifier(text) {
|
|
129
|
+
// Strip only the outermost qualifier: the last `.` at generic nesting depth 0.
|
|
130
|
+
// This preserves F41 (never cut inside `Dictionary<string, Ns.User>`) AND
|
|
131
|
+
// nested types through a generic outer (`Ns.Outer<int>.Inner` → `Inner`, not
|
|
132
|
+
// `Outer<int>.Inner` — #2046 P3).
|
|
133
|
+
let depth = 0;
|
|
134
|
+
let lastDotAtDepth0 = -1;
|
|
135
|
+
for (let i = 0; i < text.length; i++) {
|
|
136
|
+
const c = text[i];
|
|
137
|
+
if (c === '<')
|
|
138
|
+
depth++;
|
|
139
|
+
else if (c === '>')
|
|
140
|
+
depth = Math.max(0, depth - 1);
|
|
141
|
+
else if (c === '.' && depth === 0)
|
|
142
|
+
lastDotAtDepth0 = i;
|
|
143
|
+
}
|
|
144
|
+
if (lastDotAtDepth0 === -1)
|
|
145
|
+
return text;
|
|
146
|
+
const tail = text.slice(lastDotAtDepth0 + 1);
|
|
147
|
+
if (COLLECTION_ACCESSOR_SUFFIXES.has(tail))
|
|
148
|
+
return text;
|
|
149
|
+
return tail;
|
|
150
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* C# shadowing precedence for the `mergeBindings` hook.
|
|
4
|
+
*
|
|
5
|
+
* Tier ranking (lower wins in shadowing):
|
|
6
|
+
*
|
|
7
|
+
* - 0: `local` — a class member, method, local variable, or parameter
|
|
8
|
+
* declared in this scope.
|
|
9
|
+
* - 1: `import` / `namespace` / `reexport` — `using System;`,
|
|
10
|
+
* `using System.Collections.Generic;`, `using Alias = Foo;`.
|
|
11
|
+
* All three using flavors that introduce a name at this scope
|
|
12
|
+
* tier together; the compiler resolves ambiguity by requiring
|
|
13
|
+
* an explicit qualifier when two `using`s collide, but for
|
|
14
|
+
* receiver-typed dispatch we treat them as equivalent tiers.
|
|
15
|
+
* - 2: `wildcard` — `using static System.Math;` brings static
|
|
16
|
+
* members in; any local or `using` with the same simple name
|
|
17
|
+
* shadows.
|
|
18
|
+
*
|
|
19
|
+
* Explicit interface implementations (`void IFoo.Bar() { }`) bind under
|
|
20
|
+
* the qualified name in the extractor layer, so they never collide with
|
|
21
|
+
* a plain `Bar` at this layer.
|
|
22
|
+
*
|
|
23
|
+
* Within a surviving tier we de-dup by `DefId`, last-write-wins so a
|
|
24
|
+
* `using` re-declared further down the file cleanly replaces the
|
|
25
|
+
* earlier binding.
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.csharpMergeBindings = csharpMergeBindings;
|
|
29
|
+
const TIER_LOCAL = 0;
|
|
30
|
+
const TIER_IMPORT = 1;
|
|
31
|
+
const TIER_WILDCARD = 2;
|
|
32
|
+
const TIER_UNKNOWN = 3;
|
|
33
|
+
function tierOf(b) {
|
|
34
|
+
switch (b.origin) {
|
|
35
|
+
case 'local':
|
|
36
|
+
return TIER_LOCAL;
|
|
37
|
+
case 'reexport':
|
|
38
|
+
case 'import':
|
|
39
|
+
case 'namespace':
|
|
40
|
+
return TIER_IMPORT;
|
|
41
|
+
case 'wildcard':
|
|
42
|
+
return TIER_WILDCARD;
|
|
43
|
+
default:
|
|
44
|
+
return TIER_UNKNOWN;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function csharpMergeBindings(bindings) {
|
|
48
|
+
if (bindings.length === 0)
|
|
49
|
+
return bindings;
|
|
50
|
+
let bestTier = Number.POSITIVE_INFINITY;
|
|
51
|
+
for (const b of bindings)
|
|
52
|
+
bestTier = Math.min(bestTier, tierOf(b));
|
|
53
|
+
const survivors = bindings.filter((b) => tierOf(b) === bestTier);
|
|
54
|
+
const seen = new Map();
|
|
55
|
+
for (const b of survivors)
|
|
56
|
+
seen.set(b.def.nodeId, b);
|
|
57
|
+
return [...seen.values()];
|
|
58
|
+
}
|