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,708 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* C# same-namespace cross-file visibility.
|
|
4
|
+
*
|
|
5
|
+
* C# makes every type declared in `namespace X` visible to every other
|
|
6
|
+
* file that also declares `namespace X`, without any explicit `using`
|
|
7
|
+
* directive. Python has no equivalent — every cross-file reference
|
|
8
|
+
* needs an explicit import — so this is a C#-specific pass.
|
|
9
|
+
*
|
|
10
|
+
* Without this: `Service.cs` (namespace `FieldTypes`) can't see
|
|
11
|
+
* `User` declared in `Models.cs` (same namespace), so `user.Address`
|
|
12
|
+
* field-chain resolution fails at `findClassBindingInScope('User')`
|
|
13
|
+
* in the Service.cs scope chain.
|
|
14
|
+
*
|
|
15
|
+
* Implementation: after the finalize pass populates immutable
|
|
16
|
+
* `indexes.bindings` (from explicit `using` directives), walk each
|
|
17
|
+
* file's tree-sitter AST for `namespace_declaration` /
|
|
18
|
+
* `file_scoped_namespace_declaration` and `using_directive` nodes.
|
|
19
|
+
* The orchestrator hands us its `treeCache` so files already parsed
|
|
20
|
+
* by `extractParsedFile` are re-used instead of re-parsed —
|
|
21
|
+
* `ParsedFile`'s underlying tree is the single source of truth.
|
|
22
|
+
* Group classes by namespace, then route cross-file sibling classes
|
|
23
|
+
* (and method return-type bindings) through SHARED, per-namespace
|
|
24
|
+
* channels — `namespaceFqnBindings` / `namespaceTypeBindings`, keyed by
|
|
25
|
+
* namespace name — populated ONCE per bucket with `origin: 'namespace'`,
|
|
26
|
+
* rather than copied into every sibling's per-scope `bindingAugmentations`
|
|
27
|
+
* / `Scope.typeBindings`. That per-file copy was O(files²) for a
|
|
28
|
+
* concentrated namespace and OOM'd large solutions (#1871; the global
|
|
29
|
+
* twin was fixed in #1905/#1954). The walkers consult these channels
|
|
30
|
+
* gated by `accessibleNamespacesByScope` (a file's own namespace +
|
|
31
|
+
* `using` targets), so visibility is unchanged — only the storage is
|
|
32
|
+
* shared. Finalized bindings remain first in `lookupBindingsAt`, and
|
|
33
|
+
* local lexical `Scope.bindings` remains the first-tier shadowing
|
|
34
|
+
* channel. (`using static` member exposure still uses the per-scope
|
|
35
|
+
* augmentation channel — it is per-import and not part of the blow-up.)
|
|
36
|
+
*
|
|
37
|
+
* The tree-sitter walk is authoritative: it sees `global using static`,
|
|
38
|
+
* aliased `using static X = Y.Z;`, attributed namespace declarations,
|
|
39
|
+
* and preprocessor-guarded declarations correctly because the
|
|
40
|
+
* tree-sitter grammar parses them as real nodes (not textual
|
|
41
|
+
* coincidences). When the orchestrator's `treeCache` has no Tree for a
|
|
42
|
+
* file — the worker path, where native Trees can't cross MessageChannels
|
|
43
|
+
* — `extractFileStructure` falls back to a line scanner rather than
|
|
44
|
+
* re-parsing every file from scratch (that re-parse dominated worker-mode
|
|
45
|
+
* scope-resolution time). See `extractCsharpStructureViaScanner`.
|
|
46
|
+
*/
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.createCsharpStructureScanner = createCsharpStructureScanner;
|
|
49
|
+
exports.extractCsharpStructureViaScanner = extractCsharpStructureViaScanner;
|
|
50
|
+
exports.populateCsharpNamespaceSiblings = populateCsharpNamespaceSiblings;
|
|
51
|
+
// A dotted C# namespace identifier: each segment is an optional verbatim `@`
|
|
52
|
+
// followed by a Unicode letter/`_` and Unicode letters/digits/`_`. The `u` flag
|
|
53
|
+
// makes the classes Unicode-aware so `namespace Café.Models;` is captured (the
|
|
54
|
+
// old ASCII `[A-Za-z…]` truncated it). The `@` markers are stripped from the
|
|
55
|
+
// capture so it matches the tree-sitter AST's `name` text.
|
|
56
|
+
const CS_NS_IDENT = String.raw `@?[\p{L}_][\p{L}\p{N}_]*(?:\.@?[\p{L}_][\p{L}\p{N}_]*)*`;
|
|
57
|
+
// Line-anchored matchers for the worker-path fallback (see
|
|
58
|
+
// `extractCsharpStructureViaScanner`). Anchored at line start (after
|
|
59
|
+
// indentation); the scanner additionally tracks block-comment / string
|
|
60
|
+
// state across lines so a keyword at the start of a line inside one of
|
|
61
|
+
// those regions is skipped.
|
|
62
|
+
const CS_NAMESPACE_RE = new RegExp(String.raw `^[ \t]*namespace[ \t]+(${CS_NS_IDENT})`, 'u');
|
|
63
|
+
// `global using static`, plain `using static`, and the aliased
|
|
64
|
+
// `using static Alias = NS.Type;` form (the AST keeps the RHS path, so
|
|
65
|
+
// the optional `Alias =` is skipped and only the dotted path captured).
|
|
66
|
+
const CS_USING_STATIC_RE = new RegExp(String.raw `^[ \t]*(?:global[ \t]+)?using[ \t]+static[ \t]+(?:@?[\p{L}_][\p{L}\p{N}_]*[ \t]*=[ \t]*)?(${CS_NS_IDENT})`, 'u');
|
|
67
|
+
// Incompleteness detectors — used ONLY when the precise matchers above failed,
|
|
68
|
+
// to flag a declaration the scanner could not capture (so the file fails the
|
|
69
|
+
// #1881 gate OPEN instead of silently dropping the namespace). Kept
|
|
70
|
+
// high-precision so ordinary files never trip them (which would wrongly disable
|
|
71
|
+
// the gate repo-wide):
|
|
72
|
+
// - `…_BARE`: the keyword alone on a line (the name is on the next line).
|
|
73
|
+
// - `…_AT_START`: a line-start declaration the precise matcher couldn't parse.
|
|
74
|
+
// - `CS_NAMESPACE_AFTER_CODE`: a `namespace` keyword right after a `}`/`;`/`{`/`]`
|
|
75
|
+
// (real code, NOT a `//` comment), i.e. not at line start.
|
|
76
|
+
const CS_NAMESPACE_BARE = /^[ \t]*namespace[ \t]*\r?$/;
|
|
77
|
+
const CS_USING_STATIC_BARE = /^[ \t]*(?:global[ \t]+)?using[ \t]+static[ \t]*\r?$/;
|
|
78
|
+
const CS_NAMESPACE_AT_START = /^[ \t]*namespace[ \t]+\S/;
|
|
79
|
+
const CS_USING_STATIC_AT_START = /^[ \t]*(?:global[ \t]+)?using[ \t]+static[ \t]+\S/;
|
|
80
|
+
const CS_NAMESPACE_AFTER_CODE = /[}\];{][ \t]*namespace[ \t]+@?[\p{L}_]/u;
|
|
81
|
+
/** Whether a `code`-state line declares a namespace / using-static the precise
|
|
82
|
+
* matchers could not capture — see the detectors above. */
|
|
83
|
+
function looksLikeUncapturedDeclaration(line) {
|
|
84
|
+
return (CS_NAMESPACE_BARE.test(line) ||
|
|
85
|
+
CS_USING_STATIC_BARE.test(line) ||
|
|
86
|
+
CS_NAMESPACE_AT_START.test(line) ||
|
|
87
|
+
CS_USING_STATIC_AT_START.test(line) ||
|
|
88
|
+
CS_NAMESPACE_AFTER_CODE.test(line));
|
|
89
|
+
}
|
|
90
|
+
/** Advance the scanner's lexical state across one line, consuming block
|
|
91
|
+
* comments (slash-star), line comments (`//`), single-line regular /
|
|
92
|
+
* interpolated strings, verbatim strings (`@"…"`), and raw string literals
|
|
93
|
+
* (`"""…"""`, fence length tracked in `rawFence`). Returns the state and
|
|
94
|
+
* raw-fence length in effect at the START of the next line. Single-line
|
|
95
|
+
* strings and `//` comments resolve back to `code` before end of line; only
|
|
96
|
+
* block comments and multi-line strings carry state forward. */
|
|
97
|
+
function advanceCsScanState(line, state, rawFence) {
|
|
98
|
+
const n = line.length;
|
|
99
|
+
let i = 0;
|
|
100
|
+
while (i < n) {
|
|
101
|
+
if (state === 'block') {
|
|
102
|
+
const end = line.indexOf('*/', i);
|
|
103
|
+
if (end === -1)
|
|
104
|
+
return ['block', rawFence];
|
|
105
|
+
i = end + 2;
|
|
106
|
+
state = 'code';
|
|
107
|
+
}
|
|
108
|
+
else if (state === 'verbatim') {
|
|
109
|
+
// Ends at a `"` that is not doubled (`""` is an escaped quote).
|
|
110
|
+
while (i < n) {
|
|
111
|
+
if (line[i] === '"') {
|
|
112
|
+
if (line[i + 1] === '"') {
|
|
113
|
+
i += 2;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
i++;
|
|
119
|
+
}
|
|
120
|
+
if (i >= n)
|
|
121
|
+
return ['verbatim', rawFence];
|
|
122
|
+
i += 1;
|
|
123
|
+
state = 'code';
|
|
124
|
+
}
|
|
125
|
+
else if (state === 'raw') {
|
|
126
|
+
// Ends at a run of `"` at least `rawFence` long.
|
|
127
|
+
let closed = false;
|
|
128
|
+
while (i < n) {
|
|
129
|
+
if (line[i] === '"') {
|
|
130
|
+
let k = i;
|
|
131
|
+
while (k < n && line[k] === '"')
|
|
132
|
+
k++;
|
|
133
|
+
if (k - i >= rawFence) {
|
|
134
|
+
i = k;
|
|
135
|
+
state = 'code';
|
|
136
|
+
rawFence = 0;
|
|
137
|
+
closed = true;
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
i = k;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
i++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (!closed)
|
|
147
|
+
return ['raw', rawFence];
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const c = line[i];
|
|
151
|
+
const next = line[i + 1];
|
|
152
|
+
if (c === '/' && next === '/')
|
|
153
|
+
return ['code', rawFence]; // line comment to EOL
|
|
154
|
+
if (c === '/' && next === '*') {
|
|
155
|
+
state = 'block';
|
|
156
|
+
i += 2;
|
|
157
|
+
}
|
|
158
|
+
else if (c === '@' && next === '"') {
|
|
159
|
+
state = 'verbatim';
|
|
160
|
+
i += 2;
|
|
161
|
+
}
|
|
162
|
+
else if ((c === '$' && next === '@') || (c === '@' && next === '$')) {
|
|
163
|
+
if (line[i + 2] === '"') {
|
|
164
|
+
state = 'verbatim'; // interpolated verbatim ($@"…" / @$"…")
|
|
165
|
+
i += 3;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
i++;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else if (c === '"') {
|
|
172
|
+
let k = i;
|
|
173
|
+
while (k < n && line[k] === '"')
|
|
174
|
+
k++;
|
|
175
|
+
const run = k - i;
|
|
176
|
+
if (run >= 3) {
|
|
177
|
+
state = 'raw';
|
|
178
|
+
rawFence = run;
|
|
179
|
+
i = k;
|
|
180
|
+
}
|
|
181
|
+
else if (run === 2) {
|
|
182
|
+
i = k; // "" — empty string
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
// single-line regular / interpolated string; consume to closer
|
|
186
|
+
let j = i + 1;
|
|
187
|
+
while (j < n) {
|
|
188
|
+
if (line[j] === '\\') {
|
|
189
|
+
j += 2;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (line[j] === '"')
|
|
193
|
+
break;
|
|
194
|
+
j++;
|
|
195
|
+
}
|
|
196
|
+
i = j >= n ? n : j + 1;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
i++;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return [state, rawFence];
|
|
205
|
+
}
|
|
206
|
+
/** Create a fresh stateful line scanner — see {@link CsharpStructureLineScanner}. */
|
|
207
|
+
function createCsharpStructureScanner() {
|
|
208
|
+
const namespaces = [];
|
|
209
|
+
const usingStaticPaths = [];
|
|
210
|
+
let incomplete = false;
|
|
211
|
+
let state = 'code';
|
|
212
|
+
let rawFence = 0;
|
|
213
|
+
return {
|
|
214
|
+
pushLine(line) {
|
|
215
|
+
// Only match when the line START is real code — keywords reached while
|
|
216
|
+
// inside a block comment / multi-line string are skipped.
|
|
217
|
+
if (state === 'code') {
|
|
218
|
+
const ns = CS_NAMESPACE_RE.exec(line);
|
|
219
|
+
if (ns !== null) {
|
|
220
|
+
namespaces.push(ns[1].replace(/@/g, ''));
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
const us = CS_USING_STATIC_RE.exec(line);
|
|
224
|
+
if (us !== null) {
|
|
225
|
+
usingStaticPaths.push(us[1].replace(/@/g, ''));
|
|
226
|
+
}
|
|
227
|
+
else if (looksLikeUncapturedDeclaration(line)) {
|
|
228
|
+
// A declaration the precise matchers couldn't capture → mark the
|
|
229
|
+
// file incomplete so the #1881 gate fails OPEN (Codex F3).
|
|
230
|
+
incomplete = true;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
[state, rawFence] = advanceCsScanState(line, state, rawFence);
|
|
235
|
+
},
|
|
236
|
+
result() {
|
|
237
|
+
return incomplete
|
|
238
|
+
? { namespaces, usingStaticPaths, incomplete }
|
|
239
|
+
: { namespaces, usingStaticPaths };
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
function extractCsharpStructureViaScanner(content) {
|
|
244
|
+
const scanner = createCsharpStructureScanner();
|
|
245
|
+
for (const line of content.split('\n'))
|
|
246
|
+
scanner.pushLine(line);
|
|
247
|
+
return scanner.result();
|
|
248
|
+
}
|
|
249
|
+
/** Build a structural view of a C# file. Prefers `cachedTree` (handed in
|
|
250
|
+
* via `treeCache`) and walks the tree-sitter AST — the authoritative
|
|
251
|
+
* path that sees `global using static`, aliased `using static X = Y.Z;`,
|
|
252
|
+
* attributed namespace declarations, and preprocessor-guarded nodes
|
|
253
|
+
* correctly. On cache miss (worker-parsed files, whose native Trees
|
|
254
|
+
* can't cross MessageChannels) it falls back to the line scanner instead
|
|
255
|
+
* of a fresh tree-sitter parse — the parse here dominated worker-mode
|
|
256
|
+
* scope-resolution time. Parser singleton is shared across calls. */
|
|
257
|
+
function extractFileStructure(content, cachedTree) {
|
|
258
|
+
if (!cachedTree) {
|
|
259
|
+
return extractCsharpStructureViaScanner(content);
|
|
260
|
+
}
|
|
261
|
+
const tree = cachedTree;
|
|
262
|
+
const namespaces = [];
|
|
263
|
+
const usingStaticPaths = [];
|
|
264
|
+
const visit = (node) => {
|
|
265
|
+
if (node.type === 'namespace_declaration' ||
|
|
266
|
+
node.type === 'file_scoped_namespace_declaration') {
|
|
267
|
+
const nameNode = node.childForFieldName('name');
|
|
268
|
+
if (nameNode !== null)
|
|
269
|
+
namespaces.push(nameNode.text);
|
|
270
|
+
}
|
|
271
|
+
else if (node.type === 'using_directive') {
|
|
272
|
+
// Inspect the directive's own text for the `static` keyword
|
|
273
|
+
// (tree-sitter-c-sharp does not expose it as a named child).
|
|
274
|
+
// This is a single-node-scoped text inspection, not a whole-file
|
|
275
|
+
// regex, so it stays well within AST semantics.
|
|
276
|
+
if (/^\s*(?:global\s+)?using\s+static\s/.test(node.text)) {
|
|
277
|
+
// Path lives on the `name:` field when the using-directive is
|
|
278
|
+
// aliased (`using static A = X.Y.Z;`); otherwise it's the
|
|
279
|
+
// first named child.
|
|
280
|
+
const aliasField = node.childForFieldName('name');
|
|
281
|
+
let pathNode = null;
|
|
282
|
+
if (aliasField !== null) {
|
|
283
|
+
for (const c of node.namedChildren) {
|
|
284
|
+
if (c !== null && c.startIndex !== aliasField.startIndex) {
|
|
285
|
+
pathNode = c;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
pathNode = node.namedChildren[0] ?? null;
|
|
292
|
+
}
|
|
293
|
+
if (pathNode !== null)
|
|
294
|
+
usingStaticPaths.push(pathNode.text);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
for (const child of node.namedChildren) {
|
|
298
|
+
if (child !== null)
|
|
299
|
+
visit(child);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
visit(tree.rootNode);
|
|
303
|
+
return { namespaces, usingStaticPaths };
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Append cross-file sibling class defs to each Namespace scope's
|
|
307
|
+
* `bindingAugmentations` bucket. Class-like defs (Class / Interface /
|
|
308
|
+
* Struct / Record / Enum) are visible cross-file; method / field
|
|
309
|
+
* members are not.
|
|
310
|
+
*/
|
|
311
|
+
function populateCsharpNamespaceSiblings(parsedFiles, indexes, inputs) {
|
|
312
|
+
// Build a structural view (namespaces + using-static paths) per
|
|
313
|
+
// file once up-front. Reuses the orchestrator's `treeCache` so
|
|
314
|
+
// files already parsed by `extractParsedFile` don't get re-parsed
|
|
315
|
+
// here — single-source-of-truth for the AST.
|
|
316
|
+
const structureByFile = new Map();
|
|
317
|
+
for (const parsed of parsedFiles) {
|
|
318
|
+
const content = inputs.fileContents.get(parsed.filePath);
|
|
319
|
+
if (content === undefined)
|
|
320
|
+
continue;
|
|
321
|
+
const cachedTree = inputs.treeCache?.get(parsed.filePath);
|
|
322
|
+
structureByFile.set(parsed.filePath, extractFileStructure(content, cachedTree));
|
|
323
|
+
}
|
|
324
|
+
const buckets = new Map();
|
|
325
|
+
const getBucket = (name) => {
|
|
326
|
+
let b = buckets.get(name);
|
|
327
|
+
if (b === undefined) {
|
|
328
|
+
b = { scopes: [], classDefs: [] };
|
|
329
|
+
buckets.set(name, b);
|
|
330
|
+
}
|
|
331
|
+
return b;
|
|
332
|
+
};
|
|
333
|
+
for (const parsed of parsedFiles) {
|
|
334
|
+
const struct = structureByFile.get(parsed.filePath);
|
|
335
|
+
if (struct === undefined)
|
|
336
|
+
continue;
|
|
337
|
+
// Declared namespace names, source order (AST walk visits children
|
|
338
|
+
// left-to-right, matching the scope-extractor's ordering).
|
|
339
|
+
const names = struct.namespaces.length > 0 ? [...struct.namespaces] : [''];
|
|
340
|
+
const namespaceScopes = parsed.scopes.filter((s) => s.kind === 'Namespace');
|
|
341
|
+
// With file-scoped namespaces (`namespace X;`), the Namespace
|
|
342
|
+
// scope's range covers only the declaration line, not the rest of
|
|
343
|
+
// the file — so classes below it land under the Module scope, not
|
|
344
|
+
// the Namespace scope. Group top-level classes by "any class whose
|
|
345
|
+
// parent scope is Module or Namespace" and attribute them to the
|
|
346
|
+
// first declared namespace in the file. Multiple-namespace files
|
|
347
|
+
// are rare enough that first-wins is the right first pass; fix
|
|
348
|
+
// when the parity suite surfaces a case.
|
|
349
|
+
const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
|
|
350
|
+
const topLevelParentIds = new Set();
|
|
351
|
+
if (moduleScope !== undefined)
|
|
352
|
+
topLevelParentIds.add(moduleScope.id);
|
|
353
|
+
for (const ns of namespaceScopes)
|
|
354
|
+
topLevelParentIds.add(ns.id);
|
|
355
|
+
// Attribute all top-level classes to the first-declared namespace
|
|
356
|
+
// in this file. Multiple-namespace files are rare and can be
|
|
357
|
+
// addressed if the parity suite surfaces a case. Inject into BOTH
|
|
358
|
+
// the Module and the Namespace scopes — the Module scope is on
|
|
359
|
+
// the ancestor chain of every function body (the Namespace scope
|
|
360
|
+
// is not, because file-scoped `namespace X;` has a 1-line range).
|
|
361
|
+
const firstName = names[0];
|
|
362
|
+
const bucket = getBucket(firstName);
|
|
363
|
+
if (moduleScope !== undefined) {
|
|
364
|
+
bucket.scopes.push({
|
|
365
|
+
filePath: parsed.filePath,
|
|
366
|
+
scopeId: moduleScope.id,
|
|
367
|
+
scope: moduleScope,
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
for (const ns of namespaceScopes) {
|
|
371
|
+
bucket.scopes.push({ filePath: parsed.filePath, scopeId: ns.id, scope: ns });
|
|
372
|
+
}
|
|
373
|
+
for (const s of parsed.scopes) {
|
|
374
|
+
if (s.kind !== 'Class')
|
|
375
|
+
continue;
|
|
376
|
+
if (s.parent === null || !topLevelParentIds.has(s.parent))
|
|
377
|
+
continue;
|
|
378
|
+
for (const def of s.ownedDefs) {
|
|
379
|
+
if (isTypeDef(def)) {
|
|
380
|
+
bucket.classDefs.push(def);
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// Inject cross-file siblings into each namespace scope's
|
|
387
|
+
// post-finalize augmentation channel (per I8). The
|
|
388
|
+
// `indexes.bindingAugmentations` map is the dedicated mutable
|
|
389
|
+
// append-only buffer for post-finalize hooks: inner `BindingRef[]`
|
|
390
|
+
// arrays here are NEVER frozen (unlike `indexes.bindings`, which
|
|
391
|
+
// `materializeBindings` freezes). Walkers consult both channels
|
|
392
|
+
// via `lookupBindingsAt`; we never need to consult or mutate
|
|
393
|
+
// `indexes.bindings`.
|
|
394
|
+
const augmentations = indexes.bindingAugmentations;
|
|
395
|
+
// Global ('') namespace type-binding propagation (#1871). Types in the C#
|
|
396
|
+
// unnamed/global namespace form a single declaration space that is
|
|
397
|
+
// type-visible from EVERY file — including files inside named namespaces
|
|
398
|
+
// (C# spec: "any identifier in the global namespace is available for use in
|
|
399
|
+
// a named namespace"). Route their module-scope return-type bindings through
|
|
400
|
+
// the scope-independent `workspaceTypeBindings` channel ONCE, rather than
|
|
401
|
+
// copying every global file's bindings into every other file's
|
|
402
|
+
// `Scope.typeBindings`. That per-file copy was O(files × distinct-names) in
|
|
403
|
+
// both time and memory and OOM'd large no-namespace solutions (tens of
|
|
404
|
+
// thousands of files in the global bucket → billions of Map entries). This
|
|
405
|
+
// mirrors how Roslyn resolves against a single `Compilation.GlobalNamespace`
|
|
406
|
+
// symbol instead of per-file copies, and is the typeBindings analogue of the
|
|
407
|
+
// `workspaceFqnBindings` fast-path (#1905). `findReceiverTypeBinding` /
|
|
408
|
+
// `followChainPostFinalize` consult this channel as a final fallback.
|
|
409
|
+
const workspaceTypeBindings = indexes.workspaceTypeBindings;
|
|
410
|
+
const globalBucket = buckets.get('');
|
|
411
|
+
if (globalBucket !== undefined) {
|
|
412
|
+
for (const scopeInfo of globalBucket.scopes) {
|
|
413
|
+
if (scopeInfo.scope.kind !== 'Module')
|
|
414
|
+
continue;
|
|
415
|
+
for (const [boundName, typeRef] of scopeInfo.scope.typeBindings) {
|
|
416
|
+
// First-wins, matching the old per-importer `has(boundName)` skip:
|
|
417
|
+
// same-name collisions across global files are inherently ambiguous.
|
|
418
|
+
if (!workspaceTypeBindings.has(boundName)) {
|
|
419
|
+
workspaceTypeBindings.set(boundName, typeRef);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// Named-namespace type-binding propagation (#1871). Method return-type
|
|
425
|
+
// bindings are routed through the per-namespace `namespaceTypeBindings`
|
|
426
|
+
// channel — populated ONCE per named bucket — instead of copied into every
|
|
427
|
+
// sibling/importer file's Module `Scope.typeBindings`. That per-file copy was
|
|
428
|
+
// O(files²) for a concentrated named namespace (the global twin of which #1954
|
|
429
|
+
// already moved to `workspaceTypeBindings`); a solution with all files under
|
|
430
|
+
// one `namespace App;` reproduced the same OOM. The chain-walkers
|
|
431
|
+
// (`findReceiverTypeBinding`, `followChainPostFinalize`) consult this channel
|
|
432
|
+
// gated by `accessibleNamespacesByScope`, so a file sees exactly the
|
|
433
|
+
// namespaces it could before (its own + `using`d), just shared not copied.
|
|
434
|
+
const namespaceTypeBindings = indexes.namespaceTypeBindings;
|
|
435
|
+
for (const [nsName, bucket] of buckets) {
|
|
436
|
+
if (nsName === '')
|
|
437
|
+
continue; // global → workspaceTypeBindings (above)
|
|
438
|
+
let nsMap = namespaceTypeBindings.get(nsName);
|
|
439
|
+
for (const scopeInfo of bucket.scopes) {
|
|
440
|
+
if (scopeInfo.scope.kind !== 'Module')
|
|
441
|
+
continue;
|
|
442
|
+
for (const [boundName, typeRef] of scopeInfo.scope.typeBindings) {
|
|
443
|
+
if (nsMap === undefined) {
|
|
444
|
+
nsMap = new Map();
|
|
445
|
+
namespaceTypeBindings.set(nsName, nsMap);
|
|
446
|
+
}
|
|
447
|
+
// First-wins, matching the old per-importer `has(boundName)` skip.
|
|
448
|
+
if (!nsMap.has(boundName))
|
|
449
|
+
nsMap.set(boundName, typeRef);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
// Materialize each file's accessible namespaces (its own declared namespaces +
|
|
454
|
+
// every `using namespace X;` target, plus dotted-path prefixes), keyed by the
|
|
455
|
+
// file's Module scope id. This is the SAME accessibility set the per-file copy
|
|
456
|
+
// above used to derive — now stored so the language-neutral walkers can gate
|
|
457
|
+
// their `namespaceFqnBindings` / `namespaceTypeBindings` lookups to exactly the
|
|
458
|
+
// namespaces a file can see. The global ('') namespace is excluded: it is
|
|
459
|
+
// type-visible everywhere and handled by the flat workspace channels.
|
|
460
|
+
const accessibleNamespacesByScope = indexes.accessibleNamespacesByScope;
|
|
461
|
+
for (const parsed of parsedFiles) {
|
|
462
|
+
const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
|
|
463
|
+
if (moduleScope === undefined)
|
|
464
|
+
continue;
|
|
465
|
+
const accessibleNamespaces = new Set();
|
|
466
|
+
const struct = structureByFile.get(parsed.filePath);
|
|
467
|
+
if (struct !== undefined) {
|
|
468
|
+
for (const n of struct.namespaces)
|
|
469
|
+
accessibleNamespaces.add(n);
|
|
470
|
+
}
|
|
471
|
+
for (const imp of parsed.parsedImports) {
|
|
472
|
+
if (imp.kind === 'namespace' && imp.targetRaw !== null) {
|
|
473
|
+
accessibleNamespaces.add(imp.targetRaw);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
const expandedNamespaces = new Set(accessibleNamespaces);
|
|
477
|
+
for (const ns of accessibleNamespaces) {
|
|
478
|
+
const segments = ns.split('.');
|
|
479
|
+
for (let i = segments.length - 1; i > 0; i--) {
|
|
480
|
+
expandedNamespaces.add(segments.slice(0, i).join('.'));
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
expandedNamespaces.delete(''); // global handled by the flat workspace channels
|
|
484
|
+
if (expandedNamespaces.size > 0) {
|
|
485
|
+
accessibleNamespacesByScope.set(moduleScope.id, [...expandedNamespaces]);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
// `using static X.Y.Z;` — expose every public static method of
|
|
489
|
+
// class Z as a free-callable binding in the importer's module
|
|
490
|
+
// scope, so `Record(...)` (without `Logger.` qualifier) resolves
|
|
491
|
+
// to `Logger.Record`. AST walk above captured these (including
|
|
492
|
+
// `global using static` and aliased forms).
|
|
493
|
+
// Pre-index files by path once: the member-injection lookup below would
|
|
494
|
+
// otherwise be an O(files) scan per `using static` import.
|
|
495
|
+
const fileByPath = new Map(parsedFiles.map((p) => [p.filePath, p]));
|
|
496
|
+
for (const parsed of parsedFiles) {
|
|
497
|
+
const struct = structureByFile.get(parsed.filePath);
|
|
498
|
+
if (struct === undefined)
|
|
499
|
+
continue;
|
|
500
|
+
const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
|
|
501
|
+
if (moduleScope === undefined)
|
|
502
|
+
continue;
|
|
503
|
+
// Per-file de-dup sets keyed by simple name, seeded lazily from the
|
|
504
|
+
// augmentation bucket — replaces the per-member O(A) `.some` scan below.
|
|
505
|
+
const seenByName = new Map();
|
|
506
|
+
for (const fullPath of struct.usingStaticPaths) {
|
|
507
|
+
const lastDot = fullPath.lastIndexOf('.');
|
|
508
|
+
if (lastDot === -1)
|
|
509
|
+
continue;
|
|
510
|
+
const className = fullPath.slice(lastDot + 1);
|
|
511
|
+
const enclosingNs = fullPath.slice(0, lastDot);
|
|
512
|
+
// Find the target class in the named namespace bucket.
|
|
513
|
+
const bucket = buckets.get(enclosingNs);
|
|
514
|
+
if (bucket === undefined)
|
|
515
|
+
continue;
|
|
516
|
+
const targetDef = bucket.classDefs.find((d) => {
|
|
517
|
+
const q = d.qualifiedName ?? '';
|
|
518
|
+
const simple = q.includes('.') ? q.slice(q.lastIndexOf('.') + 1) : q;
|
|
519
|
+
return simple === className;
|
|
520
|
+
});
|
|
521
|
+
if (targetDef === undefined)
|
|
522
|
+
continue;
|
|
523
|
+
// Inject the class's member methods into the importer's module
|
|
524
|
+
// scope. `memberByOwner` wasn't built yet here, so we walk the
|
|
525
|
+
// file's localDefs to find members with `ownerId === targetDef.nodeId`.
|
|
526
|
+
const targetFile = fileByPath.get(targetDef.filePath);
|
|
527
|
+
if (targetFile === undefined)
|
|
528
|
+
continue;
|
|
529
|
+
for (const memberDef of targetFile.localDefs) {
|
|
530
|
+
if (memberDef.ownerId !== targetDef.nodeId)
|
|
531
|
+
continue;
|
|
532
|
+
if (memberDef.type !== 'Method' && memberDef.type !== 'Function')
|
|
533
|
+
continue;
|
|
534
|
+
const mq = memberDef.qualifiedName ?? '';
|
|
535
|
+
const simpleName = mq.includes('.') ? mq.slice(mq.lastIndexOf('.') + 1) : mq;
|
|
536
|
+
if (simpleName === '')
|
|
537
|
+
continue;
|
|
538
|
+
// Append to the augmentation bucket for the importer's module
|
|
539
|
+
// scope. `findCallableBindingInScope` reads via
|
|
540
|
+
// `lookupBindingsAt`, which fans out across `bindings` +
|
|
541
|
+
// `bindingAugmentations`.
|
|
542
|
+
const bucketArr = getAugmentationBucket(augmentations, moduleScope.id, simpleName);
|
|
543
|
+
let seen = seenByName.get(simpleName);
|
|
544
|
+
if (seen === undefined) {
|
|
545
|
+
seen = new Set();
|
|
546
|
+
for (const b of bucketArr)
|
|
547
|
+
seen.add(b.def.nodeId);
|
|
548
|
+
seenByName.set(simpleName, seen);
|
|
549
|
+
}
|
|
550
|
+
if (seen.has(memberDef.nodeId))
|
|
551
|
+
continue;
|
|
552
|
+
seen.add(memberDef.nodeId);
|
|
553
|
+
bucketArr.push({
|
|
554
|
+
def: memberDef,
|
|
555
|
+
origin: 'import',
|
|
556
|
+
visibility: 'static-member-import',
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
// Cross-namespace `using X;` class visibility is no longer injected per-file
|
|
562
|
+
// here (#1871). It is now subsumed by the per-namespace `namespaceFqnBindings`
|
|
563
|
+
// channel populated below: a file's `using` targets are already in its
|
|
564
|
+
// `accessibleNamespacesByScope` entry (materialized above), so `lookupBindingsAt`
|
|
565
|
+
// consults `namespaceFqnBindings[targetNs]` for it. Routing through the shared
|
|
566
|
+
// channel instead of copying each target bucket's classes into every importer's
|
|
567
|
+
// augmentation removes an O(importers × bucket-size) fanout on popular
|
|
568
|
+
// namespaces — the cross-namespace twin of the same-namespace blow-up.
|
|
569
|
+
// Workspace-level binding channel for global-namespace types (see the
|
|
570
|
+
// global fast-path below). `lookupBindingsAt` consults this as a third
|
|
571
|
+
// source after finalized + per-scope augmented bindings. Its inner arrays
|
|
572
|
+
// are mutable by contract (append-only, like `bindingAugmentations` — see
|
|
573
|
+
// the ScopeResolutionIndexes doc + validateBindingsImmutability), so the
|
|
574
|
+
// ReadonlyMap→Map cast is localized to this one line and all writes go
|
|
575
|
+
// through `getWorkspaceBucket`.
|
|
576
|
+
const workspace = indexes.workspaceFqnBindings;
|
|
577
|
+
// Per-namespace binding channel for NAMED-namespace class visibility — the
|
|
578
|
+
// namespace-scoped analogue of `workspace`, populated once per named bucket
|
|
579
|
+
// (#1871). Replaces the per-scope `bindingAugmentations` fanout (O(scopes ×
|
|
580
|
+
// defs)) for same-namespace siblings AND the per-file cross-namespace-`using`
|
|
581
|
+
// injection above. `lookupBindingsAt` consults it gated by
|
|
582
|
+
// `accessibleNamespacesByScope`.
|
|
583
|
+
const namespaceFqn = indexes.namespaceFqnBindings;
|
|
584
|
+
for (const [nsName, bucket] of buckets) {
|
|
585
|
+
// Group sibling defs by simple name. Append in place — the previous
|
|
586
|
+
// `[...prev, def]` copy made this O(D²) per bucket, which on the
|
|
587
|
+
// global (`''`) namespace bucket of a large Unity solution (tens of
|
|
588
|
+
// thousands of type defs) was a primary slowness/OOM source. We keep
|
|
589
|
+
// every declaration (e.g. partial classes across files) and leave
|
|
590
|
+
// de-dup to downstream consumers.
|
|
591
|
+
const defsByName = new Map();
|
|
592
|
+
for (const def of bucket.classDefs) {
|
|
593
|
+
// Simple name = last segment of qualifiedName (e.g. `App.User` → `User`).
|
|
594
|
+
const q = def.qualifiedName ?? '';
|
|
595
|
+
const key = q.includes('.') ? q.slice(q.lastIndexOf('.') + 1) : q;
|
|
596
|
+
if (key === '')
|
|
597
|
+
continue;
|
|
598
|
+
let arr = defsByName.get(key);
|
|
599
|
+
if (arr === undefined) {
|
|
600
|
+
arr = [];
|
|
601
|
+
defsByName.set(key, arr);
|
|
602
|
+
}
|
|
603
|
+
arr.push(def);
|
|
604
|
+
}
|
|
605
|
+
// Global-namespace fast path (Unity OOM guard). Types declared in the
|
|
606
|
+
// default (global) namespace are visible from EVERY file in C# — the
|
|
607
|
+
// global namespace is always implicitly in scope — so one workspace-
|
|
608
|
+
// level entry per simple name is both semantically correct and O(D)
|
|
609
|
+
// instead of the O(S·D) per-scope augmentation that materialized
|
|
610
|
+
// billions of BindingRefs on large Unity solutions (tens of thousands
|
|
611
|
+
// of global types × tens of thousands of scopes). `walkScopeChain`
|
|
612
|
+
// checks local `scope.bindings` first, so local declarations still
|
|
613
|
+
// shadow these workspace entries; a file resolving its own global type
|
|
614
|
+
// hits the local binding before this map. Dedup by `def.nodeId` keeps
|
|
615
|
+
// partial-class / duplicate declarations from double-emitting.
|
|
616
|
+
if (nsName === '') {
|
|
617
|
+
for (const [name, defs] of defsByName) {
|
|
618
|
+
const bucket = getWorkspaceBucket(workspace, name);
|
|
619
|
+
const seen = new Set();
|
|
620
|
+
for (const b of bucket)
|
|
621
|
+
seen.add(b.def.nodeId);
|
|
622
|
+
for (const def of defs) {
|
|
623
|
+
if (seen.has(def.nodeId))
|
|
624
|
+
continue; // dedup by nodeId (keeps partials, drops re-emits)
|
|
625
|
+
seen.add(def.nodeId);
|
|
626
|
+
bucket.push({ def, origin: 'namespace' });
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
continue;
|
|
630
|
+
}
|
|
631
|
+
// Named-namespace fast path (#1871) — the namespace-scoped mirror of the
|
|
632
|
+
// global path above. One `namespaceFqnBindings[nsName]` entry per simple
|
|
633
|
+
// name, O(D) per bucket, instead of the prior O(scopes × defs) per-scope
|
|
634
|
+
// augmentation that materialized O(files²) BindingRefs for a concentrated
|
|
635
|
+
// named namespace. `lookupBindingsAt` consults this gated by
|
|
636
|
+
// `accessibleNamespacesByScope` and ranks finalized `scope.bindings`
|
|
637
|
+
// (local declarations) ABOVE it, so local types still shadow — exactly as
|
|
638
|
+
// `walkScopeChain` shadows the global workspace entries. Dedup by
|
|
639
|
+
// `def.nodeId` keeps partial-class / duplicate declarations from
|
|
640
|
+
// double-emitting. (The prior local-shadow and self-reference skips are now
|
|
641
|
+
// handled by lookup precedence, identical to the global path.)
|
|
642
|
+
let nsMap = namespaceFqn.get(nsName);
|
|
643
|
+
for (const [name, defs] of defsByName) {
|
|
644
|
+
let bucketArr = nsMap?.get(name);
|
|
645
|
+
let seen = null;
|
|
646
|
+
for (const def of defs) {
|
|
647
|
+
if (bucketArr === undefined) {
|
|
648
|
+
if (nsMap === undefined) {
|
|
649
|
+
nsMap = new Map();
|
|
650
|
+
namespaceFqn.set(nsName, nsMap);
|
|
651
|
+
}
|
|
652
|
+
bucketArr = [];
|
|
653
|
+
nsMap.set(name, bucketArr);
|
|
654
|
+
}
|
|
655
|
+
if (seen === null) {
|
|
656
|
+
seen = new Set();
|
|
657
|
+
for (const b of bucketArr)
|
|
658
|
+
seen.add(b.def.nodeId);
|
|
659
|
+
}
|
|
660
|
+
if (seen.has(def.nodeId))
|
|
661
|
+
continue;
|
|
662
|
+
seen.add(def.nodeId);
|
|
663
|
+
bucketArr.push({ def, origin: 'namespace' });
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
/** Get-or-create a mutable inner bucket inside the `bindingAugmentations`
|
|
669
|
+
* channel. The inner arrays here are mutable by contract (see
|
|
670
|
+
* `ScopeResolutionIndexes.bindingAugmentations` doc + scope-resolver I8);
|
|
671
|
+
* callers may `push` directly. Allocating the outer/inner Maps lazily
|
|
672
|
+
* keeps the augmentation footprint zero for files with no cross-file
|
|
673
|
+
* fanout. */
|
|
674
|
+
function getAugmentationBucket(augmentations, scopeId, name) {
|
|
675
|
+
let scopeBindings = augmentations.get(scopeId);
|
|
676
|
+
if (scopeBindings === undefined) {
|
|
677
|
+
scopeBindings = new Map();
|
|
678
|
+
augmentations.set(scopeId, scopeBindings);
|
|
679
|
+
}
|
|
680
|
+
let bucketArr = scopeBindings.get(name);
|
|
681
|
+
if (bucketArr === undefined) {
|
|
682
|
+
bucketArr = [];
|
|
683
|
+
scopeBindings.set(name, bucketArr);
|
|
684
|
+
}
|
|
685
|
+
return bucketArr;
|
|
686
|
+
}
|
|
687
|
+
/** Get-or-create a mutable inner bucket inside the `workspaceFqnBindings`
|
|
688
|
+
* channel (the scope-independent third channel; see
|
|
689
|
+
* `ScopeResolutionIndexes.workspaceFqnBindings`). Like
|
|
690
|
+
* `getAugmentationBucket`, the inner arrays are mutable by contract —
|
|
691
|
+
* callers `push` directly. Keeping the get-or-create here means the one
|
|
692
|
+
* ReadonlyMap→Map cast at the call site is the only place the mutable
|
|
693
|
+
* view is taken. */
|
|
694
|
+
function getWorkspaceBucket(workspace, name) {
|
|
695
|
+
let bucketArr = workspace.get(name);
|
|
696
|
+
if (bucketArr === undefined) {
|
|
697
|
+
bucketArr = [];
|
|
698
|
+
workspace.set(name, bucketArr);
|
|
699
|
+
}
|
|
700
|
+
return bucketArr;
|
|
701
|
+
}
|
|
702
|
+
function isTypeDef(def) {
|
|
703
|
+
return (def.type === 'Class' ||
|
|
704
|
+
def.type === 'Interface' ||
|
|
705
|
+
def.type === 'Struct' ||
|
|
706
|
+
def.type === 'Record' ||
|
|
707
|
+
def.type === 'Enum');
|
|
708
|
+
}
|