gitnexus 1.6.10-rc.21 → 1.6.10-rc.211
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 +212 -22
- package/dist/_shared/graph/types.d.ts +27 -8
- package/dist/_shared/graph/types.d.ts.map +1 -1
- package/dist/_shared/index.d.ts +4 -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 +19 -1
- package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
- package/dist/_shared/integrations/resilient-fetch.js +23 -10
- 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/callable-flow-site.d.ts +110 -0
- package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
- package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +6 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/finalize-algorithm.js +316 -37
- package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
- package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
- package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
- package/dist/_shared/scope-resolution/reference-site.d.ts +124 -1
- 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 +297 -5
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/cli/ai-context.d.ts +10 -2
- package/dist/cli/ai-context.js +128 -61
- 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 +25 -114
- package/dist/cli/analyze.js +194 -36
- package/dist/cli/cli-message.d.ts +1 -1
- package/dist/cli/detect-changes-format.js +19 -2
- package/dist/cli/doctor.d.ts +23 -0
- package/dist/cli/doctor.js +72 -9
- package/dist/cli/editor-targets.js +6 -0
- package/dist/cli/eval-server.d.ts +23 -1
- package/dist/cli/eval-server.js +128 -9
- 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 +23 -2
- package/dist/cli/help-i18n.js +3 -0
- package/dist/cli/i18n/en.d.ts +17 -8
- package/dist/cli/i18n/en.js +19 -8
- package/dist/cli/i18n/resources.d.ts +26 -8
- package/dist/cli/i18n/zh-CN.d.ts +9 -0
- package/dist/cli/i18n/zh-CN.js +17 -8
- package/dist/cli/index.js +16 -9
- package/dist/cli/lazy-action.d.ts +7 -0
- package/dist/cli/lazy-action.js +27 -0
- package/dist/cli/mcp.js +6 -3
- package/dist/cli/resolve-invocation.d.ts +7 -3
- package/dist/cli/resolve-invocation.js +7 -3
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +30 -7
- package/dist/cli/skill-gen.d.ts +1 -6
- package/dist/cli/skill-gen.js +88 -18
- package/dist/cli/standard-skills.d.ts +76 -0
- package/dist/cli/standard-skills.js +45 -0
- package/dist/cli/status.d.ts +4 -1
- package/dist/cli/status.js +57 -4
- package/dist/cli/tool.d.ts +1 -0
- package/dist/cli/tool.js +75 -7
- package/dist/cli/uninstall.js +7 -2
- package/dist/cli/wiki.d.ts +1 -0
- package/dist/cli/wiki.js +59 -10
- package/dist/config/ignore-service.d.ts +2 -0
- package/dist/config/ignore-service.js +31 -4
- package/dist/core/analysis-features.d.ts +21 -0
- package/dist/core/analysis-features.js +59 -0
- package/dist/core/analyzer-identity.d.ts +154 -0
- package/dist/core/analyzer-identity.js +2158 -0
- package/dist/core/augmentation/engine.js +95 -76
- 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/embedder.d.ts +3 -2
- package/dist/core/embeddings/embedder.js +8 -5
- package/dist/core/embeddings/embedding-identity.d.ts +11 -0
- package/dist/core/embeddings/embedding-identity.js +24 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +24 -1
- package/dist/core/embeddings/embedding-pipeline.js +341 -19
- package/dist/core/embeddings/http-client.d.ts +10 -2
- package/dist/core/embeddings/http-client.js +282 -47
- package/dist/core/embeddings/node-module-compat.d.ts +4 -2
- package/dist/core/embeddings/node-module-compat.js +4 -2
- package/dist/core/embeddings/onnxruntime-common-resolver.js +5 -5
- package/dist/core/embeddings/onnxruntime-node-resolver.js +2 -2
- package/dist/core/embeddings/runtime-install.js +1 -1
- package/dist/core/git-staleness.js +1 -1
- 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.js +5 -27
- package/dist/core/group/cross-impact.d.ts +21 -0
- package/dist/core/group/cross-impact.js +128 -15
- package/dist/core/group/cross-trace.js +27 -16
- package/dist/core/group/extractors/http-patterns/java.js +91 -14
- package/dist/core/group/extractors/http-patterns/node.js +19 -0
- 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/service.js +10 -1
- package/dist/core/group/storage.js +2 -33
- package/dist/core/group/types.d.ts +18 -0
- 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 +80 -0
- package/dist/core/index-freshness.js +120 -0
- 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/class-extractors/configs/jvm.js +29 -0
- package/dist/core/ingestion/cluster-enricher.js +8 -4
- package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
- package/dist/core/ingestion/community-processor.d.ts +21 -3
- package/dist/core/ingestion/community-processor.js +88 -83
- package/dist/core/ingestion/di-extractors/index.d.ts +22 -34
- package/dist/core/ingestion/di-extractors/index.js +17 -18
- package/dist/core/ingestion/di-extractors/spring.d.ts +27 -5
- package/dist/core/ingestion/di-extractors/spring.js +87 -3
- 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/emit-references.js +4 -0
- package/dist/core/ingestion/filesystem-walker.js +16 -12
- package/dist/core/ingestion/finalize-orchestrator.js +1 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +9 -0
- package/dist/core/ingestion/frameworks/spring/analysis-features.js +41 -0
- 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-candidates.d.ts +30 -0
- package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
- package/dist/core/ingestion/frameworks/spring/bean-catalog.js +27 -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/config-bindings.d.ts +24 -0
- package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +48 -0
- package/dist/core/ingestion/frameworks/spring/di-metadata.js +379 -0
- 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 +428 -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 +27 -8
- 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 +20 -1
- package/dist/core/ingestion/language-config.js +18 -23
- package/dist/core/ingestion/language-provider.d.ts +133 -7
- package/dist/core/ingestion/languages/c/captures.js +63 -0
- package/dist/core/ingestion/languages/c/import-target.js +12 -16
- package/dist/core/ingestion/languages/c/query.js +17 -0
- package/dist/core/ingestion/languages/c/scope-resolver.js +26 -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/captures.js +93 -0
- package/dist/core/ingestion/languages/cobol/scope-resolver.js +34 -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 +222 -3
- 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 +62 -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 +44 -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 +686 -16
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
- package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
- 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 +8 -1
- package/dist/core/ingestion/languages/go/captures.js +142 -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 +7 -0
- package/dist/core/ingestion/languages/java/analysis-features.js +25 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +38 -0
- package/dist/core/ingestion/languages/java/capture-side-channel.js +124 -0
- package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
- package/dist/core/ingestion/languages/java/captures.js +321 -49
- 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/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/java/package-facts.js +9 -0
- package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
- package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
- package/dist/core/ingestion/languages/java/query.js +39 -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 +35 -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-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -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-config-bindings.d.ts +23 -0
- package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
- package/dist/core/ingestion/languages/java/spring-di.d.ts +20 -0
- package/dist/core/ingestion/languages/java/spring-di.js +160 -0
- 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 +76 -3
- package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
- package/dist/core/ingestion/languages/javascript/captures.js +278 -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 +232 -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-facts.d.ts +35 -0
- package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
- package/dist/core/ingestion/languages/jvm/package-siblings.js +197 -0
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +40 -3
- package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +111 -8
- package/dist/core/ingestion/languages/kotlin/captures.js +112 -0
- 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/package-facts.d.ts +5 -0
- package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
- package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
- package/dist/core/ingestion/languages/kotlin/query.js +47 -2
- package/dist/core/ingestion/languages/kotlin/scope-resolver.js +36 -3
- 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-bean-metadata.d.ts +2 -0
- package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -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 +20 -0
- package/dist/core/ingestion/languages/kotlin/spring-di.js +299 -0
- 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/kotlin.js +5 -6
- package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
- package/dist/core/ingestion/languages/php/captures.js +359 -51
- package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
- package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
- package/dist/core/ingestion/languages/php/import-target.js +229 -7
- package/dist/core/ingestion/languages/php/interpret.js +10 -0
- package/dist/core/ingestion/languages/php/query.js +31 -0
- package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
- 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.d.ts +3 -4
- package/dist/core/ingestion/languages/python/captures.js +53 -5
- 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 -3
- package/dist/core/ingestion/languages/python/query.js +9 -0
- package/dist/core/ingestion/languages/python/receiver-binding.d.ts +17 -2
- package/dist/core/ingestion/languages/python/receiver-binding.js +192 -2
- package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
- package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
- package/dist/core/ingestion/languages/python/simple-hooks.js +9 -5
- package/dist/core/ingestion/languages/ruby/captures.js +200 -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 +52 -1
- package/dist/core/ingestion/languages/rust/interpret.js +18 -0
- 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 +48 -6
- package/dist/core/ingestion/languages/rust/range-binding.d.ts +1 -11
- package/dist/core/ingestion/languages/rust/range-binding.js +149 -63
- 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 +99 -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 +288 -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/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/nuxt-auto-imports.js +2 -1
- package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
- package/dist/core/ingestion/languages/typescript/query.js +340 -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 +291 -0
- package/dist/core/ingestion/languages/typescript.js +87 -1
- 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/parsing-processor.js +32 -1
- package/dist/core/ingestion/pipeline-phases/di.d.ts +8 -33
- package/dist/core/ingestion/pipeline-phases/di.js +275 -157
- package/dist/core/ingestion/pipeline-phases/index.d.ts +3 -0
- package/dist/core/ingestion/pipeline-phases/index.js +3 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +158 -3
- package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +11 -2
- package/dist/core/ingestion/pipeline-phases/processes.js +102 -7
- package/dist/core/ingestion/pipeline-phases/routes.js +56 -10
- 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/spring-config.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
- package/dist/core/ingestion/pipeline.d.ts +27 -3
- package/dist/core/ingestion/pipeline.js +62 -12
- 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 +78 -6
- package/dist/core/ingestion/route-extractors/data-route-table.d.ts +25 -0
- package/dist/core/ingestion/route-extractors/data-route-table.js +864 -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/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 +109 -24
- 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 +617 -59
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +381 -22
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +15 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +53 -0
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
- package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +275 -41
- 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 +56 -1
- package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +130 -32
- 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 +46 -3
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +64 -0
- package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1233 -0
- 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 +19 -4
- package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +160 -4
- 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 +64 -0
- package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +118 -0
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +109 -8
- 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 +34 -0
- package/dist/core/ingestion/scope-resolution/pipeline/phase.js +82 -38
- package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +61 -1
- package/dist/core/ingestion/scope-resolution/pipeline/run.js +384 -48
- 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 +968 -56
- 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/taint/typescript-model.js +34 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +688 -5
- package/dist/core/ingestion/type-env.js +11 -7
- package/dist/core/ingestion/type-extractors/jvm.js +17 -2
- 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 +311 -14
- package/dist/core/ingestion/utils/ast-helpers.js +745 -48
- 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 +153 -0
- package/dist/core/ingestion/utils/callable-flow-captures.js +928 -0
- 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 +72 -0
- package/dist/core/ingestion/workers/callable-id.js +116 -0
- package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
- package/dist/core/ingestion/workers/parse-worker.js +409 -39
- package/dist/core/ingestion/workers/worker-pool.d.ts +34 -27
- package/dist/core/ingestion/workers/worker-pool.js +133 -25
- package/dist/core/lbug/csv-generator.d.ts +27 -0
- package/dist/core/lbug/csv-generator.js +80 -17
- package/dist/core/lbug/extension-load-error.d.ts +2 -2
- package/dist/core/lbug/extension-load-error.js +44 -27
- package/dist/core/lbug/extension-loader.d.ts +29 -0
- package/dist/core/lbug/extension-loader.js +32 -7
- 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 +337 -3
- package/dist/core/lbug/lbug-adapter.js +772 -67
- package/dist/core/lbug/lbug-config.d.ts +93 -6
- package/dist/core/lbug/lbug-config.js +269 -9
- package/dist/core/lbug/native-check.d.ts +39 -0
- package/dist/core/lbug/native-check.js +323 -46
- 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 +23 -1
- package/dist/core/lbug/pool-adapter.js +115 -7
- 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 +162 -3
- package/dist/core/lbug/schema.js +392 -157
- package/dist/core/lbug/sidecar-recovery.d.ts +1 -0
- package/dist/core/lbug/sidecar-recovery.js +1 -1
- package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
- package/dist/core/lbug/sync-csv-writer.js +108 -0
- package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
- package/dist/core/platform/capabilities.d.ts +0 -1
- package/dist/core/platform/capabilities.js +12 -7
- package/dist/core/run-analyze.d.ts +150 -3
- package/dist/core/run-analyze.js +1562 -151
- 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 +167 -2
- package/dist/core/search/fts-indexes.js +264 -10
- package/dist/core/wiki/graph-queries.js +145 -112
- package/dist/core/wiki/llm-client.d.ts +37 -5
- package/dist/core/wiki/llm-client.js +88 -17
- 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/http-transport.d.ts +5 -0
- package/dist/mcp/http-transport.js +19 -5
- 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 +3 -0
- package/dist/mcp/local/bean-metadata.js +46 -0
- package/dist/mcp/local/local-backend.d.ts +167 -6
- package/dist/mcp/local/local-backend.js +1756 -405
- 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/output-budget.d.ts +5 -0
- package/dist/mcp/output-budget.js +52 -0
- package/dist/mcp/read-only-policy.d.ts +12 -0
- package/dist/mcp/read-only-policy.js +102 -0
- package/dist/mcp/repository-policy.d.ts +35 -0
- package/dist/mcp/repository-policy.js +333 -0
- package/dist/mcp/resources.js +34 -7
- package/dist/mcp/server.d.ts +5 -2
- package/dist/mcp/server.js +48 -18
- package/dist/mcp/tools.d.ts +8 -8
- package/dist/mcp/tools.js +91 -20
- package/dist/server/analyze-job.d.ts +40 -2
- package/dist/server/analyze-job.js +30 -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 +3 -2
- package/dist/server/analyze-worker-core.js +15 -3
- 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/analyze-worker.js +29 -6
- package/dist/server/api.d.ts +2 -11
- package/dist/server/api.js +200 -155
- 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/mcp-http.d.ts +1 -1
- package/dist/server/mcp-http.js +4 -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/server/upload-ingest.js +2 -1
- package/dist/server/validation.js +2 -1
- 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 +165 -0
- package/dist/storage/git.js +352 -3
- package/dist/storage/index-lock.d.ts +83 -0
- package/dist/storage/index-lock.js +654 -0
- package/dist/storage/parse-cache.js +482 -1
- package/dist/storage/parsedfile-store.d.ts +8 -0
- package/dist/storage/parsedfile-store.js +235 -1
- package/dist/storage/repo-manager.d.ts +29 -309
- package/dist/storage/repo-manager.js +187 -165
- 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 +20 -12
- package/scripts/cross-platform-shard.ts +143 -0
- package/scripts/cross-platform-tests.ts +94 -0
- package/scripts/ensure-fts.ts +14 -3
- package/scripts/run-cross-platform.ts +36 -10
- package/scripts/sync-plugin-manifests.mjs +192 -0
- 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-lfg/README.md +55 -0
- package/skills/gitnexus-lfg/SKILL.md +86 -0
- package/skills/gitnexus-plan/README.md +147 -0
- package/skills/gitnexus-plan/SKILL.md +348 -0
- package/skills/gitnexus-plan/references/context-ledger.md +137 -0
- package/skills/gitnexus-plan/references/context-pack.md +126 -0
- package/skills/gitnexus-plan/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
- package/skills/gitnexus-plan/references/plan-template.md +201 -0
- package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2366 -0
- package/skills/gitnexus-refactoring.md +48 -5
- package/skills/gitnexus-review/SKILL.md +279 -0
- package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
- package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
- package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
- package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
- package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
- package/skills/gitnexus-taint-analysis.md +13 -7
- package/skills/gitnexus-work/README.md +71 -0
- package/skills/gitnexus-work/SKILL.md +272 -0
- package/skills/gitnexus-work/references/evidence-provenance.md +309 -0
- package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2366 -0
- package/vendor/leiden/utils.cjs +28 -1
- package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
- package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
- package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
- package/web/assets/agent-DIzEQ1JJ.js +626 -0
- package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
- package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
- package/web/assets/blockDiagram-54WLDVWM-Dg_hrRWE.js +132 -0
- package/web/assets/{c4Diagram-Y2BXMSZH-DOXVs7-C.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +6 -6
- 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-6L755F7B-CMhLBxi2.js +1 -0
- package/web/assets/chunk-7CWYLC5S-DRgGkkpF.js +2 -0
- package/web/assets/chunk-A7VWPJGB-B4O3oQdQ.js +1 -0
- 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-SZD42YQK-ijyKKVr1.js +70 -0
- package/web/assets/chunk-TFPGFQPA-Dj6a-0pC.js +231 -0
- 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-VJFVEZTB-CX66F2ep.js +206 -0
- 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-KFBZAVDW-Dfmf_4ti.js +3 -0
- 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/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-B4eB4dNZ.js → index-BBNl0qfX.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-BLjivjXL.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +6 -6
- package/web/assets/{journeyDiagram-M6C3CM3L-Cetgs3NH.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +6 -6
- package/web/assets/{kanban-definition-75IXJCU3-DMlCaIpf.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +27 -27
- package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
- package/web/assets/{mindmap-definition-2TDM6QVE-B4GbXQBc.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +29 -29
- package/web/assets/node-Ct_zna8U.js +8 -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/preload-helper-Czpn1I53.js +1 -0
- package/web/assets/{quadrantDiagram-VICAPDV7-B1TQnlm0.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +6 -6
- 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-RASO5HTO-B-l8InpK.js +84 -0
- package/web/assets/sankeyDiagram-F32LOJ6L-Kd7zjJgX.js +40 -0
- package/web/assets/sdk-CzHHH8tD.js +37 -0
- package/web/assets/sequenceDiagram-URATNSBD-BlcdY9DS.js +162 -0
- 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-WJXWRH4I-DUfp1R3E.js +120 -0
- 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 +17 -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/skills/gitnexus-pr-review.md +0 -163
- package/web/assets/ProcessFlowModal-Dna7GkwO.js +0 -22
- package/web/assets/agent-DNYDy-KA.js +0 -660
- package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
- package/web/assets/architectureDiagram-UL44E2DR-BU5ZRITg.js +0 -36
- package/web/assets/blockDiagram-7IZFK4PR-Dut1BpTV.js +0 -132
- package/web/assets/chunk-2T2R6R2M-pkw2oXHH.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-zxhDWgyF.js +0 -124
- package/web/assets/chunk-7J6CGLKN-AmkN8jJN.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-INKRHTLW-D9BM9HWZ.js +0 -70
- package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
- package/web/assets/chunk-KGFNY3KK-tD2F6wxK.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-LCXTWHL2-Ba9JK-6F.js +0 -231
- package/web/assets/chunk-LII3EMHJ-EGx-eBIu.js +0 -1
- package/web/assets/chunk-LRIF4GLE-C3_PqUBq.js +0 -1
- package/web/assets/chunk-QA3QBVWF-D4cSJBf6.js +0 -2
- package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
- package/web/assets/chunk-RG4AUYOV-OqBBMwuQ.js +0 -206
- package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
- package/web/assets/chunk-T2UQINTJ-BJusEiGe.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-BCpUlARQ.js +0 -1
- package/web/assets/chunk-VU6ZFW4Y-BeXVk45_.js +0 -2
- package/web/assets/chunk-ZXARS5L4-BI_qR2Nm.js +0 -1
- package/web/assets/classDiagram-KGZ6W3CR-D9zSIg0x.js +0 -1
- package/web/assets/classDiagram-v2-72OJOZXJ-D9zSIg0x.js +0 -1
- package/web/assets/dagre-ND4H6XIP-CpcV5kbl.js +0 -4
- package/web/assets/diagram-3NCE3AQN-6SMxBRpj.js +0 -43
- package/web/assets/diagram-GF46GFSD-BZEdNcRZ.js +0 -24
- package/web/assets/diagram-HNR7UZ2L-DxKW2a2Y.js +0 -3
- package/web/assets/diagram-QXG6HAR7-HfTHcXX_.js +0 -24
- package/web/assets/diagram-WEQXMOUZ-CyijUS8r.js +0 -10
- package/web/assets/erDiagram-L5TCEMPS-D0fvpWEX.js +0 -85
- package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
- package/web/assets/flowDiagram-H6V6AXG4-Bvr9bbhk.js +0 -162
- package/web/assets/ganttDiagram-JCBTUEKG-TzODrLzv.js +0 -292
- package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
- package/web/assets/gitGraphDiagram-S2ZK5IYY-ONQSwJIY.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-DIPVUIQ6.js +0 -2
- package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
- 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-D3YC_xyg.js +0 -30
- package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
- package/web/assets/requirementDiagram-JXO7QTGE-f8wczLQf.js +0 -84
- package/web/assets/sankeyDiagram-URQDO5SZ-BTxzG5j0.js +0 -40
- package/web/assets/sequenceDiagram-VS2MUI6T-DuamM-IR.js +0 -162
- package/web/assets/src-BNCXICdA.js +0 -1
- package/web/assets/stateDiagram-7D4R322I-Ch2pEUcw.js +0 -1
- package/web/assets/stateDiagram-v2-36443NZ5-7ANuoZLL.js +0 -1
- package/web/assets/timeline-definition-O6YCAMPW-07BR8R8G.js +0 -120
- 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-BQX2ossk.js +0 -34
- package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
- package/web/assets/wardleyDiagram-CUQ6CDDI-CGIJBBiK.js +0 -78
- package/web/assets/xychartDiagram-N2JHSOCM-B3HNMuWp.js +0 -7
- /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* analysis.
|
|
7
7
|
*/
|
|
8
8
|
import { findAncestorBeforeBoundary, FUNCTION_NODE_TYPES } from '../../utils/ast-helpers.js';
|
|
9
|
+
import { walkToScope } from '../../utils/scope-tree-walk.js';
|
|
9
10
|
const PYTHON_METHOD_CONTAINER_TYPES = new Set(['class_definition']);
|
|
10
11
|
export function pythonFunctionDefinitionLabel(functionNode, defaultLabel) {
|
|
11
12
|
if (defaultLabel !== 'Function')
|
|
@@ -15,11 +16,14 @@ export function pythonFunctionDefinitionLabel(functionNode, defaultLabel) {
|
|
|
15
16
|
}
|
|
16
17
|
// ─── bindingScopeFor ──────────────────────────────────────────────────────
|
|
17
18
|
/** Python has no block scope, so the central extractor's "innermost
|
|
18
|
-
* enclosing scope" default is already correct
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
export function pythonBindingScopeFor(
|
|
19
|
+
* enclosing scope" default is already correct for ordinary bindings.
|
|
20
|
+
* Constructor-injected instance fields are the exception: their marker is
|
|
21
|
+
* anchored inside `__init__`, but compound receiver resolution needs the
|
|
22
|
+
* field type on the enclosing Class scope. */
|
|
23
|
+
export function pythonBindingScopeFor(decl, innermost, tree) {
|
|
24
|
+
if (decl['@type-binding.instance-field'] !== undefined) {
|
|
25
|
+
return walkToScope(innermost, tree, 'Class');
|
|
26
|
+
}
|
|
23
27
|
return null;
|
|
24
28
|
}
|
|
25
29
|
// ─── importOwningScope ────────────────────────────────────────────────────
|
|
@@ -6,6 +6,8 @@ import { getTreeSitterBufferSize } from '../../constants.js';
|
|
|
6
6
|
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
|
+
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
10
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
9
11
|
const FUNCTION_NODE_TYPES = ['method', 'singleton_method'];
|
|
10
12
|
const HERITAGE_CALL_NAMES = new Set(['include', 'extend', 'prepend']);
|
|
11
13
|
const ATTR_CALL_NAMES = new Set([
|
|
@@ -13,6 +15,46 @@ const ATTR_CALL_NAMES = new Set([
|
|
|
13
15
|
'attr_reader',
|
|
14
16
|
'attr_writer',
|
|
15
17
|
]);
|
|
18
|
+
const RUBY_CALLABLE_CAPTURE_OPTIONS = {
|
|
19
|
+
functionNodeTypes: new Set(['method', 'singleton_method', 'lambda']),
|
|
20
|
+
callNodeTypes: new Set(['call']),
|
|
21
|
+
parameterListNodeTypes: new Set(['method_parameters', 'argument_list']),
|
|
22
|
+
parameterNodeTypes: new Set([
|
|
23
|
+
'identifier',
|
|
24
|
+
'optional_parameter',
|
|
25
|
+
'splat_parameter',
|
|
26
|
+
'hash_splat_parameter',
|
|
27
|
+
'block_parameter',
|
|
28
|
+
]),
|
|
29
|
+
bindingNodeTypes: new Set(['assignment']),
|
|
30
|
+
assignmentNodeTypes: new Set(['assignment', 'operator_assignment']),
|
|
31
|
+
identifierNodeTypes: new Set([
|
|
32
|
+
'identifier',
|
|
33
|
+
'constant',
|
|
34
|
+
'instance_variable',
|
|
35
|
+
'class_variable',
|
|
36
|
+
'global_variable',
|
|
37
|
+
]),
|
|
38
|
+
functionScopedValueBindings: true,
|
|
39
|
+
callableProtocolMethods: new Set(['call']),
|
|
40
|
+
// A bare receiver-less identifier in value position is a method CALL in
|
|
41
|
+
// Ruby (`action = process` stores process's RETURN value) — only explicit
|
|
42
|
+
// reference forms (method(:x), &:x, lambda/proc) reference the callable.
|
|
43
|
+
bareNamesAreCalls: true,
|
|
44
|
+
extractCallableReference: (node) => {
|
|
45
|
+
if (node.type !== 'call')
|
|
46
|
+
return undefined;
|
|
47
|
+
const method = node.childForFieldName('method');
|
|
48
|
+
if (method?.text !== 'method' && method?.text !== 'public_method')
|
|
49
|
+
return undefined;
|
|
50
|
+
const args = node.childForFieldName('arguments');
|
|
51
|
+
const symbol = args?.namedChildren.find((child) => child !== null && child.type === 'simple_symbol');
|
|
52
|
+
if (symbol === undefined)
|
|
53
|
+
return undefined;
|
|
54
|
+
const name = symbol.text.replace(/^:/, '');
|
|
55
|
+
return name.length === 0 ? undefined : { name, anchor: symbol };
|
|
56
|
+
},
|
|
57
|
+
};
|
|
16
58
|
/**
|
|
17
59
|
* Build the full `.`-joined qualified owner name for a heritage/attr call by
|
|
18
60
|
* walking ALL enclosing class/module ancestors (not just the immediate one),
|
|
@@ -42,6 +84,123 @@ function buildEnclosingQualifiedName(callNode) {
|
|
|
42
84
|
}
|
|
43
85
|
return segments.length > 0 ? segments.join('.') : undefined;
|
|
44
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
|
+
}
|
|
45
204
|
export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
46
205
|
let tree = cachedTree;
|
|
47
206
|
if (tree === undefined) {
|
|
@@ -83,6 +242,22 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
83
242
|
}
|
|
84
243
|
if (Object.keys(grouped).length === 0)
|
|
85
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
|
+
}
|
|
86
261
|
// Decompose require/require_relative/load into import captures
|
|
87
262
|
if (grouped['@import.statement'] !== undefined) {
|
|
88
263
|
const anchor = grouped['@import.statement'];
|
|
@@ -94,6 +269,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
94
269
|
continue;
|
|
95
270
|
}
|
|
96
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']);
|
|
97
278
|
out.push(grouped);
|
|
98
279
|
continue;
|
|
99
280
|
}
|
|
@@ -106,6 +287,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
106
287
|
if (receiver !== null)
|
|
107
288
|
out.push(receiver);
|
|
108
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']);
|
|
109
296
|
out.push(grouped);
|
|
110
297
|
continue;
|
|
111
298
|
}
|
|
@@ -133,6 +320,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
133
320
|
grouped['@declaration.parameter-types'] = syntheticCapture('@declaration.parameter-types', fnNode, JSON.stringify(arity.parameterTypes));
|
|
134
321
|
}
|
|
135
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']);
|
|
136
329
|
out.push(grouped);
|
|
137
330
|
continue;
|
|
138
331
|
}
|
|
@@ -215,6 +408,12 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
215
408
|
grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(arity));
|
|
216
409
|
}
|
|
217
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']);
|
|
218
417
|
out.push(grouped);
|
|
219
418
|
}
|
|
220
419
|
// Second pass: member-call-return type bindings
|
|
@@ -400,6 +599,7 @@ export function emitRubyScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
400
599
|
// flow through `emitHeritageEdges` (the `__heritage__:` import path above),
|
|
401
600
|
// an independent lane that stays intact when the legacy heritage leg is gated off.
|
|
402
601
|
out.push(...synthesizeRubySuperclassReferences(tree.rootNode));
|
|
602
|
+
out.push(...synthesizeCallableFlowCaptures(tree.rootNode, RUBY_CALLABLE_CAPTURE_OPTIONS));
|
|
403
603
|
return out;
|
|
404
604
|
}
|
|
405
605
|
/**
|
|
@@ -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,10 +1,23 @@
|
|
|
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';
|
|
5
5
|
import { synthesizeRustReceiverBinding } from './receiver-binding.js';
|
|
6
6
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
7
7
|
import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
8
|
+
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
9
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
10
|
+
const RUST_CALLABLE_CAPTURE_OPTIONS = {
|
|
11
|
+
functionNodeTypes: new Set(['function_item', 'closure_expression']),
|
|
12
|
+
callNodeTypes: new Set(['call_expression']),
|
|
13
|
+
parameterListNodeTypes: new Set(['parameters', 'arguments']),
|
|
14
|
+
parameterNodeTypes: new Set(['parameter', 'self_parameter']),
|
|
15
|
+
bindingNodeTypes: new Set(['let_declaration']),
|
|
16
|
+
assignmentNodeTypes: new Set(['assignment_expression']),
|
|
17
|
+
identifierNodeTypes: new Set(['identifier', 'type_identifier', 'field_identifier']),
|
|
18
|
+
callableReferenceNodeTypes: new Set(['scoped_identifier']),
|
|
19
|
+
normalizeQualifiedName: (raw) => raw.replaceAll('::', '.'),
|
|
20
|
+
};
|
|
8
21
|
export function emitRustScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
9
22
|
let tree = cachedTree;
|
|
10
23
|
if (tree === undefined) {
|
|
@@ -82,6 +95,26 @@ export function emitRustScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
82
95
|
}
|
|
83
96
|
}
|
|
84
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
|
+
}
|
|
85
118
|
// Hoist return-type bindings from impl block functions to module level.
|
|
86
119
|
// The auto-hoist in the scope-extractor places a type binding whose
|
|
87
120
|
// anchor matches its innermost scope on the parent scope. By using the
|
|
@@ -114,9 +147,16 @@ export function emitRustScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
114
147
|
grouped['@reference.arity'] = syntheticCapture('@reference.arity', callNode, String(arity));
|
|
115
148
|
}
|
|
116
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']);
|
|
117
156
|
out.push(grouped);
|
|
118
157
|
}
|
|
119
158
|
out.push(...synthesizeRustInheritanceReferences(tree.rootNode));
|
|
159
|
+
out.push(...synthesizeCallableFlowCaptures(tree.rootNode, RUST_CALLABLE_CAPTURE_OPTIONS));
|
|
120
160
|
return out;
|
|
121
161
|
}
|
|
122
162
|
/**
|
|
@@ -161,10 +201,21 @@ function synthesizeRustInheritanceReferences(root) {
|
|
|
161
201
|
const structName = bareTypeIdentifier(typeField);
|
|
162
202
|
if (traitName === null || structName === null)
|
|
163
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;
|
|
164
210
|
out.push({
|
|
165
211
|
'@reference.inherits': nodeToCapture('@reference.inherits', traitName),
|
|
166
212
|
'@reference.name': nodeToCapture('@reference.name', traitName),
|
|
167
213
|
'@reference.receiver': syntheticCapture('@reference.receiver', structName, structName.text),
|
|
214
|
+
...(traitArguments === null
|
|
215
|
+
? {}
|
|
216
|
+
: {
|
|
217
|
+
'@reference.type-arguments': nodeToCapture('@reference.type-arguments', traitArguments),
|
|
218
|
+
}),
|
|
168
219
|
});
|
|
169
220
|
});
|
|
170
221
|
return out;
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
const REF_PREFIX_RE = /^&\s*(mut\s+)?/;
|
|
2
2
|
const PTR_PREFIX_RE = /^\*\s*(const|mut)?\s*/;
|
|
3
|
+
const DYN_PREFIX_RE = /^dyn\s+/;
|
|
3
4
|
const ENUM_VARIANT_NAMES = new Set(['Some', 'None', 'Ok', 'Err']);
|
|
5
|
+
// `dyn Trait`, `&dyn Trait`, `Box<dyn Trait>` all name a trait object whose
|
|
6
|
+
// receiver-dispatch target is the trait itself (#2604) — strip the `dyn`
|
|
7
|
+
// keyword and any auto-trait/lifetime bound list (`dyn Trait + Send`) down to
|
|
8
|
+
// the principal trait name. Reference/pointer sigils are stripped by the
|
|
9
|
+
// caller first; wrapper unwrapping (Box<T> etc.) runs before this so the
|
|
10
|
+
// unwrapped inner text still gets the same treatment.
|
|
11
|
+
function stripDynBound(t) {
|
|
12
|
+
if (!DYN_PREFIX_RE.test(t))
|
|
13
|
+
return t;
|
|
14
|
+
t = t.replace(DYN_PREFIX_RE, '');
|
|
15
|
+
const plus = t.indexOf('+');
|
|
16
|
+
if (plus !== -1)
|
|
17
|
+
t = t.slice(0, plus);
|
|
18
|
+
return t.trim();
|
|
19
|
+
}
|
|
4
20
|
// ─── interpretImport ──────────────────────────────────────────────────────
|
|
5
21
|
export function interpretRustImport(captures) {
|
|
6
22
|
const kind = captures['@import.kind']?.text;
|
|
@@ -104,6 +120,7 @@ export function normalizeRustTypeName(text) {
|
|
|
104
120
|
if (inner !== null)
|
|
105
121
|
t = inner;
|
|
106
122
|
}
|
|
123
|
+
t = stripDynBound(t);
|
|
107
124
|
const bracket = t.indexOf('<');
|
|
108
125
|
if (bracket !== -1)
|
|
109
126
|
t = t.slice(0, bracket);
|
|
@@ -168,6 +185,7 @@ function normalizeRustReturnType(text) {
|
|
|
168
185
|
}
|
|
169
186
|
}
|
|
170
187
|
}
|
|
188
|
+
t = stripDynBound(t);
|
|
171
189
|
const bracket = t.indexOf('<');
|
|
172
190
|
if (bracket !== -1)
|
|
173
191
|
t = t.slice(0, bracket);
|
|
@@ -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.
|