gitnexus 1.6.10-rc.99 → 1.6.10
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/README.md +177 -18
- package/dist/_shared/graph/types.d.ts +21 -2
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +3 -3
- package/dist/_shared/index.d.ts.map +1 -1
- package/dist/_shared/index.js +1 -1
- package/dist/_shared/index.js.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
- package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts +16 -0
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +19 -7
- package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
- package/dist/_shared/language-detection.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts +2 -2
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +3 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
- package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
- package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
- package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
- package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
- package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/types.d.ts +278 -3
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +3 -2
- package/dist/cli/ai-context.js +71 -16
- package/dist/cli/analyze-config.d.ts +1 -1
- package/dist/cli/analyze-options.d.ts +131 -0
- package/dist/cli/analyze-options.js +1 -0
- package/dist/cli/analyze.d.ts +21 -113
- package/dist/cli/analyze.js +172 -29
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +12 -0
- package/dist/cli/doctor.js +32 -5
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.js +2 -1
- package/dist/cli/format-symbol.d.ts +15 -0
- package/dist/cli/format-symbol.js +17 -0
- package/dist/cli/generated-skill.d.ts +17 -0
- package/dist/cli/generated-skill.js +1 -0
- package/dist/cli/group.js +229 -21
- package/dist/cli/help-i18n.js +1 -2
- package/dist/cli/i18n/en.d.ts +11 -9
- package/dist/cli/i18n/en.js +13 -9
- package/dist/cli/i18n/resources.d.ts +15 -11
- package/dist/cli/i18n/zh-CN.d.ts +4 -2
- package/dist/cli/i18n/zh-CN.js +11 -9
- package/dist/cli/index.js +8 -4
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.js +4 -3
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +74 -17
- package/dist/cli/wiki.js +53 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +54 -13
- package/dist/core/analyzer-identity.d.ts +80 -0
- package/dist/core/analyzer-identity.js +364 -26
- package/dist/core/augmentation/engine.js +86 -71
- package/dist/core/embedding-checkpoint.d.ts +143 -0
- package/dist/core/embedding-checkpoint.js +221 -0
- package/dist/core/embedding-count.d.ts +61 -0
- package/dist/core/embedding-count.js +69 -0
- package/dist/core/embeddings/ast-utils.js +9 -1
- package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
- package/dist/core/embeddings/embedding-pipeline.js +253 -14
- package/dist/core/embeddings/http-client.d.ts +5 -0
- package/dist/core/embeddings/http-client.js +142 -27
- package/dist/core/graph/graph.js +3 -0
- package/dist/core/graph/import-cycles.d.ts +194 -3
- package/dist/core/graph/import-cycles.js +522 -73
- package/dist/core/graph/types.d.ts +18 -0
- package/dist/core/group/bridge-db.d.ts +204 -1
- package/dist/core/group/bridge-db.js +401 -28
- package/dist/core/group/completeness.d.ts +130 -0
- package/dist/core/group/completeness.js +83 -0
- package/dist/core/group/config-parser.js +0 -5
- package/dist/core/group/cross-impact.d.ts +46 -1
- package/dist/core/group/cross-impact.js +220 -19
- package/dist/core/group/cross-trace.d.ts +32 -11
- package/dist/core/group/cross-trace.js +114 -20
- package/dist/core/group/extractors/http-patterns/java.js +278 -22
- package/dist/core/group/extractors/http-patterns/node.js +332 -216
- package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
- package/dist/core/group/extractors/http-route-extractor.js +122 -48
- package/dist/core/group/extractors/include-extractor.js +20 -2
- package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
- package/dist/core/group/extractors/manifest-extractor.js +7 -7
- package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
- package/dist/core/group/group-lock.d.ts +31 -0
- package/dist/core/group/group-lock.js +166 -0
- package/dist/core/group/service.js +297 -16
- package/dist/core/group/storage.d.ts +3 -0
- package/dist/core/group/storage.js +7 -39
- package/dist/core/group/sync.d.ts +49 -3
- package/dist/core/group/sync.js +0 -0
- package/dist/core/group/types.d.ts +183 -8
- package/dist/core/group/types.js +28 -1
- package/dist/core/incremental/subgraph-extract.d.ts +9 -6
- package/dist/core/incremental/subgraph-extract.js +33 -10
- package/dist/core/index-freshness.d.ts +77 -2
- package/dist/core/index-freshness.js +109 -2
- package/dist/core/ingestion/call-processor.d.ts +13 -1
- package/dist/core/ingestion/call-processor.js +110 -3
- package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
- package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
- package/dist/core/ingestion/cfg/emit.d.ts +8 -23
- package/dist/core/ingestion/cfg/emit.js +9 -23
- package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +81 -82
- package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
- package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
- package/dist/core/ingestion/di-extractors/spring.js +8 -1
- package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
- package/dist/core/ingestion/di-extractors/types.js +15 -0
- package/dist/core/ingestion/filesystem-walker.js +30 -14
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
- package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
- package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
- package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
- package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
- package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
- package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
- package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
- package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
- package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
- package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
- package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
- package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
- package/dist/core/ingestion/import-resolvers/go.js +44 -17
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
- package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
- package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
- package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
- package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
- package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/php.js +65 -19
- package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
- package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
- package/dist/core/ingestion/import-resolvers/python.js +25 -6
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
- package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
- package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
- package/dist/core/ingestion/import-resolvers/utils.js +215 -36
- package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
- package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
- package/dist/core/ingestion/language-config.d.ts +29 -1
- package/dist/core/ingestion/language-config.js +110 -35
- package/dist/core/ingestion/language-provider.d.ts +209 -7
- package/dist/core/ingestion/language-provider.js +37 -0
- package/dist/core/ingestion/languages/c/captures.js +7 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
- package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
- package/dist/core/ingestion/languages/c-cpp.js +13 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
- package/dist/core/ingestion/languages/cobol.js +13 -0
- package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/adl.js +67 -44
- package/dist/core/ingestion/languages/cpp/captures.js +14 -2
- package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
- package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
- package/dist/core/ingestion/languages/cpp/query.js +106 -0
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
- package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
- package/dist/core/ingestion/languages/csharp/captures.js +19 -0
- package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
- package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
- package/dist/core/ingestion/languages/csharp/query.js +25 -5
- package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
- package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
- package/dist/core/ingestion/languages/dart/captures.js +598 -16
- package/dist/core/ingestion/languages/dart/import-target.js +32 -9
- package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
- package/dist/core/ingestion/languages/dart/index.js +1 -1
- package/dist/core/ingestion/languages/dart/query.js +98 -1
- package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
- package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
- package/dist/core/ingestion/languages/dart.js +6 -1
- package/dist/core/ingestion/languages/go/captures.js +108 -3
- package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
- package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
- package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
- package/dist/core/ingestion/languages/go/import-target.js +34 -30
- package/dist/core/ingestion/languages/go/index.d.ts +1 -1
- package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
- package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
- package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
- package/dist/core/ingestion/languages/go/interpret.js +22 -8
- package/dist/core/ingestion/languages/go/method-owners.js +31 -12
- package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
- package/dist/core/ingestion/languages/go/package-clause.js +75 -0
- package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
- package/dist/core/ingestion/languages/go/query.js +56 -3
- package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
- package/dist/core/ingestion/languages/go.js +9 -0
- package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/java/captures.js +77 -32
- package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
- package/dist/core/ingestion/languages/java/import-target.js +68 -88
- package/dist/core/ingestion/languages/java/interpret.js +3 -2
- package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
- package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
- package/dist/core/ingestion/languages/java/query.js +15 -3
- package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
- package/dist/core/ingestion/languages/java/record-components.js +185 -0
- package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
- package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
- package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
- package/dist/core/ingestion/languages/java/spring-di.js +41 -9
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
- package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
- package/dist/core/ingestion/languages/java.js +94 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +262 -4
- package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
- package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
- package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
- package/dist/core/ingestion/languages/javascript/index.js +54 -5
- package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/javascript/query.js +211 -5
- package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
- package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
- package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
- package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
- package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
- package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
- package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
- package/dist/core/ingestion/languages/kotlin/index.js +1 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
- package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
- package/dist/core/ingestion/languages/kotlin/query.js +28 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
- package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
- package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
- package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +319 -51
- package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
- package/dist/core/ingestion/languages/php/import-target.js +192 -62
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
- package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
- package/dist/core/ingestion/languages/python/captures.js +29 -0
- package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
- package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
- package/dist/core/ingestion/languages/python/import-target.js +277 -91
- package/dist/core/ingestion/languages/python/index.d.ts +1 -1
- package/dist/core/ingestion/languages/python/index.js +1 -1
- package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
- package/dist/core/ingestion/languages/python/interpret.js +249 -7
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
- package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
- package/dist/core/ingestion/languages/python.js +13 -0
- package/dist/core/ingestion/languages/ruby/captures.js +158 -0
- package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
- package/dist/core/ingestion/languages/ruby/query.js +93 -0
- package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
- package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
- package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
- package/dist/core/ingestion/languages/rust/captures.js +39 -1
- package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
- package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
- package/dist/core/ingestion/languages/rust/module-path.js +214 -0
- package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
- package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
- package/dist/core/ingestion/languages/rust/query.js +39 -6
- package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
- package/dist/core/ingestion/languages/rust.js +17 -0
- package/dist/core/ingestion/languages/swift/captures.js +87 -3
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
- package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
- package/dist/core/ingestion/languages/swift/import-target.js +4 -9
- package/dist/core/ingestion/languages/swift/query.js +17 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
- package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
- package/dist/core/ingestion/languages/swift.js +2 -0
- package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
- package/dist/core/ingestion/languages/typescript/captures.js +267 -5
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
- package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
- package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
- package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
- package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
- package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
- package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
- package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
- package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
- package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
- package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
- package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
- package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
- package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +303 -14
- package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
- package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
- package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
- package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
- package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
- package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
- package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
- package/dist/core/ingestion/languages/typescript.js +93 -2
- package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
- package/dist/core/ingestion/languages/vue/import-target.js +11 -47
- package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
- package/dist/core/ingestion/local-symbol-pruner.js +11 -11
- package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.js +1 -0
- package/dist/core/ingestion/method-types.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
- package/dist/core/ingestion/pipeline-phases/di.js +136 -21
- package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
- package/dist/core/ingestion/pipeline-phases/index.js +2 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
- package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
- package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
- package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +26 -2
- package/dist/core/ingestion/pipeline.js +60 -11
- package/dist/core/ingestion/process-processor.d.ts +109 -2
- package/dist/core/ingestion/process-processor.js +464 -52
- package/dist/core/ingestion/resolve-references.d.ts +6 -1
- package/dist/core/ingestion/resolve-references.js +66 -6
- package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
- package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
- package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
- package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
- package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
- package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
- package/dist/core/ingestion/route-extractors/nest.js +523 -0
- package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
- package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
- package/dist/core/ingestion/route-extractors/spring.js +214 -29
- package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
- package/dist/core/ingestion/scope-extractor.d.ts +22 -7
- package/dist/core/ingestion/scope-extractor.js +309 -15
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
- package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
- package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
- package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
- package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
- package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
- package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
- package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
- package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
- package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
- package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
- package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
- package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
- package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
- package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
- package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
- package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +678 -4
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
- package/dist/core/ingestion/type-extractors/shared.js +16 -0
- package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
- package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
- package/dist/core/ingestion/type-extractors/typescript.js +26 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
- package/dist/core/ingestion/utils/ast-helpers.js +578 -46
- package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
- package/dist/core/ingestion/utils/call-analysis.js +202 -7
- package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
- package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
- package/dist/core/ingestion/utils/callable-labels.js +31 -0
- package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
- package/dist/core/ingestion/utils/effective-ram.js +58 -0
- package/dist/core/ingestion/utils/line-base.d.ts +14 -0
- package/dist/core/ingestion/utils/line-base.js +14 -0
- package/dist/core/ingestion/utils/method-props.d.ts +27 -4
- package/dist/core/ingestion/utils/method-props.js +29 -4
- package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
- package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
- package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
- package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
- package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
- package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
- package/dist/core/ingestion/utils/template-arguments.js +196 -0
- package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
- package/dist/core/ingestion/utils/type-parameters.js +206 -0
- package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
- package/dist/core/ingestion/workers/callable-id.js +125 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +493 -54
- package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
- package/dist/core/ingestion/workers/worker-pool.js +91 -3
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +72 -17
- package/dist/core/lbug/extension-load-error.js +13 -2
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +31 -6
- package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
- package/dist/core/lbug/graph-emit-sink.js +581 -0
- package/dist/core/lbug/lbug-adapter.d.ts +290 -11
- package/dist/core/lbug/lbug-adapter.js +652 -69
- package/dist/core/lbug/native-check.d.ts +21 -0
- package/dist/core/lbug/native-check.js +248 -32
- package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
- package/dist/core/lbug/pdg-emit-sink.js +21 -111
- package/dist/core/lbug/pool-adapter.d.ts +9 -0
- package/dist/core/lbug/pool-adapter.js +164 -14
- package/dist/core/lbug/query-batch.d.ts +75 -0
- package/dist/core/lbug/query-batch.js +102 -0
- package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
- package/dist/core/lbug/rel-pair-routing.js +228 -10
- package/dist/core/lbug/schema.d.ts +163 -4
- package/dist/core/lbug/schema.js +404 -159
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/run-analyze.d.ts +147 -0
- package/dist/core/run-analyze.js +1215 -179
- package/dist/core/search/bm25-index.d.ts +11 -0
- package/dist/core/search/bm25-index.js +60 -26
- package/dist/core/search/fts-indexes.d.ts +150 -9
- package/dist/core/search/fts-indexes.js +241 -23
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +29 -3
- package/dist/core/wiki/llm-client.js +47 -12
- package/dist/core/wiki/prompts.d.ts +19 -0
- package/dist/core/wiki/prompts.js +20 -1
- package/dist/lib/utils.d.ts +113 -0
- package/dist/lib/utils.js +185 -0
- package/dist/mcp/local/aop-metadata.d.ts +77 -0
- package/dist/mcp/local/aop-metadata.js +227 -0
- package/dist/mcp/local/bean-metadata.d.ts +2 -1
- package/dist/mcp/local/bean-metadata.js +22 -1
- package/dist/mcp/local/convex-metadata.d.ts +8 -0
- package/dist/mcp/local/convex-metadata.js +45 -0
- package/dist/mcp/local/local-backend.d.ts +174 -11
- package/dist/mcp/local/local-backend.js +1678 -331
- package/dist/mcp/local/path-predicate.d.ts +19 -0
- package/dist/mcp/local/path-predicate.js +21 -0
- package/dist/mcp/local/pdg-impact.d.ts +132 -10
- package/dist/mcp/local/pdg-impact.js +391 -98
- package/dist/mcp/repository-policy.d.ts +1 -0
- package/dist/mcp/repository-policy.js +5 -0
- package/dist/mcp/resources.js +26 -4
- package/dist/mcp/server.js +23 -13
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.js +76 -23
- package/dist/server/analyze-job.d.ts +37 -2
- package/dist/server/analyze-job.js +13 -2
- package/dist/server/analyze-launch.d.ts +1 -1
- package/dist/server/analyze-launch.js +79 -10
- package/dist/server/analyze-worker-core.d.ts +1 -1
- package/dist/server/analyze-worker-core.js +10 -1
- package/dist/server/analyze-worker-ipc.d.ts +1 -1
- package/dist/server/analyze-worker-ipc.js +4 -0
- package/dist/server/analyze-worker-protocol.d.ts +59 -0
- package/dist/server/analyze-worker-protocol.js +1 -0
- package/dist/server/analyze-worker.d.ts +1 -17
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +164 -163
- package/dist/server/embed-run-outcome.d.ts +89 -0
- package/dist/server/embed-run-outcome.js +88 -0
- package/dist/server/git-clone.js +6 -2
- package/dist/server/middleware.d.ts +116 -9
- package/dist/server/middleware.js +291 -22
- package/dist/server/sse-progress.d.ts +41 -0
- package/dist/server/sse-progress.js +125 -0
- package/dist/storage/branch-index.d.ts +11 -6
- package/dist/storage/branch-index.js +15 -7
- package/dist/storage/file-hash.js +2 -2
- package/dist/storage/fs-atomic.d.ts +25 -0
- package/dist/storage/fs-atomic.js +42 -0
- package/dist/storage/git.d.ts +131 -0
- package/dist/storage/git.js +236 -2
- package/dist/storage/index-lock.d.ts +102 -0
- package/dist/storage/index-lock.js +660 -0
- package/dist/storage/parse-cache.js +588 -6
- package/dist/storage/parsedfile-store.js +76 -6
- package/dist/storage/repo-manager.d.ts +54 -441
- package/dist/storage/repo-manager.js +312 -221
- package/dist/storage/repo-meta.d.ts +530 -0
- package/dist/storage/repo-meta.js +100 -0
- package/dist/types/pipeline.d.ts +37 -0
- package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
- package/hooks/claude/gitnexus-hook.cjs +1 -1
- package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
- package/package.json +11 -2
- package/scripts/cross-platform-shard.ts +153 -0
- package/scripts/cross-platform-tests.ts +122 -0
- package/scripts/run-cross-platform.ts +16 -5
- package/skills/gitnexus-cli.md +3 -3
- package/skills/gitnexus-debugging.md +37 -7
- package/skills/gitnexus-exploring.md +26 -4
- package/skills/gitnexus-impact-analysis.md +71 -10
- package/skills/gitnexus-plan/README.md +11 -6
- package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +12 -6
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/SKILL.md +4 -1
- package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-Dr4l5EOp.js +662 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
- package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
- package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
- package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
- package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
- package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
- package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
- package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
- package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
- package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
- package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
- package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
- package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
- package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
- package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
- package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
- package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
- package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
- package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
- package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
- package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
- package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
- package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
- package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
- package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
- package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
- package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
- package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
- package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
- package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
- package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
- package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
- package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
- package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
- package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
- package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
- package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
- package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
- package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
- package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
- package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
- package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
- package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
- package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
- package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
- package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
- package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
- package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
- package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
- package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
- package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
- package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
- package/web/assets/error-D9MtuG9s.js +1 -0
- package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
- package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
- package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
- package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
- package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
- package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
- package/web/assets/index-CJDpyH-n.css +2 -0
- package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
- package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
- package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
- package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
- package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
- package/web/assets/node.browser-U-KyT5AW.js +1 -0
- package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
- package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
- package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
- package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
- package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
- package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
- package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
- package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
- package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
- package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
- package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
- package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
- package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
- package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
- package/web/assets/src-C5sx_gMp.js +1 -0
- package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
- package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
- package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
- package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
- package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
- package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
- package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
- package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
- package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
- package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
- package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
- package/web/index.html +16 -15
- package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
- package/dist/core/ingestion/languages/python/index-stats.js +0 -25
- package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
- package/web/assets/agent-Ds-lkZjX.js +0 -626
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
- package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
- package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
- package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
- package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
- package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
- package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
- package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
- package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
- package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
- package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
- package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
- package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
- package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
- package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
- package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
- package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
- package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
- package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
- package/web/assets/index-CX_fADmQ.css +0 -2
- package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
- package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- package/web/assets/node-Ct_zna8U.js +0 -8
- package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
- package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
- package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/sdk-CzHHH8tD.js +0 -37
- package/web/assets/src-Cv1eWg0o.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
- package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
- package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
- package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -7,6 +7,7 @@ import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
|
7
7
|
import { splitQualifiedName } from '../../utils/qualified-name.js';
|
|
8
8
|
import { encodeMarker } from '../../utils/heritage-marker.js';
|
|
9
9
|
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
10
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
10
11
|
const FUNCTION_NODE_TYPES = ['method', 'singleton_method'];
|
|
11
12
|
const HERITAGE_CALL_NAMES = new Set(['include', 'extend', 'prepend']);
|
|
12
13
|
const ATTR_CALL_NAMES = new Set([
|
|
@@ -83,6 +84,123 @@ function buildEnclosingQualifiedName(callNode) {
|
|
|
83
84
|
}
|
|
84
85
|
return segments.length > 0 ? segments.join('.') : undefined;
|
|
85
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Does this `@ivar` write land on an INSTANCE of the enclosing LEXICAL class?
|
|
89
|
+
*
|
|
90
|
+
* In Ruby an instance variable belongs to whatever `self` is at the point of
|
|
91
|
+
* the write, so this is really a question about `self`, and `self` is an
|
|
92
|
+
* instance of the enclosing lexical class only inside an ordinary `def` whose
|
|
93
|
+
* own definition site is that class's body. Every other arrangement writes an
|
|
94
|
+
* ivar some instance of this class will never see:
|
|
95
|
+
*
|
|
96
|
+
* class C
|
|
97
|
+
* @shared = Outer.new # class body: self == C
|
|
98
|
+
* def self.build # singleton_method: self == C
|
|
99
|
+
* @pool = Outer.new
|
|
100
|
+
* end
|
|
101
|
+
* class << self # singleton_class: self == C
|
|
102
|
+
* def warm; @cache = Outer.new; end
|
|
103
|
+
* end
|
|
104
|
+
* Other.class_eval do # block receiver: self == Other
|
|
105
|
+
* def warm; @far = Outer.new; end
|
|
106
|
+
* end
|
|
107
|
+
* other.instance_eval { @alien = Outer.new } # self == other
|
|
108
|
+
* def run; @pool.inner; end # reads nil — @pool was never set on an instance
|
|
109
|
+
* end
|
|
110
|
+
*
|
|
111
|
+
* So the walk stops on the FIRST ancestor that decides who `self` is, and
|
|
112
|
+
* answers true only for an ordinary `method` reached without crossing any
|
|
113
|
+
* boundary that could have moved `self` elsewhere. `method` alone is NOT
|
|
114
|
+
* sufficient — a `def` nested in a `class << self` body, or in a `class_eval`
|
|
115
|
+
* block, is reached through a `method` node first — hence the flag rather than
|
|
116
|
+
* an early return (#2807).
|
|
117
|
+
*
|
|
118
|
+
* ── WHY BLOCKS ARE A HARD STOP, WITHOUT LOOKING AT THE CALL THEY BELONG TO ──
|
|
119
|
+
*
|
|
120
|
+
* A block is the one construct whose `self` (and whose "default definee", the
|
|
121
|
+
* class a `def` inside it attaches to) is chosen by its RECEIVER, not by its
|
|
122
|
+
* syntax. `Foo.class_eval do … end`, `Class.new do … end`, `Struct.new(:x) do …
|
|
123
|
+
* end`, `Data.define(:x) do … end`, `Module.new`, `refine`, `define_method`,
|
|
124
|
+
* `instance_eval`, `instance_exec`, `module_eval` and `class_exec` all rebind
|
|
125
|
+
* it; `[1].each do … end` does not.
|
|
126
|
+
*
|
|
127
|
+
* Telling those apart would need an enumeration of every method that rebinds a
|
|
128
|
+
* block's `self`, and that set is OPEN: any user-defined method can do it to a
|
|
129
|
+
* block it merely receives —
|
|
130
|
+
*
|
|
131
|
+
* def helper(&blk) = Foo.class_eval(&blk)
|
|
132
|
+
* helper { def warm; @far = Outer.new; end } # attaches to Foo, not here
|
|
133
|
+
*
|
|
134
|
+
* — so no allow-list of "safe" call names is sound, and a deny-list of known
|
|
135
|
+
* rebinders is exactly the incomplete enumeration that produced this bug. The
|
|
136
|
+
* only complete answer available from the block's own syntax is that ownership
|
|
137
|
+
* is unprovable, so every block boundary is a stop. That over-discards a plain
|
|
138
|
+
* `each`/`tap` block, whose `self` really is the instance; per the safety
|
|
139
|
+
* doctrine (see `scope-resolution/passes/compound-receiver.ts`) a missed edge is
|
|
140
|
+
* the acceptable cost and a fabricated edge on the wrong class is not.
|
|
141
|
+
*
|
|
142
|
+
* A `class` / `module` keyword nested INSIDE a block still terminates the walk
|
|
143
|
+
* with a true answer, and correctly so: that keyword sets the definee lexically
|
|
144
|
+
* no matter what surrounds it, so `Class.new do class Inner; def m; @a = …`
|
|
145
|
+
* writes a real `Inner` instance field.
|
|
146
|
+
*
|
|
147
|
+
* ── FORMS THAT CANNOT REACH HERE AT ALL ────────────────────────────────────
|
|
148
|
+
*
|
|
149
|
+
* `obj.instance_variable_set(:@a, Outer.new)` is a `call`, not an `assignment`,
|
|
150
|
+
* and `Foo.class_eval "def warm; @a = Outer.new; end"` hides its body in a
|
|
151
|
+
* `string` node. Neither parses into the `(assignment left: (instance_variable)
|
|
152
|
+
* …)` pattern in query.ts, so neither ever produces the marker this gate reads.
|
|
153
|
+
*
|
|
154
|
+
* Deliberately conservative. A write this returns false for simply binds no
|
|
155
|
+
* type at all, which costs at most a missed edge; returning true too eagerly
|
|
156
|
+
* invents a call from a receiver that is always nil.
|
|
157
|
+
*/
|
|
158
|
+
function isRubyInstanceIvarWrite(ivarNode) {
|
|
159
|
+
if (ivarNode === undefined)
|
|
160
|
+
return false;
|
|
161
|
+
let insideMethodBody = false;
|
|
162
|
+
for (let ancestor = ivarNode.parent; ancestor !== null; ancestor = ancestor.parent) {
|
|
163
|
+
switch (ancestor.type) {
|
|
164
|
+
// `def self.x` / `def obj.x`, and `class << self` / `class << obj`.
|
|
165
|
+
case 'singleton_method':
|
|
166
|
+
case 'singleton_class':
|
|
167
|
+
return false;
|
|
168
|
+
// Every block body: `do … end` and `{ … }` are the only two the grammar
|
|
169
|
+
// produces. `lambda` (`->`) always wraps its body in one of them, so it
|
|
170
|
+
// can never be the first boundary today — it is listed because the
|
|
171
|
+
// boundary IS the lambda, and a grammar change must not silently
|
|
172
|
+
// un-guard it.
|
|
173
|
+
case 'do_block':
|
|
174
|
+
case 'block':
|
|
175
|
+
case 'lambda':
|
|
176
|
+
return false;
|
|
177
|
+
// `BEGIN { … }` / `END { … }` are program-level bodies whose execution is
|
|
178
|
+
// relocated out of the enclosing method (before the program, and at exit);
|
|
179
|
+
// Ruby warns when they appear in a method body at all. Rather than assert
|
|
180
|
+
// whose `self` runs them, the doctrine applies: unprovable, so discard.
|
|
181
|
+
// Reachable — tree-sitter parses `END { @a = Outer.new }` inside a `def`
|
|
182
|
+
// as an `end_block` under that method's body.
|
|
183
|
+
case 'begin_block':
|
|
184
|
+
case 'end_block':
|
|
185
|
+
return false;
|
|
186
|
+
case 'method':
|
|
187
|
+
insideMethodBody = true;
|
|
188
|
+
break;
|
|
189
|
+
// The owning body. Reaching it without crossing any of the boundaries
|
|
190
|
+
// above means the write is an instance write exactly when a `def` body
|
|
191
|
+
// enclosed it.
|
|
192
|
+
case 'class':
|
|
193
|
+
case 'module':
|
|
194
|
+
case 'program':
|
|
195
|
+
return insideMethodBody;
|
|
196
|
+
// Everything else is control flow that cannot move `self`: `if`/`unless`
|
|
197
|
+
// (`then`), `case`/`when`, `while`, `for`/`do`, `begin`/`rescue`/`ensure`.
|
|
198
|
+
default:
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
86
204
|
export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
87
205
|
let tree = cachedTree;
|
|
88
206
|
if (tree === undefined) {
|
|
@@ -124,6 +242,22 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
124
242
|
}
|
|
125
243
|
if (Object.keys(grouped).length === 0)
|
|
126
244
|
continue;
|
|
245
|
+
// A tree-sitter pattern cannot say "and no singleton ancestor", so the
|
|
246
|
+
// ownership test is a walk and the whole binding is dropped here when `self`
|
|
247
|
+
// is the class object rather than an instance.
|
|
248
|
+
//
|
|
249
|
+
// Dropping the MARKER alone is not enough, and the class-body shape is why:
|
|
250
|
+
// with the marker gone `rubyBindingScopeFor` declines to hoist and the
|
|
251
|
+
// binding falls back to its innermost scope — which for `@shared = Outer.new`
|
|
252
|
+
// written straight in the class body already IS the Class scope. It would
|
|
253
|
+
// arrive at the wrong place by default. Discarding the match is the only
|
|
254
|
+
// uniform answer, and it costs nothing that existed before: these ivar
|
|
255
|
+
// patterns are new in #2807, so a class-object ivar simply goes back to
|
|
256
|
+
// binding nothing, exactly as it did before the pattern was added.
|
|
257
|
+
if (grouped['@type-binding.ivar-field'] !== undefined &&
|
|
258
|
+
!isRubyInstanceIvarWrite(nodeMap['@type-binding.ivar-field'])) {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
127
261
|
// Decompose require/require_relative/load into import captures
|
|
128
262
|
if (grouped['@import.statement'] !== undefined) {
|
|
129
263
|
const anchor = grouped['@import.statement'];
|
|
@@ -135,6 +269,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
135
269
|
continue;
|
|
136
270
|
}
|
|
137
271
|
}
|
|
272
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
273
|
+
// expression, so resolution can type it by folding over structure
|
|
274
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
275
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
276
|
+
// all leave `grouped` untouched.
|
|
277
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
138
278
|
out.push(grouped);
|
|
139
279
|
continue;
|
|
140
280
|
}
|
|
@@ -147,6 +287,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
147
287
|
if (receiver !== null)
|
|
148
288
|
out.push(receiver);
|
|
149
289
|
}
|
|
290
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
291
|
+
// expression, so resolution can type it by folding over structure
|
|
292
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
293
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
294
|
+
// all leave `grouped` untouched.
|
|
295
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
150
296
|
out.push(grouped);
|
|
151
297
|
continue;
|
|
152
298
|
}
|
|
@@ -174,6 +320,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
174
320
|
grouped['@declaration.parameter-types'] = syntheticCapture('@declaration.parameter-types', fnNode, JSON.stringify(arity.parameterTypes));
|
|
175
321
|
}
|
|
176
322
|
}
|
|
323
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
324
|
+
// expression, so resolution can type it by folding over structure
|
|
325
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
326
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
327
|
+
// all leave `grouped` untouched.
|
|
328
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
177
329
|
out.push(grouped);
|
|
178
330
|
continue;
|
|
179
331
|
}
|
|
@@ -256,6 +408,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
256
408
|
grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(arity));
|
|
257
409
|
}
|
|
258
410
|
}
|
|
411
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
412
|
+
// expression, so resolution can type it by folding over structure
|
|
413
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
414
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
415
|
+
// all leave `grouped` untouched.
|
|
416
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
259
417
|
out.push(grouped);
|
|
260
418
|
}
|
|
261
419
|
// Second pass: member-call-return type bindings
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - External gems → null (unresolvable within the repo)
|
|
8
8
|
*/
|
|
9
9
|
import { resolveRubyImportInternal } from '../../import-resolvers/ruby.js';
|
|
10
|
-
import {
|
|
10
|
+
import { getWorkspaceFileIndex } from '../../import-resolvers/workspace-file-index.js';
|
|
11
11
|
import { isHeritageMarker } from '../../utils/heritage-marker.js';
|
|
12
12
|
// ─── resolveRubyImportTarget ──────────────────────────────────────────────
|
|
13
13
|
/**
|
|
@@ -78,8 +78,10 @@ function resolveRelative(targetRaw, fromDir, allFilePaths) {
|
|
|
78
78
|
* via suffix matching using the existing Ruby import resolver.
|
|
79
79
|
*/
|
|
80
80
|
function resolveBare(targetRaw, allFilePaths) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
// Was: two array materializations plus a full `buildSuffixIndex` per require,
|
|
82
|
+
// thrown away on return — every require paid to index every file in the repo
|
|
83
|
+
// (#2880). `buildSuffixIndex` is a pure function of the file set, so this is a
|
|
84
|
+
// hoist, not a behaviour change.
|
|
85
|
+
const { normalized, all, index } = getWorkspaceFileIndex(allFilePaths);
|
|
86
|
+
return resolveRubyImportInternal(targetRaw, normalized, all, index);
|
|
85
87
|
}
|
|
@@ -77,6 +77,64 @@ const RUBY_SCOPE_QUERY = `
|
|
|
77
77
|
(singleton_method
|
|
78
78
|
name: (identifier) @declaration.name) @declaration.function
|
|
79
79
|
|
|
80
|
+
;; ── Declarations — closure bound to a local ──────────────────────────────
|
|
81
|
+
;;
|
|
82
|
+
;; handler = ->(x) { target(x) } / lambda { |x| ... } / proc { |x| ... }
|
|
83
|
+
;;
|
|
84
|
+
;; Anchor discipline (same contract as javascript/query.ts): @declaration.function
|
|
85
|
+
;; sits on the INNER (block), NOT on the assignment wrapper and NOT on the
|
|
86
|
+
;; (lambda) node — the block is what carries @scope.block above, so anchoring
|
|
87
|
+
;; there aligns anchor.range with the scope range. That alignment is what lets
|
|
88
|
+
;; pickCallerCallableDef accept a Block-kind scope as a callable boundary.
|
|
89
|
+
;; do_block/block stay @scope.block deliberately — do NOT re-kind them.
|
|
90
|
+
;;
|
|
91
|
+
;; The call forms are restricted to lambda/proc by name. An unrestricted
|
|
92
|
+
;; (call block: (block)) would match ANY method call with a block, so
|
|
93
|
+
;; mapped = items.map { |i| ... } would wrongly declare mapped a callable.
|
|
94
|
+
;; Separate #eq? patterns rather than one #match? alternation: alternation
|
|
95
|
+
;; predicates are a known hazard on this tree-sitter line.
|
|
96
|
+
;; BOTH block forms in every pattern. do...end produces (do_block), braces
|
|
97
|
+
;; produce (block), and do/end is the dominant MULTI-LINE style — covering only
|
|
98
|
+
;; braces left lambda-do-end with a Block scope owning nothing, so its
|
|
99
|
+
;; calls fell through to the enclosing method. @scope.block above already covers
|
|
100
|
+
;; both, so the two channels now agree.
|
|
101
|
+
;;
|
|
102
|
+
;; The !receiver constraint is load-bearing: without it #eq? tests the method
|
|
103
|
+
;; NAME only, so MyMod.lambda {...} / obj.proc {...} would be captured as
|
|
104
|
+
;; closure bindings. Verified against the grammar: with !receiver those are
|
|
105
|
+
;; rejected while bare lambda/proc still match.
|
|
106
|
+
(assignment
|
|
107
|
+
left: (identifier) @declaration.name
|
|
108
|
+
right: (lambda body: [(block) (do_block)] @declaration.function))
|
|
109
|
+
|
|
110
|
+
(assignment
|
|
111
|
+
left: (identifier) @declaration.name
|
|
112
|
+
right: (call
|
|
113
|
+
!receiver
|
|
114
|
+
method: (identifier) @_lambda-kw
|
|
115
|
+
block: [(block) (do_block)] @declaration.function)
|
|
116
|
+
(#eq? @_lambda-kw "lambda"))
|
|
117
|
+
|
|
118
|
+
(assignment
|
|
119
|
+
left: (identifier) @declaration.name
|
|
120
|
+
right: (call
|
|
121
|
+
!receiver
|
|
122
|
+
method: (identifier) @_proc-kw
|
|
123
|
+
block: [(block) (do_block)] @declaration.function)
|
|
124
|
+
(#eq? @_proc-kw "proc"))
|
|
125
|
+
|
|
126
|
+
;; Proc.new { ... } / Proc.new do ... end — the explicit constructor form.
|
|
127
|
+
;; Receiver IS required here and must be the Proc constant, so this cannot
|
|
128
|
+
;; collide with the bare-call patterns above.
|
|
129
|
+
(assignment
|
|
130
|
+
left: (identifier) @declaration.name
|
|
131
|
+
right: (call
|
|
132
|
+
receiver: (constant) @_proc-const
|
|
133
|
+
method: (identifier) @_new-kw
|
|
134
|
+
block: [(block) (do_block)] @declaration.function)
|
|
135
|
+
(#eq? @_proc-const "Proc")
|
|
136
|
+
(#eq? @_new-kw "new"))
|
|
137
|
+
|
|
80
138
|
;; ── Declarations — variable assignment ───────────────────────────────────
|
|
81
139
|
|
|
82
140
|
(assignment
|
|
@@ -118,6 +176,41 @@ const RUBY_SCOPE_QUERY = `
|
|
|
118
176
|
method: (identifier) @_new_method2
|
|
119
177
|
(#eq? @_new_method2 "new"))) @type-binding.constructor
|
|
120
178
|
|
|
179
|
+
;; Instance-variable constructor: \`@service = UserService.new\` (#2807).
|
|
180
|
+
;; The patterns above bind locals and constants; an instance variable — the
|
|
181
|
+
;; only way a Ruby object gets a field at all — bound nothing, so \`@service.run\`
|
|
182
|
+
;; had no receiver type and the fold declined the whole chain.
|
|
183
|
+
;;
|
|
184
|
+
;; \`@type-binding.name\` is captured on the \`instance_variable\` node, so the
|
|
185
|
+
;; bound name keeps its \`@\` sigil and matches the receiver text at the call
|
|
186
|
+
;; site verbatim. The narrow \`@type-binding.ivar-field\` marker rides the same
|
|
187
|
+
;; node for \`rubyBindingScopeFor\` to hoist on; anchorCaptureFor takes the
|
|
188
|
+
;; broadest range, so the assignment stays the anchor and the source stays
|
|
189
|
+
;; \`constructor-inferred\`.
|
|
190
|
+
;;
|
|
191
|
+
;; These patterns match unconditionally HERE; captures.ts then discards the
|
|
192
|
+
;; whole binding via \`isRubyInstanceIvarWrite\` unless \`self\` at the write is
|
|
193
|
+
;; provably an instance of the enclosing lexical class — which rules out
|
|
194
|
+
;; \`def self.x\`, \`class << self\`, the class body itself, and any write reached
|
|
195
|
+
;; through a block, whose \`self\` its receiver chooses (\`class_eval\`,
|
|
196
|
+
;; \`Class.new\`, \`instance_eval\`, \`define_method\`, …). A tree-sitter pattern
|
|
197
|
+
;; cannot state "and no singleton or block ancestor", so the ownership test has
|
|
198
|
+
;; to be a walk.
|
|
199
|
+
|
|
200
|
+
(assignment
|
|
201
|
+
left: (instance_variable) @type-binding.name @type-binding.ivar-field
|
|
202
|
+
right: (call
|
|
203
|
+
receiver: (constant) @type-binding.type
|
|
204
|
+
method: (identifier) @_new_ivar
|
|
205
|
+
(#eq? @_new_ivar "new"))) @type-binding.constructor
|
|
206
|
+
|
|
207
|
+
(assignment
|
|
208
|
+
left: (instance_variable) @type-binding.name @type-binding.ivar-field
|
|
209
|
+
right: (call
|
|
210
|
+
receiver: (scope_resolution) @type-binding.type
|
|
211
|
+
method: (identifier) @_new_ivar_q
|
|
212
|
+
(#eq? @_new_ivar_q "new"))) @type-binding.constructor
|
|
213
|
+
|
|
121
214
|
;; Constant constructor: SERVICE = UserService.new (left is constant, not identifier)
|
|
122
215
|
|
|
123
216
|
(assignment
|
|
@@ -241,6 +241,8 @@ function expandRubyWildcardNames(targetModuleScope, parsedFiles) {
|
|
|
241
241
|
return names;
|
|
242
242
|
}
|
|
243
243
|
export const rubyScopeResolver = {
|
|
244
|
+
// Construction is a selector on the class: `Service.new.do_work` (#2708).
|
|
245
|
+
constructionSyntax: { selector: 'new' },
|
|
244
246
|
language: SupportedLanguages.Ruby,
|
|
245
247
|
languageProvider: rubyProvider,
|
|
246
248
|
importEdgeReason: 'ruby-scope: import',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CaptureMatch, ParsedImport, Scope, ScopeId, ScopeTree, TypeRef, NodeLabel } from '../../../../_shared/index.js';
|
|
2
2
|
import type { SyntaxNode } from '../../utils/ast-helpers.js';
|
|
3
|
-
export declare function rubyBindingScopeFor(decl: CaptureMatch, innermost: Scope,
|
|
3
|
+
export declare function rubyBindingScopeFor(decl: CaptureMatch, innermost: Scope, tree: ScopeTree): ScopeId | null;
|
|
4
4
|
/**
|
|
5
5
|
* Ruby `require` / `include` inside a function or class body should attach
|
|
6
6
|
* at that scope, not module scope.
|
|
@@ -1,9 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
import { walkToScope } from '../../utils/scope-tree-walk.js';
|
|
2
|
+
export function rubyBindingScopeFor(decl, innermost, tree) {
|
|
2
3
|
// Keep self typeBindings in the method's Function scope so
|
|
3
4
|
// populateClassOwnedMembers can match Method defs to their receiver types.
|
|
4
5
|
if (decl['@type-binding.self'] !== undefined) {
|
|
5
6
|
return innermost.id;
|
|
6
7
|
}
|
|
8
|
+
// `@ivar = Foo.new` in `initialize` (or any method) declares a FIELD of the
|
|
9
|
+
// enclosing class, so its type binding belongs on the Class scope — the only
|
|
10
|
+
// place `typeOfMemberOnClass` reads it. Left on the method's own Function
|
|
11
|
+
// scope it would be invisible to every other method (#2807).
|
|
12
|
+
//
|
|
13
|
+
// Gated on the marker that pattern emits, never on `@type-binding.constructor`
|
|
14
|
+
// at large: that capture also fires for `x = Foo.new` locals, and hoisting
|
|
15
|
+
// those to the class would leak a method local into every sibling method.
|
|
16
|
+
//
|
|
17
|
+
// Reaching this hook already means the write is an INSTANCE write. `Capture`
|
|
18
|
+
// carries only name/range/text — no AST node — so this hook cannot ask whose
|
|
19
|
+
// `self` owns the ivar; `isRubyInstanceIvarWrite` (captures.ts) answers that
|
|
20
|
+
// upstream and discards the binding entirely whenever `self` is anything but
|
|
21
|
+
// an instance of the enclosing lexical class — the class object itself
|
|
22
|
+
// (`def self.x`, `class << self`, the class body), or whatever object a block
|
|
23
|
+
// receiver rebinds it to (`class_eval`, `Class.new`, `instance_eval`, …).
|
|
24
|
+
// None of those reach an instance, so none may be published as its field.
|
|
25
|
+
if (decl['@type-binding.ivar-field'] !== undefined) {
|
|
26
|
+
return walkToScope(innermost, tree, 'Class');
|
|
27
|
+
}
|
|
7
28
|
return null;
|
|
8
29
|
}
|
|
9
30
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { nodeIfType, nodeToCapture, syntheticCapture, walkNamedTree, } from '../../utils/ast-helpers.js';
|
|
1
|
+
import { findChild, nodeIfType, nodeToCapture, syntheticCapture, walkNamedTree, } from '../../utils/ast-helpers.js';
|
|
2
2
|
import { getRustParser, getRustScopeQuery } from './query.js';
|
|
3
3
|
import { recordRustCacheHit, recordRustCacheMiss } from './cache-stats.js';
|
|
4
4
|
import { splitRustUseDeclaration } from './import-decomposer.js';
|
|
@@ -6,6 +6,7 @@ import { synthesizeRustReceiverBinding } from './receiver-binding.js';
|
|
|
6
6
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
7
7
|
import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
8
8
|
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
9
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
9
10
|
const RUST_CALLABLE_CAPTURE_OPTIONS = {
|
|
10
11
|
functionNodeTypes: new Set(['function_item', 'closure_expression']),
|
|
11
12
|
callNodeTypes: new Set(['call_expression']),
|
|
@@ -94,6 +95,26 @@ export function emitRustScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
}
|
|
98
|
+
// `Self` in a type binding names the enclosing impl's type, not a type
|
|
99
|
+
// called "Self". `let fresh = Self { … }` inside `impl User` binds
|
|
100
|
+
// `fresh: User`; recorded verbatim it binds `fresh: Self`, which resolves
|
|
101
|
+
// to nothing and leaves the receiver's type unknown.
|
|
102
|
+
//
|
|
103
|
+
// The type-env channel already substitutes this
|
|
104
|
+
// (`type-extractors/rust.ts` → `findEnclosingImplType`); the
|
|
105
|
+
// scope-resolution channel did not, so the two disagreed. That went
|
|
106
|
+
// unnoticed while `lookupCore` Step 1 still walked the lexical chain for
|
|
107
|
+
// named receivers — the impl scope binds the method by name, so
|
|
108
|
+
// `fresh.validate()` resolved by accident. #2714 stopped that walk for
|
|
109
|
+
// named receivers and the gap became a lost edge (#2699 follow-up).
|
|
110
|
+
const tbTypeNode = nodeMap['@type-binding.type'];
|
|
111
|
+
if (grouped['@type-binding.type']?.text === 'Self' && tbTypeNode !== undefined) {
|
|
112
|
+
const implNode = findEnclosingImpl(tbTypeNode);
|
|
113
|
+
const implTypeNode = implNode?.childForFieldName('type') ?? null;
|
|
114
|
+
if (implTypeNode !== null) {
|
|
115
|
+
grouped['@type-binding.type'] = syntheticCapture('@type-binding.type', tbTypeNode, implTypeNode.text);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
97
118
|
// Hoist return-type bindings from impl block functions to module level.
|
|
98
119
|
// The auto-hoist in the scope-extractor places a type binding whose
|
|
99
120
|
// anchor matches its innermost scope on the parent scope. By using the
|
|
@@ -126,6 +147,12 @@ export function emitRustScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
126
147
|
grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(arity));
|
|
127
148
|
}
|
|
128
149
|
}
|
|
150
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
151
|
+
// expression, so resolution can type it by folding over structure
|
|
152
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
153
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
154
|
+
// all leave `grouped` untouched.
|
|
155
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
129
156
|
out.push(grouped);
|
|
130
157
|
}
|
|
131
158
|
out.push(...synthesizeRustInheritanceReferences(tree.rootNode));
|
|
@@ -174,10 +201,21 @@ function synthesizeRustInheritanceReferences(root) {
|
|
|
174
201
|
const structName = bareTypeIdentifier(typeField);
|
|
175
202
|
if (traitName === null || structName === null)
|
|
176
203
|
return;
|
|
204
|
+
// The trait's generic ARGUMENTS (`impl Validator<String> for V`), so
|
|
205
|
+
// interface dispatch can tell one instantiation of a trait from another
|
|
206
|
+
// (#2912). Emitted as a sub-tag rather than by widening the anchor: the
|
|
207
|
+
// anchor is the bare `type_identifier` inside the `generic_type`, and its
|
|
208
|
+
// range is part of the inheritance edge's id.
|
|
209
|
+
const traitArguments = traitField.type === 'generic_type' ? findChild(traitField, 'type_arguments') : null;
|
|
177
210
|
out.push({
|
|
178
211
|
'@reference.inherits': nodeToCapture('@reference.inherits', traitName),
|
|
179
212
|
'@reference.name': nodeToCapture('@reference.name', traitName),
|
|
180
213
|
'@reference.receiver': syntheticCapture('@reference.receiver', structName, structName.text),
|
|
214
|
+
...(traitArguments === null
|
|
215
|
+
? {}
|
|
216
|
+
: {
|
|
217
|
+
'@reference.type-arguments': nodeToCapture('@reference.type-arguments', traitArguments),
|
|
218
|
+
}),
|
|
181
219
|
});
|
|
182
220
|
});
|
|
183
221
|
return out;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isClassLike, populateClassOwnedMembers } from '../../scope-resolution/scope/walkers.js';
|
|
1
|
+
import { isClassLike, populateClassOwnedMembers, tagNamespacePrefixes, } from '../../scope-resolution/scope/walkers.js';
|
|
2
2
|
/**
|
|
3
3
|
* Populate `ownerId` on Rust method defs.
|
|
4
4
|
*
|
|
@@ -19,6 +19,16 @@ import { isClassLike, populateClassOwnedMembers } from '../../scope-resolution/s
|
|
|
19
19
|
export function populateRustOwners(parsed) {
|
|
20
20
|
populateClassOwnedMembers(parsed);
|
|
21
21
|
populateRustImplOwners(parsed);
|
|
22
|
+
// #2730: tag defs declared inside `mod` blocks with their enclosing module
|
|
23
|
+
// path (`inner`, `a.b`) on the `namespacePrefix` sidecar. Rust modules are
|
|
24
|
+
// Namespace scopes owning a Namespace def (see the `mod_item` capture), so
|
|
25
|
+
// the shared C++-era pass applies unchanged. Qualified call resolution reads
|
|
26
|
+
// this to tell `inner::dispatch` apart from a same-named crate-root `fn`.
|
|
27
|
+
// Rust `qualifiedName`s never encode the enclosing module, so the shared
|
|
28
|
+
// "already namespaced" guard must be off: with it on, `mod a { pub fn a() }`
|
|
29
|
+
// matched by coincidence and the member was left looking like it belonged to
|
|
30
|
+
// the parent module (#2741 review).
|
|
31
|
+
tagNamespacePrefixes(parsed, { qualifiedNamesCarryNamespace: false });
|
|
22
32
|
}
|
|
23
33
|
function populateRustImplOwners(parsed) {
|
|
24
34
|
// Build a map of struct name → def nodeId from all scopes.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust module paths — the module tree, expressed over the scope model.
|
|
3
|
+
*
|
|
4
|
+
* rustc resolves `a::b::dispatch` against a MODULE TREE, not a file tree: `mod`
|
|
5
|
+
* is an item with its own `DefId`, and a path's leading segments name modules in
|
|
6
|
+
* the *type* namespace (which is why a same-named `fn` can never shadow them —
|
|
7
|
+
* functions live in the value namespace). GitNexus models the same tree in two
|
|
8
|
+
* halves, and this module joins them:
|
|
9
|
+
*
|
|
10
|
+
* - **Inline modules** (`mod inner { … }`) are `Namespace` scopes owning a
|
|
11
|
+
* `Namespace` def, so the shared `tagNamespacePrefixes` pass stamps members
|
|
12
|
+
* with `namespacePrefix = 'inner'` / `'outer.inner'`.
|
|
13
|
+
* - **File modules** (`mod tools;` loading `tools.rs` or `tools/mod.rs`) leave
|
|
14
|
+
* no in-file marker at all — the module path lives in the FILE PATH relative
|
|
15
|
+
* to the crate root. That half is reconstructed here.
|
|
16
|
+
*
|
|
17
|
+
* ## Module identity carries its crate
|
|
18
|
+
*
|
|
19
|
+
* A module is `{ crateRoot, segments }`, never bare segments. A cargo workspace
|
|
20
|
+
* routinely gives several members the same internal module name — `util`,
|
|
21
|
+
* `error`, `config`, `types` are near-universal — and identity by segments alone
|
|
22
|
+
* makes `crates/a/src/tools.rs` and `crates/b/src/tools.rs` the same module. That
|
|
23
|
+
* mis-binds a call across crates when only one defines the member, and (worse)
|
|
24
|
+
* ties the lookup when both do, so qualified resolution refuses and the call
|
|
25
|
+
* falls back to the lexical walk that #2730 exists to prevent. Rust has no
|
|
26
|
+
* implicit cross-crate paths: reaching another crate requires naming it, so two
|
|
27
|
+
* modules in different crates are never the same module.
|
|
28
|
+
*
|
|
29
|
+
* Everything here is pure path arithmetic over the workspace file set; no I/O.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* A module's full identity: the crate it belongs to, plus its `::`-path inside
|
|
33
|
+
* that crate. `segments` is empty for the crate-root module itself.
|
|
34
|
+
*/
|
|
35
|
+
export interface RustModule {
|
|
36
|
+
/** Crate-root directory (`src`, `crates/noob/src`, or `''` at repo root). */
|
|
37
|
+
readonly crateRoot: string;
|
|
38
|
+
readonly segments: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
export interface RustModuleIndex {
|
|
41
|
+
/** Crate-root directories, longest first, so nested crates win. */
|
|
42
|
+
readonly crateRoots: readonly string[];
|
|
43
|
+
/**
|
|
44
|
+
* Every module name derivable from a FILE PATH, as a flat set of single
|
|
45
|
+
* segments. Inline `mod x { … }` names are absent by construction — they exist
|
|
46
|
+
* in no path — so this is only half of the negative filter's input; the
|
|
47
|
+
* resolver unions it with the inline module names it collects from the scope
|
|
48
|
+
* model (#2742).
|
|
49
|
+
*/
|
|
50
|
+
readonly moduleNames: ReadonlySet<string>;
|
|
51
|
+
/**
|
|
52
|
+
* Entry files that are a crate root in their own right rather than a module of
|
|
53
|
+
* the surrounding crate — `src/bin/<name>.rs` auto-discovered binary targets.
|
|
54
|
+
* Maps the entry file to the directory its own submodules live under.
|
|
55
|
+
*/
|
|
56
|
+
readonly standaloneRootFiles: ReadonlyMap<string, string>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Index the workspace's crate roots: every directory holding a `main.rs` or
|
|
60
|
+
* `lib.rs`. A cargo workspace has one per member (`crates/noob/src`), a plain
|
|
61
|
+
* package exactly one (`src`). Longest-first ordering makes `moduleOfFile` pick
|
|
62
|
+
* the innermost enclosing crate for nested layouts.
|
|
63
|
+
*
|
|
64
|
+
* Cargo also auto-discovers a binary target per `src/bin/<name>.rs`. Each is a
|
|
65
|
+
* separate crate with its own `crate::` root, and its submodules live under
|
|
66
|
+
* `src/bin/<name>/`. Treating those files as ordinary modules of the library
|
|
67
|
+
* invented the module path `bin::<name>`, which made `crate::helper()` inside a
|
|
68
|
+
* binary resolve into the LIBRARY — downgrading an edge the lexical walk had
|
|
69
|
+
* previously got right (#2741 review).
|
|
70
|
+
*/
|
|
71
|
+
export declare function buildRustModuleIndex(allFilePaths: ReadonlySet<string>): RustModuleIndex;
|
|
72
|
+
/**
|
|
73
|
+
* Could this qualifier name a module that exists in the workspace?
|
|
74
|
+
*
|
|
75
|
+
* A negative answer is authoritative and cheap: if the head segment matches no
|
|
76
|
+
* module name anywhere, no candidate channel can resolve it. Anchors keep their
|
|
77
|
+
* meaning (`crate::`/`self::`/`super::` are relative to the caller, so the head
|
|
78
|
+
* to test is the first non-anchor segment); an all-anchor qualifier (`self::f()`)
|
|
79
|
+
* names the caller's own module and is always worth trying.
|
|
80
|
+
*/
|
|
81
|
+
export declare function couldNameAModule(qualifier: readonly string[], knownModuleNames: ReadonlySet<string>): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Module identity of the file itself: its crate root plus the `::`-segments
|
|
84
|
+
* below it.
|
|
85
|
+
*
|
|
86
|
+
* src/main.rs → { src, [] } (crate root module)
|
|
87
|
+
* src/tools.rs → { src, ['tools'] }
|
|
88
|
+
* src/a/mod.rs → { src, ['a'] }
|
|
89
|
+
* src/a/b.rs → { src, ['a', 'b'] }
|
|
90
|
+
* crates/noob/src/tools/mod.rs → { crates/noob/src, ['tools'] }
|
|
91
|
+
*
|
|
92
|
+
* Returns `undefined` for a file under no known crate root — the caller then has
|
|
93
|
+
* no module identity to reason about and must refuse rather than guess.
|
|
94
|
+
*/
|
|
95
|
+
export declare function moduleOfFile(filePath: string, index: RustModuleIndex): RustModule | undefined;
|
|
96
|
+
/** Full module identity of a definition: its file's module plus any `mod` blocks around it. */
|
|
97
|
+
export declare function moduleOfDef(filePath: string, namespacePrefix: string | undefined, index: RustModuleIndex): RustModule | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a written path's leading segments to a module, from the calling
|
|
100
|
+
* module. Mirrors rustc's anchor handling:
|
|
101
|
+
*
|
|
102
|
+
* crate::a::b → the caller's OWN crate, segments ['a','b']
|
|
103
|
+
* self::a → callerModule ++ ['a']
|
|
104
|
+
* super::a → callerModule[:-1] ++ ['a']
|
|
105
|
+
* a::b → relative; the caller resolves this against the candidate
|
|
106
|
+
* channels (child module, `use` binding), so it is returned
|
|
107
|
+
* as-is for the caller to try in context.
|
|
108
|
+
*
|
|
109
|
+
* An anchored path always stays inside the caller's crate — `crate::` names the
|
|
110
|
+
* current crate, and `super::`/`self::` are relative to it — so the resolved
|
|
111
|
+
* module inherits `callerModule.crateRoot`.
|
|
112
|
+
*
|
|
113
|
+
* `super` chains (`super::super::x`) are consumed left to right. Returns
|
|
114
|
+
* `undefined` when the chain walks above the crate root — an invalid path that
|
|
115
|
+
* must not silently resolve to something else.
|
|
116
|
+
*/
|
|
117
|
+
export declare function resolveAnchoredModulePath(qualifier: readonly string[], callerModule: RustModule): {
|
|
118
|
+
readonly module: RustModule;
|
|
119
|
+
readonly anchored: boolean;
|
|
120
|
+
} | undefined;
|
|
121
|
+
/**
|
|
122
|
+
* Identity comparison for two modules. The crate root participates: two modules
|
|
123
|
+
* with the same internal path in DIFFERENT crates are different modules, and
|
|
124
|
+
* conflating them is what let a workspace mis-bind or refuse (#2730 review H1).
|
|
125
|
+
*/
|
|
126
|
+
export declare function sameModule(a: RustModule, b: RustModule): boolean;
|