cgraphx 2.0.2 → 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/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/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,472 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Scope-resolution → legacy graph-node ID bridging.
|
|
4
|
+
*
|
|
5
|
+
* Two functions:
|
|
6
|
+
* - `resolveDefGraphId` — turn a scope-resolution `SymbolDefinition`
|
|
7
|
+
* into the graph's node id for the corresponding legacy node.
|
|
8
|
+
* - `resolveCallerGraphId` — walk a scope chain from a reference
|
|
9
|
+
* site upward to find the enclosing function/method/class and
|
|
10
|
+
* return its graph-node id. Falls back to the File node for
|
|
11
|
+
* module-level calls so those still get an edge source.
|
|
12
|
+
*
|
|
13
|
+
* Next-consumer contract: language-agnostic. Any OO language with
|
|
14
|
+
* file-level module semantics (TypeScript, Java, Go, Kotlin) can
|
|
15
|
+
* reuse `resolveCallerGraphId` as-is. Languages with different
|
|
16
|
+
* top-level semantics (COBOL programs, Rust crate modules) may want
|
|
17
|
+
* a different file-level fallback — cross that bridge when they
|
|
18
|
+
* migrate.
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.CALLER_ANCHOR_LABELS = void 0;
|
|
22
|
+
exports.resolveDefGraphId = resolveDefGraphId;
|
|
23
|
+
exports.simpleQualifiedName = simpleQualifiedName;
|
|
24
|
+
exports.resolveCallerGraphId = resolveCallerGraphId;
|
|
25
|
+
const utils_js_1 = require("../../../../lib/utils.js");
|
|
26
|
+
const node_lookup_js_1 = require("../graph-bridge/node-lookup.js");
|
|
27
|
+
const callable_labels_js_1 = require("../../utils/callable-labels.js");
|
|
28
|
+
const template_arguments_js_1 = require("../../utils/template-arguments.js");
|
|
29
|
+
const method_props_js_1 = require("../../utils/method-props.js");
|
|
30
|
+
const definition_id_js_1 = require("../utils/definition-id.js");
|
|
31
|
+
/**
|
|
32
|
+
* Labels that may legitimately ANCHOR a CALLS/ACCESSES edge as the
|
|
33
|
+
* source ("caller"). A Variable / Property can be the TARGET of an
|
|
34
|
+
* edge (e.g., a write-access to `user.name`), but it cannot be a
|
|
35
|
+
* caller — variables don't execute code, so attributing a call to a
|
|
36
|
+
* sibling Variable in the same scope produces nonsense edges like
|
|
37
|
+
* `Variable:create → Function:create` (which the simpleKey fallback
|
|
38
|
+
* in `resolveDefGraphId` then silently rewrites to
|
|
39
|
+
* `Function:create → Function:create`, a self-loop that doesn't exist
|
|
40
|
+
* in the source).
|
|
41
|
+
*
|
|
42
|
+
* Module-level call expressions inside a `const X = expr(args)`
|
|
43
|
+
* declaration are the canonical case where this used to fail: the
|
|
44
|
+
* walk-up over module scope's ownedDefs (only Variables) would land
|
|
45
|
+
* on the FIRST Variable, get name-aliased to its sibling Function
|
|
46
|
+
* with the same simple name, and emit a self-CALLS. With this label
|
|
47
|
+
* restricted to function/class-likes, those calls correctly fall
|
|
48
|
+
* through to the File-node fallback at the bottom of the walk.
|
|
49
|
+
*/
|
|
50
|
+
exports.CALLER_ANCHOR_LABELS = new Set([
|
|
51
|
+
'Function',
|
|
52
|
+
'Method',
|
|
53
|
+
'Constructor',
|
|
54
|
+
'Module',
|
|
55
|
+
'Class',
|
|
56
|
+
'Interface',
|
|
57
|
+
'Struct',
|
|
58
|
+
'Enum',
|
|
59
|
+
// Record is class-like executable context for declaration initializers.
|
|
60
|
+
// Without this anchor, calls from Java static-field / C# property initializers
|
|
61
|
+
// fall through to File even though the canonical Record node is linkable.
|
|
62
|
+
'Record',
|
|
63
|
+
]);
|
|
64
|
+
function isCallerAnchorLabel(label) {
|
|
65
|
+
return exports.CALLER_ANCHOR_LABELS.has(label);
|
|
66
|
+
}
|
|
67
|
+
function rangeContainsPoint(range, at) {
|
|
68
|
+
if (at.startLine < range.startLine || at.startLine > range.endLine)
|
|
69
|
+
return false;
|
|
70
|
+
if (at.startLine === range.startLine && at.startCol < range.startCol)
|
|
71
|
+
return false;
|
|
72
|
+
if (at.startLine === range.endLine && at.startCol > range.endCol)
|
|
73
|
+
return false;
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Adapter over the canonical {@link isOverloadableCallable} — deliberately NOT a
|
|
78
|
+
* second spelling of the label set. An earlier revision of this file inlined
|
|
79
|
+
* `Function | Method | Constructor` here, which recreated the exact twin-list
|
|
80
|
+
* drift this PR adds a guard test for elsewhere.
|
|
81
|
+
*/
|
|
82
|
+
const isCallableDef = (d) => (0, callable_labels_js_1.isOverloadableCallable)(d.type);
|
|
83
|
+
/**
|
|
84
|
+
* True when `range` is the body of `def` itself — the scope's start position
|
|
85
|
+
* equals the def's declaration position.
|
|
86
|
+
*
|
|
87
|
+
* Safe to compare directly: `scope-extractor.ts` builds a def id as
|
|
88
|
+
* `def:<filePath>#<startLine>:<startCol>:<type>:<name>` from the same `Range`
|
|
89
|
+
* a scope carries, so both sides share one coordinate base and need no
|
|
90
|
+
* conversion. (Do not "fix" this against the 1-based reading in
|
|
91
|
+
* `defStartLine`'s docblock — what matters here is that the two sides agree
|
|
92
|
+
* with each other, not which base they use.)
|
|
93
|
+
*/
|
|
94
|
+
function scopeIsCallableBody(range, def) {
|
|
95
|
+
const position = (0, definition_id_js_1.definitionIdPosition)(def.nodeId, def.filePath);
|
|
96
|
+
if (position === undefined)
|
|
97
|
+
return false;
|
|
98
|
+
return position.line === range.startLine && position.column === range.startCol;
|
|
99
|
+
}
|
|
100
|
+
/** Pick the callable that owns `atRange` when multiple overloads share a class scope. */
|
|
101
|
+
function pickCallerCallableDef(scope, scopes, atRange) {
|
|
102
|
+
if (atRange !== undefined) {
|
|
103
|
+
for (const childId of scopes.scopeTree.getChildren(scope.id)) {
|
|
104
|
+
const child = scopes.scopeTree.getScope(childId);
|
|
105
|
+
if (child === undefined)
|
|
106
|
+
continue;
|
|
107
|
+
if (!rangeContainsPoint(child.range, atRange))
|
|
108
|
+
continue;
|
|
109
|
+
const childCallable = child.ownedDefs.find(isCallableDef);
|
|
110
|
+
if (childCallable === undefined)
|
|
111
|
+
continue;
|
|
112
|
+
if (child.kind === 'Function')
|
|
113
|
+
return { def: childCallable, fromChildScope: true };
|
|
114
|
+
// A Block-kind scope is a callable boundary ONLY when the scope IS that
|
|
115
|
+
// callable's own body. Kotlin `lambda_literal` and Ruby `do_block`/`block`
|
|
116
|
+
// are @scope.block deliberately (#1757 smart casts), so the kind gate
|
|
117
|
+
// alone would never let a closure there become a call SOURCE (#2699).
|
|
118
|
+
//
|
|
119
|
+
// But relaxing the gate to accept ANY Block owning a callable is wrong:
|
|
120
|
+
// a nested `fun foo()` declared inside a block is owned by that block, so
|
|
121
|
+
// a call made at BLOCK level — outside foo — would be misattributed to
|
|
122
|
+
// foo. The alignment test discriminates them. For a closure the
|
|
123
|
+
// declaration and the scope sit on the SAME node (the anchor discipline
|
|
124
|
+
// documented in javascript/query.ts), so their start positions match; for
|
|
125
|
+
// a nested function the block starts at `{` and the def starts at the
|
|
126
|
+
// declaration, so they do not.
|
|
127
|
+
if (child.kind === 'Block' && scopeIsCallableBody(child.range, childCallable)) {
|
|
128
|
+
return { def: childCallable, fromChildScope: true };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const own = scope.ownedDefs.find(isCallableDef);
|
|
133
|
+
return own === undefined ? undefined : { def: own, fromChildScope: false };
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Look up a `SymbolDefinition` in the graph node lookup.
|
|
137
|
+
*
|
|
138
|
+
* Tries the type-prefixed fully-qualified key FIRST. That's the only
|
|
139
|
+
* correct key when:
|
|
140
|
+
* - Two classes in the same file define a method with the same
|
|
141
|
+
* simple name (`class User: def save` + `class Document: def save`).
|
|
142
|
+
* - A top-level function and a class method share a simple name
|
|
143
|
+
* (`def save` + `class User: def save` — the Function's qualifier
|
|
144
|
+
* is just `save`, which would alias the Method's simple-key slot
|
|
145
|
+
* without the type prefix).
|
|
146
|
+
*
|
|
147
|
+
* Falls back to the simple name for definitions whose qualifier the
|
|
148
|
+
* lookup didn't capture (rare, but keeps cross-file simple-name
|
|
149
|
+
* resolution working for languages that don't yet synthesize
|
|
150
|
+
* qualifiers).
|
|
151
|
+
*/
|
|
152
|
+
/**
|
|
153
|
+
* Extract the 1-based declaration line from a scope-resolution def id.
|
|
154
|
+
* Shape: `def:<filePath>#<line>:<col>:<...>`; `undefined` when it doesn't match.
|
|
155
|
+
*/
|
|
156
|
+
function defStartLine(nodeId, filePath) {
|
|
157
|
+
return (0, definition_id_js_1.definitionIdPosition)(nodeId, filePath)?.line;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Trailing segment of a dotted qualified name (`Outer.inner` -> `inner`),
|
|
161
|
+
* with any function-local `@line:col` identity suffix stripped
|
|
162
|
+
* (`run.pick@5:10` -> `pick`).
|
|
163
|
+
*
|
|
164
|
+
* The graph node's `name` property is the bare source name, so the position
|
|
165
|
+
* key must compare against that — the position it carries is already the
|
|
166
|
+
* disambiguator, and leaving the suffix on would make every local miss.
|
|
167
|
+
*/
|
|
168
|
+
function simpleNameOf(qualifiedName) {
|
|
169
|
+
const dot = qualifiedName.lastIndexOf('.');
|
|
170
|
+
const tail = dot === -1 ? qualifiedName : qualifiedName.slice(dot + 1);
|
|
171
|
+
return tail.replace(LOCAL_IDENTITY_SUFFIX, '');
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The function-local identity marker appended by `localIdentity` (`name@row:col`).
|
|
175
|
+
* Shared so the stripper above and the fail-closed guard in
|
|
176
|
+
* `resolveCallerGraphId` cannot disagree about what counts as a local.
|
|
177
|
+
*/
|
|
178
|
+
const LOCAL_IDENTITY_SUFFIX = /@\d+:\d+$/;
|
|
179
|
+
/**
|
|
180
|
+
* The OTHER callable label the same construct may be registered under.
|
|
181
|
+
*
|
|
182
|
+
* A def and its graph node describe one construct, but they do not always agree
|
|
183
|
+
* on its LABEL: some structure phases emit a type's methods as `Function` nodes
|
|
184
|
+
* while the scope extractor derives `Method` from the `@declaration.method`
|
|
185
|
+
* anchor. Every key `resolveDefGraphId` builds is label-scoped, so such a pair
|
|
186
|
+
* misses ALL of them and lands on the label-agnostic, first-write-wins
|
|
187
|
+
* `simpleKey` at the bottom (#2807 follow-up, measured in Swift).
|
|
188
|
+
*
|
|
189
|
+
* ONE definition, consulted by all three key families — position, local-name
|
|
190
|
+
* guard, qualified — because they are not independent: leaving it out of the
|
|
191
|
+
* position key makes the fail-closed guard beside it UNREACHABLE for exactly the
|
|
192
|
+
* split the qualified retry serves, so the retry inherits a case the guard was
|
|
193
|
+
* written to stop (a function-local aliased onto a same-named class method).
|
|
194
|
+
* What each family may do with it differs and is documented at each site.
|
|
195
|
+
*/
|
|
196
|
+
function siblingCallableLabel(label) {
|
|
197
|
+
if (label === 'Method')
|
|
198
|
+
return 'Function';
|
|
199
|
+
if (label === 'Function')
|
|
200
|
+
return 'Method';
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
function resolveDefGraphId(filePath, def, nodeLookup) {
|
|
204
|
+
const qn = def.qualifiedName;
|
|
205
|
+
if (qn === undefined || qn.length === 0)
|
|
206
|
+
return undefined;
|
|
207
|
+
if (def.type !== undefined) {
|
|
208
|
+
// ONE binding for all three key families — see `siblingCallableLabel`, which
|
|
209
|
+
// documents why they cannot be given independent answers. What each family
|
|
210
|
+
// is allowed to DO with it still differs, and is documented at each site.
|
|
211
|
+
const siblingLabel = siblingCallableLabel(def.type);
|
|
212
|
+
// Position key FIRST (#2699). A def and its graph node are the same
|
|
213
|
+
// construct, so they share a source line — the only evidence that
|
|
214
|
+
// separates a function-local declaration from a same-named file-level one
|
|
215
|
+
// without either side having to model the scope chain. Node ids are
|
|
216
|
+
// 0-based, def ids 1-based. An `AMBIGUOUS_POSITION` tombstone (two
|
|
217
|
+
// callables on one line) falls through to the name-based keys below.
|
|
218
|
+
//
|
|
219
|
+
// For a closure binding the two query channels still anchor on different
|
|
220
|
+
// AST nodes (outer wrapper vs inner callable), but the graph node's
|
|
221
|
+
// `startLine` follows the initializer (#2735) so this join matches even
|
|
222
|
+
// when the binding is split across lines.
|
|
223
|
+
const line = defStartLine(def.nodeId, filePath);
|
|
224
|
+
if (line !== undefined && (0, callable_labels_js_1.isPositionQualifiedLocalLabel)(def.type)) {
|
|
225
|
+
const simple = simpleNameOf(qn);
|
|
226
|
+
const posHit = nodeLookup.get((0, node_lookup_js_1.positionKey)(filePath, def.type, line - 1, simple));
|
|
227
|
+
if (posHit !== undefined && posHit !== node_lookup_js_1.AMBIGUOUS_POSITION)
|
|
228
|
+
return posHit;
|
|
229
|
+
// Retry under the sibling callable label when the def's OWN label
|
|
230
|
+
// registered NOTHING here — see `siblingCallableLabel`. Both keys in this
|
|
231
|
+
// block are label-scoped, so under a split the position join misses and
|
|
232
|
+
// the guard below cannot fire, and the def falls through to the qualified
|
|
233
|
+
// retry that ends on the class method of the same name: a function-local
|
|
234
|
+
// `func helper` inside `Host.run` was aliased onto `Host.helper`, taking
|
|
235
|
+
// its calls with it, even at a different arity.
|
|
236
|
+
//
|
|
237
|
+
// Deliberately NOT dot-gated the way the qualified retry is: this key is
|
|
238
|
+
// not a name. `(file, line, simple name)` identifies one declaration by
|
|
239
|
+
// itself — that is why `positionKey` needs no qualifier at all — so
|
|
240
|
+
// crossing the two callable labels here cannot alias a top-level `save`
|
|
241
|
+
// onto a class's `save` the way a bare NAME would.
|
|
242
|
+
//
|
|
243
|
+
// Gated on `posHit === undefined` so an `AMBIGUOUS_POSITION` tombstone
|
|
244
|
+
// keeps meaning ambiguous: two callables already claim this line under the
|
|
245
|
+
// def's own label, and relabelling must not resolve by picking a third.
|
|
246
|
+
if (posHit === undefined && siblingLabel !== undefined) {
|
|
247
|
+
const siblingPosHit = nodeLookup.get((0, node_lookup_js_1.positionKey)(filePath, siblingLabel, line - 1, simple));
|
|
248
|
+
if (siblingPosHit !== undefined && siblingPosHit !== node_lookup_js_1.AMBIGUOUS_POSITION) {
|
|
249
|
+
return siblingPosHit;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// FAIL CLOSED when a function-local of this name exists in the file (#2699
|
|
253
|
+
// follow-up). Falling through to the name keys would end at the label-agnostic,
|
|
254
|
+
// first-write-wins `simpleKey` below and alias this def onto whichever same-named
|
|
255
|
+
// callable was registered first — reproducibly minting a FALSE edge. A missing
|
|
256
|
+
// edge is the correct failure direction for a graph whose consumers include
|
|
257
|
+
// `impact`; a fabricated caller is not. Gated on `localNameKey` so this ONLY
|
|
258
|
+
// fires where the collision is real — a file with no such local keeps its
|
|
259
|
+
// previous fallback behaviour, which is what preserves legitimate anchor
|
|
260
|
+
// differences such as a Vue SFC's `lineOffset`.
|
|
261
|
+
//
|
|
262
|
+
// Multi-line closure bindings are NOT this case anymore (#2735): their graph
|
|
263
|
+
// `startLine` follows the initializer, so the position key above hits.
|
|
264
|
+
if (nodeLookup.get((0, node_lookup_js_1.localNameKey)(filePath, def.type, simple)) !== undefined) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
// Same guard under the sibling label: a local the structure phase
|
|
268
|
+
// registered as `Function` must still stop a `Method`-labelled def of that
|
|
269
|
+
// name from reaching `simpleKey`, or the split re-opens the fabricated
|
|
270
|
+
// edge this guard exists to close. Unlike the position retry above this
|
|
271
|
+
// arm is NOT conditioned on the own-label lookup missing — it only ever
|
|
272
|
+
// returns `undefined`, and a missing edge is the correct failure
|
|
273
|
+
// direction; declining to check would be the risky choice, not this.
|
|
274
|
+
if (siblingLabel !== undefined &&
|
|
275
|
+
nodeLookup.get((0, node_lookup_js_1.localNameKey)(filePath, siblingLabel, simple)) !== undefined) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Name forms to try for every keyed lookup below, most specific first.
|
|
280
|
+
//
|
|
281
|
+
// #1982/#2742: some scope-extractors qualify a def by its enclosing CLASS
|
|
282
|
+
// chain (`A.Inner`) or leave it a bare tail, while the structure-phase node is
|
|
283
|
+
// keyed by the full path (`NS.A.Inner`, or a Rust `mod` chain). The
|
|
284
|
+
// namespace-prefixed form is therefore the more specific one and must be tried
|
|
285
|
+
// first — the bare form happily matches a same-named item at a DIFFERENT
|
|
286
|
+
// namespace depth in the same file and returns it before any retry is reached
|
|
287
|
+
// (#2742: a call into `mod inner { fn dispatch }` bound to the crate-root
|
|
288
|
+
// `fn dispatch` and rendered as a self-loop).
|
|
289
|
+
//
|
|
290
|
+
// Applied to the TAGGED keys too, not just the plain one. Previously only the
|
|
291
|
+
// plain key had the prefixed retry, so for a namespace/mod-qualified def every
|
|
292
|
+
// tagged key — constraints, parameter types, parameter shape, arity, template
|
|
293
|
+
// arguments — composed from the bare tail and simply missed the node
|
|
294
|
+
// `node-lookup.ts` had registered under the qualified name. Those keys exist to
|
|
295
|
+
// separate overloads, so leaving them dead meant a mod-scoped overload set
|
|
296
|
+
// depended on whichever later key happened to catch it.
|
|
297
|
+
const defType = def.type;
|
|
298
|
+
const nsPrefix = def.namespacePrefix;
|
|
299
|
+
const nameForms = nsPrefix !== undefined && nsPrefix.length > 0 ? [`${nsPrefix}.${qn}`, qn] : [qn];
|
|
300
|
+
// The label split described on `siblingCallableLabel` also kills every key
|
|
301
|
+
// above: they are all label-scoped, so a split pair misses all of them and
|
|
302
|
+
// lands on the label-agnostic simple key at the bottom of this function —
|
|
303
|
+
// which is first-write-wins, so two same-named methods in ONE file both
|
|
304
|
+
// resolved to whichever was registered first. That silently misattributed
|
|
305
|
+
// every call in the second method's body to the first (#2807 follow-up;
|
|
306
|
+
// measured in Swift, where `class A { func run }` + `class B { func run }`
|
|
307
|
+
// gave A.run both bodies' edges and B.run none).
|
|
308
|
+
//
|
|
309
|
+
// Crossing the two callable labels is sound HERE only for a name that
|
|
310
|
+
// carries its owner: `A.run` names exactly one construct whatever the
|
|
311
|
+
// label, while a bare `run` is precisely the aliasing the label was added
|
|
312
|
+
// to prevent (a top-level `save` vs a class's `save`). Hence the dot gate —
|
|
313
|
+
// it keeps the original guarantee intact for unqualified names. The
|
|
314
|
+
// position key above needs no such gate because it is not a name.
|
|
315
|
+
const lookupTagged = (tag) => {
|
|
316
|
+
for (const form of nameForms) {
|
|
317
|
+
const hit = nodeLookup.get((0, node_lookup_js_1.qualifiedKey)(filePath, defType, `${form}${tag}`));
|
|
318
|
+
if (hit !== undefined)
|
|
319
|
+
return hit;
|
|
320
|
+
}
|
|
321
|
+
if (siblingLabel === undefined)
|
|
322
|
+
return undefined;
|
|
323
|
+
for (const form of nameForms) {
|
|
324
|
+
if (!form.includes('.'))
|
|
325
|
+
continue;
|
|
326
|
+
const hit = nodeLookup.get((0, node_lookup_js_1.qualifiedKey)(filePath, siblingLabel, `${form}${tag}`));
|
|
327
|
+
if (hit !== undefined)
|
|
328
|
+
return hit;
|
|
329
|
+
}
|
|
330
|
+
return undefined;
|
|
331
|
+
};
|
|
332
|
+
// SFINAE / `requires`-clause disambiguation (issue #1579) — try the
|
|
333
|
+
// constraint-fingerprinted key FIRST. Two function-template overloads
|
|
334
|
+
// with identical `parameterTypes` but mutually-exclusive SFINAE
|
|
335
|
+
// constraints route to their distinct graph nodes via this key.
|
|
336
|
+
// Must run before the parameter-types key because both overloads
|
|
337
|
+
// share the latter.
|
|
338
|
+
if ((def.type === 'Function' || def.type === 'Method') &&
|
|
339
|
+
def.templateConstraints !== undefined) {
|
|
340
|
+
const cHit = lookupTagged((0, template_arguments_js_1.templateConstraintsIdTag)(def.templateConstraints));
|
|
341
|
+
if (cHit !== undefined)
|
|
342
|
+
return cHit;
|
|
343
|
+
}
|
|
344
|
+
if ((0, callable_labels_js_1.isOverloadableCallable)(def.type) &&
|
|
345
|
+
def.parameterTypes !== undefined &&
|
|
346
|
+
def.parameterTypeClasses !== undefined) {
|
|
347
|
+
const shapeTag = (0, method_props_js_1.parameterShapeIdTag)(def.parameterTypes, def.parameterTypeClasses);
|
|
348
|
+
if (shapeTag !== '') {
|
|
349
|
+
const shapeHit = lookupTagged(shapeTag);
|
|
350
|
+
if (shapeHit !== undefined)
|
|
351
|
+
return shapeHit;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// Overload disambiguation: when the def carries parameter types,
|
|
355
|
+
// try the parameter-typed key first so same-name same-arity
|
|
356
|
+
// overloads route to their distinct graph nodes. Constructors are
|
|
357
|
+
// included so a C# `: this(int)` / `: base(int)` chain, a Java
|
|
358
|
+
// `this(int)`/`super(int)` chain, or `new Foo(int)` resolves to the
|
|
359
|
+
// matching ctor overload instead of first-wins collapsing onto
|
|
360
|
+
// another `Foo` ctor (a self-loop) — #1928 F38 / #2046.
|
|
361
|
+
if ((0, callable_labels_js_1.isOverloadableCallable)(def.type) &&
|
|
362
|
+
def.parameterTypes !== undefined &&
|
|
363
|
+
def.parameterTypes.length > 0) {
|
|
364
|
+
const pHit = lookupTagged(`~${def.parameterTypes.join(',')}`);
|
|
365
|
+
if (pHit !== undefined)
|
|
366
|
+
return pHit;
|
|
367
|
+
}
|
|
368
|
+
// Arity-disambiguating key (see node-lookup.ts): route a same-name overload
|
|
369
|
+
// to the structure node with the matching parameter count. Critical for a
|
|
370
|
+
// zero-arg overload (no parameterTypes) that would otherwise collapse onto a
|
|
371
|
+
// sibling overload via the source-order-dependent qualified key.
|
|
372
|
+
if ((0, callable_labels_js_1.isOverloadableCallable)(def.type) && def.parameterCount !== undefined) {
|
|
373
|
+
const aHit = lookupTagged(`#${def.parameterCount}`);
|
|
374
|
+
if (aHit !== undefined)
|
|
375
|
+
return aHit;
|
|
376
|
+
}
|
|
377
|
+
if ((def.type === 'Class' ||
|
|
378
|
+
def.type === 'Struct' ||
|
|
379
|
+
def.type === 'Interface' ||
|
|
380
|
+
def.type === 'Enum' ||
|
|
381
|
+
def.type === 'Record') &&
|
|
382
|
+
def.templateArguments !== undefined &&
|
|
383
|
+
def.templateArguments.length > 0) {
|
|
384
|
+
const tHit = lookupTagged(`~${def.templateArguments.join(',')}`);
|
|
385
|
+
if (tHit !== undefined)
|
|
386
|
+
return tHit;
|
|
387
|
+
}
|
|
388
|
+
const qualifiedHit = lookupTagged('');
|
|
389
|
+
if (qualifiedHit !== undefined)
|
|
390
|
+
return qualifiedHit;
|
|
391
|
+
}
|
|
392
|
+
const simpleName = qn.lastIndexOf('.') === -1 ? qn : qn.slice(qn.lastIndexOf('.') + 1);
|
|
393
|
+
return nodeLookup.get((0, node_lookup_js_1.simpleKey)(filePath, simpleName));
|
|
394
|
+
}
|
|
395
|
+
/** Derive the simple (unqualified) name of a def from its `qualifiedName`. */
|
|
396
|
+
function simpleQualifiedName(def) {
|
|
397
|
+
const q = def.qualifiedName;
|
|
398
|
+
if (q === undefined || q.length === 0)
|
|
399
|
+
return undefined;
|
|
400
|
+
const dot = q.lastIndexOf('.');
|
|
401
|
+
return dot === -1 ? q : q.slice(dot + 1);
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Walk the scope chain from `startScope` upward looking for the first
|
|
405
|
+
* scope whose `ownedDefs` contains a callable or class-like anchor — that's
|
|
406
|
+
* our caller anchor. Translate via `nodeLookup` to the graph-node ID.
|
|
407
|
+
*
|
|
408
|
+
* Module-level references (e.g. Python `u = models.User()` at top
|
|
409
|
+
* level) have no enclosing function/method/class. Fall back to the
|
|
410
|
+
* File node for the scope's filePath so those calls still get an
|
|
411
|
+
* edge source. Matches legacy DAG behavior where module-level CALLS
|
|
412
|
+
* edges originate from the file symbol.
|
|
413
|
+
*/
|
|
414
|
+
function resolveCallerGraphId(startScope, scopes, nodeLookup, atRange) {
|
|
415
|
+
let current = startScope;
|
|
416
|
+
const visited = new Set();
|
|
417
|
+
let lastFilePath;
|
|
418
|
+
while (current !== null) {
|
|
419
|
+
if (visited.has(current))
|
|
420
|
+
return undefined;
|
|
421
|
+
visited.add(current);
|
|
422
|
+
const scope = scopes.scopeTree.getScope(current);
|
|
423
|
+
if (scope === undefined)
|
|
424
|
+
break;
|
|
425
|
+
lastFilePath = scope.filePath;
|
|
426
|
+
// Prefer Function/Method/Constructor anchors; fall back to
|
|
427
|
+
// Class/Interface/Struct/Enum/Record. Variable/Property are NOT valid
|
|
428
|
+
// caller anchors — see `isCallerAnchorLabel` for why.
|
|
429
|
+
const picked = pickCallerCallableDef(scope, scopes, atRange);
|
|
430
|
+
if (picked !== undefined) {
|
|
431
|
+
const fnDef = picked.def;
|
|
432
|
+
const id = resolveDefGraphId(fnDef.filePath, fnDef, nodeLookup);
|
|
433
|
+
if (id !== undefined)
|
|
434
|
+
return id;
|
|
435
|
+
// FAIL CLOSED at a FUNCTION-LOCAL boundary (#2699 review P1-1).
|
|
436
|
+
//
|
|
437
|
+
// `fnDef` is the callable that genuinely owns this call site. When its
|
|
438
|
+
// graph node cannot be named, climbing to the parent scope does not
|
|
439
|
+
// degrade gracefully — it ATTRIBUTES THE CALL TO A FUNCTION THAT DOES NOT
|
|
440
|
+
// MAKE IT. Measured before this guard, a closure whose literal starts on
|
|
441
|
+
// the line after its binding
|
|
442
|
+
// $multi =
|
|
443
|
+
// function ($x) { return target($x); };
|
|
444
|
+
// emitted `outer -> target` while the real `outer.$multi` node sat with no
|
|
445
|
+
// outgoing edges: a CALLS edge present nowhere in the source, which is the
|
|
446
|
+
// exact defect class #2699 exists to remove.
|
|
447
|
+
//
|
|
448
|
+
// Restricted to defs carrying the function-local `@line:col` identity,
|
|
449
|
+
// because that is precisely the set whose position join can miss (the two
|
|
450
|
+
// query channels anchor on different nodes by design). For every other
|
|
451
|
+
// callable the historical climb is preserved, so this cannot silently
|
|
452
|
+
// delete edges outside the local-identity path.
|
|
453
|
+
// The scope we are standing in OWNS this call site and we have identified
|
|
454
|
+
// its callable — we simply cannot name that callable's graph node. Climbing
|
|
455
|
+
// to an ancestor here does not degrade gracefully: it credits the call to a
|
|
456
|
+
// function that does not make it. Fail closed instead.
|
|
457
|
+
return undefined;
|
|
458
|
+
}
|
|
459
|
+
const classDef = scope.ownedDefs.find((d) => isCallerAnchorLabel(d.type));
|
|
460
|
+
if (classDef !== undefined) {
|
|
461
|
+
const id = resolveDefGraphId(scope.filePath, classDef, nodeLookup);
|
|
462
|
+
if (id !== undefined)
|
|
463
|
+
return id;
|
|
464
|
+
}
|
|
465
|
+
current = scope.parent;
|
|
466
|
+
}
|
|
467
|
+
// Module-level calls — fall back to the File node for the scope's filePath.
|
|
468
|
+
if (lastFilePath !== undefined) {
|
|
469
|
+
return (0, utils_js_1.generateId)('File', lastFilePath);
|
|
470
|
+
}
|
|
471
|
+
return undefined;
|
|
472
|
+
}
|
package/dist/core/code/engine/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* File→File IMPORTS edge emission from a finalized `ImportEdge` map.
|
|
4
|
+
*
|
|
5
|
+
* Deduplicates by `(sourceFile, targetFile)` so multi-symbol imports
|
|
6
|
+
* from the same module collapse to a single edge — matching the
|
|
7
|
+
* legacy schema.
|
|
8
|
+
*
|
|
9
|
+
* Next-consumer contract: language-agnostic. Any provider with a
|
|
10
|
+
* scope-resolution ImportEdge stream emits File→File edges via this
|
|
11
|
+
* single function. The `reason` defaults to
|
|
12
|
+
* `'scope-resolution: import'`; provider may override if downstream
|
|
13
|
+
* filters on reason.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.emitImportEdges = emitImportEdges;
|
|
17
|
+
const utils_js_1 = require("../../../../lib/utils.js");
|
|
18
|
+
function emitImportEdges(graph, imports, scopeTree, reason = 'scope-resolution: import') {
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
let emitted = 0;
|
|
21
|
+
for (const [scopeId, edges] of imports) {
|
|
22
|
+
const scope = scopeTree.getScope(scopeId);
|
|
23
|
+
if (scope === undefined)
|
|
24
|
+
continue;
|
|
25
|
+
const sourceFile = scope.filePath;
|
|
26
|
+
for (const edge of edges) {
|
|
27
|
+
if (edge.targetFile === null)
|
|
28
|
+
continue;
|
|
29
|
+
if (edge.targetFile === sourceFile)
|
|
30
|
+
continue;
|
|
31
|
+
const dedupKey = `${sourceFile}->${edge.targetFile}`;
|
|
32
|
+
if (seen.has(dedupKey))
|
|
33
|
+
continue;
|
|
34
|
+
seen.add(dedupKey);
|
|
35
|
+
const sourceId = (0, utils_js_1.generateId)('File', sourceFile);
|
|
36
|
+
const targetId = (0, utils_js_1.generateId)('File', edge.targetFile);
|
|
37
|
+
graph.addRelationship({
|
|
38
|
+
id: (0, utils_js_1.generateId)('IMPORTS', dedupKey),
|
|
39
|
+
sourceId,
|
|
40
|
+
targetId,
|
|
41
|
+
type: 'IMPORTS',
|
|
42
|
+
confidence: 1.0,
|
|
43
|
+
reason,
|
|
44
|
+
});
|
|
45
|
+
emitted++;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return emitted;
|
|
49
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Wrap a `DefId → ancestor DefId[]` MRO map in the shared
|
|
4
|
+
* `MethodDispatchIndex` shape so it slots into
|
|
5
|
+
* `ScopeResolutionIndexes.methodDispatch`.
|
|
6
|
+
*
|
|
7
|
+
* `finalizeScopeModel` builds an empty `MethodDispatchIndex` by design
|
|
8
|
+
* (per the comment in `finalize-orchestrator.ts`). Per-language
|
|
9
|
+
* providers compute MRO their own way (Python C3 walk, Java class
|
|
10
|
+
* hierarchy, Ruby mixin chains, etc.) and use this bridge to plug the
|
|
11
|
+
* result back into the shared index shape.
|
|
12
|
+
*
|
|
13
|
+
* Next-consumer contract: any language that computes its own MRO map
|
|
14
|
+
* calls `buildPopulatedMethodDispatch(mroByOwnerDefId)` and assigns the
|
|
15
|
+
* result to `indexes.methodDispatch`. Interface-implementer tracking
|
|
16
|
+
* (`implsByInterfaceDefId`) stays empty in V1 — providers that need it
|
|
17
|
+
* can extend the return shape without breaking existing consumers.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.buildPopulatedMethodDispatch = buildPopulatedMethodDispatch;
|
|
21
|
+
const EMPTY_DEFS = Object.freeze([]);
|
|
22
|
+
function buildPopulatedMethodDispatch(mroByDefId, extendsOnlyMroByDefId) {
|
|
23
|
+
const base = {
|
|
24
|
+
mroByOwnerDefId: mroByDefId,
|
|
25
|
+
implsByInterfaceDefId: new Map(),
|
|
26
|
+
mroFor(ownerDefId) {
|
|
27
|
+
return mroByDefId.get(ownerDefId) ?? EMPTY_DEFS;
|
|
28
|
+
},
|
|
29
|
+
implementorsOf() {
|
|
30
|
+
return EMPTY_DEFS;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
if (extendsOnlyMroByDefId !== undefined) {
|
|
34
|
+
return {
|
|
35
|
+
...base,
|
|
36
|
+
extendsOnlyMroByOwnerDefId: extendsOnlyMroByDefId,
|
|
37
|
+
extendsOnlyMroFor(ownerDefId) {
|
|
38
|
+
return extendsOnlyMroByDefId.get(ownerDefId) ?? EMPTY_DEFS;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return base;
|
|
43
|
+
}
|