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
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
* a `@type-binding.alias` match binding the loop variable to the
|
|
29
29
|
* element type of the iterable (resolved from PHPDoc or scopeEnv).
|
|
30
30
|
*
|
|
31
|
+
* 6. **PHPDoc `@var` property synthesis** — a docblock on an UNTYPED
|
|
32
|
+
* property emits the `@type-binding.annotation` + `@declaration.property`
|
|
33
|
+
* pair the native typed-property rules emit, which is the only way PHP
|
|
34
|
+
* can declare a generic field type (#2833).
|
|
35
|
+
*
|
|
31
36
|
* Pure given the input source text. No I/O, no globals consulted.
|
|
32
37
|
*/
|
|
33
38
|
import { nodeIfType, nodeToCapture, syntheticCapture, walkNamedTree, } from '../../utils/ast-helpers.js';
|
|
@@ -39,6 +44,7 @@ import { recordCacheHit, recordCacheMiss } from './cache-stats.js';
|
|
|
39
44
|
import { getTreeSitterBufferSize } from '../../constants.js';
|
|
40
45
|
import { parseSourceSafe } from '../../../tree-sitter/safe-parse.js';
|
|
41
46
|
import { synthesizeCallableFlowCaptures } from '../../utils/callable-flow-captures.js';
|
|
47
|
+
import { synthesizeReceiverChainCapture } from '../../utils/receiver-chain-captures.js';
|
|
42
48
|
const PHP_CALLABLE_CAPTURE_OPTIONS = {
|
|
43
49
|
functionNodeTypes: new Set([
|
|
44
50
|
'function_definition',
|
|
@@ -115,6 +121,17 @@ export function emitPhpScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
}
|
|
124
|
+
// The one full-tree walk: class/trait heritage, and PHPDoc `@var` on an
|
|
125
|
+
// untyped property. Run BEFORE the match loop rather than appended after it,
|
|
126
|
+
// because the property declarations the `@var` half claims must join
|
|
127
|
+
// `typedPropertyAnchorIds`: it emits the same `@declaration.property` the
|
|
128
|
+
// typed rule does, so without this the loose `@declaration.variable`
|
|
129
|
+
// catch-all would declare the very same node a second time under its
|
|
130
|
+
// `$`-sigilled name — exactly the duplicate the set above exists to suppress.
|
|
131
|
+
// Its matches are still appended in the original order after the loop.
|
|
132
|
+
const walked = synthesizePhpTreeWalkCaptures(tree.rootNode);
|
|
133
|
+
for (const id of walked.docPropertyAnchorIds)
|
|
134
|
+
typedPropertyAnchorIds.add(id);
|
|
118
135
|
for (const m of rawMatches) {
|
|
119
136
|
// Group captures by their tag name. Tree-sitter strips the leading
|
|
120
137
|
// `@`; we put it back so the central extractor's prefix lookups work.
|
|
@@ -204,12 +221,24 @@ export function emitPhpScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
204
221
|
}
|
|
205
222
|
}
|
|
206
223
|
// Defensive fallback: emit the raw match.
|
|
224
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
225
|
+
// expression, so resolution can type it by folding over structure
|
|
226
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
227
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
228
|
+
// all leave `grouped` untouched.
|
|
229
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
207
230
|
out.push(grouped);
|
|
208
231
|
continue;
|
|
209
232
|
}
|
|
210
233
|
// Synthesize `$this` / `parent` receiver type-bindings on every
|
|
211
234
|
// non-static method-like. Mirrors C#'s `this` / `base` synthesis.
|
|
212
235
|
if (grouped['@scope.function'] !== undefined) {
|
|
236
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
237
|
+
// expression, so resolution can type it by folding over structure
|
|
238
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
239
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
240
|
+
// all leave `grouped` untouched.
|
|
241
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
213
242
|
out.push(grouped);
|
|
214
243
|
const fnNode = nodeIfType(nodeMap['@scope.function'], ...FUNCTION_NODE_TYPES);
|
|
215
244
|
if (fnNode !== null) {
|
|
@@ -278,20 +307,56 @@ export function emitPhpScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
278
307
|
grouped['@reference.parameter-types'] = syntheticCapture('@reference.parameter-types', callNode, JSON.stringify(argTypes));
|
|
279
308
|
}
|
|
280
309
|
}
|
|
310
|
+
// Structural receiver chain for a call whose receiver is itself an
|
|
311
|
+
// expression, so resolution can type it by folding over structure
|
|
312
|
+
// instead of re-parsing the receiver's source text. Self-gating: a
|
|
313
|
+
// non-call match, an absent receiver, or a chain with no nameable base
|
|
314
|
+
// all leave `grouped` untouched.
|
|
315
|
+
synthesizeReceiverChainCapture(grouped, nodeMap['@reference.receiver']);
|
|
281
316
|
out.push(grouped);
|
|
282
317
|
}
|
|
283
|
-
out.push(...
|
|
318
|
+
out.push(...walked.inheritance);
|
|
319
|
+
out.push(...walked.docProperties);
|
|
284
320
|
out.push(...synthesizeCallableFlowCaptures(tree.rootNode, PHP_CALLABLE_CAPTURE_OPTIONS));
|
|
285
321
|
return out;
|
|
286
322
|
}
|
|
287
|
-
// ─── PHP
|
|
323
|
+
// ─── PHP whole-tree synthesis ────────────────────────────────────────────────
|
|
288
324
|
/**
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
325
|
+
* The single `walkNamedTree` pass of `emitPhpScopeCaptures`, dispatching every
|
|
326
|
+
* synthesis that needs to see the whole tree.
|
|
327
|
+
*
|
|
328
|
+
* ONE walk, not one per synthesis. A tree-sitter node walk is not cheap next to
|
|
329
|
+
* the work it feeds: measured on a 1.2k-line PHP source (9.6k nodes), a single
|
|
330
|
+
* `walkNamedTree` pass costs 7.4 ms against 2.1 ms to PARSE the file, because
|
|
331
|
+
* every step materializes node wrappers across the N-API boundary. So a new
|
|
332
|
+
* node kind is a branch here rather than a pass of its own — the two below emit
|
|
333
|
+
* into separate arrays, and `emitPhpScopeCaptures` appends them in the order
|
|
334
|
+
* they were appended when they were two passes.
|
|
335
|
+
*
|
|
336
|
+
* The `@reference.inherits` half exists so the registry-primary
|
|
337
|
+
* scope-resolution path emits EXTENDS / IMPLEMENTS edges (mirrors C#
|
|
338
|
+
* `synthesizeCsharpInheritanceReferences` / C++ `emitCppInheritanceCaptures`).
|
|
339
|
+
* Without it, PHP inheritance edges came only from the legacy heritage-capture
|
|
340
|
+
* leg (removed in #942), which the worker pipeline drops for registry-primary
|
|
341
|
+
* languages (issue #1951). See {@link emitPhpDocPropertyBinding} for the other.
|
|
342
|
+
*/
|
|
343
|
+
function synthesizePhpTreeWalkCaptures(root) {
|
|
344
|
+
const inheritance = [];
|
|
345
|
+
const docProperties = [];
|
|
346
|
+
const docPropertyAnchorIds = new Set();
|
|
347
|
+
walkNamedTree(root, (node) => {
|
|
348
|
+
if (node.type === 'class_declaration' || node.type === 'trait_declaration') {
|
|
349
|
+
emitPhpHeritageReferences(node, inheritance);
|
|
350
|
+
}
|
|
351
|
+
else if (node.type === 'property_declaration') {
|
|
352
|
+
emitPhpDocPropertyBinding(node, docProperties, docPropertyAnchorIds);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
return { inheritance, docProperties, docPropertyAnchorIds };
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Emit `@reference.inherits` for the heritage of one `class_declaration` or
|
|
359
|
+
* `trait_declaration`.
|
|
295
360
|
*
|
|
296
361
|
* Scope matches the legacy PHP heritage query (tree-sitter-queries.ts
|
|
297
362
|
* PHP_QUERIES extends / implements / trait-use captures):
|
|
@@ -313,27 +378,20 @@ export function emitPhpScopeCaptures(sourceText, _filePath, cachedTree) {
|
|
|
313
378
|
* || type === 'Trait' ? 'IMPLEMENTS' : 'EXTENDS'`), so `use Trait` resolves to
|
|
314
379
|
* IMPLEMENTS on both the legacy and registry-primary paths.
|
|
315
380
|
*/
|
|
316
|
-
function
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
}
|
|
331
|
-
else if (node.type === 'trait_declaration') {
|
|
332
|
-
// trait-uses-trait: `use OtherTrait;` inside a trait body.
|
|
333
|
-
emitPhpTraitUses(node, out);
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
return out;
|
|
381
|
+
function emitPhpHeritageReferences(node, out) {
|
|
382
|
+
if (node.type === 'class_declaration') {
|
|
383
|
+
// extends: single base_clause child carrying one base name.
|
|
384
|
+
const baseClause = findNamedChild(node, 'base_clause');
|
|
385
|
+
if (baseClause !== null)
|
|
386
|
+
emitPhpBaseNames(baseClause, out);
|
|
387
|
+
// implements: class_interface_clause may list several interfaces.
|
|
388
|
+
const ifaceClause = findNamedChild(node, 'class_interface_clause');
|
|
389
|
+
if (ifaceClause !== null)
|
|
390
|
+
emitPhpBaseNames(ifaceClause, out);
|
|
391
|
+
}
|
|
392
|
+
// trait use: `use TraitName;` inside the class body, and trait-uses-trait:
|
|
393
|
+
// `use OtherTrait;` inside a trait body.
|
|
394
|
+
emitPhpTraitUses(node, out);
|
|
337
395
|
}
|
|
338
396
|
/**
|
|
339
397
|
* Emit `@reference.inherits` for every `use_declaration` (trait use) in the
|
|
@@ -568,22 +626,55 @@ const PHP_PRIMITIVES = new Set([
|
|
|
568
626
|
'parent',
|
|
569
627
|
]);
|
|
570
628
|
/**
|
|
571
|
-
*
|
|
572
|
-
*
|
|
629
|
+
* The comment siblings immediately preceding `node`, in SOURCE order (the
|
|
630
|
+
* nearest comment last), stopping at the first named sibling that is not a
|
|
631
|
+
* comment or a PHP 8+ attribute.
|
|
632
|
+
*
|
|
633
|
+
* The single implementation of that chain walk. Every PHPDoc reader in this
|
|
634
|
+
* file wants the same siblings under the same stop rule — `@param`/`@return` on
|
|
635
|
+
* a method, `@var` for a foreach element type, `@var` for a field type — and
|
|
636
|
+
* three hand-copied walks meant a fix to the stop rule (attributes between the
|
|
637
|
+
* docblock and the declaration, say) could land on one reader and not the
|
|
638
|
+
* others, which shows up as a field typed differently from its own foreach
|
|
639
|
+
* element type.
|
|
573
640
|
*/
|
|
574
|
-
function
|
|
575
|
-
const
|
|
576
|
-
let sibling =
|
|
641
|
+
function precedingCommentSiblings(node) {
|
|
642
|
+
const comments = [];
|
|
643
|
+
let sibling = node.previousSibling;
|
|
577
644
|
while (sibling !== null) {
|
|
578
645
|
if (sibling.type === 'comment') {
|
|
579
|
-
|
|
646
|
+
comments.unshift(sibling);
|
|
580
647
|
}
|
|
581
648
|
else if (sibling.isNamed && !SKIP_SIBLING_TYPES.has(sibling.type)) {
|
|
582
649
|
break;
|
|
583
650
|
}
|
|
584
651
|
sibling = sibling.previousSibling;
|
|
585
652
|
}
|
|
586
|
-
return
|
|
653
|
+
return comments;
|
|
654
|
+
}
|
|
655
|
+
/**
|
|
656
|
+
* First match of `re` over {@link precedingCommentSiblings}, searched from the
|
|
657
|
+
* NEAREST comment outward — a docblock written directly above the declaration
|
|
658
|
+
* wins over one further up, and an earlier comment is still reached when the
|
|
659
|
+
* nearest one carries no such tag.
|
|
660
|
+
*/
|
|
661
|
+
function nearestPrecedingCommentMatch(node, re) {
|
|
662
|
+
const comments = precedingCommentSiblings(node);
|
|
663
|
+
for (let i = comments.length - 1; i >= 0; i--) {
|
|
664
|
+
const m = re.exec(comments[i].text);
|
|
665
|
+
if (m !== null)
|
|
666
|
+
return m;
|
|
667
|
+
}
|
|
668
|
+
return null;
|
|
669
|
+
}
|
|
670
|
+
/**
|
|
671
|
+
* Collect comment text from siblings immediately before `fnNode`.
|
|
672
|
+
* Skips PHP 8+ attribute_list nodes.
|
|
673
|
+
*/
|
|
674
|
+
function collectPrecedingComments(fnNode) {
|
|
675
|
+
return precedingCommentSiblings(fnNode)
|
|
676
|
+
.map((comment) => comment.text)
|
|
677
|
+
.join('\n');
|
|
587
678
|
}
|
|
588
679
|
/**
|
|
589
680
|
* Synthesize PHPDoc @param and @return type-binding captures for a
|
|
@@ -863,27 +954,32 @@ function findClassPropertyElementType(memberAccessNode, fnNode) {
|
|
|
863
954
|
}
|
|
864
955
|
return null;
|
|
865
956
|
}
|
|
866
|
-
/**
|
|
867
|
-
|
|
957
|
+
/**
|
|
958
|
+
* PHPDoc `@var`, with the optional variable name PHPStan/Psalm allow
|
|
959
|
+
* (`@var Repo<User> $repo`). `\S+` for the type deliberately: a docblock type is
|
|
960
|
+
* untyped text and everything past the first space is prose.
|
|
961
|
+
*
|
|
962
|
+
* ONE regex for both readings of the tag. The FIELD type
|
|
963
|
+
* ({@link synthesizePhpDocPropertyBindings}) needs group 2 to tell `@var Repo
|
|
964
|
+
* $other` from `@var Repo`; the foreach ELEMENT type
|
|
965
|
+
* ({@link extractPropertyElementType}) ignores it — and since the trailing group
|
|
966
|
+
* is optional it can never change what group 1 captures, so a second, narrower
|
|
967
|
+
* copy bought nothing but the chance of the two readings of one annotation
|
|
968
|
+
* drifting apart.
|
|
969
|
+
*/
|
|
970
|
+
const PHPDOC_VAR_RE = /@var\s+(\S+)(?:\s+\$(\w+))?/;
|
|
868
971
|
/**
|
|
869
972
|
* Extract element type from a property_declaration node:
|
|
870
973
|
* 1. PHPDoc @var annotation on a preceding comment sibling
|
|
871
974
|
* 2. PHP 7.4+ native type field (non-array)
|
|
872
975
|
*/
|
|
873
976
|
function extractPropertyElementType(propDecl) {
|
|
874
|
-
// Strategy 1: PHPDoc @var on a preceding comment sibling
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
return normalizePhpDocType(m[1]);
|
|
881
|
-
}
|
|
882
|
-
else if (sibling.isNamed && !SKIP_SIBLING_TYPES.has(sibling.type)) {
|
|
883
|
-
break;
|
|
884
|
-
}
|
|
885
|
-
sibling = sibling.previousSibling;
|
|
886
|
-
}
|
|
977
|
+
// Strategy 1: PHPDoc @var on a preceding comment sibling. The `$name` group
|
|
978
|
+
// is not consulted: an element type is asked for by the ONE foreach that
|
|
979
|
+
// already named this property, so a mismatched name cannot mis-attribute it.
|
|
980
|
+
const varTag = nearestPrecedingCommentMatch(propDecl, PHPDOC_VAR_RE);
|
|
981
|
+
if (varTag !== null)
|
|
982
|
+
return normalizePhpDocType(varTag[1]);
|
|
887
983
|
// Strategy 2: native type field — skip generic 'array'
|
|
888
984
|
const typeNode = propDecl.childForFieldName('type');
|
|
889
985
|
if (typeNode === null)
|
|
@@ -893,3 +989,175 @@ function extractPropertyElementType(propDecl) {
|
|
|
893
989
|
return null;
|
|
894
990
|
return normalizePhpDocType(typeName);
|
|
895
991
|
}
|
|
992
|
+
// ─── PHPDoc @var property synthesis ──────────────────────────────────────────
|
|
993
|
+
/**
|
|
994
|
+
* Container spellings that base-name erasure would turn into a PHANTOM class.
|
|
995
|
+
*
|
|
996
|
+
* Erasing `list<User>` to `list` names nothing — PHP has no `list` type — so the
|
|
997
|
+
* binding could only ever bind a user class that happens to be called `list`,
|
|
998
|
+
* i.e. exactly the wrong-edge direction. Every OTHER PHPDoc container erases to
|
|
999
|
+
* a name `normalizePhpType` already rejects as a primitive (`array<int,User>` →
|
|
1000
|
+
* `array`, `iterable<User>` → `iterable`) or to a real class whose methods are
|
|
1001
|
+
* what the field's receiver actually calls (`Collection<User>` → `Collection`,
|
|
1002
|
+
* `Generator<User>` → `Generator`), so this set holds one entry, not a
|
|
1003
|
+
* catalogue.
|
|
1004
|
+
*
|
|
1005
|
+
* Compared CASE-FOLDED, not by listing spellings: a deny-set that must be kept
|
|
1006
|
+
* in sync by vigilance drifts (#2833, the same lesson python/interpret.ts
|
|
1007
|
+
* records for its own reduction).
|
|
1008
|
+
*/
|
|
1009
|
+
const PHPDOC_PHANTOM_CONTAINER_BASES = new Set(['list']);
|
|
1010
|
+
/**
|
|
1011
|
+
* Erase type ARGUMENTS from a docblock type, leaving the base name:
|
|
1012
|
+
* `Repo<User>` → `Repo`, `Repo<Repo<User>>` → `Repo`, `Repo<User>|null` →
|
|
1013
|
+
* `Repo|null`. Bracket-counting rather than a regex so a nested or
|
|
1014
|
+
* multi-argument spelling reduces in one pass; an unbalanced `<` simply
|
|
1015
|
+
* swallows the tail, which is the declining direction.
|
|
1016
|
+
*
|
|
1017
|
+
* NOT the shared `stripTemplateArguments`, and the difference is the UNION:
|
|
1018
|
+
* that one truncates at the first `<`, so `Repo<User>|null` becomes `Repo` and
|
|
1019
|
+
* the nullability is lost with the arguments. A docblock type is the one place
|
|
1020
|
+
* a union survives to the binding — `interpretPhpTypeBinding` runs
|
|
1021
|
+
* `normalizePhpType` over what this returns, and that is what strips `|null`
|
|
1022
|
+
* exactly as it does for a native `Repo|null` property. So a PHP docblock needs
|
|
1023
|
+
* the arguments gone and the rest of the spelling intact, which is a different
|
|
1024
|
+
* operation and not a candidate for a seventh caller of the shared one.
|
|
1025
|
+
*/
|
|
1026
|
+
function erasePhpDocTypeArguments(text) {
|
|
1027
|
+
let out = '';
|
|
1028
|
+
let depth = 0;
|
|
1029
|
+
for (const ch of text) {
|
|
1030
|
+
if (ch === '<')
|
|
1031
|
+
depth++;
|
|
1032
|
+
else if (ch === '>') {
|
|
1033
|
+
if (depth > 0)
|
|
1034
|
+
depth--;
|
|
1035
|
+
}
|
|
1036
|
+
else if (depth === 0)
|
|
1037
|
+
out += ch;
|
|
1038
|
+
}
|
|
1039
|
+
return out;
|
|
1040
|
+
}
|
|
1041
|
+
/**
|
|
1042
|
+
* The type name a property's PHPDoc `@var` should bind the FIELD to, or `null`
|
|
1043
|
+
* to decline.
|
|
1044
|
+
*
|
|
1045
|
+
* Two normalizations happen here and nowhere else, and each is forced:
|
|
1046
|
+
*
|
|
1047
|
+
* 1. TYPE-ARGUMENT ERASURE (`Repo<User>` → `Repo`). Every sibling language in
|
|
1048
|
+
* #2833 lets the as-written spelling reach `TypeRef.rawName` and leaves the
|
|
1049
|
+
* erasure to `resolveClassBindingForName`. PHP cannot: `normalizePhpType`
|
|
1050
|
+
* reduces `X<Y>` to `Y` — the CONTAINER-ELEMENT convention, pinned by
|
|
1051
|
+
* `test/integration/resolvers/php.test.ts` ("normalizePhpType
|
|
1052
|
+
* ('Collection<User>') must yield 'User', not 'Collection'") because the
|
|
1053
|
+
* foreach path depends on it. Measured: passing `Repo<User>` through binds
|
|
1054
|
+
* the field to `User` and `$this->repo->save()` emits `User::save` — a
|
|
1055
|
+
* WRONG edge, not a missing one. So a field's type arguments are erased
|
|
1056
|
+
* HERE, before that rule can read them, and the element convention is left
|
|
1057
|
+
* exactly as it was for `@param` / `@return` / foreach.
|
|
1058
|
+
*
|
|
1059
|
+
* 2. ARRAY DECLINE (`Repo[]` → nothing). A field annotated `Repo[]` holds an
|
|
1060
|
+
* ARRAY; typing it `Repo` is a wrong field type, and the collision is real
|
|
1061
|
+
* rather than theoretical — a repository class with a `find` / `filter` /
|
|
1062
|
+
* `map` method would claim `$this->repos->find(…)`. The element type is
|
|
1063
|
+
* already extracted separately for the one construct that wants it:
|
|
1064
|
+
* `extractPropertyElementType` reads the same `@var` for `foreach
|
|
1065
|
+
* ($this->repos as $r)`. Declining here keeps the two readings of one
|
|
1066
|
+
* annotation from colliding.
|
|
1067
|
+
*
|
|
1068
|
+
* Everything else is delegated: `interpretPhpTypeBinding` applies the SAME
|
|
1069
|
+
* `normalizePhpType` the native typed property (`private Repo $repo;`) goes
|
|
1070
|
+
* through, so nullable (`?Repo`), null-union (`Repo|null`), intersection,
|
|
1071
|
+
* fully-qualified (`\App\Models\Repo`, kept qualified on purpose — see that
|
|
1072
|
+
* function) and every primitive / `mixed` / `self` / `static` rejection behave
|
|
1073
|
+
* identically for the two spellings by construction, not by duplication.
|
|
1074
|
+
*/
|
|
1075
|
+
function phpDocPropertyFieldType(rawType) {
|
|
1076
|
+
const erased = erasePhpDocTypeArguments(rawType).trim();
|
|
1077
|
+
if (erased === '')
|
|
1078
|
+
return null;
|
|
1079
|
+
// Array-of: declined (see 2 above). Checked AFTER erasure so `Repo<User>[]`
|
|
1080
|
+
// is recognised as an array too.
|
|
1081
|
+
if (erased.endsWith('[]'))
|
|
1082
|
+
return null;
|
|
1083
|
+
if (PHPDOC_PHANTOM_CONTAINER_BASES.has(erased.toLowerCase()))
|
|
1084
|
+
return null;
|
|
1085
|
+
return erased;
|
|
1086
|
+
}
|
|
1087
|
+
/**
|
|
1088
|
+
* Emit the field type-binding a PHPDoc `@var` block declares on one UNTYPED
|
|
1089
|
+
* property declaration (`/** @var Repo */ private $repo;`), and record its
|
|
1090
|
+
* anchor id in `anchorIds`.
|
|
1091
|
+
*
|
|
1092
|
+
* PHP's own type story leans on docblocks for everything its native syntax
|
|
1093
|
+
* cannot spell — and generics are exactly that, since `private Repo<User>
|
|
1094
|
+
* $repo;` is a parse error. The native TYPED property already binds via the
|
|
1095
|
+
* `@type-binding.annotation` rule in `query.ts`; measured before this pass, the
|
|
1096
|
+
* docblock form bound NOTHING, so `$this->repo->save()` lost its edge for both
|
|
1097
|
+
* the generic spelling and its non-generic control (#2833).
|
|
1098
|
+
*
|
|
1099
|
+
* The emitted match is byte-identical in SHAPE to what that query rule emits —
|
|
1100
|
+
* `@type-binding.annotation` anchored on the `property_declaration`, with
|
|
1101
|
+
* `@type-binding.name` carrying the `$`-sigilled variable name. That is the
|
|
1102
|
+
* whole design: `interpretPhpTypeBinding` strips the sigil for source
|
|
1103
|
+
* `'annotation'`, `phpBindingScopeFor` places it on the same scope, and the
|
|
1104
|
+
* compound-receiver resolver finds it in `typeBindings` the way it always has.
|
|
1105
|
+
* No resolution-side code changes.
|
|
1106
|
+
*
|
|
1107
|
+
* Declines, each because the annotation cannot be ATTRIBUTED rather than
|
|
1108
|
+
* because the type is unusable:
|
|
1109
|
+
* - a property that already has a native `type:` — the query rule owns it,
|
|
1110
|
+
* and a docblock repeating it must not emit a second, competing binding;
|
|
1111
|
+
* - `private $a, $b;` — one `@var` cannot say which element it types;
|
|
1112
|
+
* - `@var Repo $other` naming a DIFFERENT property than the one it precedes.
|
|
1113
|
+
*/
|
|
1114
|
+
function emitPhpDocPropertyBinding(node, matches, anchorIds) {
|
|
1115
|
+
// A native type hint already produces the binding via query.ts.
|
|
1116
|
+
if (node.childForFieldName('type') !== null)
|
|
1117
|
+
return;
|
|
1118
|
+
const elements = node.namedChildren.filter((c) => c !== null && c.type === 'property_element');
|
|
1119
|
+
if (elements.length !== 1)
|
|
1120
|
+
return;
|
|
1121
|
+
const varNameNode = elements[0].childForFieldName('name') ?? elements[0].firstNamedChild;
|
|
1122
|
+
if (varNameNode === null || varNameNode.type !== 'variable_name')
|
|
1123
|
+
return;
|
|
1124
|
+
const raw = findPhpDocVarTag(node);
|
|
1125
|
+
if (raw === null)
|
|
1126
|
+
return;
|
|
1127
|
+
// `@var Repo $other` on `private $repo;` types neither — decline.
|
|
1128
|
+
if (raw.varName !== undefined && '$' + raw.varName !== varNameNode.text)
|
|
1129
|
+
return;
|
|
1130
|
+
const typeName = phpDocPropertyFieldType(raw.type);
|
|
1131
|
+
if (typeName === null)
|
|
1132
|
+
return;
|
|
1133
|
+
anchorIds.add(node.id);
|
|
1134
|
+
matches.push({
|
|
1135
|
+
'@type-binding.annotation': nodeToCapture('@type-binding.annotation', node),
|
|
1136
|
+
'@type-binding.name': syntheticCapture('@type-binding.name', varNameNode, varNameNode.text),
|
|
1137
|
+
'@type-binding.type': syntheticCapture('@type-binding.type', varNameNode, typeName),
|
|
1138
|
+
});
|
|
1139
|
+
// …and the FIELD declaration, which the native rule emits as its own
|
|
1140
|
+
// separate match. Without it the property stays a `@declaration.variable`
|
|
1141
|
+
// named `$repo` — a Variable, not a class-owned member — and the type
|
|
1142
|
+
// binding alone is not enough: measured, `$this->repo->save()` resolved
|
|
1143
|
+
// while `save` was unique to one class and went UNRESOLVED as soon as a
|
|
1144
|
+
// second class declared a `save`, because narrowing a same-named method
|
|
1145
|
+
// needs the receiver's member to be owned. The native typed property
|
|
1146
|
+
// resolved the identical file. The `$` is stripped for the same reason it
|
|
1147
|
+
// is on the native path: PHP stores field names unsigilled so `$obj->repo`
|
|
1148
|
+
// looks up `repo`.
|
|
1149
|
+
matches.push({
|
|
1150
|
+
'@declaration.property': nodeToCapture('@declaration.property', node),
|
|
1151
|
+
'@declaration.name': syntheticCapture('@declaration.name', varNameNode, varNameNode.text.replace(/^\$/, '')),
|
|
1152
|
+
});
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* The `@var` tag on the comment siblings immediately preceding `propDecl` —
|
|
1156
|
+
* the same chain, the same regex and the same nearest-first order
|
|
1157
|
+
* `extractPropertyElementType` reads the tag through, so the two readings of
|
|
1158
|
+
* one annotation cannot disagree about WHICH annotation they read.
|
|
1159
|
+
*/
|
|
1160
|
+
function findPhpDocVarTag(propDecl) {
|
|
1161
|
+
const m = nearestPrecedingCommentMatch(propDecl, PHPDOC_VAR_RE);
|
|
1162
|
+
return m === null ? null : { type: m[1], varName: m[2] };
|
|
1163
|
+
}
|
|
@@ -16,15 +16,14 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type { ParsedImport, WorkspaceIndex } from '../../../../_shared/index.js';
|
|
18
18
|
import type { ImportResolutionContext } from '../../scope-resolution/contract/scope-resolver.js';
|
|
19
|
-
import type
|
|
19
|
+
import { type ComposerConfig } from '../../language-config.js';
|
|
20
20
|
export interface PhpResolveContext {
|
|
21
21
|
readonly fromFile: string;
|
|
22
22
|
readonly allFilePaths: ReadonlySet<string>;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Load and parse `composer.json`
|
|
26
|
-
*
|
|
27
|
-
* `null` when no `composer.json` is present or it cannot be parsed.
|
|
25
|
+
* Load and parse repository and package-local `composer.json` manifests.
|
|
26
|
+
* Package mappings are rebased to repository-relative paths before merging.
|
|
28
27
|
*
|
|
29
28
|
* The result is threaded into each `resolvePhpImportInternal` call as
|
|
30
29
|
* the `composerConfig` argument.
|