cgraphx 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.claude-template/FLOW-MAP.md +7 -5
- package/dist/.claude-template/commands/end.md +1 -1
- package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +2 -1
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +4 -2
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.md +5 -2
- package/dist/.claude-template/skills/iboc-check/SKILL.md +116 -0
- package/dist/.claude-template/skills/iboc-check/filler-prompt.md +75 -0
- package/dist/.claude-template/skills/implementation/SKILL.md +7 -0
- package/dist/.claude-template/skills/init-project-guides/SKILL.md +1 -1
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +2 -2
- package/dist/.claude-template/skills/subagent-implement/SKILL.md +3 -2
- package/dist/.claude-template/skills/write-api/assets/template-request.bru +3 -3
- package/dist/.claude-template/skills/write-api/references/bru-format.md +6 -6
- package/dist/.claude-template/skills/write-delivery-guide/SKILL.md +97 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-change-type.md +120 -0
- package/dist/.claude-template/skills/write-delivery-guide/template-multi-role-flow.md +148 -0
- package/dist/.claude-template/skills/write-unit-test-code/SKILL.md +23 -6
- package/dist/core/code/engine/cli/analyze-config.js +320 -0
- package/dist/core/code/engine/cli/analyze.js +1086 -0
- package/dist/core/code/engine/cli/cli-message.js +83 -0
- package/dist/core/code/engine/cli/detect-changes-format.js +58 -0
- package/dist/core/code/engine/cli/embedding-dims.js +43 -0
- package/dist/core/code/engine/cli/format-elapsed.js +12 -0
- package/dist/core/code/engine/cli/help-i18n.js +144 -0
- package/dist/core/code/engine/cli/i18n/en.js +110 -0
- package/dist/core/code/engine/cli/i18n/index.js +47 -0
- package/dist/core/code/engine/cli/i18n/resources.js +9 -0
- package/dist/core/code/engine/cli/i18n/zh-CN.js +110 -0
- package/dist/core/code/engine/cli/lazy-action.js +67 -0
- package/dist/core/code/engine/cli/optional-grammars.js +136 -0
- package/dist/core/code/engine/cli/resolve-invocation.js +76 -0
- package/dist/core/code/engine/cli/status.js +156 -0
- package/dist/core/code/engine/cli/tool.js +384 -0
- package/dist/core/code/engine/config/ignore-service.js +511 -0
- package/dist/core/code/engine/config/supported-languages.js +17 -0
- package/dist/core/code/engine/core/analysis-features.js +64 -0
- package/dist/core/code/engine/core/analyzer-identity.js +2171 -0
- package/dist/core/code/engine/core/git-staleness.js +180 -0
- package/dist/core/code/engine/core/graph/graph.js +180 -0
- package/dist/core/code/engine/core/graph/import-cycles.js +106 -0
- package/dist/core/code/engine/core/graph/types.js +2 -0
- package/dist/core/code/engine/core/index-freshness.js +12 -0
- package/dist/core/code/engine/core/ingestion/binding-accumulator.js +341 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/c-cpp.js +168 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/csharp.js +9 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/dart.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/go.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/jvm.js +54 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/php.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/python.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/ruby.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/rust.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/swift.js +8 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/configs/typescript-javascript.js +11 -0
- package/dist/core/code/engine/core/ingestion/call-extractors/generic.js +62 -0
- package/dist/core/code/engine/core/ingestion/call-processor.js +503 -0
- package/dist/core/code/engine/core/ingestion/call-routing.js +98 -0
- package/dist/core/code/engine/core/ingestion/call-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/cfg/callee-cell-format.js +45 -0
- package/dist/core/code/engine/core/ingestion/cfg/cfg-builder.js +202 -0
- package/dist/core/code/engine/core/ingestion/cfg/collect.js +81 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-dependence.js +185 -0
- package/dist/core/code/engine/core/ingestion/cfg/control-flow-context.js +130 -0
- package/dist/core/code/engine/core/ingestion/cfg/emit.js +646 -0
- package/dist/core/code/engine/core/ingestion/cfg/post-dominators.js +182 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-def-reason-codec.js +139 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs-graph.js +322 -0
- package/dist/core/code/engine/core/ingestion/cfg/reaching-defs.js +792 -0
- package/dist/core/code/engine/core/ingestion/cfg/synthetic-escape.js +305 -0
- package/dist/core/code/engine/core/ingestion/cfg/traversal-result.js +6 -0
- package/dist/core/code/engine/core/ingestion/cfg/types.js +14 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp-harvest.js +545 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/c-cpp.js +590 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/call-site-harvest.js +356 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp-harvest.js +593 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/csharp.js +871 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart-harvest.js +874 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/dart.js +840 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go-harvest.js +625 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/go.js +642 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java-harvest.js +517 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/java.js +816 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin-harvest.js +723 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/kotlin.js +813 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php-harvest.js +630 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/php.js +725 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python-harvest.js +776 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/python.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby-harvest.js +591 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/ruby.js +760 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust-harvest.js +877 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/rust.js +562 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/scope-tree-harvest.js +120 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift-harvest.js +683 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/swift.js +791 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript-harvest.js +1060 -0
- package/dist/core/code/engine/core/ingestion/cfg/visitors/typescript.js +587 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/c-cpp.js +77 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/csharp.js +24 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/dart.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/go.js +28 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/jvm.js +67 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/php.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/python.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/ruby.js +13 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/rust.js +10 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/swift.js +21 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/configs/typescript-javascript.js +31 -0
- package/dist/core/code/engine/core/ingestion/class-extractors/generic.js +144 -0
- package/dist/core/code/engine/core/ingestion/class-types.js +2 -0
- package/dist/core/code/engine/core/ingestion/cluster-enricher.js +174 -0
- package/dist/core/code/engine/core/ingestion/community-processor.js +604 -0
- package/dist/core/code/engine/core/ingestion/constants.js +26 -0
- package/dist/core/code/engine/core/ingestion/cpp-ue-preprocessor.js +263 -0
- package/dist/core/code/engine/core/ingestion/csharp-namespace-gate.js +133 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/index.js +38 -0
- package/dist/core/code/engine/core/ingestion/di-extractors/spring.js +310 -0
- package/dist/core/code/engine/core/ingestion/emit-references.js +244 -0
- package/dist/core/code/engine/core/ingestion/entry-point-scoring.js +201 -0
- package/dist/core/code/engine/core/ingestion/export-detection.js +244 -0
- package/dist/core/code/engine/core/ingestion/field-extractor.js +29 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/c-cpp.js +107 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/csharp.js +124 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/dart.js +99 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/go.js +102 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/helpers.js +198 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/jvm.js +172 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/php.js +67 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/python.js +94 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/ruby.js +79 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/rust.js +55 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/swift.js +93 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/configs/typescript-javascript.js +59 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/generic.js +147 -0
- package/dist/core/code/engine/core/ingestion/field-extractors/typescript.js +266 -0
- package/dist/core/code/engine/core/ingestion/field-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/filesystem-walker.js +136 -0
- package/dist/core/code/engine/core/ingestion/finalize-orchestrator.js +159 -0
- package/dist/core/code/engine/core/ingestion/framework-detection.js +432 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/analysis-features.js +38 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/annotation-arguments.js +234 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop-candidates.js +88 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/aop.js +487 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/auto-configuration.js +21 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-candidates.js +189 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-catalog.js +32 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/bean-factories.js +73 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/conditionals.js +323 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/config-bindings.js +119 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/di-metadata.js +385 -0
- package/dist/core/code/engine/core/ingestion/frameworks/spring/resource-injection.js +96 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/c-cpp.js +17 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/csharp.js +46 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/dart.js +59 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/go.js +30 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/jvm.js +73 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/php.js +19 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/python.js +45 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/rust.js +58 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/swift.js +94 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/configs/typescript-javascript.js +26 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/csharp.js +128 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/go.js +50 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/jvm.js +112 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/php.js +80 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/python.js +75 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/resolver-factory.js +36 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/ruby.js +20 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/standard.js +180 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/types.js +7 -0
- package/dist/core/code/engine/core/ingestion/import-resolvers/utils.js +153 -0
- package/dist/core/code/engine/core/ingestion/import-target-adapter.js +99 -0
- package/dist/core/code/engine/core/ingestion/language-config.js +391 -0
- package/dist/core/code/engine/core/ingestion/language-provider.js +25 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity-metadata.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/c/arity.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/c/capture-side-channel.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/c/captures.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/c/header-scan.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-decomposer.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/c/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/c/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/c/interpret.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/c/merge-bindings.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/c/query.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/c/scope-resolver.js +112 -0
- package/dist/core/code/engine/core/ingestion/languages/c/simple-hooks.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/c/static-linkage.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/c-cpp.js +506 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/adl.js +804 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity-metadata.js +258 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/arity.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/capture-side-channel.js +89 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/captures.js +1975 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-extractor.js +311 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/constraint-filter.js +210 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/conversion-rank.js +163 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/file-local-linkage.js +327 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/header-scan.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-decomposer.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/import-target.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/index.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/inline-namespaces.js +379 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/interpret.js +239 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/member-lookup.js +470 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/merge-bindings.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/query.js +763 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/range-bindings.js +230 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/scope-resolver.js +354 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/simple-hooks.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/two-phase-lookup.js +348 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/type-classifier.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/cpp/user-defined-conversions.js +128 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/accessor-unwrap.js +67 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/arity.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/captures.js +557 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-decomposer.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/import-target.js +176 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/index.js +95 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/interpret.js +150 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/merge-bindings.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/namespace-siblings.js +708 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/qualified-type-names.js +62 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/query.js +578 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/receiver-binding.js +142 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/resolution-config.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/scope-resolver.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp/simple-hooks.js +81 -0
- package/dist/core/code/engine/core/ingestion/languages/csharp.js +204 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity-metadata.js +38 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/arity.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/built-ins.js +37 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/cache-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/captures.js +1096 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/expand-wildcards.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/extension-type-preprocess.js +33 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/import-target.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/index.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/interpret.js +101 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/merge-bindings.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/query.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/receiver-binding.js +90 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/scope-resolver.js +197 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/signature-bindings.js +54 -0
- package/dist/core/code/engine/core/ingestion/languages/dart/simple-hooks.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/dart.js +138 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity-metadata.js +71 -0
- package/dist/core/code/engine/core/ingestion/languages/go/arity.js +17 -0
- package/dist/core/code/engine/core/ingestion/languages/go/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/captures.js +492 -0
- package/dist/core/code/engine/core/ingestion/languages/go/expand-wildcards.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/go/generic-type-parameters.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-decomposer.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/go/import-target.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/go/index.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interface-impls.js +955 -0
- package/dist/core/code/engine/core/ingestion/languages/go/interpret.js +177 -0
- package/dist/core/code/engine/core/ingestion/languages/go/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/go/method-owners.js +131 -0
- package/dist/core/code/engine/core/ingestion/languages/go/namespace-mirror.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-clause.js +79 -0
- package/dist/core/code/engine/core/ingestion/languages/go/package-siblings.js +83 -0
- package/dist/core/code/engine/core/ingestion/languages/go/query.js +298 -0
- package/dist/core/code/engine/core/ingestion/languages/go/range-binding.js +127 -0
- package/dist/core/code/engine/core/ingestion/languages/go/receiver-binding.js +24 -0
- package/dist/core/code/engine/core/ingestion/languages/go/scope-resolver.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/go/simple-hooks.js +31 -0
- package/dist/core/code/engine/core/ingestion/languages/go/type-binding.js +279 -0
- package/dist/core/code/engine/core/ingestion/languages/go.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/index.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/java/analysis-features.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity-metadata.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/arity.js +27 -0
- package/dist/core/code/engine/core/ingestion/languages/java/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/java/capture-side-channel.js +123 -0
- package/dist/core/code/engine/core/ingestion/languages/java/captures.js +791 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-decomposer.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/java/import-target.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/java/index.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/interpret.js +146 -0
- package/dist/core/code/engine/core/ingestion/languages/java/merge-bindings.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/java/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/query.js +319 -0
- package/dist/core/code/engine/core/ingestion/languages/java/receiver-binding.js +98 -0
- package/dist/core/code/engine/core/ingestion/languages/java/scope-resolver.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/java/simple-hooks.js +39 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-aop.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-conditionals.js +52 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-config-bindings.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/java/spring-di.js +165 -0
- package/dist/core/code/engine/core/ingestion/languages/java.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/arity.js +15 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/captures.js +1122 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/import-target.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/index.js +109 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/interpret.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/query.js +659 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/scope-resolver.js +78 -0
- package/dist/core/code/engine/core/ingestion/languages/javascript/simple-hooks.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-facts.js +46 -0
- package/dist/core/code/engine/core/ingestion/languages/jvm/package-siblings.js +200 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity-metadata.js +23 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/arity.js +18 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/capture-side-channel.js +160 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/captures.js +1262 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/companion-scopes.js +72 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-decomposer.js +40 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/import-target.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/index.js +26 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/interpret.js +75 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/merge-bindings.js +28 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/owners.js +134 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-facts.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/package-siblings.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/query.js +243 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/receiver-binding.js +103 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/scope-resolver.js +207 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/simple-hooks.js +42 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-aop.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-bean-metadata.js +11 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-conditionals.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin/spring-di.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/kotlin.js +189 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity-metadata.js +66 -0
- package/dist/core/code/engine/core/ingestion/languages/php/arity.js +43 -0
- package/dist/core/code/engine/core/ingestion/languages/php/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/php/captures.js +1166 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-decomposer.js +238 -0
- package/dist/core/code/engine/core/ingestion/languages/php/import-target.js +213 -0
- package/dist/core/code/engine/core/ingestion/languages/php/index.js +85 -0
- package/dist/core/code/engine/core/ingestion/languages/php/interpret.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/php/merge-bindings.js +50 -0
- package/dist/core/code/engine/core/ingestion/languages/php/namespace-siblings.js +353 -0
- package/dist/core/code/engine/core/ingestion/languages/php/query.js +391 -0
- package/dist/core/code/engine/core/ingestion/languages/php/receiver-binding.js +135 -0
- package/dist/core/code/engine/core/ingestion/languages/php/scope-resolver.js +361 -0
- package/dist/core/code/engine/core/ingestion/languages/php/simple-hooks.js +116 -0
- package/dist/core/code/engine/core/ingestion/languages/php.js +302 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity-metadata.js +49 -0
- package/dist/core/code/engine/core/ingestion/languages/python/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/python/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/python/captures.js +299 -0
- package/dist/core/code/engine/core/ingestion/languages/python/depends-references.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-decomposer.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/python/import-target.js +440 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index-stats.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/python/index.js +96 -0
- package/dist/core/code/engine/core/ingestion/languages/python/interpret.js +430 -0
- package/dist/core/code/engine/core/ingestion/languages/python/merge-bindings.js +47 -0
- package/dist/core/code/engine/core/ingestion/languages/python/query.js +323 -0
- package/dist/core/code/engine/core/ingestion/languages/python/receiver-binding.js +310 -0
- package/dist/core/code/engine/core/ingestion/languages/python/scope-resolver.js +80 -0
- package/dist/core/code/engine/core/ingestion/languages/python/simple-hooks.js +53 -0
- package/dist/core/code/engine/core/ingestion/languages/python.js +140 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/arity.js +41 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/captures.js +864 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/import-target.js +88 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/interpret.js +115 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/query.js +349 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/receiver-binding.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/scope-resolver.js +263 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby/simple-hooks.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/ruby.js +215 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/arity.js +16 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/cache-stats.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/captures.js +304 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-decomposer.js +167 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/import-target.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/index.js +29 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/interpret.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/merge-bindings.js +21 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/method-owners.js +76 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/module-path.js +222 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/qualified-call.js +482 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/query.js +280 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/range-binding.js +687 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/receiver-binding.js +148 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/scope-resolver.js +151 -0
- package/dist/core/code/engine/core/ingestion/languages/rust/simple-hooks.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/rust.js +183 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity-metadata.js +44 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/arity.js +45 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/base-type.js +30 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/cache-stats.js +32 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/captures.js +594 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/conditional-directive-preprocess.js +256 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/implicit-imports.js +60 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-decomposer.js +87 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/import-target.js +84 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/index.js +56 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/interpret.js +93 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/merge-bindings.js +51 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/query.js +226 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/receiver-binding.js +169 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/scope-resolver.js +192 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/sibling-type-bindings.js +68 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/signature-bindings.js +69 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/simple-hooks.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-grouping.js +97 -0
- package/dist/core/code/engine/core/ingestion/languages/swift/target-siblings.js +74 -0
- package/dist/core/code/engine/core/ingestion/languages/swift.js +246 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity-metadata.js +106 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/arity.js +57 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/array-callback.js +58 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cache-stats.js +34 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/captures.js +956 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-export-assignment.js +535 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/cjs-module-exports.js +196 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-decomposer.js +374 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/import-target.js +65 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/index.js +108 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/interpret.js +344 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/merge-bindings.js +161 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/nuxt-auto-imports.js +325 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/query.js +1328 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/receiver-binding.js +201 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/scope-resolver.js +293 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript/simple-hooks.js +139 -0
- package/dist/core/code/engine/core/ingestion/languages/typescript.js +455 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/captures.js +70 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/import-target.js +61 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/index.js +55 -0
- package/dist/core/code/engine/core/ingestion/languages/vue/scope-resolver.js +295 -0
- package/dist/core/code/engine/core/ingestion/languages/vue.js +96 -0
- package/dist/core/code/engine/core/ingestion/local-symbol-pruner.js +68 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/c-cpp.js +387 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/csharp.js +290 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/dart.js +392 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/go.js +179 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/jvm.js +350 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/php.js +306 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/python.js +312 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/ruby.js +289 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/rust.js +198 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/swift.js +286 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/configs/typescript-javascript.js +341 -0
- package/dist/core/code/engine/core/ingestion/method-extractors/generic.js +209 -0
- package/dist/core/code/engine/core/ingestion/method-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/model/field-registry.js +41 -0
- package/dist/core/code/engine/core/ingestion/model/index.js +52 -0
- package/dist/core/code/engine/core/ingestion/model/method-registry.js +138 -0
- package/dist/core/code/engine/core/ingestion/model/owned-members-lookup.js +46 -0
- package/dist/core/code/engine/core/ingestion/model/registration-table.js +234 -0
- package/dist/core/code/engine/core/ingestion/model/resolve.js +183 -0
- package/dist/core/code/engine/core/ingestion/model/scope-resolution-indexes.js +43 -0
- package/dist/core/code/engine/core/ingestion/model/semantic-model.js +179 -0
- package/dist/core/code/engine/core/ingestion/model/symbol-table.js +216 -0
- package/dist/core/code/engine/core/ingestion/model/type-registry.js +84 -0
- package/dist/core/code/engine/core/ingestion/mro-processor.js +709 -0
- package/dist/core/code/engine/core/ingestion/parsing-processor.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/communities.js +69 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/cross-file.js +71 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/di.js +338 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/http-api-calls.js +312 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/index.js +54 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/mro.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/orm.js +78 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse-impl.js +1286 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/parse.js +41 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/processes.js +193 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/prune-local-symbols.js +29 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/registry.js +52 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/routes.js +409 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/rpc-edges.js +301 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/runner.js +207 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/scan.js +49 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-aop.js +442 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-auto-configuration.js +264 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/spring-config.js +440 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/structure.js +38 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/tools.js +89 -0
- package/dist/core/code/engine/core/ingestion/pipeline-phases/types.js +40 -0
- package/dist/core/code/engine/core/ingestion/pipeline.js +152 -0
- package/dist/core/code/engine/core/ingestion/process-processor.js +325 -0
- package/dist/core/code/engine/core/ingestion/resolve-references.js +205 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/constant-resolver.js +135 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django-root-discovery.js +221 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/django.js +428 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/expo.js +39 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/fastapi-router-bindings.js +264 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/laravel.js +501 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/middleware.js +175 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/nextjs.js +81 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/php.js +25 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/python-const-resolver.js +307 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/response-shapes.js +299 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/route-path.js +71 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring-shared.js +310 -0
- package/dist/core/code/engine/core/ingestion/route-extractors/spring.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor-bridge.js +60 -0
- package/dist/core/code/engine/core/ingestion/scope-extractor.js +1373 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/contract/scope-resolver.js +282 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +72 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/edges.js +194 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/ids.js +472 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/method-dispatch.js +43 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +274 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +93 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/callable-value-flow.js +1240 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/compound-receiver.js +1174 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/free-call-fallback.js +873 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/imported-return-types.js +226 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/mro.js +107 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/overload-narrowing.js +441 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/property-dispatch.js +122 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1720 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/phase.js +395 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/reconcile-ownership.js +208 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/registry.js +49 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/run.js +632 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/pipeline/validate-bindings-immutability.js +112 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/resolution-outcome.js +41 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/namespace-targets.js +81 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/scope/walkers.js +1835 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/unresolved-receivers.js +242 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/utils/definition-id.js +22 -0
- package/dist/core/code/engine/core/ingestion/scope-resolution/workspace-index.js +151 -0
- package/dist/core/code/engine/core/ingestion/structure-processor.js +40 -0
- package/dist/core/code/engine/core/ingestion/tree-sitter-queries.js +2244 -0
- package/dist/core/code/engine/core/ingestion/ts-js-hoc-utils.js +115 -0
- package/dist/core/code/engine/core/ingestion/type-env.js +1136 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/c-cpp.js +555 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/csharp.js +570 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/dart.js +372 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/go.js +508 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/jvm.js +875 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/php.js +537 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/python.js +477 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/ruby.js +380 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/rust.js +502 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/shared.js +843 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/swift.js +490 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/types.js +2 -0
- package/dist/core/code/engine/core/ingestion/type-extractors/typescript.js +690 -0
- package/dist/core/code/engine/core/ingestion/utils/ast-helpers.js +1693 -0
- package/dist/core/code/engine/core/ingestion/utils/call-analysis.js +779 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-flow-captures.js +932 -0
- package/dist/core/code/engine/core/ingestion/utils/callable-labels.js +49 -0
- package/dist/core/code/engine/core/ingestion/utils/deferred-resolution-profile.js +151 -0
- package/dist/core/code/engine/core/ingestion/utils/effective-ram.js +67 -0
- package/dist/core/code/engine/core/ingestion/utils/env.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/event-loop.js +9 -0
- package/dist/core/code/engine/core/ingestion/utils/graph-sort.js +103 -0
- package/dist/core/code/engine/core/ingestion/utils/heap-probe.js +45 -0
- package/dist/core/code/engine/core/ingestion/utils/heritage-marker.js +47 -0
- package/dist/core/code/engine/core/ingestion/utils/line-base.js +24 -0
- package/dist/core/code/engine/core/ingestion/utils/max-file-size.js +59 -0
- package/dist/core/code/engine/core/ingestion/utils/method-props.js +198 -0
- package/dist/core/code/engine/core/ingestion/utils/qualified-name.js +73 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-captures.js +60 -0
- package/dist/core/code/engine/core/ingestion/utils/receiver-chain-codec.js +188 -0
- package/dist/core/code/engine/core/ingestion/utils/scope-tree-walk.js +36 -0
- package/dist/core/code/engine/core/ingestion/utils/symbol-labels.js +48 -0
- package/dist/core/code/engine/core/ingestion/utils/template-arguments.js +187 -0
- package/dist/core/code/engine/core/ingestion/utils/type-parameters.js +209 -0
- package/dist/core/code/engine/core/ingestion/utils/verbose.js +6 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/c-cpp.js +133 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/csharp.js +66 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/dart.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/go.js +153 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/jvm.js +145 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/php.js +61 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/python.js +104 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/ruby.js +55 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/rust.js +79 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/swift.js +91 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/configs/typescript-javascript.js +86 -0
- package/dist/core/code/engine/core/ingestion/variable-extractors/generic.js +111 -0
- package/dist/core/code/engine/core/ingestion/variable-types.js +3 -0
- package/dist/core/code/engine/core/ingestion/vue-sfc-extractor.js +544 -0
- package/dist/core/code/engine/core/ingestion/workers/callable-id.js +122 -0
- package/dist/core/code/engine/core/ingestion/workers/clone-safety.js +470 -0
- package/dist/core/code/engine/core/ingestion/workers/parse-worker.js +2456 -0
- package/dist/core/code/engine/core/ingestion/workers/post-result.js +90 -0
- package/dist/core/code/engine/core/ingestion/workers/quarantine.js +41 -0
- package/dist/core/code/engine/core/ingestion/workers/result-merge.js +59 -0
- package/dist/core/code/engine/core/ingestion/workers/worker-pool.js +1725 -0
- package/dist/core/code/engine/core/ingestion/workspace-config.js +139 -0
- package/dist/core/code/engine/core/lbug/conn-lock.js +72 -0
- package/dist/core/code/engine/core/lbug/csv-generator.js +710 -0
- package/dist/core/code/engine/core/lbug/cypher-escape.js +24 -0
- package/dist/core/code/engine/core/lbug/extension-load-error.js +339 -0
- package/dist/core/code/engine/core/lbug/extension-loader.js +261 -0
- package/dist/core/code/engine/core/lbug/graph-emit-sink.js +584 -0
- package/dist/core/code/engine/core/lbug/lbug-adapter.js +2703 -0
- package/dist/core/code/engine/core/lbug/lbug-config.js +1029 -0
- package/dist/core/code/engine/core/lbug/native-check.js +435 -0
- package/dist/core/code/engine/core/lbug/pool-adapter.js +973 -0
- package/dist/core/code/engine/core/lbug/query-params.js +25 -0
- package/dist/core/code/engine/core/lbug/query-result-utils.js +31 -0
- package/dist/core/code/engine/core/lbug/rel-pair-routing.js +373 -0
- package/dist/core/code/engine/core/lbug/schema.js +771 -0
- package/dist/core/code/engine/core/lbug/shutdown-helpers.js +40 -0
- package/dist/core/code/engine/core/lbug/sidecar-recovery.js +716 -0
- package/dist/core/code/engine/core/lbug/stdio-capture.js +49 -0
- package/dist/core/code/engine/core/lbug/sync-csv-writer.js +115 -0
- package/dist/core/code/engine/core/lbug/wal-checkpoint-driver.js +215 -0
- package/dist/core/code/engine/core/lbug/wal-driver-state.js +28 -0
- package/dist/core/code/engine/core/logger.js +339 -0
- package/dist/core/code/engine/core/platform/capabilities.js +91 -0
- package/dist/core/code/engine/core/run-analyze.js +1098 -0
- package/dist/core/code/engine/core/tree-sitter/parser-loader.js +281 -0
- package/dist/core/code/engine/core/tree-sitter/safe-parse.js +258 -0
- package/dist/core/code/engine/core/tree-sitter/vendored-grammars.js +64 -0
- package/dist/core/code/engine/lib/utils.js +121 -0
- package/dist/core/code/engine/mcp/core/lbug-adapter.js +27 -0
- package/dist/core/code/engine/mcp/local/aop-metadata.js +230 -0
- package/dist/core/code/engine/mcp/local/bean-metadata.js +49 -0
- package/dist/core/code/engine/mcp/local/limits.js +15 -0
- package/dist/core/code/engine/mcp/local/line-display.js +6 -0
- package/dist/core/code/engine/mcp/local/local-backend.js +4142 -0
- package/dist/core/code/engine/storage/branch-index.js +72 -0
- package/dist/core/code/engine/storage/file-hash.js +95 -0
- package/dist/core/code/engine/storage/fs-atomic.js +34 -0
- package/dist/core/code/engine/storage/git.js +555 -0
- package/dist/core/code/engine/storage/index-lock.js +664 -0
- package/dist/core/code/engine/storage/parse-cache.js +650 -0
- package/dist/core/code/engine/storage/parsedfile-store.js +620 -0
- package/dist/core/code/engine/storage/repo-manager.js +1061 -0
- package/dist/core/code/engine/storage/scope-index-store.js +247 -0
- package/dist/core/code/engine/types/pipeline.js +2 -0
- package/dist/core/code/scripts/install-duckdb-extension.mjs +125 -0
- package/dist/core/code/scripts/resolve-analyze-cmd.cjs +346 -0
- package/dist/core/code/shared/graph/types.js +8 -0
- package/dist/core/code/shared/index.js +105 -0
- package/dist/core/code/shared/integrations/circuit-breaker.js +242 -0
- package/dist/core/code/shared/integrations/resilient-fetch.js +224 -0
- package/dist/core/code/shared/integrations/retry.js +70 -0
- package/dist/core/code/shared/integrations/understand-quickly.js +145 -0
- package/dist/core/code/shared/language-detection.js +162 -0
- package/dist/core/code/shared/languages.js +27 -0
- package/dist/core/code/shared/lbug/schema-constants.js +98 -0
- package/dist/core/code/shared/mro-strategy.js +2 -0
- package/dist/core/code/shared/pipeline.js +5 -0
- package/dist/core/code/shared/scope-resolution/callable-flow-site.js +11 -0
- package/dist/core/code/shared/scope-resolution/def-index.js +53 -0
- package/dist/core/code/shared/scope-resolution/evidence-weights.js +87 -0
- package/dist/core/code/shared/scope-resolution/finalize-algorithm.js +807 -0
- package/dist/core/code/shared/scope-resolution/language-classification.js +46 -0
- package/dist/core/code/shared/scope-resolution/method-dispatch-index.js +100 -0
- package/dist/core/code/shared/scope-resolution/module-scope-index.js +59 -0
- package/dist/core/code/shared/scope-resolution/origin-priority.js +23 -0
- package/dist/core/code/shared/scope-resolution/parsed-file.js +54 -0
- package/dist/core/code/shared/scope-resolution/position-index.js +136 -0
- package/dist/core/code/shared/scope-resolution/qualified-name-index.js +77 -0
- package/dist/core/code/shared/scope-resolution/reference-site.js +24 -0
- package/dist/core/code/shared/scope-resolution/registries/class-registry.js +32 -0
- package/dist/core/code/shared/scope-resolution/registries/context.js +52 -0
- package/dist/core/code/shared/scope-resolution/registries/evidence.js +152 -0
- package/dist/core/code/shared/scope-resolution/registries/field-registry.js +33 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-core.js +392 -0
- package/dist/core/code/shared/scope-resolution/registries/lookup-qualified.js +58 -0
- package/dist/core/code/shared/scope-resolution/registries/macro-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/method-registry.js +34 -0
- package/dist/core/code/shared/scope-resolution/registries/tie-breaks.js +63 -0
- package/dist/core/code/shared/scope-resolution/resolve-type-ref.js +128 -0
- package/dist/core/code/shared/scope-resolution/scope-id.js +49 -0
- package/dist/core/code/shared/scope-resolution/scope-tree.js +225 -0
- package/dist/core/code/shared/scope-resolution/symbol-definition.js +12 -0
- package/dist/core/code/shared/scope-resolution/types.js +25 -0
- package/dist/core/code/shared/test-helpers.js +17 -0
- package/dist/core/code/vendor/leiden/index.cjs +355 -0
- package/dist/core/code/vendor/leiden/utils.cjs +419 -0
- package/dist/core/features/scanner.d.ts +2 -0
- package/dist/core/features/scanner.d.ts.map +1 -1
- package/dist/core/features/scanner.js +27 -6
- package/dist/core/features/scanner.js.map +1 -1
- package/dist/core/timeline/cli.d.ts.map +1 -1
- package/dist/core/timeline/cli.js +13 -6
- package/dist/core/timeline/cli.js.map +1 -1
- package/dist/core/timeline/debris.d.ts +20 -0
- package/dist/core/timeline/debris.d.ts.map +1 -0
- package/dist/core/timeline/debris.js +124 -0
- package/dist/core/timeline/debris.js.map +1 -0
- package/dist/core/timeline/hook-runner.d.ts.map +1 -1
- package/dist/core/timeline/hook-runner.js +3 -1
- package/dist/core/timeline/hook-runner.js.map +1 -1
- package/dist/core/timeline/hooks.d.ts.map +1 -1
- package/dist/core/timeline/hooks.js +13 -5
- package/dist/core/timeline/hooks.js.map +1 -1
- package/dist/core/timeline/installer.d.ts +2 -0
- package/dist/core/timeline/installer.d.ts.map +1 -1
- package/dist/core/timeline/installer.js +12 -0
- package/dist/core/timeline/installer.js.map +1 -1
- package/dist/core/timeline/project-root.d.ts +21 -0
- package/dist/core/timeline/project-root.d.ts.map +1 -0
- package/dist/core/timeline/project-root.js +83 -0
- package/dist/core/timeline/project-root.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tree-sitter query for TypeScript scope captures (RFC §5.1).
|
|
4
|
+
*
|
|
5
|
+
* Captures the structural skeleton the generic scope-resolution pipeline
|
|
6
|
+
* consumes: scopes (module/namespace/class/function), declarations (class-
|
|
7
|
+
* likes, method-likes, properties, variables), imports (one anchor per
|
|
8
|
+
* statement — decomposed in `import-decomposer.ts`), type bindings
|
|
9
|
+
* (parameter annotations, variable annotations, constructor inference,
|
|
10
|
+
* return types), and references (call sites, member writes).
|
|
11
|
+
*
|
|
12
|
+
* TypeScript specifics that shape this query:
|
|
13
|
+
*
|
|
14
|
+
* - **Namespaces** (`namespace Foo { }`) use `internal_module` with a
|
|
15
|
+
* `namespace` anon keyword + `identifier` or `nested_identifier` name +
|
|
16
|
+
* `statement_block` body. Verified via Unit 1 probe.
|
|
17
|
+
* - **`this` / `super`** are NAMED nodes `(this)` / `(super)` — unlike
|
|
18
|
+
* C#'s `this`/`base` which are anonymous tokens. `(_)` wildcard matches
|
|
19
|
+
* them as the receiver child of `member_expression`, so we don't need
|
|
20
|
+
* explicit string patterns.
|
|
21
|
+
* - **Optional chaining** (`obj?.m()`) still matches the regular
|
|
22
|
+
* `member_expression > object: (_) / property: (property_identifier)`
|
|
23
|
+
* pattern; the `(optional_chain)` child sits between them but doesn't
|
|
24
|
+
* occupy a named field. Same query handles both.
|
|
25
|
+
* - **Dynamic imports** (`import('./mod')`) are `call_expression` whose
|
|
26
|
+
* `function` field is a named `import` node (not a regular identifier).
|
|
27
|
+
* Captured via a dedicated pattern.
|
|
28
|
+
* - **Function overloads** — `function f(x:string); function f(x:number);
|
|
29
|
+
* function f(x) { … }` emits two `function_signature` nodes plus one
|
|
30
|
+
* `function_declaration`. All three emit `@declaration.function`;
|
|
31
|
+
* arity metadata synthesis merges parameterTypes.
|
|
32
|
+
* - **Parameter properties** (`constructor(public name: string)`) — each
|
|
33
|
+
* parameter emits `@declaration.property` on the enclosing class; the
|
|
34
|
+
* same identifier also binds as a parameter in the constructor scope
|
|
35
|
+
* via the normal `required_parameter` → `@type-binding.parameter` path.
|
|
36
|
+
* - **Enum** — dual type+value. Emits `@scope.class` (enum body contains
|
|
37
|
+
* member declarations) + `@declaration.enum`. Enum member names
|
|
38
|
+
* are captured via `enum_assignment` (see below).
|
|
39
|
+
*
|
|
40
|
+
* Node types pinned via `scripts/_probe_typescript_grammar.ts`:
|
|
41
|
+
* internal_module, namespace_export, namespace_import, import_specifier,
|
|
42
|
+
* export_specifier, enum_declaration, type_alias_declaration,
|
|
43
|
+
* abstract_class_declaration, abstract_method_signature, method_signature,
|
|
44
|
+
* generator_function_declaration, optional_parameter, rest_parameter,
|
|
45
|
+
* required_parameter, public_field_definition, private_property_identifier,
|
|
46
|
+
* new_expression (constructor field), call_expression with (import) fn.
|
|
47
|
+
*
|
|
48
|
+
* Grammar version: tree-sitter-typescript pinned in cgraph/package.json.
|
|
49
|
+
*
|
|
50
|
+
* Exposes lazy `Parser` and `Query` singletons so callers don't pay tree-
|
|
51
|
+
* sitter init cost per file.
|
|
52
|
+
*/
|
|
53
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.TYPESCRIPT_SCOPE_QUERY = void 0;
|
|
58
|
+
exports.getTsParser = getTsParser;
|
|
59
|
+
exports.getTsScopeQuery = getTsScopeQuery;
|
|
60
|
+
exports.tsCachedTreeMatchesGrammar = tsCachedTreeMatchesGrammar;
|
|
61
|
+
const tree_sitter_1 = __importDefault(require("tree-sitter"));
|
|
62
|
+
const tree_sitter_typescript_1 = __importDefault(require("tree-sitter-typescript"));
|
|
63
|
+
const ts_js_hoc_utils_js_1 = require("../../ts-js-hoc-utils.js");
|
|
64
|
+
// tree-sitter-typescript exports both `typescript` and `tsx` grammars on
|
|
65
|
+
// the default export. The package's `.d.ts` types the default export
|
|
66
|
+
// loosely; we narrow at the use site. The two grammars are NOT
|
|
67
|
+
// interchangeable: feeding a `.tsx` source to the `typescript` grammar
|
|
68
|
+
// mis-parses JSX as a sequence of less-than/greater-than expressions
|
|
69
|
+
// and silently drops every capture inside JSX elements. We therefore
|
|
70
|
+
// pick the grammar by file extension.
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
|
+
const TS_GRAMMAR = tree_sitter_typescript_1.default.typescript;
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
74
|
+
const TSX_GRAMMAR = tree_sitter_typescript_1.default.tsx;
|
|
75
|
+
/** True when the file should be parsed with the TSX grammar. The TSX
|
|
76
|
+
* grammar is a superset of TypeScript that adds JSX productions; it
|
|
77
|
+
* parses plain `.ts` files correctly too, but we keep `.ts` on the
|
|
78
|
+
* `typescript` grammar so the parser cache stays small and so any
|
|
79
|
+
* subtle TSX-only mis-parses don't bleed into non-TSX files. */
|
|
80
|
+
function isTsxFile(filePath) {
|
|
81
|
+
return filePath.endsWith('.tsx');
|
|
82
|
+
}
|
|
83
|
+
exports.TYPESCRIPT_SCOPE_QUERY = `
|
|
84
|
+
;; Scopes — module / namespace / class-likes / function-likes
|
|
85
|
+
(program) @scope.module
|
|
86
|
+
|
|
87
|
+
(internal_module) @scope.namespace
|
|
88
|
+
|
|
89
|
+
(class_declaration) @scope.class
|
|
90
|
+
(abstract_class_declaration) @scope.class
|
|
91
|
+
(interface_declaration) @scope.class
|
|
92
|
+
(enum_declaration) @scope.class
|
|
93
|
+
;; Class expressions: const Foo = class { ... } / const Foo = class Named { ... }.
|
|
94
|
+
;; tree-sitter-typescript uses (class) (NOT class_expression) -- same node
|
|
95
|
+
;; name as tree-sitter-javascript. The name field is optional (anonymous
|
|
96
|
+
;; class expressions omit it); ScopeExtractor tolerates missing names.
|
|
97
|
+
(class) @scope.class
|
|
98
|
+
|
|
99
|
+
;; \`@receiver-owner.this\` marks a scope that BINDS its own \`this\` rather
|
|
100
|
+
;; than inheriting one (#2701) — see \`Scope.ownsReceivers\`. Every function
|
|
101
|
+
;; form except \`arrow_function\` carries it: ECMA-262 gives an arrow
|
|
102
|
+
;; \`[[ThisMode]] = lexical\` (no \`this\` in its environment record, so the
|
|
103
|
+
;; lookup passes through), while every other form binds \`this\` at call time.
|
|
104
|
+
;; \`method_definition\` is marked too and is unaffected — it also carries a
|
|
105
|
+
;; synthesized \`this\` typeBinding, which the walk consults first.
|
|
106
|
+
;; The marker rides on the same node as \`@scope.function\`; it is outside the
|
|
107
|
+
;; \`@scope.\` namespace so \`anchorCaptureFor\` cannot mistake it for the anchor.
|
|
108
|
+
(function_declaration) @scope.function @receiver-owner.this
|
|
109
|
+
(generator_function_declaration) @scope.function @receiver-owner.this
|
|
110
|
+
(function_signature) @scope.function @receiver-owner.this
|
|
111
|
+
(method_definition) @scope.function @receiver-owner.this
|
|
112
|
+
(method_signature) @scope.function @receiver-owner.this
|
|
113
|
+
(abstract_method_signature) @scope.function @receiver-owner.this
|
|
114
|
+
(arrow_function) @scope.function
|
|
115
|
+
(function_expression) @scope.function @receiver-owner.this
|
|
116
|
+
;; \`function*(){}\` as an EXPRESSION. Absent from this list before #2701, so it
|
|
117
|
+
;; was not a scope at all and \`this\` inside one read as the enclosing method's.
|
|
118
|
+
(generator_function) @scope.function @receiver-owner.this
|
|
119
|
+
|
|
120
|
+
;; Object literals (the { ... } value expression, NOT object_type or
|
|
121
|
+
;; object_pattern) get their own scope boundary. Without it, a
|
|
122
|
+
;; method_definition/property-arrow's auto-hoist (scope-extractor.ts)
|
|
123
|
+
;; has nowhere to stop and leaks the name past the literal into whatever
|
|
124
|
+
;; lexically encloses it -- e.g. 'export default { async fetch(req) {} }'
|
|
125
|
+
;; would bind fetch at Module scope, letting an unrelated same-file
|
|
126
|
+
;; fetch(...) call (the platform global) incorrectly resolve to it
|
|
127
|
+
;; (#2545). Object (not Block or Class): object-literal members are
|
|
128
|
+
;; reachable only via property access, never as bare identifiers -- not
|
|
129
|
+
;; even by a SIBLING property's function body, unlike a real Block
|
|
130
|
+
;; (if/for/while, where a nested closure legitimately sees a sibling
|
|
131
|
+
;; let/const) or a Class (implicit-this sibling dispatch). Scope-chain
|
|
132
|
+
;; walkers (scope-resolution/scope/walkers.ts) skip an Object scope's
|
|
133
|
+
;; own bindings entirely while still treating it as a hoist boundary
|
|
134
|
+
;; (#2551).
|
|
135
|
+
(object) @scope.object
|
|
136
|
+
|
|
137
|
+
;; Statement blocks are BINDING scopes (#2699). ECMAScript gives every block its
|
|
138
|
+
;; own environment record, so \`let\`/\`const\`/\`class\`/\`function\` declared in
|
|
139
|
+
;; sibling blocks of one function are DIFFERENT bindings — without this the
|
|
140
|
+
;; resolver sees both as function-level and a call in one branch resolves to
|
|
141
|
+
;; both. \`tsBindingScopeFor\` already implements the other half of the rule:
|
|
142
|
+
;; \`var\` hoists past blocks to the enclosing Function/Module, \`let\`/\`const\`
|
|
143
|
+
;; take the innermost scope, which is now the block.
|
|
144
|
+
(statement_block) @scope.block
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
;; Type aliases that contain an object_type are structurally class-like —
|
|
148
|
+
;; they define a shape with named members. Emit @scope.class so the
|
|
149
|
+
;; field-extractor's type-alias-with-object-type handling (in
|
|
150
|
+
;; field-extractors/typescript.ts) finds a scope for its members.
|
|
151
|
+
(type_alias_declaration
|
|
152
|
+
value: (object_type)) @scope.class
|
|
153
|
+
|
|
154
|
+
;; Declarations — types
|
|
155
|
+
;; The type-parameter list is captured with \`?\` rather than as a second
|
|
156
|
+
;; pattern: a separate rule would make a GENERIC declaration match twice, and
|
|
157
|
+
;; both matches mint the same def id (filePath+range+type+name), so which one
|
|
158
|
+
;; survived — the one carrying the parameters or the one without — would be
|
|
159
|
+
;; decided by match order. An optional child keeps it at one match either way.
|
|
160
|
+
(class_declaration
|
|
161
|
+
name: (type_identifier) @declaration.name
|
|
162
|
+
type_parameters: (type_parameters)? @declaration.type-parameters) @declaration.class
|
|
163
|
+
|
|
164
|
+
(abstract_class_declaration
|
|
165
|
+
name: (type_identifier) @declaration.name
|
|
166
|
+
type_parameters: (type_parameters)? @declaration.type-parameters) @declaration.class
|
|
167
|
+
|
|
168
|
+
(interface_declaration
|
|
169
|
+
name: (type_identifier) @declaration.name
|
|
170
|
+
type_parameters: (type_parameters)? @declaration.type-parameters) @declaration.interface
|
|
171
|
+
|
|
172
|
+
(enum_declaration
|
|
173
|
+
name: (identifier) @declaration.name) @declaration.enum
|
|
174
|
+
|
|
175
|
+
(type_alias_declaration
|
|
176
|
+
name: (type_identifier) @declaration.name) @declaration.type
|
|
177
|
+
|
|
178
|
+
(internal_module
|
|
179
|
+
name: (identifier) @declaration.name) @declaration.namespace
|
|
180
|
+
|
|
181
|
+
;; Declarations — methods / functions / constructors
|
|
182
|
+
(function_declaration
|
|
183
|
+
name: (identifier) @declaration.name) @declaration.function
|
|
184
|
+
|
|
185
|
+
(generator_function_declaration
|
|
186
|
+
name: (identifier) @declaration.name) @declaration.function
|
|
187
|
+
|
|
188
|
+
;; Function overload signatures (declaration-only; body in a separate
|
|
189
|
+
;; function_declaration). Extractors dedup by (name, parameterTypes).
|
|
190
|
+
(function_signature
|
|
191
|
+
name: (identifier) @declaration.name) @declaration.function
|
|
192
|
+
|
|
193
|
+
;; Arrow/function-expression assigned to a const/let/var — named by the
|
|
194
|
+
;; variable_declarator. Covers \`const fn = () => {}\` and its export
|
|
195
|
+
;; variant. Matches the legacy TYPESCRIPT_QUERIES pattern.
|
|
196
|
+
;;
|
|
197
|
+
;; The \`@declaration.function\` anchor sits on the INNER arrow_function /
|
|
198
|
+
;; function_expression node (NOT the wrapping lexical_declaration), so
|
|
199
|
+
;; \`anchor.range\` aligns with the corresponding \`@scope.function\` scope
|
|
200
|
+
;; range. \`pass2AttachDeclarations\` then resolves \`innermost\` to the
|
|
201
|
+
;; arrow's own scope (instead of the module scope) and the def is owned
|
|
202
|
+
;; by the arrow itself. Without this alignment, calls inside the arrow
|
|
203
|
+
;; body lose caller attribution: \`resolveCallerGraphId\` walks up past
|
|
204
|
+
;; the empty arrow scope into the module scope and grabs whichever
|
|
205
|
+
;; Function-like def appears first there — silently mis-attributing
|
|
206
|
+
;; every nested call (Zustand stores, TanStack hooks, Promise-all/map,
|
|
207
|
+
;; etc.). See \`typescript-hof-callbacks.test.ts\`.
|
|
208
|
+
(lexical_declaration
|
|
209
|
+
(variable_declarator
|
|
210
|
+
name: (identifier) @declaration.name
|
|
211
|
+
value: (arrow_function) @declaration.function))
|
|
212
|
+
|
|
213
|
+
(lexical_declaration
|
|
214
|
+
(variable_declarator
|
|
215
|
+
name: (identifier) @declaration.name
|
|
216
|
+
value: (function_expression) @declaration.function))
|
|
217
|
+
|
|
218
|
+
(variable_declaration
|
|
219
|
+
(variable_declarator
|
|
220
|
+
name: (identifier) @declaration.name
|
|
221
|
+
value: (arrow_function) @declaration.function))
|
|
222
|
+
|
|
223
|
+
(variable_declaration
|
|
224
|
+
(variable_declarator
|
|
225
|
+
name: (identifier) @declaration.name
|
|
226
|
+
value: (function_expression) @declaration.function))
|
|
227
|
+
|
|
228
|
+
;; CJS property-assignment exports (#2723) — see the matching block in
|
|
229
|
+
;; \`languages/javascript/query.ts\` for the rationale. Mirrored here because
|
|
230
|
+
;; \`.ts\` files in a CommonJS package use the same form, and because the JS
|
|
231
|
+
;; provider delegates several hooks to these TypeScript counterparts.
|
|
232
|
+
;; One pattern per receiver form, RHS forms folded into an inner LEAF
|
|
233
|
+
;; alternation — see the matching note in \`languages/javascript/query.ts\` for
|
|
234
|
+
;; why that shape is safe under the tree-sitter 0.21.1 alternation hazard.
|
|
235
|
+
(assignment_expression
|
|
236
|
+
left: (member_expression
|
|
237
|
+
object: (identifier) @_cjs.receiver
|
|
238
|
+
property: (property_identifier) @declaration.name)
|
|
239
|
+
right: [
|
|
240
|
+
(arrow_function)
|
|
241
|
+
(function_expression)
|
|
242
|
+
(generator_function)
|
|
243
|
+
] @declaration.function)
|
|
244
|
+
|
|
245
|
+
;; \`this.X = fn\` at MODULE level of a CommonJS file — there \`this\` IS
|
|
246
|
+
;; \`module.exports\`, so this declares an export. Pruned emit-side for ESM
|
|
247
|
+
;; files (where top-level \`this\` is undefined) and for a \`this\` inside a
|
|
248
|
+
;; function, which is an instance member rather than an export.
|
|
249
|
+
(assignment_expression
|
|
250
|
+
left: (member_expression
|
|
251
|
+
object: (this)
|
|
252
|
+
property: (property_identifier) @declaration.name)
|
|
253
|
+
right: [
|
|
254
|
+
(arrow_function)
|
|
255
|
+
(function_expression)
|
|
256
|
+
(generator_function)
|
|
257
|
+
] @declaration.function)
|
|
258
|
+
|
|
259
|
+
(assignment_expression
|
|
260
|
+
left: (member_expression
|
|
261
|
+
object: (member_expression
|
|
262
|
+
object: (identifier) @_cjs.module
|
|
263
|
+
property: (property_identifier) @_cjs.exports)
|
|
264
|
+
property: (property_identifier) @declaration.name)
|
|
265
|
+
right: [
|
|
266
|
+
(arrow_function)
|
|
267
|
+
(function_expression)
|
|
268
|
+
(generator_function)
|
|
269
|
+
] @declaration.function
|
|
270
|
+
(#eq? @_cjs.module "module")
|
|
271
|
+
(#eq? @_cjs.exports "exports"))
|
|
272
|
+
|
|
273
|
+
;; Object-property arrows / function expressions named by their pair key:
|
|
274
|
+
;; \`{ addItem: (item) => ..., removeItem: (item) => ... }\`. The legacy
|
|
275
|
+
;; TYPESCRIPT_QUERIES emits the same shape; mirroring it here keeps
|
|
276
|
+
;; scope-resolution declarations in sync (issue #1166). Computed keys
|
|
277
|
+
;; (\`[K]: () => ...\`) intentionally fall through anonymous.
|
|
278
|
+
;;
|
|
279
|
+
;; Same anchor discipline as the \`lexical_declaration\` block above: the
|
|
280
|
+
;; \`@declaration.function\` capture must sit on the INNER \`arrow_function\`
|
|
281
|
+
;; / \`function_expression\` node — NOT the outer \`pair\`. The pair node
|
|
282
|
+
;; starts at the property-key token, BEFORE the arrow's
|
|
283
|
+
;; \`@scope.function\` range. \`pass2AttachDeclarations.atPosition(pair.startLine,
|
|
284
|
+
;; pair.startCol)\` therefore resolves to the PARENT scope (the enclosing
|
|
285
|
+
;; function-like, e.g. the \`(set) => ({...})\` callback in
|
|
286
|
+
;; \`persist((set) => ({...}))\`), not the inner arrow's own scope.
|
|
287
|
+
;;
|
|
288
|
+
;; With the anchor on \`pair\`, ALL pair-function defs from the same object
|
|
289
|
+
;; literal land in the same parent scope's \`ownedDefs\`. \`resolveCallerGraphId\`
|
|
290
|
+
;; walking up from a call inside any of those arrows then matches the
|
|
291
|
+
;; FIRST Function-like def via \`ownedDefs.find()\` — silently mis-attributing
|
|
292
|
+
;; every call to the first sibling. Multi-action Zustand stores
|
|
293
|
+
;; (\`{ addItem, removeItem, fetchData, … }\`) — the dominant 0%-capture
|
|
294
|
+
;; pattern in the bug report — would land all calls on \`addItem\`.
|
|
295
|
+
;;
|
|
296
|
+
;; With the anchor on the inner \`arrow_function\` / \`function_expression\`,
|
|
297
|
+
;; \`anchor.range\` matches the arrow's own \`@scope.function\` range; the
|
|
298
|
+
;; def lands in the arrow scope's own \`ownedDefs\` and \`pass2AttachDeclarations\`'s
|
|
299
|
+
;; auto-hoist (\`rangesEqual(anchor.range, innermost.range)\`) promotes
|
|
300
|
+
;; the BINDING to the parent scope (so importers and lookups still find
|
|
301
|
+
;; the name in the object's surrounding scope). Each pair-arrow becomes
|
|
302
|
+
;; an independent caller anchor in the walk.
|
|
303
|
+
(pair
|
|
304
|
+
key: (property_identifier) @declaration.name
|
|
305
|
+
value: (arrow_function) @declaration.function)
|
|
306
|
+
|
|
307
|
+
(pair
|
|
308
|
+
key: (property_identifier) @declaration.name
|
|
309
|
+
value: (function_expression) @declaration.function)
|
|
310
|
+
|
|
311
|
+
(pair
|
|
312
|
+
key: (string (string_fragment) @declaration.name)
|
|
313
|
+
value: (arrow_function) @declaration.function)
|
|
314
|
+
|
|
315
|
+
(pair
|
|
316
|
+
key: (string (string_fragment) @declaration.name)
|
|
317
|
+
value: (function_expression) @declaration.function)
|
|
318
|
+
|
|
319
|
+
;; HOC-wrapped variable declarations: \`const X = HOC((args) => { ... })\`.
|
|
320
|
+
;;
|
|
321
|
+
;; Covers the dominant React UI idiom (\`React.forwardRef\`, \`React.memo\`,
|
|
322
|
+
;; bare \`forwardRef\` / \`memo\` / \`observer\`), Hook callbacks
|
|
323
|
+
;; (\`useCallback\`, \`useMemo\`), and library-wrapper factories (\`debounce\`,
|
|
324
|
+
;; \`throttle\`, user-defined \`withErrorBoundary\` / \`createHook\`, etc.).
|
|
325
|
+
;; All produce the same AST shape:
|
|
326
|
+
;;
|
|
327
|
+
;; lexical_declaration
|
|
328
|
+
;; variable_declarator
|
|
329
|
+
;; name: identifier "X" ← we want this name
|
|
330
|
+
;; value: call_expression
|
|
331
|
+
;; function: identifier | member_expression ← any callee
|
|
332
|
+
;; arguments: arguments
|
|
333
|
+
;; arrow_function | function_expression ← the actual code
|
|
334
|
+
;;
|
|
335
|
+
;; The pre-fix \`tsExtractFunctionName\` only handled \`variable_declarator\`
|
|
336
|
+
;; and \`pair\` parents, so HOC-wrapped arrows fell through anonymous. The
|
|
337
|
+
;; registry-primary \`query.ts\` had no pattern for this shape either —
|
|
338
|
+
;; \`const Button = forwardRef((p, r) => { ... })\` registered as a
|
|
339
|
+
;; \`Variable\` with no \`Function\` def, and every call inside the arrow
|
|
340
|
+
;; body lost caller attribution: \`resolveCallerGraphId\` walked up past
|
|
341
|
+
;; the empty arrow scope to the module's File fallback. Sourcerer-fe alone
|
|
342
|
+
;; has ~296 such declarations (57 forwardRef + 21 memo + 161 useCallback
|
|
343
|
+
;; + 57 useMemo) — all invisible to \`gitnexus_context\` /
|
|
344
|
+
;; \`gitnexus_impact\` for outgoing edges before this fix.
|
|
345
|
+
;;
|
|
346
|
+
;; Anchor discipline: same as the \`lexical_declaration\` / \`pair\` blocks
|
|
347
|
+
;; above — on the INNER \`arrow_function\` / \`function_expression\`, NOT
|
|
348
|
+
;; the outer \`call_expression\`. The arrow's range matches its own
|
|
349
|
+
;; \`@scope.function\` range, so \`pass2AttachDeclarations.atPosition\`
|
|
350
|
+
;; resolves \`innermost\` to the arrow's own scope and
|
|
351
|
+
;; \`rangesEqual(anchor.range, innermost.range)\` triggers the auto-hoist
|
|
352
|
+
;; that promotes the binding to the parent scope (where \`const X\`
|
|
353
|
+
;; lives).
|
|
354
|
+
;;
|
|
355
|
+
;; #1876 — chained array-method form: \`const x = arr.find((y) => p(y))\`
|
|
356
|
+
;; has the same syntactic shape and matches here too, naming the
|
|
357
|
+
;; \`.find\` callback as \`x\`. Because \`x\` holds a value (the method
|
|
358
|
+
;; result), not a callable, the spurious \`Function:x\` def is dropped
|
|
359
|
+
;; emit-side in captures.ts: \`isArrayMethodCallbackArrow\` skips any
|
|
360
|
+
;; \`@declaration.function\` whose enclosing call has a member-expression
|
|
361
|
+
;; callee with a known Array-method property (\`ARRAY_CALLBACK_METHODS\`:
|
|
362
|
+
;; \`map\` / \`filter\` / \`find\` / \`reduce\` / \`forEach\` / \`some\` /
|
|
363
|
+
;; \`every\` / …). Only the \`@declaration.variable\` survives, so the
|
|
364
|
+
;; binding is a single value def and calls inside the callback attribute
|
|
365
|
+
;; to the enclosing scope rather than \`Function:x\`.
|
|
366
|
+
;;
|
|
367
|
+
;; Residual (intentional): a user-defined fluent-API method with a
|
|
368
|
+
;; callback (\`qb.where(x => …)\`) is NOT in the blocklist and still
|
|
369
|
+
;; classifies as \`Function\` — there's no clean syntactic line beyond
|
|
370
|
+
;; the well-known Array surface, so the set is closed and easy to extend.
|
|
371
|
+
;;
|
|
372
|
+
;; Trade-off — multi-arrow arguments: \`const x = call(arrow1, arrow2)\`
|
|
373
|
+
;; would emit TWO matches with the same name \`x\`. tree-sitter-query
|
|
374
|
+
;; iterates all arrow_function direct children of \`arguments\`, so each
|
|
375
|
+
;; emits its own \`(name=x, function=...)\` pair. \`pass2AttachDeclarations\`
|
|
376
|
+
;; pushes both \`Function:x\` defs into the same arrow scopes (each in
|
|
377
|
+
;; its own arrow's \`ownedDefs\`) and hoists both bindings to the parent.
|
|
378
|
+
;; The downstream registry's qualified-name dedup then collapses them
|
|
379
|
+
;; via \`(filePath, type, qualifiedName)\` — second wins. Acceptable;
|
|
380
|
+
;; multi-arrow-callback APIs are rare (\`new Promise(executor)\` is the
|
|
381
|
+
;; main one and takes a single executor).
|
|
382
|
+
;;
|
|
383
|
+
;; NOTE: Split into identifier vs member_expression patterns. Member
|
|
384
|
+
;; expressions are filtered with a blocklist of common array methods
|
|
385
|
+
;; (map, filter, reduce, etc.) to avoid false positives like
|
|
386
|
+
;; \`const x = arr.map(a => ...)\` being classified as Function.
|
|
387
|
+
(lexical_declaration
|
|
388
|
+
(variable_declarator
|
|
389
|
+
name: (identifier) @declaration.name
|
|
390
|
+
value: (call_expression
|
|
391
|
+
function: (identifier)
|
|
392
|
+
arguments: (arguments
|
|
393
|
+
(arrow_function) @declaration.function))))
|
|
394
|
+
|
|
395
|
+
(lexical_declaration
|
|
396
|
+
(variable_declarator
|
|
397
|
+
name: (identifier) @declaration.name
|
|
398
|
+
value: (call_expression
|
|
399
|
+
function: (identifier)
|
|
400
|
+
arguments: (arguments
|
|
401
|
+
(function_expression) @declaration.function))))
|
|
402
|
+
|
|
403
|
+
(lexical_declaration
|
|
404
|
+
(variable_declarator
|
|
405
|
+
name: (identifier) @declaration.name
|
|
406
|
+
value: (call_expression
|
|
407
|
+
function: (member_expression
|
|
408
|
+
property: (property_identifier) @callee)
|
|
409
|
+
arguments: (arguments
|
|
410
|
+
(arrow_function) @declaration.function)))
|
|
411
|
+
${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
|
|
412
|
+
|
|
413
|
+
(lexical_declaration
|
|
414
|
+
(variable_declarator
|
|
415
|
+
name: (identifier) @declaration.name
|
|
416
|
+
value: (call_expression
|
|
417
|
+
function: (member_expression
|
|
418
|
+
property: (property_identifier) @callee)
|
|
419
|
+
arguments: (arguments
|
|
420
|
+
(function_expression) @declaration.function)))
|
|
421
|
+
${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
|
|
422
|
+
|
|
423
|
+
(variable_declaration
|
|
424
|
+
(variable_declarator
|
|
425
|
+
name: (identifier) @declaration.name
|
|
426
|
+
value: (call_expression
|
|
427
|
+
function: (identifier)
|
|
428
|
+
arguments: (arguments
|
|
429
|
+
(arrow_function) @declaration.function))))
|
|
430
|
+
|
|
431
|
+
(variable_declaration
|
|
432
|
+
(variable_declarator
|
|
433
|
+
name: (identifier) @declaration.name
|
|
434
|
+
value: (call_expression
|
|
435
|
+
function: (identifier)
|
|
436
|
+
arguments: (arguments
|
|
437
|
+
(function_expression) @declaration.function))))
|
|
438
|
+
|
|
439
|
+
(variable_declaration
|
|
440
|
+
(variable_declarator
|
|
441
|
+
name: (identifier) @declaration.name
|
|
442
|
+
value: (call_expression
|
|
443
|
+
function: (member_expression
|
|
444
|
+
property: (property_identifier) @callee)
|
|
445
|
+
arguments: (arguments
|
|
446
|
+
(arrow_function) @declaration.function)))
|
|
447
|
+
${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
|
|
448
|
+
|
|
449
|
+
(variable_declaration
|
|
450
|
+
(variable_declarator
|
|
451
|
+
name: (identifier) @declaration.name
|
|
452
|
+
value: (call_expression
|
|
453
|
+
function: (member_expression
|
|
454
|
+
property: (property_identifier) @callee)
|
|
455
|
+
arguments: (arguments
|
|
456
|
+
(function_expression) @declaration.function)))
|
|
457
|
+
${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
|
|
458
|
+
|
|
459
|
+
;; HOC-wrapped default exports: \`export default defineEventHandler(async (e) => { ... })\`.
|
|
460
|
+
;; The emit phase rewrites @declaration.name to a file-derived name so
|
|
461
|
+
;; wrappers like \`defineEventHandler\` / \`React.memo\` do not collapse
|
|
462
|
+
;; unrelated modules onto the same symbol name.
|
|
463
|
+
((export_statement
|
|
464
|
+
value: (call_expression
|
|
465
|
+
function: (identifier) @hoc
|
|
466
|
+
arguments: (arguments
|
|
467
|
+
(arrow_function) @declaration.function)))
|
|
468
|
+
${ts_js_hoc_utils_js_1.DEFAULT_EXPORT_IDENTIFIER_NOT_ANY_OF_PREDICATE})
|
|
469
|
+
|
|
470
|
+
((export_statement
|
|
471
|
+
value: (call_expression
|
|
472
|
+
function: (identifier) @hoc
|
|
473
|
+
arguments: (arguments
|
|
474
|
+
(function_expression) @declaration.function)))
|
|
475
|
+
${ts_js_hoc_utils_js_1.DEFAULT_EXPORT_IDENTIFIER_NOT_ANY_OF_PREDICATE})
|
|
476
|
+
|
|
477
|
+
((export_statement
|
|
478
|
+
value: (call_expression
|
|
479
|
+
function: (member_expression
|
|
480
|
+
property: (property_identifier) @callee)
|
|
481
|
+
arguments: (arguments
|
|
482
|
+
(arrow_function) @declaration.function)))
|
|
483
|
+
${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
|
|
484
|
+
|
|
485
|
+
((export_statement
|
|
486
|
+
value: (call_expression
|
|
487
|
+
function: (member_expression
|
|
488
|
+
property: (property_identifier) @callee)
|
|
489
|
+
arguments: (arguments
|
|
490
|
+
(function_expression) @declaration.function)))
|
|
491
|
+
${ts_js_hoc_utils_js_1.ARRAY_METHOD_NOT_ANY_OF_PREDICATE})
|
|
492
|
+
|
|
493
|
+
;; Method definitions — regular + private (#field) methods.
|
|
494
|
+
;; These match inside both class_declaration and class (class expression)
|
|
495
|
+
;; bodies. The @scope.class for class expressions (see (class) above)
|
|
496
|
+
;; ensures methods inside class expressions get the correct Class scope parent.
|
|
497
|
+
(method_definition
|
|
498
|
+
name: (property_identifier) @declaration.name) @declaration.method
|
|
499
|
+
|
|
500
|
+
(method_definition
|
|
501
|
+
name: (private_property_identifier) @declaration.name) @declaration.method
|
|
502
|
+
|
|
503
|
+
;; Abstract method signatures in abstract classes.
|
|
504
|
+
(abstract_method_signature
|
|
505
|
+
name: (property_identifier) @declaration.name) @declaration.method
|
|
506
|
+
|
|
507
|
+
;; Interface method signatures.
|
|
508
|
+
(method_signature
|
|
509
|
+
name: (property_identifier) @declaration.name) @declaration.method
|
|
510
|
+
|
|
511
|
+
;; Declarations — class fields
|
|
512
|
+
(public_field_definition
|
|
513
|
+
name: (property_identifier) @declaration.name) @declaration.property
|
|
514
|
+
|
|
515
|
+
(public_field_definition
|
|
516
|
+
name: (private_property_identifier) @declaration.name) @declaration.property
|
|
517
|
+
|
|
518
|
+
;; Enum members: enum Color { Red, Green = 1, Blue }.
|
|
519
|
+
;; Bare members (no value): Red, Blue — property_identifier inside enum_body.
|
|
520
|
+
;; Members with value: Green = 1 — enum_assignment with name field.
|
|
521
|
+
(enum_body
|
|
522
|
+
(property_identifier) @declaration.name) @declaration.property
|
|
523
|
+
|
|
524
|
+
(enum_assignment
|
|
525
|
+
name: (_) @declaration.name) @declaration.property
|
|
526
|
+
|
|
527
|
+
;; Declarations — parameter properties: \`constructor(public name: string)\`.
|
|
528
|
+
;; The accessibility_modifier presence distinguishes these from regular
|
|
529
|
+
;; parameters. The identifier is also bound as a parameter in the
|
|
530
|
+
;; constructor's scope via @type-binding.parameter below (dual binding).
|
|
531
|
+
(required_parameter
|
|
532
|
+
(accessibility_modifier)
|
|
533
|
+
pattern: (identifier) @declaration.name) @declaration.property
|
|
534
|
+
|
|
535
|
+
;; Declarations — variables (let / const / var)
|
|
536
|
+
(lexical_declaration
|
|
537
|
+
(variable_declarator
|
|
538
|
+
name: (identifier) @declaration.name)) @declaration.variable
|
|
539
|
+
|
|
540
|
+
(variable_declaration
|
|
541
|
+
(variable_declarator
|
|
542
|
+
name: (identifier) @declaration.name)) @declaration.variable
|
|
543
|
+
|
|
544
|
+
;; Imports — single anchor per statement; decomposer emits per-specifier markers.
|
|
545
|
+
(import_statement) @import.statement
|
|
546
|
+
|
|
547
|
+
;; Re-exports: \`export { X } from './y'\` / \`export * from './y'\` /
|
|
548
|
+
;; \`export * as ns from './y'\` / \`export type { X } from './y'\`.
|
|
549
|
+
;; Only re-exports (those with a \`from\` clause) emit @import.statement;
|
|
550
|
+
;; local \`export { X }\` (no source) is just visibility metadata, not an
|
|
551
|
+
;; import. The decomposer filters by source presence.
|
|
552
|
+
(export_statement
|
|
553
|
+
source: (string)) @import.statement
|
|
554
|
+
|
|
555
|
+
;; Dynamic imports: \`import('./m')\` / \`await import(x)\`. tree-sitter-
|
|
556
|
+
;; typescript represents \`import\` as a named leaf node; the call_expression's
|
|
557
|
+
;; function field points at it.
|
|
558
|
+
(call_expression
|
|
559
|
+
function: (import)) @import.dynamic
|
|
560
|
+
|
|
561
|
+
;; Type bindings — parameter annotations: \`function f(u: User)\`
|
|
562
|
+
(required_parameter
|
|
563
|
+
pattern: (identifier) @type-binding.name
|
|
564
|
+
type: (type_annotation
|
|
565
|
+
(type_identifier) @type-binding.type)) @type-binding.parameter
|
|
566
|
+
|
|
567
|
+
(required_parameter
|
|
568
|
+
pattern: (identifier) @type-binding.name
|
|
569
|
+
type: (type_annotation
|
|
570
|
+
(generic_type) @type-binding.type)) @type-binding.parameter
|
|
571
|
+
|
|
572
|
+
(required_parameter
|
|
573
|
+
pattern: (identifier) @type-binding.name
|
|
574
|
+
type: (type_annotation
|
|
575
|
+
(predefined_type) @type-binding.type)) @type-binding.parameter
|
|
576
|
+
|
|
577
|
+
;; Parameter with union / array / readonly wrappers: \`users: readonly User[]\`,
|
|
578
|
+
;; \`x: User | null\`, \`xs: User[]\`. interpret strips wrappers to the
|
|
579
|
+
;; discriminating type.
|
|
580
|
+
(required_parameter
|
|
581
|
+
pattern: (identifier) @type-binding.name
|
|
582
|
+
type: (type_annotation
|
|
583
|
+
(union_type) @type-binding.type)) @type-binding.parameter
|
|
584
|
+
|
|
585
|
+
(required_parameter
|
|
586
|
+
pattern: (identifier) @type-binding.name
|
|
587
|
+
type: (type_annotation
|
|
588
|
+
(array_type) @type-binding.type)) @type-binding.parameter
|
|
589
|
+
|
|
590
|
+
(required_parameter
|
|
591
|
+
pattern: (identifier) @type-binding.name
|
|
592
|
+
type: (type_annotation
|
|
593
|
+
(readonly_type) @type-binding.type)) @type-binding.parameter
|
|
594
|
+
|
|
595
|
+
;; Type bindings — parameter properties:
|
|
596
|
+
;; \`constructor(public address: Address)\` — each parameter with an
|
|
597
|
+
;; accessibility modifier is ALSO a class field. We emit a second
|
|
598
|
+
;; capture so \`tsBindingScopeFor\` can hoist these to the Class scope,
|
|
599
|
+
;; enabling \`user.address\` field access resolution. The regular
|
|
600
|
+
;; @type-binding.parameter above still fires for the constructor
|
|
601
|
+
;; scope binding — both bindings coexist, which is correct.
|
|
602
|
+
(required_parameter
|
|
603
|
+
(accessibility_modifier)
|
|
604
|
+
pattern: (identifier) @type-binding.name
|
|
605
|
+
type: (type_annotation
|
|
606
|
+
(type_identifier) @type-binding.type)) @type-binding.parameter-property
|
|
607
|
+
|
|
608
|
+
(required_parameter
|
|
609
|
+
(accessibility_modifier)
|
|
610
|
+
pattern: (identifier) @type-binding.name
|
|
611
|
+
type: (type_annotation
|
|
612
|
+
(generic_type) @type-binding.type)) @type-binding.parameter-property
|
|
613
|
+
|
|
614
|
+
(required_parameter
|
|
615
|
+
(accessibility_modifier)
|
|
616
|
+
pattern: (identifier) @type-binding.name
|
|
617
|
+
type: (type_annotation
|
|
618
|
+
(predefined_type) @type-binding.type)) @type-binding.parameter-property
|
|
619
|
+
|
|
620
|
+
(required_parameter
|
|
621
|
+
(accessibility_modifier)
|
|
622
|
+
pattern: (identifier) @type-binding.name
|
|
623
|
+
type: (type_annotation
|
|
624
|
+
(union_type) @type-binding.type)) @type-binding.parameter-property
|
|
625
|
+
|
|
626
|
+
(required_parameter
|
|
627
|
+
(accessibility_modifier)
|
|
628
|
+
pattern: (identifier) @type-binding.name
|
|
629
|
+
type: (type_annotation
|
|
630
|
+
(array_type) @type-binding.type)) @type-binding.parameter-property
|
|
631
|
+
|
|
632
|
+
(required_parameter
|
|
633
|
+
(accessibility_modifier)
|
|
634
|
+
pattern: (identifier) @type-binding.name
|
|
635
|
+
type: (type_annotation
|
|
636
|
+
(readonly_type) @type-binding.type)) @type-binding.parameter-property
|
|
637
|
+
|
|
638
|
+
(optional_parameter
|
|
639
|
+
pattern: (identifier) @type-binding.name
|
|
640
|
+
type: (type_annotation
|
|
641
|
+
(type_identifier) @type-binding.type)) @type-binding.parameter
|
|
642
|
+
|
|
643
|
+
(optional_parameter
|
|
644
|
+
pattern: (identifier) @type-binding.name
|
|
645
|
+
type: (type_annotation
|
|
646
|
+
(generic_type) @type-binding.type)) @type-binding.parameter
|
|
647
|
+
|
|
648
|
+
(optional_parameter
|
|
649
|
+
pattern: (identifier) @type-binding.name
|
|
650
|
+
type: (type_annotation
|
|
651
|
+
(predefined_type) @type-binding.type)) @type-binding.parameter
|
|
652
|
+
|
|
653
|
+
(optional_parameter
|
|
654
|
+
pattern: (identifier) @type-binding.name
|
|
655
|
+
type: (type_annotation
|
|
656
|
+
(union_type) @type-binding.type)) @type-binding.parameter
|
|
657
|
+
|
|
658
|
+
(optional_parameter
|
|
659
|
+
pattern: (identifier) @type-binding.name
|
|
660
|
+
type: (type_annotation
|
|
661
|
+
(array_type) @type-binding.type)) @type-binding.parameter
|
|
662
|
+
|
|
663
|
+
(optional_parameter
|
|
664
|
+
pattern: (identifier) @type-binding.name
|
|
665
|
+
type: (type_annotation
|
|
666
|
+
(readonly_type) @type-binding.type)) @type-binding.parameter
|
|
667
|
+
|
|
668
|
+
;; Type bindings — variable annotations: \`let u: User = ...\` / \`const u: User\`.
|
|
669
|
+
(variable_declarator
|
|
670
|
+
name: (identifier) @type-binding.name
|
|
671
|
+
type: (type_annotation
|
|
672
|
+
(type_identifier) @type-binding.type)) @type-binding.annotation
|
|
673
|
+
|
|
674
|
+
(variable_declarator
|
|
675
|
+
name: (identifier) @type-binding.name
|
|
676
|
+
type: (type_annotation
|
|
677
|
+
(generic_type) @type-binding.type)) @type-binding.annotation
|
|
678
|
+
|
|
679
|
+
(variable_declarator
|
|
680
|
+
name: (identifier) @type-binding.name
|
|
681
|
+
type: (type_annotation
|
|
682
|
+
(predefined_type) @type-binding.type)) @type-binding.annotation
|
|
683
|
+
|
|
684
|
+
;; Union types like \`User | null\` / \`User | undefined\` — interpret's
|
|
685
|
+
;; stripNullableUnion collapses to the discriminating arm.
|
|
686
|
+
(variable_declarator
|
|
687
|
+
name: (identifier) @type-binding.name
|
|
688
|
+
type: (type_annotation
|
|
689
|
+
(union_type) @type-binding.type)) @type-binding.annotation
|
|
690
|
+
|
|
691
|
+
;; Array types: \`User[]\` / \`readonly User[]\` — stripArraySuffix unwraps.
|
|
692
|
+
(variable_declarator
|
|
693
|
+
name: (identifier) @type-binding.name
|
|
694
|
+
type: (type_annotation
|
|
695
|
+
(array_type) @type-binding.type)) @type-binding.annotation
|
|
696
|
+
|
|
697
|
+
(variable_declarator
|
|
698
|
+
name: (identifier) @type-binding.name
|
|
699
|
+
type: (type_annotation
|
|
700
|
+
(readonly_type) @type-binding.type)) @type-binding.annotation
|
|
701
|
+
|
|
702
|
+
;; Type bindings — constructor-inferred: \`const u = new User()\`.
|
|
703
|
+
;; The variable_declarator's \`value\` field carries the new_expression; its
|
|
704
|
+
;; \`constructor\` field is the type identifier. Covers both typed (\`:User = \`)
|
|
705
|
+
;; and untyped declarations — the annotation pattern above wins if both
|
|
706
|
+
;; fire, via the scope-extractor's source-strength tie-break in
|
|
707
|
+
;; pass4CollectTypeBindings.
|
|
708
|
+
(variable_declarator
|
|
709
|
+
name: (identifier) @type-binding.name
|
|
710
|
+
value: (new_expression
|
|
711
|
+
constructor: (identifier) @type-binding.type)) @type-binding.constructor
|
|
712
|
+
|
|
713
|
+
;; Qualified constructor: \`const u = new models.User()\`. Captures the
|
|
714
|
+
;; member_expression's text as the type — resolver's QualifiedNameIndex
|
|
715
|
+
;; handles the dotted lookup.
|
|
716
|
+
(variable_declarator
|
|
717
|
+
name: (identifier) @type-binding.name
|
|
718
|
+
value: (new_expression
|
|
719
|
+
constructor: (member_expression) @type-binding.type)) @type-binding.constructor
|
|
720
|
+
|
|
721
|
+
;; Cast-wrapped constructor: \`const u = new User() as any\` /
|
|
722
|
+
;; \`const u = new User()!\`. The \`as T\` pattern also captures T itself
|
|
723
|
+
;; via the assertion clause above, but T is usually a non-discriminating
|
|
724
|
+
;; type (\`any\`, \`unknown\`) in these idioms; interpretTsTypeBinding
|
|
725
|
+
;; drops those so the constructor-inferred binding survives.
|
|
726
|
+
(variable_declarator
|
|
727
|
+
name: (identifier) @type-binding.name
|
|
728
|
+
value: (as_expression
|
|
729
|
+
(new_expression
|
|
730
|
+
constructor: (identifier) @type-binding.type))) @type-binding.constructor
|
|
731
|
+
|
|
732
|
+
(variable_declarator
|
|
733
|
+
name: (identifier) @type-binding.name
|
|
734
|
+
value: (non_null_expression
|
|
735
|
+
(new_expression
|
|
736
|
+
constructor: (identifier) @type-binding.type))) @type-binding.constructor
|
|
737
|
+
|
|
738
|
+
;; Double-cast: \`const u = new User() as unknown as any\` — as_expression
|
|
739
|
+
;; nested inside as_expression, with new_expression at the core.
|
|
740
|
+
(variable_declarator
|
|
741
|
+
name: (identifier) @type-binding.name
|
|
742
|
+
value: (as_expression
|
|
743
|
+
(as_expression
|
|
744
|
+
(new_expression
|
|
745
|
+
constructor: (identifier) @type-binding.type)))) @type-binding.constructor
|
|
746
|
+
|
|
747
|
+
;; Type bindings — call-result alias: \`const u = find()\`. Chain-follow
|
|
748
|
+
;; walks \`find\`'s return type via propagateImportedReturnTypes for cross-
|
|
749
|
+
;; file; same-file covered by explicit return annotations.
|
|
750
|
+
(variable_declarator
|
|
751
|
+
name: (identifier) @type-binding.name
|
|
752
|
+
value: (call_expression
|
|
753
|
+
function: (identifier) @type-binding.type)) @type-binding.alias
|
|
754
|
+
|
|
755
|
+
;; Type bindings — member-call alias: \`const u = svc.getUser()\`. The
|
|
756
|
+
;; callee is captured as a full \`member_expression\` text (\`svc.getUser\`)
|
|
757
|
+
;; so compound-receiver can resolve the receiver object before looking up
|
|
758
|
+
;; the method's hoisted return-type binding.
|
|
759
|
+
(variable_declarator
|
|
760
|
+
name: (identifier) @type-binding.name
|
|
761
|
+
value: (call_expression
|
|
762
|
+
function: (member_expression) @type-binding.type)) @type-binding.alias
|
|
763
|
+
|
|
764
|
+
;; Type bindings — await chain: \`const u = await find()\` / \`await svc.m()\`.
|
|
765
|
+
(variable_declarator
|
|
766
|
+
name: (identifier) @type-binding.name
|
|
767
|
+
value: (await_expression
|
|
768
|
+
(call_expression
|
|
769
|
+
function: (identifier) @type-binding.type))) @type-binding.alias
|
|
770
|
+
|
|
771
|
+
(variable_declarator
|
|
772
|
+
name: (identifier) @type-binding.name
|
|
773
|
+
value: (await_expression
|
|
774
|
+
(call_expression
|
|
775
|
+
function: (member_expression) @type-binding.type))) @type-binding.alias
|
|
776
|
+
|
|
777
|
+
;; Awaited generic calls re-associate: \`await fn<T>(...)\` parses as
|
|
778
|
+
;; \`call_expression(function: await_expression(identifier), type_arguments, arguments)\`
|
|
779
|
+
;; — NOT as an await_expression wrapping a call_expression. Handle both
|
|
780
|
+
;; free and member forms so the chain-follow picks up the inner callee.
|
|
781
|
+
(variable_declarator
|
|
782
|
+
name: (identifier) @type-binding.name
|
|
783
|
+
value: (call_expression
|
|
784
|
+
function: (await_expression
|
|
785
|
+
(identifier) @type-binding.type))) @type-binding.alias
|
|
786
|
+
|
|
787
|
+
(variable_declarator
|
|
788
|
+
name: (identifier) @type-binding.name
|
|
789
|
+
value: (call_expression
|
|
790
|
+
function: (await_expression
|
|
791
|
+
(member_expression) @type-binding.type))) @type-binding.alias
|
|
792
|
+
|
|
793
|
+
;; Type bindings — member-access alias: \`const addr = user.address\`.
|
|
794
|
+
;; Full \`member_expression\` text feeds compound-receiver Case 3b.
|
|
795
|
+
(variable_declarator
|
|
796
|
+
name: (identifier) @type-binding.name
|
|
797
|
+
value: (member_expression) @type-binding.type) @type-binding.member-alias
|
|
798
|
+
|
|
799
|
+
;; Type bindings — identifier alias: \`const alias = user\`. Chain-follow
|
|
800
|
+
;; resolves alias via user's binding.
|
|
801
|
+
(variable_declarator
|
|
802
|
+
name: (identifier) @type-binding.name
|
|
803
|
+
value: (identifier) @type-binding.type) @type-binding.alias
|
|
804
|
+
|
|
805
|
+
;; Type bindings — \`as\` assertion: \`const u = x as User\`. Prefer
|
|
806
|
+
;; the assertion's target type over RHS inference. as_expression's right
|
|
807
|
+
;; child is the target type (positional; no field name).
|
|
808
|
+
(variable_declarator
|
|
809
|
+
name: (identifier) @type-binding.name
|
|
810
|
+
value: (as_expression
|
|
811
|
+
(_)
|
|
812
|
+
(type_identifier) @type-binding.type)) @type-binding.assertion
|
|
813
|
+
|
|
814
|
+
(variable_declarator
|
|
815
|
+
name: (identifier) @type-binding.name
|
|
816
|
+
value: (as_expression
|
|
817
|
+
(_)
|
|
818
|
+
(generic_type) @type-binding.type)) @type-binding.assertion
|
|
819
|
+
|
|
820
|
+
;; Type bindings — non-null assertion: \`const u = find()!\`. Unwrap to the
|
|
821
|
+
;; underlying call's function identifier (matches the call-alias pattern).
|
|
822
|
+
(variable_declarator
|
|
823
|
+
name: (identifier) @type-binding.name
|
|
824
|
+
value: (non_null_expression
|
|
825
|
+
(call_expression
|
|
826
|
+
function: (identifier) @type-binding.type))) @type-binding.alias
|
|
827
|
+
|
|
828
|
+
;; Type bindings — for-of element: \`for (const u of users)\` — bind u to
|
|
829
|
+
;; users (chain-follow unwraps to element type via stripGeneric).
|
|
830
|
+
(for_in_statement
|
|
831
|
+
left: (identifier) @type-binding.name
|
|
832
|
+
right: (identifier) @type-binding.type) @type-binding.alias
|
|
833
|
+
|
|
834
|
+
;; Type bindings — for-of call iterable: \`for (const u of getUsers())\`.
|
|
835
|
+
(for_in_statement
|
|
836
|
+
left: (identifier) @type-binding.name
|
|
837
|
+
right: (call_expression
|
|
838
|
+
function: (identifier) @type-binding.type)) @type-binding.alias
|
|
839
|
+
|
|
840
|
+
;; Type bindings — for-of member-call iterable: \`for (const u of svc.getUsers())\`.
|
|
841
|
+
(for_in_statement
|
|
842
|
+
left: (identifier) @type-binding.name
|
|
843
|
+
right: (call_expression
|
|
844
|
+
function: (member_expression) @type-binding.type)) @type-binding.alias
|
|
845
|
+
|
|
846
|
+
;; Type bindings — for-of member-access iterable: \`for (const u of this.users)\`.
|
|
847
|
+
;; Bind u to \`users\` (the attribute name); chain-follow resolves users
|
|
848
|
+
;; via the enclosing class's field binding.
|
|
849
|
+
(for_in_statement
|
|
850
|
+
left: (identifier) @type-binding.name
|
|
851
|
+
right: (member_expression
|
|
852
|
+
property: (property_identifier) @type-binding.type)) @type-binding.alias
|
|
853
|
+
|
|
854
|
+
;; Type bindings — class field annotation: \`private city: City\`.
|
|
855
|
+
(public_field_definition
|
|
856
|
+
name: (property_identifier) @type-binding.name
|
|
857
|
+
type: (type_annotation
|
|
858
|
+
(type_identifier) @type-binding.type)) @type-binding.annotation
|
|
859
|
+
|
|
860
|
+
(public_field_definition
|
|
861
|
+
name: (property_identifier) @type-binding.name
|
|
862
|
+
type: (type_annotation
|
|
863
|
+
(generic_type) @type-binding.type)) @type-binding.annotation
|
|
864
|
+
|
|
865
|
+
(public_field_definition
|
|
866
|
+
name: (property_identifier) @type-binding.name
|
|
867
|
+
type: (type_annotation
|
|
868
|
+
(predefined_type) @type-binding.type)) @type-binding.annotation
|
|
869
|
+
|
|
870
|
+
;; Class field with union / array / readonly wrappers:
|
|
871
|
+
;; \`private users: User[]\`, \`private repos: readonly Repo[]\`,
|
|
872
|
+
;; \`private x: City | null\`. interpret strips wrappers to the
|
|
873
|
+
;; discriminating type so chain-follow unwraps to the element.
|
|
874
|
+
(public_field_definition
|
|
875
|
+
name: (property_identifier) @type-binding.name
|
|
876
|
+
type: (type_annotation
|
|
877
|
+
(union_type) @type-binding.type)) @type-binding.annotation
|
|
878
|
+
|
|
879
|
+
(public_field_definition
|
|
880
|
+
name: (property_identifier) @type-binding.name
|
|
881
|
+
type: (type_annotation
|
|
882
|
+
(array_type) @type-binding.type)) @type-binding.annotation
|
|
883
|
+
|
|
884
|
+
(public_field_definition
|
|
885
|
+
name: (property_identifier) @type-binding.name
|
|
886
|
+
type: (type_annotation
|
|
887
|
+
(readonly_type) @type-binding.type)) @type-binding.annotation
|
|
888
|
+
|
|
889
|
+
;; Private class field annotation: \`#city: City\`.
|
|
890
|
+
(public_field_definition
|
|
891
|
+
name: (private_property_identifier) @type-binding.name
|
|
892
|
+
type: (type_annotation
|
|
893
|
+
(type_identifier) @type-binding.type)) @type-binding.annotation
|
|
894
|
+
|
|
895
|
+
;; Type bindings — class field constructor-inferred: \`private p = new Outer()\`.
|
|
896
|
+
;; The annotation patterns above cover a field that DECLARES its type; a field
|
|
897
|
+
;; whose type must be inferred from its initializer matched nothing, so it had
|
|
898
|
+
;; no typeBinding, so \`this.p\` could not be typed and the receiver fold declined
|
|
899
|
+
;; the whole chain — losing even the first, ordinary named link (#2807).
|
|
900
|
+
;;
|
|
901
|
+
;; Anchored on \`public_field_definition\` exactly like the annotation patterns,
|
|
902
|
+
;; so the binding lands in the same (class body) scope with no bindingScopeFor
|
|
903
|
+
;; override. \`annotation\` outranks \`constructor-inferred\` in
|
|
904
|
+
;; typeBindingStrength, so \`private p: Outer = new Outer()\` still resolves
|
|
905
|
+
;; through its annotation regardless of which pattern matches first.
|
|
906
|
+
;;
|
|
907
|
+
;; Kotlin and Swift express both a local and a stored property with ONE grammar
|
|
908
|
+
;; node (property_declaration) and so needed no separate field pattern; the
|
|
909
|
+
;; TypeScript grammar splits them (variable_declarator vs
|
|
910
|
+
;; public_field_definition), which is why only the local form was ever covered.
|
|
911
|
+
(public_field_definition
|
|
912
|
+
name: (property_identifier) @type-binding.name
|
|
913
|
+
value: (new_expression
|
|
914
|
+
constructor: (identifier) @type-binding.type)) @type-binding.constructor
|
|
915
|
+
|
|
916
|
+
;; Qualified: \`private p = new models.Outer()\` — mirrors the local form above;
|
|
917
|
+
;; the member_expression's text is resolved via QualifiedNameIndex.
|
|
918
|
+
(public_field_definition
|
|
919
|
+
name: (property_identifier) @type-binding.name
|
|
920
|
+
value: (new_expression
|
|
921
|
+
constructor: (member_expression) @type-binding.type)) @type-binding.constructor
|
|
922
|
+
|
|
923
|
+
;; Private-name field: \`#p = new Outer()\`.
|
|
924
|
+
(public_field_definition
|
|
925
|
+
name: (private_property_identifier) @type-binding.name
|
|
926
|
+
value: (new_expression
|
|
927
|
+
constructor: (identifier) @type-binding.type)) @type-binding.constructor
|
|
928
|
+
|
|
929
|
+
;; Type bindings — method return type: \`save(): User { … }\` / \`function f(): User { … }\`.
|
|
930
|
+
;; Function/method return-type is the type_annotation that is a direct
|
|
931
|
+
;; child of the function node (not the parameter's annotation). Anchor on
|
|
932
|
+
;; the function node so bindingScopeFor can hoist if the language requests
|
|
933
|
+
;; (TS keeps it on the method scope; we emit here and let the resolver
|
|
934
|
+
;; decide via hoistTypeBindingsToModule).
|
|
935
|
+
;;
|
|
936
|
+
;; Wrapper forms covered: plain \`User\`, generic \`Promise<User>\`,
|
|
937
|
+
;; array \`User[]\`, readonly \`readonly User[]\`, union \`User | null\`.
|
|
938
|
+
;; \`stripArraySuffix\` / \`stripReadonly\` / \`stripNullableUnion\` in
|
|
939
|
+
;; interpret reduce these to the discriminating element so chain-follow
|
|
940
|
+
;; can unwrap iterators returned from \`getUsers(): User[]\`.
|
|
941
|
+
(function_declaration
|
|
942
|
+
name: (identifier) @type-binding.name
|
|
943
|
+
return_type: (type_annotation
|
|
944
|
+
(type_identifier) @type-binding.type)) @type-binding.return
|
|
945
|
+
|
|
946
|
+
(function_declaration
|
|
947
|
+
name: (identifier) @type-binding.name
|
|
948
|
+
return_type: (type_annotation
|
|
949
|
+
(generic_type) @type-binding.type)) @type-binding.return
|
|
950
|
+
|
|
951
|
+
(function_declaration
|
|
952
|
+
name: (identifier) @type-binding.name
|
|
953
|
+
return_type: (type_annotation
|
|
954
|
+
(array_type) @type-binding.type)) @type-binding.return
|
|
955
|
+
|
|
956
|
+
(function_declaration
|
|
957
|
+
name: (identifier) @type-binding.name
|
|
958
|
+
return_type: (type_annotation
|
|
959
|
+
(readonly_type) @type-binding.type)) @type-binding.return
|
|
960
|
+
|
|
961
|
+
(function_declaration
|
|
962
|
+
name: (identifier) @type-binding.name
|
|
963
|
+
return_type: (type_annotation
|
|
964
|
+
(union_type) @type-binding.type)) @type-binding.return
|
|
965
|
+
|
|
966
|
+
(function_signature
|
|
967
|
+
name: (identifier) @type-binding.name
|
|
968
|
+
return_type: (type_annotation
|
|
969
|
+
(type_identifier) @type-binding.type)) @type-binding.return
|
|
970
|
+
|
|
971
|
+
(function_signature
|
|
972
|
+
name: (identifier) @type-binding.name
|
|
973
|
+
return_type: (type_annotation
|
|
974
|
+
(generic_type) @type-binding.type)) @type-binding.return
|
|
975
|
+
|
|
976
|
+
(function_signature
|
|
977
|
+
name: (identifier) @type-binding.name
|
|
978
|
+
return_type: (type_annotation
|
|
979
|
+
(array_type) @type-binding.type)) @type-binding.return
|
|
980
|
+
|
|
981
|
+
(function_signature
|
|
982
|
+
name: (identifier) @type-binding.name
|
|
983
|
+
return_type: (type_annotation
|
|
984
|
+
(readonly_type) @type-binding.type)) @type-binding.return
|
|
985
|
+
|
|
986
|
+
(function_signature
|
|
987
|
+
name: (identifier) @type-binding.name
|
|
988
|
+
return_type: (type_annotation
|
|
989
|
+
(union_type) @type-binding.type)) @type-binding.return
|
|
990
|
+
|
|
991
|
+
(method_definition
|
|
992
|
+
name: (property_identifier) @type-binding.name
|
|
993
|
+
return_type: (type_annotation
|
|
994
|
+
(type_identifier) @type-binding.type)) @type-binding.return
|
|
995
|
+
|
|
996
|
+
(method_definition
|
|
997
|
+
name: (property_identifier) @type-binding.name
|
|
998
|
+
return_type: (type_annotation
|
|
999
|
+
(generic_type) @type-binding.type)) @type-binding.return
|
|
1000
|
+
|
|
1001
|
+
(method_definition
|
|
1002
|
+
name: (property_identifier) @type-binding.name
|
|
1003
|
+
return_type: (type_annotation
|
|
1004
|
+
(array_type) @type-binding.type)) @type-binding.return
|
|
1005
|
+
|
|
1006
|
+
(method_definition
|
|
1007
|
+
name: (property_identifier) @type-binding.name
|
|
1008
|
+
return_type: (type_annotation
|
|
1009
|
+
(readonly_type) @type-binding.type)) @type-binding.return
|
|
1010
|
+
|
|
1011
|
+
(method_definition
|
|
1012
|
+
name: (property_identifier) @type-binding.name
|
|
1013
|
+
return_type: (type_annotation
|
|
1014
|
+
(union_type) @type-binding.type)) @type-binding.return
|
|
1015
|
+
|
|
1016
|
+
(method_signature
|
|
1017
|
+
name: (property_identifier) @type-binding.name
|
|
1018
|
+
return_type: (type_annotation
|
|
1019
|
+
(type_identifier) @type-binding.type)) @type-binding.return
|
|
1020
|
+
|
|
1021
|
+
(method_signature
|
|
1022
|
+
name: (property_identifier) @type-binding.name
|
|
1023
|
+
return_type: (type_annotation
|
|
1024
|
+
(generic_type) @type-binding.type)) @type-binding.return
|
|
1025
|
+
|
|
1026
|
+
(method_signature
|
|
1027
|
+
name: (property_identifier) @type-binding.name
|
|
1028
|
+
return_type: (type_annotation
|
|
1029
|
+
(array_type) @type-binding.type)) @type-binding.return
|
|
1030
|
+
|
|
1031
|
+
(method_signature
|
|
1032
|
+
name: (property_identifier) @type-binding.name
|
|
1033
|
+
return_type: (type_annotation
|
|
1034
|
+
(readonly_type) @type-binding.type)) @type-binding.return
|
|
1035
|
+
|
|
1036
|
+
(method_signature
|
|
1037
|
+
name: (property_identifier) @type-binding.name
|
|
1038
|
+
return_type: (type_annotation
|
|
1039
|
+
(union_type) @type-binding.type)) @type-binding.return
|
|
1040
|
+
|
|
1041
|
+
(abstract_method_signature
|
|
1042
|
+
name: (property_identifier) @type-binding.name
|
|
1043
|
+
return_type: (type_annotation
|
|
1044
|
+
(type_identifier) @type-binding.type)) @type-binding.return
|
|
1045
|
+
|
|
1046
|
+
(abstract_method_signature
|
|
1047
|
+
name: (property_identifier) @type-binding.name
|
|
1048
|
+
return_type: (type_annotation
|
|
1049
|
+
(generic_type) @type-binding.type)) @type-binding.return
|
|
1050
|
+
|
|
1051
|
+
;; Type bindings — assignment rebind: \`u = new User()\` (no \`const\`).
|
|
1052
|
+
(assignment_expression
|
|
1053
|
+
left: (identifier) @type-binding.name
|
|
1054
|
+
right: (new_expression
|
|
1055
|
+
constructor: (identifier) @type-binding.type)) @type-binding.constructor
|
|
1056
|
+
|
|
1057
|
+
;; Type bindings — field assigned through \`this\`: \`this.p = new Outer()\` on a
|
|
1058
|
+
;; field that declares no type (#2807). The rebind pattern above only matches a
|
|
1059
|
+
;; bare identifier LHS, so an unannotated field assigned in the constructor had
|
|
1060
|
+
;; no typeBinding at all. (An ANNOTATED field does not need this — its
|
|
1061
|
+
;; annotation already types it, which is why \`private p: Outer;\` + the same
|
|
1062
|
+
;; assignment always resolved.)
|
|
1063
|
+
;;
|
|
1064
|
+
;; The nesting is the whole safety property. \`this.x = new Y()\` is a legal
|
|
1065
|
+
;; statement ANYWHERE, and the binding it produces is hoisted onto the nearest
|
|
1066
|
+
;; enclosing Class — so a context-free version of this pattern typed a class's
|
|
1067
|
+
;; field from an assignment whose \`this\` was some OTHER object, overwriting the
|
|
1068
|
+
;; field's real type (pass4CollectTypeBindings resolves a same-source tie in
|
|
1069
|
+
;; favour of the LATER match). Requiring the chain
|
|
1070
|
+
;; \`class_body → method_definition → statement_block → expression_statement\`
|
|
1071
|
+
;; makes the marker fire only where \`this\` provably IS an instance of the class
|
|
1072
|
+
;; the binding lands on. It rejects, in order of how easily each was hit:
|
|
1073
|
+
;; a non-arrow callback inside a method (\`function () { this.x = new Y(); }\` —
|
|
1074
|
+
;; \`this\` is the call's receiver), an object-literal method (also a
|
|
1075
|
+
;; \`method_definition\`, but under \`object\`, not \`class_body\`), and module top
|
|
1076
|
+
;; level (no enclosing Class at all, where the hoist used to fall back to the
|
|
1077
|
+
;; innermost scope and could overwrite a module local of the same name).
|
|
1078
|
+
;;
|
|
1079
|
+
;; This mirrors \`synthesizeConstructorFieldBindings\` in
|
|
1080
|
+
;; \`languages/javascript/captures.ts\`, which walks only \`method_definition\`
|
|
1081
|
+
;; bodies and only their DIRECT \`expression_statement\` children — the two
|
|
1082
|
+
;; languages must not read the same source differently. TypeScript accepts any
|
|
1083
|
+
;; method rather than only \`constructor\` (a later \`setUp()\` assignment types
|
|
1084
|
+
;; the field just as well), which is the one intended divergence.
|
|
1085
|
+
;;
|
|
1086
|
+
;; Two shapes are deliberately NOT matched, both erring toward no binding:
|
|
1087
|
+
;; an assignment nested in a block (\`if (…) { this.p = new Outer(); }\`) and one
|
|
1088
|
+
;; inside an arrow (\`() => { this.p = new Outer(); }\`, where \`this\` IS the
|
|
1089
|
+
;; instance). Both are only ever a MISSING binding, never a wrong one, and JS
|
|
1090
|
+
;; declines them too.
|
|
1091
|
+
;;
|
|
1092
|
+
;; \`@type-binding.this-field\` is a MARKER, not the anchor: it sits on the narrow
|
|
1093
|
+
;; \`(this)\` node, so anchorCaptureFor's broadest-range rule keeps the whole
|
|
1094
|
+
;; assignment_expression (@type-binding.constructor) as the anchor and the
|
|
1095
|
+
;; source stays \`constructor-inferred\`. tsBindingScopeFor reads the marker to
|
|
1096
|
+
;; hoist the binding onto the enclosing Class scope — without that hoist the
|
|
1097
|
+
;; binding would land on the method's own Function scope, where
|
|
1098
|
+
;; typeOfMemberOnClass never looks. The marker must stay specific to THIS
|
|
1099
|
+
;; pattern: hoisting every constructor-inferred binding would move method-local
|
|
1100
|
+
;; \`const o = new Outer()\` out of its own scope.
|
|
1101
|
+
;;
|
|
1102
|
+
;; One constraint the grammar cannot carry: \`static\` is an ANONYMOUS token on
|
|
1103
|
+
;; \`method_definition\` with no field name, and tree-sitter patterns cannot
|
|
1104
|
+
;; negate one. \`this\` in a static method is the class object, so that last
|
|
1105
|
+
;; wrong receiver is dropped by \`emitTsScopeCaptures\` instead.
|
|
1106
|
+
(class_body
|
|
1107
|
+
(method_definition
|
|
1108
|
+
body: (statement_block
|
|
1109
|
+
(expression_statement
|
|
1110
|
+
(assignment_expression
|
|
1111
|
+
left: (member_expression
|
|
1112
|
+
object: (this) @type-binding.this-field
|
|
1113
|
+
property: (property_identifier) @type-binding.name)
|
|
1114
|
+
right: (new_expression
|
|
1115
|
+
constructor: (identifier) @type-binding.type)) @type-binding.constructor))))
|
|
1116
|
+
|
|
1117
|
+
;; Qualified form: \`this.p = new models.Outer()\`.
|
|
1118
|
+
(class_body
|
|
1119
|
+
(method_definition
|
|
1120
|
+
body: (statement_block
|
|
1121
|
+
(expression_statement
|
|
1122
|
+
(assignment_expression
|
|
1123
|
+
left: (member_expression
|
|
1124
|
+
object: (this) @type-binding.this-field
|
|
1125
|
+
property: (property_identifier) @type-binding.name)
|
|
1126
|
+
right: (new_expression
|
|
1127
|
+
constructor: (member_expression) @type-binding.type)) @type-binding.constructor))))
|
|
1128
|
+
|
|
1129
|
+
(assignment_expression
|
|
1130
|
+
left: (identifier) @type-binding.name
|
|
1131
|
+
right: (call_expression
|
|
1132
|
+
function: (identifier) @type-binding.type)) @type-binding.alias
|
|
1133
|
+
|
|
1134
|
+
(assignment_expression
|
|
1135
|
+
left: (identifier) @type-binding.name
|
|
1136
|
+
right: (identifier) @type-binding.type) @type-binding.alias
|
|
1137
|
+
|
|
1138
|
+
;; References — free calls: \`fn(args)\`. Exclude the dynamic-import form,
|
|
1139
|
+
;; which would otherwise double-classify as a call to a built-in \`import\`.
|
|
1140
|
+
;; tree-sitter can't negate (import) with #not-eq?; the captures.ts layer
|
|
1141
|
+
;; filters dynamic-imports BEFORE the free-call is consumed.
|
|
1142
|
+
(call_expression
|
|
1143
|
+
function: (identifier) @reference.name) @reference.call.free
|
|
1144
|
+
|
|
1145
|
+
;; Awaited free call with generics: \`await fn<T>(...)\` — re-associated
|
|
1146
|
+
;; by tree-sitter as \`call_expression(function: await_expression(identifier))\`.
|
|
1147
|
+
(call_expression
|
|
1148
|
+
function: (await_expression
|
|
1149
|
+
(identifier) @reference.name)) @reference.call.free
|
|
1150
|
+
|
|
1151
|
+
;; References — member calls: \`obj.method()\` (includes optional chain).
|
|
1152
|
+
;; The (_) wildcard matches any named receiver including \`this\` /
|
|
1153
|
+
;; \`super\` (both are named nodes in tree-sitter-typescript, unlike C#'s
|
|
1154
|
+
;; anonymous tokens).
|
|
1155
|
+
(call_expression
|
|
1156
|
+
function: (member_expression
|
|
1157
|
+
object: (_) @reference.receiver
|
|
1158
|
+
property: (property_identifier) @reference.name)) @reference.call.member
|
|
1159
|
+
|
|
1160
|
+
;; Awaited member call with generics: \`await svc.m<T>(...)\` — re-associated
|
|
1161
|
+
;; as \`call_expression(function: await_expression(member_expression))\`.
|
|
1162
|
+
(call_expression
|
|
1163
|
+
function: (await_expression
|
|
1164
|
+
(member_expression
|
|
1165
|
+
object: (_) @reference.receiver
|
|
1166
|
+
property: (property_identifier) @reference.name))) @reference.call.member
|
|
1167
|
+
|
|
1168
|
+
;; References — constructor calls: \`new User()\` / \`new ns.User()\`.
|
|
1169
|
+
(new_expression
|
|
1170
|
+
constructor: (identifier) @reference.name) @reference.call.constructor
|
|
1171
|
+
|
|
1172
|
+
(new_expression
|
|
1173
|
+
constructor: (member_expression
|
|
1174
|
+
property: (property_identifier) @reference.name) @reference.call.constructor.qualified) @reference.call.constructor
|
|
1175
|
+
|
|
1176
|
+
;; References — write access: \`obj.field = value\`.
|
|
1177
|
+
(assignment_expression
|
|
1178
|
+
left: (member_expression
|
|
1179
|
+
object: (_) @reference.receiver
|
|
1180
|
+
property: (property_identifier) @reference.name)) @reference.write.member
|
|
1181
|
+
|
|
1182
|
+
(augmented_assignment_expression
|
|
1183
|
+
left: (member_expression
|
|
1184
|
+
object: (_) @reference.receiver
|
|
1185
|
+
property: (property_identifier) @reference.name)) @reference.write.member
|
|
1186
|
+
|
|
1187
|
+
;; References — read access: \`obj.field\` used in a read context.
|
|
1188
|
+
;; Fires on EVERY member_expression; \`emitTsScopeCaptures\` filters out
|
|
1189
|
+
;; contexts that shouldn't emit a read ACCESSES edge (LHS of assignment,
|
|
1190
|
+
;; the \`function:\` of a call_expression, property_identifier inside a
|
|
1191
|
+
;; computed member name, etc.). Keeping the filter on the emit side lets
|
|
1192
|
+
;; tree-sitter's pattern stay simple and we don't replicate AST-context
|
|
1193
|
+
;; predicates in the query itself.
|
|
1194
|
+
(member_expression
|
|
1195
|
+
object: (_) @reference.receiver
|
|
1196
|
+
property: (property_identifier) @reference.name) @reference.read.member
|
|
1197
|
+
|
|
1198
|
+
;; References — value position (#2437): a function identifier assigned as an
|
|
1199
|
+
;; object-literal property value (\`{ emitScopeCaptures: emitCppScopeCaptures }\`)
|
|
1200
|
+
;; or shorthand (\`{ emitHook }\`). Resolution keeps only callable targets
|
|
1201
|
+
;; (MethodRegistry), so plain-value pairs (\`{ port: DEFAULT_PORT }\`) emit
|
|
1202
|
+
;; nothing; the emitted edge is a reference-class USES (registration ≠
|
|
1203
|
+
;; invocation). \`@reference.property-key\` records the key so the
|
|
1204
|
+
;; property-dispatch pass can synthesize CALLS at \`x.<key>()\` sites; for
|
|
1205
|
+
;; shorthand the key IS the name (both tags on one node). Two separate
|
|
1206
|
+
;; patterns — never combined in \`[...]\` (tree-sitter 0.21 drops alternation
|
|
1207
|
+
;; siblings around predicates). Destructuring shorthand is a different node
|
|
1208
|
+
;; (\`shorthand_property_identifier_pattern\`), so \`const { a } = o\` cannot
|
|
1209
|
+
;; match; string/computed keys carry no \`property_identifier\` and register
|
|
1210
|
+
;; without a dispatch key.
|
|
1211
|
+
(pair
|
|
1212
|
+
key: (property_identifier) @reference.property-key
|
|
1213
|
+
value: (identifier) @reference.name @reference.value-ref)
|
|
1214
|
+
|
|
1215
|
+
(object
|
|
1216
|
+
(shorthand_property_identifier) @reference.name @reference.property-key @reference.value-ref)
|
|
1217
|
+
`;
|
|
1218
|
+
/**
|
|
1219
|
+
* JSX-only query suffix. Appended to the base query when compiling
|
|
1220
|
+
* against the TSX grammar; NOT compiled against the plain TS grammar
|
|
1221
|
+
* (which has no \`jsx_*\` node types and would reject these patterns).
|
|
1222
|
+
*
|
|
1223
|
+
* Why JSX as a CALLS edge: \`<Foo />\` is syntactic sugar for \`Foo(props)\`
|
|
1224
|
+
* and the React component is invoked by the renderer, so for blast-radius
|
|
1225
|
+
* (\`gitnexus_impact("Badge", direction: "upstream")\`) and call-graph
|
|
1226
|
+
* (\`gitnexus_context("Foo")\`) purposes JSX usage IS a call. Routing
|
|
1227
|
+
* through \`@reference.call.free\` / \`@reference.call.member\` makes the
|
|
1228
|
+
* downstream caller-walk + edge-emission paths handle JSX uniformly with
|
|
1229
|
+
* ordinary call expressions — no new edge type, no schema changes.
|
|
1230
|
+
*
|
|
1231
|
+
* Identifier-only JSX is filtered to PascalCase via \`(#match? ... "^[A-Z]")\`
|
|
1232
|
+
* so \`<div>\`, \`<span>\`, \`<button>\` and other native HTML elements (which
|
|
1233
|
+
* by JSX convention start lowercase) don't emit edges to nonexistent
|
|
1234
|
+
* "div" / "span" symbols. Member-form JSX (\`<Foo.Bar />\`) is always a
|
|
1235
|
+
* component (HTML element names can't contain dots), so no predicate
|
|
1236
|
+
* filter is applied there.
|
|
1237
|
+
*
|
|
1238
|
+
* Both \`jsx_self_closing_element\` (\`<Foo />\`) and \`jsx_opening_element\`
|
|
1239
|
+
* (\`<Foo>...</Foo>\`) emit; the closing tag is intentionally NOT captured —
|
|
1240
|
+
* each JSX element should emit exactly one CALLS edge per use site.
|
|
1241
|
+
*/
|
|
1242
|
+
const TSX_JSX_QUERY_SUFFIX = `
|
|
1243
|
+
;; <Foo />
|
|
1244
|
+
((jsx_self_closing_element
|
|
1245
|
+
name: (identifier) @reference.name) @reference.call.free
|
|
1246
|
+
(#match? @reference.name "^[A-Z]"))
|
|
1247
|
+
|
|
1248
|
+
;; <Foo> ... </Foo> (paired form — match the opening tag only)
|
|
1249
|
+
((jsx_opening_element
|
|
1250
|
+
name: (identifier) @reference.name) @reference.call.free
|
|
1251
|
+
(#match? @reference.name "^[A-Z]"))
|
|
1252
|
+
|
|
1253
|
+
;; <Foo.Bar /> / <Container.Section.Title /> — namespaced JSX
|
|
1254
|
+
(jsx_self_closing_element
|
|
1255
|
+
name: (member_expression
|
|
1256
|
+
object: (_) @reference.receiver
|
|
1257
|
+
property: (property_identifier) @reference.name)) @reference.call.member
|
|
1258
|
+
|
|
1259
|
+
(jsx_opening_element
|
|
1260
|
+
name: (member_expression
|
|
1261
|
+
object: (_) @reference.receiver
|
|
1262
|
+
property: (property_identifier) @reference.name)) @reference.call.member
|
|
1263
|
+
`;
|
|
1264
|
+
let _tsParser = null;
|
|
1265
|
+
let _tsxParser = null;
|
|
1266
|
+
let _tsQuery = null;
|
|
1267
|
+
let _tsxQuery = null;
|
|
1268
|
+
/**
|
|
1269
|
+
* Return the right tree-sitter parser for `filePath` (or the TS parser
|
|
1270
|
+
* when no path is given — the legacy callsite shape).
|
|
1271
|
+
*/
|
|
1272
|
+
function getTsParser(filePath) {
|
|
1273
|
+
if (filePath !== undefined && isTsxFile(filePath)) {
|
|
1274
|
+
if (_tsxParser === null) {
|
|
1275
|
+
_tsxParser = new tree_sitter_1.default();
|
|
1276
|
+
_tsxParser.setLanguage(TSX_GRAMMAR);
|
|
1277
|
+
}
|
|
1278
|
+
return _tsxParser;
|
|
1279
|
+
}
|
|
1280
|
+
if (_tsParser === null) {
|
|
1281
|
+
_tsParser = new tree_sitter_1.default();
|
|
1282
|
+
_tsParser.setLanguage(TS_GRAMMAR);
|
|
1283
|
+
}
|
|
1284
|
+
return _tsParser;
|
|
1285
|
+
}
|
|
1286
|
+
/**
|
|
1287
|
+
* Return the right tree-sitter Query (compiled against the same grammar
|
|
1288
|
+
* as the parser). A Query bound to the `typescript` grammar can NOT be
|
|
1289
|
+
* executed against a Tree produced by the `tsx` grammar — tree-sitter
|
|
1290
|
+
* matches by node-type id, and the two grammars have separate id
|
|
1291
|
+
* spaces.
|
|
1292
|
+
*
|
|
1293
|
+
* The TSX query is compiled with the JSX-as-call patterns appended.
|
|
1294
|
+
* Those patterns reference `jsx_self_closing_element` /
|
|
1295
|
+
* `jsx_opening_element` which exist only in the TSX grammar — embedding
|
|
1296
|
+
* them in the plain TS query would throw `Query.InvalidNodeType` at
|
|
1297
|
+
* compile time (and even if it didn't, the patterns would never fire on
|
|
1298
|
+
* `.ts` source).
|
|
1299
|
+
*/
|
|
1300
|
+
function getTsScopeQuery(filePath) {
|
|
1301
|
+
if (filePath !== undefined && isTsxFile(filePath)) {
|
|
1302
|
+
if (_tsxQuery === null) {
|
|
1303
|
+
_tsxQuery = new tree_sitter_1.default.Query(TSX_GRAMMAR, exports.TYPESCRIPT_SCOPE_QUERY + TSX_JSX_QUERY_SUFFIX);
|
|
1304
|
+
}
|
|
1305
|
+
return _tsxQuery;
|
|
1306
|
+
}
|
|
1307
|
+
if (_tsQuery === null) {
|
|
1308
|
+
_tsQuery = new tree_sitter_1.default.Query(TS_GRAMMAR, exports.TYPESCRIPT_SCOPE_QUERY);
|
|
1309
|
+
}
|
|
1310
|
+
return _tsQuery;
|
|
1311
|
+
}
|
|
1312
|
+
/**
|
|
1313
|
+
* Validate that a cached `Tree` was produced by the grammar matching
|
|
1314
|
+
* `filePath` (TSX vs TypeScript). The runtime tree-sitter `Tree` exposes
|
|
1315
|
+
* `getLanguage()` (returning the grammar object the parser was bound
|
|
1316
|
+
* to); the .d.ts is incomplete, so we reach via a cast. Identity
|
|
1317
|
+
* comparison against `TSX_GRAMMAR` / `TS_GRAMMAR` is exact: the same
|
|
1318
|
+
* module instance produces both. If `getLanguage` is unavailable for
|
|
1319
|
+
* any reason, return true to keep behavior backwards-compatible (the
|
|
1320
|
+
* original code never validated grammar at all).
|
|
1321
|
+
*/
|
|
1322
|
+
function tsCachedTreeMatchesGrammar(tree, filePath) {
|
|
1323
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1324
|
+
const lang = tree?.getLanguage?.();
|
|
1325
|
+
if (lang === undefined || lang === null)
|
|
1326
|
+
return true;
|
|
1327
|
+
return isTsxFile(filePath) ? lang === TSX_GRAMMAR : lang === TS_GRAMMAR;
|
|
1328
|
+
}
|