@quolu/lattice 0.70.0 → 0.71.1
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/bin/lattice.mjs +21 -0
- package/package.json +1 -1
- package/sensor/dist/bin/lattice-sensor.js +746 -323
- package/sensor/dist/bin/viewer-gate.d.ts +17 -0
- package/sensor/dist/bin/viewer-gate.d.ts.map +1 -0
- package/sensor/dist/bin/viewer-gate.js +31 -0
- package/sensor/dist/bin/viewer-gate.js.map +1 -0
- package/sensor/dist/context/formatter.d.ts +7 -1
- package/sensor/dist/context/formatter.d.ts.map +1 -1
- package/sensor/dist/context/formatter.js +12 -6
- package/sensor/dist/context/formatter.js.map +1 -1
- package/sensor/dist/context/index.d.ts +12 -0
- package/sensor/dist/context/index.d.ts.map +1 -1
- package/sensor/dist/context/index.js +103 -16
- package/sensor/dist/context/index.js.map +1 -1
- package/sensor/dist/db/index.d.ts +23 -2
- package/sensor/dist/db/index.d.ts.map +1 -1
- package/sensor/dist/db/index.js +109 -31
- package/sensor/dist/db/index.js.map +1 -1
- package/sensor/dist/db/migrations.d.ts +1 -1
- package/sensor/dist/db/migrations.d.ts.map +1 -1
- package/sensor/dist/db/migrations.js +68 -1
- package/sensor/dist/db/migrations.js.map +1 -1
- package/sensor/dist/db/queries.d.ts +583 -6
- package/sensor/dist/db/queries.d.ts.map +1 -1
- package/sensor/dist/db/queries.js +1425 -57
- package/sensor/dist/db/queries.js.map +1 -1
- package/sensor/dist/db/schema.sql +27 -4
- package/sensor/dist/db/sqlite-adapter.d.ts +2 -0
- package/sensor/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/sensor/dist/db/sqlite-adapter.js +56 -7
- package/sensor/dist/db/sqlite-adapter.js.map +1 -1
- package/sensor/dist/db/synthesis-stage.d.ts +12 -0
- package/sensor/dist/db/synthesis-stage.d.ts.map +1 -0
- package/sensor/dist/db/synthesis-stage.js +93 -0
- package/sensor/dist/db/synthesis-stage.js.map +1 -0
- package/sensor/dist/db/wal-valve.d.ts +32 -12
- package/sensor/dist/db/wal-valve.d.ts.map +1 -1
- package/sensor/dist/db/wal-valve.js +65 -22
- package/sensor/dist/db/wal-valve.js.map +1 -1
- package/sensor/dist/db/wsl-shared-index.d.ts +53 -0
- package/sensor/dist/db/wsl-shared-index.d.ts.map +1 -0
- package/sensor/dist/db/wsl-shared-index.js +121 -0
- package/sensor/dist/db/wsl-shared-index.js.map +1 -0
- package/sensor/dist/directory.d.ts +126 -2
- package/sensor/dist/directory.d.ts.map +1 -1
- package/sensor/dist/directory.js +285 -16
- package/sensor/dist/directory.js.map +1 -1
- package/sensor/dist/errors.d.ts +14 -0
- package/sensor/dist/errors.d.ts.map +1 -1
- package/sensor/dist/errors.js +16 -1
- package/sensor/dist/errors.js.map +1 -1
- package/sensor/dist/extraction/cfml-extractor.d.ts +1 -0
- package/sensor/dist/extraction/cfml-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/cfml-extractor.js +15 -3
- package/sensor/dist/extraction/cfml-extractor.js.map +1 -1
- package/sensor/dist/extraction/dfm-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/dfm-extractor.js +14 -10
- package/sensor/dist/extraction/dfm-extractor.js.map +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts.map +1 -1
- package/sensor/dist/extraction/extraction-version.js +3 -1
- package/sensor/dist/extraction/extraction-version.js.map +1 -1
- package/sensor/dist/extraction/function-ref.d.ts +6 -4
- package/sensor/dist/extraction/function-ref.d.ts.map +1 -1
- package/sensor/dist/extraction/function-ref.js +35 -14
- package/sensor/dist/extraction/function-ref.js.map +1 -1
- package/sensor/dist/extraction/generated-detection.d.ts +48 -12
- package/sensor/dist/extraction/generated-detection.d.ts.map +1 -1
- package/sensor/dist/extraction/generated-detection.js +176 -11
- package/sensor/dist/extraction/generated-detection.js.map +1 -1
- package/sensor/dist/extraction/grammars.d.ts +38 -0
- package/sensor/dist/extraction/grammars.d.ts.map +1 -1
- package/sensor/dist/extraction/grammars.js +115 -3
- package/sensor/dist/extraction/grammars.js.map +1 -1
- package/sensor/dist/extraction/index.d.ts +218 -14
- package/sensor/dist/extraction/index.d.ts.map +1 -1
- package/sensor/dist/extraction/index.js +887 -175
- package/sensor/dist/extraction/index.js.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.d.ts +58 -0
- package/sensor/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.js +310 -19
- package/sensor/dist/extraction/languages/c-cpp.js.map +1 -1
- package/sensor/dist/extraction/languages/dart.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/dart.js +8 -3
- package/sensor/dist/extraction/languages/dart.js.map +1 -1
- package/sensor/dist/extraction/languages/erlang.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/erlang.js +58 -22
- package/sensor/dist/extraction/languages/erlang.js.map +1 -1
- package/sensor/dist/extraction/languages/javascript.js +1 -1
- package/sensor/dist/extraction/languages/javascript.js.map +1 -1
- package/sensor/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/kotlin.js +169 -36
- package/sensor/dist/extraction/languages/kotlin.js.map +1 -1
- package/sensor/dist/extraction/languages/lua.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/lua.js +4 -1
- package/sensor/dist/extraction/languages/lua.js.map +1 -1
- package/sensor/dist/extraction/languages/objc.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/objc.js +4 -0
- package/sensor/dist/extraction/languages/objc.js.map +1 -1
- package/sensor/dist/extraction/languages/python.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/python.js +71 -0
- package/sensor/dist/extraction/languages/python.js.map +1 -1
- package/sensor/dist/extraction/languages/rust.d.ts +20 -0
- package/sensor/dist/extraction/languages/rust.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/rust.js +50 -20
- package/sensor/dist/extraction/languages/rust.js.map +1 -1
- package/sensor/dist/extraction/languages/scala.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/scala.js +18 -3
- package/sensor/dist/extraction/languages/scala.js.map +1 -1
- package/sensor/dist/extraction/languages/swift.d.ts +15 -0
- package/sensor/dist/extraction/languages/swift.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/swift.js +50 -0
- package/sensor/dist/extraction/languages/swift.js.map +1 -1
- package/sensor/dist/extraction/languages/typescript.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/typescript.js +9 -2
- package/sensor/dist/extraction/languages/typescript.js.map +1 -1
- package/sensor/dist/extraction/liquid-extractor.d.ts +18 -0
- package/sensor/dist/extraction/liquid-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/liquid-extractor.js +98 -22
- package/sensor/dist/extraction/liquid-extractor.js.map +1 -1
- package/sensor/dist/extraction/mybatis-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/mybatis-extractor.js +6 -4
- package/sensor/dist/extraction/mybatis-extractor.js.map +1 -1
- package/sensor/dist/extraction/parse-pool.d.ts +7 -0
- package/sensor/dist/extraction/parse-pool.d.ts.map +1 -1
- package/sensor/dist/extraction/parse-pool.js +20 -1
- package/sensor/dist/extraction/parse-pool.js.map +1 -1
- package/sensor/dist/extraction/syntax-tokens.d.ts +103 -0
- package/sensor/dist/extraction/syntax-tokens.d.ts.map +1 -0
- package/sensor/dist/extraction/syntax-tokens.js +381 -0
- package/sensor/dist/extraction/syntax-tokens.js.map +1 -0
- package/sensor/dist/extraction/tree-sitter-helpers.d.ts +5 -0
- package/sensor/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter-helpers.js +17 -0
- package/sensor/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/sensor/dist/extraction/tree-sitter-types.d.ts +31 -3
- package/sensor/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.d.ts +101 -18
- package/sensor/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.js +928 -134
- package/sensor/dist/extraction/tree-sitter.js.map +1 -1
- package/sensor/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
- package/sensor/dist/file-limits.d.ts +40 -0
- package/sensor/dist/file-limits.d.ts.map +1 -0
- package/sensor/dist/file-limits.js +147 -0
- package/sensor/dist/file-limits.js.map +1 -0
- package/sensor/dist/graph/branch-guards.d.ts +265 -0
- package/sensor/dist/graph/branch-guards.d.ts.map +1 -0
- package/sensor/dist/graph/branch-guards.js +2325 -0
- package/sensor/dist/graph/branch-guards.js.map +1 -0
- package/sensor/dist/graph/dead-code.d.ts +251 -0
- package/sensor/dist/graph/dead-code.d.ts.map +1 -0
- package/sensor/dist/graph/dead-code.js +776 -0
- package/sensor/dist/graph/dead-code.js.map +1 -0
- package/sensor/dist/graph/dynamic-boundary-report.d.ts +121 -0
- package/sensor/dist/graph/dynamic-boundary-report.d.ts.map +1 -0
- package/sensor/dist/graph/dynamic-boundary-report.js +283 -0
- package/sensor/dist/graph/dynamic-boundary-report.js.map +1 -0
- package/sensor/dist/graph/index.d.ts +4 -0
- package/sensor/dist/graph/index.d.ts.map +1 -1
- package/sensor/dist/graph/index.js +16 -1
- package/sensor/dist/graph/index.js.map +1 -1
- package/sensor/dist/graph/named-symbol-flow.d.ts +125 -0
- package/sensor/dist/graph/named-symbol-flow.d.ts.map +1 -0
- package/sensor/dist/graph/named-symbol-flow.js +552 -0
- package/sensor/dist/graph/named-symbol-flow.js.map +1 -0
- package/sensor/dist/graph/queries.d.ts.map +1 -1
- package/sensor/dist/graph/queries.js +2 -0
- package/sensor/dist/graph/queries.js.map +1 -1
- package/sensor/dist/graph/symbol-lookup.d.ts +83 -0
- package/sensor/dist/graph/symbol-lookup.d.ts.map +1 -0
- package/sensor/dist/graph/symbol-lookup.js +181 -0
- package/sensor/dist/graph/symbol-lookup.js.map +1 -0
- package/sensor/dist/graph/traversal.d.ts +9 -0
- package/sensor/dist/graph/traversal.d.ts.map +1 -1
- package/sensor/dist/graph/traversal.js +62 -36
- package/sensor/dist/graph/traversal.js.map +1 -1
- package/sensor/dist/graph/type-hierarchy.d.ts +155 -0
- package/sensor/dist/graph/type-hierarchy.d.ts.map +1 -0
- package/sensor/dist/graph/type-hierarchy.js +382 -0
- package/sensor/dist/graph/type-hierarchy.js.map +1 -0
- package/sensor/dist/index.d.ts +272 -10
- package/sensor/dist/index.d.ts.map +1 -1
- package/sensor/dist/index.js +510 -34
- package/sensor/dist/index.js.map +1 -1
- package/sensor/dist/mcp/answer-freshness.d.ts +10 -0
- package/sensor/dist/mcp/answer-freshness.d.ts.map +1 -0
- package/sensor/dist/mcp/answer-freshness.js +68 -0
- package/sensor/dist/mcp/answer-freshness.js.map +1 -0
- package/sensor/dist/mcp/daemon-manager.d.ts +1 -1
- package/sensor/dist/mcp/daemon-manager.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-manager.js +17 -1
- package/sensor/dist/mcp/daemon-manager.js.map +1 -1
- package/sensor/dist/mcp/daemon-paths.d.ts +8 -0
- package/sensor/dist/mcp/daemon-paths.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-paths.js +65 -2
- package/sensor/dist/mcp/daemon-paths.js.map +1 -1
- package/sensor/dist/mcp/daemon-registry.d.ts +17 -4
- package/sensor/dist/mcp/daemon-registry.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-registry.js +133 -23
- package/sensor/dist/mcp/daemon-registry.js.map +1 -1
- package/sensor/dist/mcp/daemon.d.ts +26 -13
- package/sensor/dist/mcp/daemon.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon.js +126 -32
- package/sensor/dist/mcp/daemon.js.map +1 -1
- package/sensor/dist/mcp/dynamic-boundaries.d.ts +1 -10
- package/sensor/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
- package/sensor/dist/mcp/dynamic-boundaries.js +46 -42
- package/sensor/dist/mcp/dynamic-boundaries.js.map +1 -1
- package/sensor/dist/mcp/engine.d.ts +31 -9
- package/sensor/dist/mcp/engine.d.ts.map +1 -1
- package/sensor/dist/mcp/engine.js +190 -79
- package/sensor/dist/mcp/engine.js.map +1 -1
- package/sensor/dist/mcp/explore-dedup.d.ts +140 -0
- package/sensor/dist/mcp/explore-dedup.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-dedup.js +239 -0
- package/sensor/dist/mcp/explore-dedup.js.map +1 -0
- package/sensor/dist/mcp/explore-diagnostics.d.ts +289 -0
- package/sensor/dist/mcp/explore-diagnostics.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-diagnostics.js +558 -0
- package/sensor/dist/mcp/explore-diagnostics.js.map +1 -0
- package/sensor/dist/mcp/explore-session-state.d.ts +217 -0
- package/sensor/dist/mcp/explore-session-state.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-session-state.js +322 -0
- package/sensor/dist/mcp/explore-session-state.js.map +1 -0
- package/sensor/dist/mcp/index-freshness-worker.d.ts +2 -0
- package/sensor/dist/mcp/index-freshness-worker.d.ts.map +1 -0
- package/sensor/dist/mcp/index-freshness-worker.js +30 -0
- package/sensor/dist/mcp/index-freshness-worker.js.map +1 -0
- package/sensor/dist/mcp/index-freshness.d.ts +7 -0
- package/sensor/dist/mcp/index-freshness.d.ts.map +1 -0
- package/sensor/dist/mcp/index-freshness.js +94 -0
- package/sensor/dist/mcp/index-freshness.js.map +1 -0
- package/sensor/dist/mcp/index.d.ts +3 -1
- package/sensor/dist/mcp/index.d.ts.map +1 -1
- package/sensor/dist/mcp/index.js +109 -12
- package/sensor/dist/mcp/index.js.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.d.ts +4 -1
- package/sensor/dist/mcp/liveness-watchdog.d.ts.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.js +11 -2
- package/sensor/dist/mcp/liveness-watchdog.js.map +1 -1
- package/sensor/dist/mcp/project-lifecycle.d.ts +9 -0
- package/sensor/dist/mcp/project-lifecycle.d.ts.map +1 -0
- package/sensor/dist/mcp/project-lifecycle.js +182 -0
- package/sensor/dist/mcp/project-lifecycle.js.map +1 -0
- package/sensor/dist/mcp/proxy.d.ts.map +1 -1
- package/sensor/dist/mcp/proxy.js +15 -1
- package/sensor/dist/mcp/proxy.js.map +1 -1
- package/sensor/dist/mcp/query-pool.d.ts +2 -2
- package/sensor/dist/mcp/query-pool.d.ts.map +1 -1
- package/sensor/dist/mcp/query-pool.js +9 -7
- package/sensor/dist/mcp/query-pool.js.map +1 -1
- package/sensor/dist/mcp/query-worker.js +2 -2
- package/sensor/dist/mcp/query-worker.js.map +1 -1
- package/sensor/dist/mcp/server-instructions.d.ts +2 -2
- package/sensor/dist/mcp/server-instructions.d.ts.map +1 -1
- package/sensor/dist/mcp/server-instructions.js +13 -6
- package/sensor/dist/mcp/server-instructions.js.map +1 -1
- package/sensor/dist/mcp/session.d.ts +16 -0
- package/sensor/dist/mcp/session.d.ts.map +1 -1
- package/sensor/dist/mcp/session.js +36 -13
- package/sensor/dist/mcp/session.js.map +1 -1
- package/sensor/dist/mcp/startup-handshake.d.ts +3 -1
- package/sensor/dist/mcp/startup-handshake.d.ts.map +1 -1
- package/sensor/dist/mcp/startup-handshake.js +10 -2
- package/sensor/dist/mcp/startup-handshake.js.map +1 -1
- package/sensor/dist/mcp/tools.d.ts +496 -38
- package/sensor/dist/mcp/tools.d.ts.map +1 -1
- package/sensor/dist/mcp/tools.js +4021 -772
- package/sensor/dist/mcp/tools.js.map +1 -1
- package/sensor/dist/mcp/writer-lock.d.ts +61 -0
- package/sensor/dist/mcp/writer-lock.d.ts.map +1 -0
- package/sensor/dist/mcp/writer-lock.js +260 -0
- package/sensor/dist/mcp/writer-lock.js.map +1 -0
- package/sensor/dist/project-config.d.ts +23 -0
- package/sensor/dist/project-config.d.ts.map +1 -1
- package/sensor/dist/project-config.js +39 -2
- package/sensor/dist/project-config.js.map +1 -1
- package/sensor/dist/resolution/alias-binding.d.ts +56 -0
- package/sensor/dist/resolution/alias-binding.d.ts.map +1 -0
- package/sensor/dist/resolution/alias-binding.js +127 -0
- package/sensor/dist/resolution/alias-binding.js.map +1 -0
- package/sensor/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/c-fnptr-synthesizer.js +21 -19
- package/sensor/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts +23 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.js +356 -155
- package/sensor/dist/resolution/callback-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/cpp-constructor.d.ts +4 -0
- package/sensor/dist/resolution/cpp-constructor.d.ts.map +1 -0
- package/sensor/dist/resolution/cpp-constructor.js +123 -0
- package/sensor/dist/resolution/cpp-constructor.js.map +1 -0
- package/sensor/dist/resolution/cpp-macro-visibility.d.ts +12 -0
- package/sensor/dist/resolution/cpp-macro-visibility.d.ts.map +1 -0
- package/sensor/dist/resolution/cpp-macro-visibility.js +342 -0
- package/sensor/dist/resolution/cpp-macro-visibility.js.map +1 -0
- package/sensor/dist/resolution/expo-router-synthesizer.d.ts +32 -0
- package/sensor/dist/resolution/expo-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/expo-router-synthesizer.js +189 -0
- package/sensor/dist/resolution/expo-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/frameworks/csharp.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/csharp.js +96 -2
- package/sensor/dist/resolution/frameworks/csharp.js.map +1 -1
- package/sensor/dist/resolution/frameworks/expo-router.d.ts +189 -0
- package/sensor/dist/resolution/frameworks/expo-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/expo-router.js +785 -0
- package/sensor/dist/resolution/frameworks/expo-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/express.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/express.js +251 -16
- package/sensor/dist/resolution/frameworks/express.js.map +1 -1
- package/sensor/dist/resolution/frameworks/index.d.ts +5 -0
- package/sensor/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/index.js +29 -1
- package/sensor/dist/resolution/frameworks/index.js.map +1 -1
- package/sensor/dist/resolution/frameworks/java.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/java.js +79 -47
- package/sensor/dist/resolution/frameworks/java.js.map +1 -1
- package/sensor/dist/resolution/frameworks/laravel.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/laravel.js +294 -4
- package/sensor/dist/resolution/frameworks/laravel.js.map +1 -1
- package/sensor/dist/resolution/frameworks/nestjs.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/nestjs.js +6 -14
- package/sensor/dist/resolution/frameworks/nestjs.js.map +1 -1
- package/sensor/dist/resolution/frameworks/nextjs.d.ts +76 -0
- package/sensor/dist/resolution/frameworks/nextjs.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/nextjs.js +328 -0
- package/sensor/dist/resolution/frameworks/nextjs.js.map +1 -0
- package/sensor/dist/resolution/frameworks/object-literal.d.ts +32 -0
- package/sensor/dist/resolution/frameworks/object-literal.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/object-literal.js +139 -0
- package/sensor/dist/resolution/frameworks/object-literal.js.map +1 -0
- package/sensor/dist/resolution/frameworks/package-deps.d.ts +14 -0
- package/sensor/dist/resolution/frameworks/package-deps.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/package-deps.js +78 -0
- package/sensor/dist/resolution/frameworks/package-deps.js.map +1 -0
- package/sensor/dist/resolution/frameworks/python.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/python.js +166 -0
- package/sensor/dist/resolution/frameworks/python.js.map +1 -1
- package/sensor/dist/resolution/frameworks/react-native.d.ts +26 -0
- package/sensor/dist/resolution/frameworks/react-native.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/react-native.js +153 -14
- package/sensor/dist/resolution/frameworks/react-native.js.map +1 -1
- package/sensor/dist/resolution/frameworks/react-router.d.ts +46 -0
- package/sensor/dist/resolution/frameworks/react-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/react-router.js +187 -0
- package/sensor/dist/resolution/frameworks/react-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/react.d.ts +2 -1
- package/sensor/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/react.js +188 -139
- package/sensor/dist/resolution/frameworks/react.js.map +1 -1
- package/sensor/dist/resolution/frameworks/svelte.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/svelte.js +6 -1
- package/sensor/dist/resolution/frameworks/svelte.js.map +1 -1
- package/sensor/dist/resolution/frameworks/sveltekit-router.d.ts +36 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.js +156 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/swift.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/swift.js +140 -99
- package/sensor/dist/resolution/frameworks/swift.js.map +1 -1
- package/sensor/dist/resolution/frameworks/tanstack-router.d.ts +84 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.js +437 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/vue-router.d.ts +82 -0
- package/sensor/dist/resolution/frameworks/vue-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/vue-router.js +377 -0
- package/sensor/dist/resolution/frameworks/vue-router.js.map +1 -0
- package/sensor/dist/resolution/import-resolver.d.ts +38 -0
- package/sensor/dist/resolution/import-resolver.d.ts.map +1 -1
- package/sensor/dist/resolution/import-resolver.js +394 -28
- package/sensor/dist/resolution/import-resolver.js.map +1 -1
- package/sensor/dist/resolution/index.d.ts +89 -25
- package/sensor/dist/resolution/index.d.ts.map +1 -1
- package/sensor/dist/resolution/index.js +573 -148
- package/sensor/dist/resolution/index.js.map +1 -1
- package/sensor/dist/resolution/js-builtins.d.ts +13 -0
- package/sensor/dist/resolution/js-builtins.d.ts.map +1 -0
- package/sensor/dist/resolution/js-builtins.js +46 -0
- package/sensor/dist/resolution/js-builtins.js.map +1 -0
- package/sensor/dist/resolution/name-matcher.d.ts +99 -22
- package/sensor/dist/resolution/name-matcher.d.ts.map +1 -1
- package/sensor/dist/resolution/name-matcher.js +2220 -86
- package/sensor/dist/resolution/name-matcher.js.map +1 -1
- package/sensor/dist/resolution/next-router-synthesizer.d.ts +27 -0
- package/sensor/dist/resolution/next-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/next-router-synthesizer.js +113 -0
- package/sensor/dist/resolution/next-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/path-aliases.d.ts +6 -4
- package/sensor/dist/resolution/path-aliases.d.ts.map +1 -1
- package/sensor/dist/resolution/path-aliases.js +125 -17
- package/sensor/dist/resolution/path-aliases.js.map +1 -1
- package/sensor/dist/resolution/react-router-synthesizer.d.ts +33 -0
- package/sensor/dist/resolution/react-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/react-router-synthesizer.js +126 -0
- package/sensor/dist/resolution/react-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/resolver-pool.d.ts +2 -0
- package/sensor/dist/resolution/resolver-pool.d.ts.map +1 -1
- package/sensor/dist/resolution/resolver-pool.js +4 -0
- package/sensor/dist/resolution/resolver-pool.js.map +1 -1
- package/sensor/dist/resolution/strip-comments.d.ts +6 -0
- package/sensor/dist/resolution/strip-comments.d.ts.map +1 -1
- package/sensor/dist/resolution/strip-comments.js +58 -0
- package/sensor/dist/resolution/strip-comments.js.map +1 -1
- package/sensor/dist/resolution/sveltekit-synthesizer.d.ts +58 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.js +173 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/swift-type-visibility.d.ts +52 -0
- package/sensor/dist/resolution/swift-type-visibility.d.ts.map +1 -0
- package/sensor/dist/resolution/swift-type-visibility.js +328 -0
- package/sensor/dist/resolution/swift-type-visibility.js.map +1 -0
- package/sensor/dist/resolution/synth-utils.d.ts +26 -0
- package/sensor/dist/resolution/synth-utils.d.ts.map +1 -0
- package/sensor/dist/resolution/synth-utils.js +75 -0
- package/sensor/dist/resolution/synth-utils.js.map +1 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.d.ts +31 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.js +114 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/tier-synthesizer.d.ts +54 -0
- package/sensor/dist/resolution/tier-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/tier-synthesizer.js +1294 -0
- package/sensor/dist/resolution/tier-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/types.d.ts +78 -2
- package/sensor/dist/resolution/types.d.ts.map +1 -1
- package/sensor/dist/resolution/types.js +64 -0
- package/sensor/dist/resolution/types.js.map +1 -1
- package/sensor/dist/resolution/vue-router-synthesizer.d.ts +30 -0
- package/sensor/dist/resolution/vue-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/vue-router-synthesizer.js +115 -0
- package/sensor/dist/resolution/vue-router-synthesizer.js.map +1 -0
- package/sensor/dist/search/identifier-segments.d.ts +10 -0
- package/sensor/dist/search/identifier-segments.d.ts.map +1 -1
- package/sensor/dist/search/identifier-segments.js +29 -0
- package/sensor/dist/search/identifier-segments.js.map +1 -1
- package/sensor/dist/search/query-paths.d.ts +106 -0
- package/sensor/dist/search/query-paths.d.ts.map +1 -0
- package/sensor/dist/search/query-paths.js +513 -0
- package/sensor/dist/search/query-paths.js.map +1 -0
- package/sensor/dist/search/query-utils.d.ts +22 -2
- package/sensor/dist/search/query-utils.d.ts.map +1 -1
- package/sensor/dist/search/query-utils.js +56 -16
- package/sensor/dist/search/query-utils.js.map +1 -1
- package/sensor/dist/sync/watch-policy.d.ts +14 -0
- package/sensor/dist/sync/watch-policy.d.ts.map +1 -1
- package/sensor/dist/sync/watch-policy.js +19 -0
- package/sensor/dist/sync/watch-policy.js.map +1 -1
- package/sensor/dist/sync/watcher.d.ts +74 -35
- package/sensor/dist/sync/watcher.d.ts.map +1 -1
- package/sensor/dist/sync/watcher.js +281 -99
- package/sensor/dist/sync/watcher.js.map +1 -1
- package/sensor/dist/telemetry/index.d.ts +4 -2
- package/sensor/dist/telemetry/index.d.ts.map +1 -1
- package/sensor/dist/telemetry/index.js +92 -41
- package/sensor/dist/telemetry/index.js.map +1 -1
- package/sensor/dist/types.d.ts +18 -2
- package/sensor/dist/types.d.ts.map +1 -1
- package/sensor/dist/types.js +2 -0
- package/sensor/dist/types.js.map +1 -1
- package/sensor/dist/ui-server/api/deadcode.d.ts +84 -0
- package/sensor/dist/ui-server/api/deadcode.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/deadcode.js +136 -0
- package/sensor/dist/ui-server/api/deadcode.js.map +1 -0
- package/sensor/dist/ui-server/api/effects.d.ts +94 -0
- package/sensor/dist/ui-server/api/effects.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/effects.js +527 -0
- package/sensor/dist/ui-server/api/effects.js.map +1 -0
- package/sensor/dist/ui-server/api/entrypoints.d.ts +92 -0
- package/sensor/dist/ui-server/api/entrypoints.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/entrypoints.js +361 -0
- package/sensor/dist/ui-server/api/entrypoints.js.map +1 -0
- package/sensor/dist/ui-server/api/events.d.ts +183 -0
- package/sensor/dist/ui-server/api/events.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/events.js +430 -0
- package/sensor/dist/ui-server/api/events.js.map +1 -0
- package/sensor/dist/ui-server/api/file.d.ts +66 -0
- package/sensor/dist/ui-server/api/file.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/file.js +235 -0
- package/sensor/dist/ui-server/api/file.js.map +1 -0
- package/sensor/dist/ui-server/api/filecode.d.ts +126 -0
- package/sensor/dist/ui-server/api/filecode.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/filecode.js +205 -0
- package/sensor/dist/ui-server/api/filecode.js.map +1 -0
- package/sensor/dist/ui-server/api/flow.d.ts +226 -0
- package/sensor/dist/ui-server/api/flow.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/flow.js +612 -0
- package/sensor/dist/ui-server/api/flow.js.map +1 -0
- package/sensor/dist/ui-server/api/hierarchy.d.ts +81 -0
- package/sensor/dist/ui-server/api/hierarchy.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/hierarchy.js +92 -0
- package/sensor/dist/ui-server/api/hierarchy.js.map +1 -0
- package/sensor/dist/ui-server/api/index.d.ts +90 -0
- package/sensor/dist/ui-server/api/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/index.js +332 -0
- package/sensor/dist/ui-server/api/index.js.map +1 -0
- package/sensor/dist/ui-server/api/map.d.ts +256 -0
- package/sensor/dist/ui-server/api/map.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/map.js +760 -0
- package/sensor/dist/ui-server/api/map.js.map +1 -0
- package/sensor/dist/ui-server/api/node.d.ts +81 -0
- package/sensor/dist/ui-server/api/node.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/node.js +388 -0
- package/sensor/dist/ui-server/api/node.js.map +1 -0
- package/sensor/dist/ui-server/api/nodes.d.ts +25 -0
- package/sensor/dist/ui-server/api/nodes.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/nodes.js +45 -0
- package/sensor/dist/ui-server/api/nodes.js.map +1 -0
- package/sensor/dist/ui-server/api/program.d.ts +139 -0
- package/sensor/dist/ui-server/api/program.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/program.js +315 -0
- package/sensor/dist/ui-server/api/program.js.map +1 -0
- package/sensor/dist/ui-server/api/respond.d.ts +76 -0
- package/sensor/dist/ui-server/api/respond.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/respond.js +186 -0
- package/sensor/dist/ui-server/api/respond.js.map +1 -0
- package/sensor/dist/ui-server/api/route-roots.d.ts +39 -0
- package/sensor/dist/ui-server/api/route-roots.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/route-roots.js +96 -0
- package/sensor/dist/ui-server/api/route-roots.js.map +1 -0
- package/sensor/dist/ui-server/api/routes.d.ts +59 -0
- package/sensor/dist/ui-server/api/routes.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/routes.js +108 -0
- package/sensor/dist/ui-server/api/routes.js.map +1 -0
- package/sensor/dist/ui-server/api/screens.d.ts +117 -0
- package/sensor/dist/ui-server/api/screens.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/screens.js +611 -0
- package/sensor/dist/ui-server/api/screens.js.map +1 -0
- package/sensor/dist/ui-server/api/search.d.ts +29 -0
- package/sensor/dist/ui-server/api/search.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/search.js +232 -0
- package/sensor/dist/ui-server/api/search.js.map +1 -0
- package/sensor/dist/ui-server/api/session.d.ts +52 -0
- package/sensor/dist/ui-server/api/session.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/session.js +196 -0
- package/sensor/dist/ui-server/api/session.js.map +1 -0
- package/sensor/dist/ui-server/api/source.d.ts +200 -0
- package/sensor/dist/ui-server/api/source.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/source.js +422 -0
- package/sensor/dist/ui-server/api/source.js.map +1 -0
- package/sensor/dist/ui-server/api/stats.d.ts +27 -0
- package/sensor/dist/ui-server/api/stats.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/stats.js +164 -0
- package/sensor/dist/ui-server/api/stats.js.map +1 -0
- package/sensor/dist/ui-server/api/steps.d.ts +274 -0
- package/sensor/dist/ui-server/api/steps.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/steps.js +1544 -0
- package/sensor/dist/ui-server/api/steps.js.map +1 -0
- package/sensor/dist/ui-server/api/trail-store.d.ts +142 -0
- package/sensor/dist/ui-server/api/trail-store.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/trail-store.js +325 -0
- package/sensor/dist/ui-server/api/trail-store.js.map +1 -0
- package/sensor/dist/ui-server/api/trails.d.ts +163 -0
- package/sensor/dist/ui-server/api/trails.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/trails.js +369 -0
- package/sensor/dist/ui-server/api/trails.js.map +1 -0
- package/sensor/dist/ui-server/api/when.d.ts +133 -0
- package/sensor/dist/ui-server/api/when.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/when.js +275 -0
- package/sensor/dist/ui-server/api/when.js.map +1 -0
- package/sensor/dist/ui-server/api/wire.d.ts +179 -0
- package/sensor/dist/ui-server/api/wire.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/wire.js +231 -0
- package/sensor/dist/ui-server/api/wire.js.map +1 -0
- package/sensor/dist/ui-server/assets.d.ts +40 -0
- package/sensor/dist/ui-server/assets.d.ts.map +1 -0
- package/sensor/dist/ui-server/assets.js +110 -0
- package/sensor/dist/ui-server/assets.js.map +1 -0
- package/sensor/dist/ui-server/constants.d.ts +32 -0
- package/sensor/dist/ui-server/constants.d.ts.map +1 -0
- package/sensor/dist/ui-server/constants.js +35 -0
- package/sensor/dist/ui-server/constants.js.map +1 -0
- package/sensor/dist/ui-server/highlight/index.d.ts +113 -0
- package/sensor/dist/ui-server/highlight/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/highlight/index.js +307 -0
- package/sensor/dist/ui-server/highlight/index.js.map +1 -0
- package/sensor/dist/ui-server/highlight/languages.d.ts +36 -0
- package/sensor/dist/ui-server/highlight/languages.d.ts.map +1 -0
- package/sensor/dist/ui-server/highlight/languages.js +50 -0
- package/sensor/dist/ui-server/highlight/languages.js.map +1 -0
- package/sensor/dist/ui-server/index.d.ts +92 -0
- package/sensor/dist/ui-server/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/index.js +399 -0
- package/sensor/dist/ui-server/index.js.map +1 -0
- package/sensor/dist/ui-server/open-browser.d.ts +31 -0
- package/sensor/dist/ui-server/open-browser.d.ts.map +1 -0
- package/sensor/dist/ui-server/open-browser.js +79 -0
- package/sensor/dist/ui-server/open-browser.js.map +1 -0
- package/sensor/dist/ui-server/security.d.ts +127 -0
- package/sensor/dist/ui-server/security.d.ts.map +1 -0
- package/sensor/dist/ui-server/security.js +332 -0
- package/sensor/dist/ui-server/security.js.map +1 -0
- package/sensor/dist/ui-server/static.d.ts +45 -0
- package/sensor/dist/ui-server/static.d.ts.map +1 -0
- package/sensor/dist/ui-server/static.js +165 -0
- package/sensor/dist/ui-server/static.js.map +1 -0
- package/sensor/dist/utils.d.ts +14 -2
- package/sensor/dist/utils.d.ts.map +1 -1
- package/sensor/dist/utils.js +25 -10
- package/sensor/dist/utils.js.map +1 -1
- package/src/sensor-adapter.mjs +5 -1
|
@@ -50,10 +50,13 @@ exports.extractImportMappings = extractImportMappings;
|
|
|
50
50
|
exports.clearImportMappingCache = clearImportMappingCache;
|
|
51
51
|
exports.extractReExports = extractReExports;
|
|
52
52
|
exports.resolveJvmImport = resolveJvmImport;
|
|
53
|
+
exports.resolvePhpImportedStaticCall = resolvePhpImportedStaticCall;
|
|
53
54
|
exports.resolveViaImport = resolveViaImport;
|
|
55
|
+
exports.isBoundToOutOfRepoImport = isBoundToOutOfRepoImport;
|
|
54
56
|
const fs = __importStar(require("fs"));
|
|
55
57
|
const path = __importStar(require("path"));
|
|
56
58
|
const path_aliases_1 = require("./path-aliases");
|
|
59
|
+
const alias_binding_1 = require("./alias-binding");
|
|
57
60
|
const workspace_packages_1 = require("./workspace-packages");
|
|
58
61
|
const name_matcher_1 = require("./name-matcher");
|
|
59
62
|
/**
|
|
@@ -73,7 +76,7 @@ exports.EXTENSION_RESOLUTION = {
|
|
|
73
76
|
// module-entry convention, hit when a bare workspace import ("data") is
|
|
74
77
|
// rewritten to the member's directory; lowercase variants for safety.
|
|
75
78
|
arkts: ['.ets', '.ts', '.d.ts', '.js', '/Index.ets', '/index.ets', '/index.ts', '/index.js'],
|
|
76
|
-
javascript: ['.js', '.jsx', '.mjs', '.cjs', '/index.js', '/index.jsx'],
|
|
79
|
+
javascript: ['.js', '.jsx', '.mjs', '.cjs', '.xsjs', '.xsjslib', '/index.js', '/index.jsx'],
|
|
77
80
|
tsx: ['.tsx', '.ts', '.d.ts', '.js', '.jsx', '/index.tsx', '/index.ts', '/index.js'],
|
|
78
81
|
jsx: ['.jsx', '.js', '/index.jsx', '/index.js'],
|
|
79
82
|
// SFC consumers import plain TS/JS, sibling components, and barrels
|
|
@@ -110,6 +113,18 @@ function isNixPathImportRef(ref) {
|
|
|
110
113
|
// there, so the staleness discipline matches the resolver's own caches.
|
|
111
114
|
const importPathMemos = new WeakMap();
|
|
112
115
|
const exportedSymbolMemos = new WeakMap();
|
|
116
|
+
const DEFAULT_BINDING_KINDS = new Set(['function', 'class', 'component', 'constant', 'variable']);
|
|
117
|
+
const DEFAULT_EXPORT_BINDING_RE = /^[ \t]*export\s+default\s+([A-Za-z_$][\w$]*)\s*;?[ \t]*$/m;
|
|
118
|
+
const JS_FAMILY_FILE = /\.(?:[cm]?[jt]sx?)$/;
|
|
119
|
+
/** The identifier `export default NAME` names in a JS-family file, or null. */
|
|
120
|
+
function defaultExportBinding(filePath, context) {
|
|
121
|
+
if (!JS_FAMILY_FILE.test(filePath))
|
|
122
|
+
return null;
|
|
123
|
+
const source = context.readFile(filePath);
|
|
124
|
+
if (!source || !source.includes('export default'))
|
|
125
|
+
return null;
|
|
126
|
+
return source.match(DEFAULT_EXPORT_BINDING_RE)?.[1] ?? null;
|
|
127
|
+
}
|
|
113
128
|
const fileExportIndexes = new WeakMap();
|
|
114
129
|
function getFileExportIndex(filePath, context) {
|
|
115
130
|
let perFile = fileExportIndexes.get(context);
|
|
@@ -120,9 +135,8 @@ function getFileExportIndex(filePath, context) {
|
|
|
120
135
|
let idx = perFile.get(filePath);
|
|
121
136
|
if (!idx) {
|
|
122
137
|
idx = { byName: new Map(), defaultComponent: undefined, defaultFnClass: undefined };
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
continue;
|
|
138
|
+
const exported = context.getExportedNodesInFile?.(filePath) ?? context.getNodesInFile(filePath).filter((n) => n.isExported);
|
|
139
|
+
for (const n of exported) {
|
|
126
140
|
if (!idx.byName.has(n.name))
|
|
127
141
|
idx.byName.set(n.name, n);
|
|
128
142
|
if (idx.defaultComponent === undefined && n.kind === 'component')
|
|
@@ -134,6 +148,47 @@ function getFileExportIndex(filePath, context) {
|
|
|
134
148
|
}
|
|
135
149
|
return idx;
|
|
136
150
|
}
|
|
151
|
+
/** The file's nodes named `name`, in `getNodesInFile` order. */
|
|
152
|
+
function nodesInFileNamed(filePath, name, context) {
|
|
153
|
+
return context.getNodesInFileNamed?.(filePath, name) ?? context.getNodesInFile(filePath).filter((n) => n.name === name);
|
|
154
|
+
}
|
|
155
|
+
/** The declaration `export default NAME` names in this file (see FileExportIndex.defaultBinding). */
|
|
156
|
+
function defaultExportBindingNode(filePath, idx, context) {
|
|
157
|
+
if (idx.defaultBinding === undefined) {
|
|
158
|
+
const bound = defaultExportBinding(filePath, context);
|
|
159
|
+
idx.defaultBinding =
|
|
160
|
+
bound === null
|
|
161
|
+
? null
|
|
162
|
+
: (nodesInFileNamed(filePath, bound, context)
|
|
163
|
+
.filter((n) => DEFAULT_BINDING_KINDS.has(n.kind))
|
|
164
|
+
.sort((a, b) => a.startLine - b.startLine || a.startColumn - b.startColumn)[0] ?? null);
|
|
165
|
+
}
|
|
166
|
+
return idx.defaultBinding ?? undefined;
|
|
167
|
+
}
|
|
168
|
+
/** What this file exports as `name`: an exported declaration, else a local export clause's binding. */
|
|
169
|
+
function exportedByName(filePath, idx, name, context) {
|
|
170
|
+
const direct = idx.byName.get(name);
|
|
171
|
+
if (direct)
|
|
172
|
+
return direct;
|
|
173
|
+
if (idx.clauseAliases === undefined) {
|
|
174
|
+
// Bind names introduced by a local export clause to their declarations, so
|
|
175
|
+
// an importer asking for the renamed name gets the real symbol instead of
|
|
176
|
+
// falling through to the name-matcher (which cannot cross the rename).
|
|
177
|
+
// The declaration is the file's first node of that name, exported or not.
|
|
178
|
+
idx.clauseAliases = new Map();
|
|
179
|
+
const content = context.readFile(filePath);
|
|
180
|
+
if (content && content.includes('export')) {
|
|
181
|
+
for (const { exportedName, localName } of (0, alias_binding_1.extractLocalExportAliases)(content)) {
|
|
182
|
+
if (idx.byName.has(exportedName) || idx.clauseAliases.has(exportedName))
|
|
183
|
+
continue;
|
|
184
|
+
const decl = nodesInFileNamed(filePath, localName, context)[0];
|
|
185
|
+
if (decl)
|
|
186
|
+
idx.clauseAliases.set(exportedName, decl);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return idx.clauseAliases.get(name);
|
|
191
|
+
}
|
|
137
192
|
/** Drop the per-context memo tables (see ReferenceResolver.clearCaches). */
|
|
138
193
|
function clearImportResolverMemos(context) {
|
|
139
194
|
importPathMemos.delete(context);
|
|
@@ -141,6 +196,7 @@ function clearImportResolverMemos(context) {
|
|
|
141
196
|
fileExportIndexes.delete(context);
|
|
142
197
|
luaFileBasenameIndexes.delete(context);
|
|
143
198
|
cobolCopybookIndexes.delete(context);
|
|
199
|
+
pythonModuleFileMemos.delete(context);
|
|
144
200
|
}
|
|
145
201
|
function resolveImportPath(importPath, fromFile, language, context) {
|
|
146
202
|
let memo = importPathMemos.get(context);
|
|
@@ -300,6 +356,19 @@ const C_CPP_STDLIB_HEADERS = new Set([
|
|
|
300
356
|
'unordered_set', 'utility', 'valarray', 'variant', 'vector',
|
|
301
357
|
'version',
|
|
302
358
|
]);
|
|
359
|
+
/**
|
|
360
|
+
* Languages whose imports are ES-module specifiers, extracted by
|
|
361
|
+
* `extractJSImports` and therefore classified by the same bare-specifier /
|
|
362
|
+
* alias / workspace rules. Svelte, Vue and Astro belong here: an SFC imports
|
|
363
|
+
* inside its `<script>` block (Astro: the `---` frontmatter) with exactly the
|
|
364
|
+
* same syntax, and leaving them out made `isExternalImport` answer "not
|
|
365
|
+
* external" for every npm specifier in an SFC.
|
|
366
|
+
*/
|
|
367
|
+
const ESM_IMPORT_LANGUAGES = new Set([
|
|
368
|
+
'typescript', 'tsx', 'javascript', 'jsx', 'arkts', 'svelte', 'vue', 'astro',
|
|
369
|
+
]);
|
|
370
|
+
/** Rust path roots that always name a standard-library crate. */
|
|
371
|
+
const RUST_STDLIB_ROOTS = new Set(['std', 'core', 'alloc', 'proc_macro']);
|
|
303
372
|
/**
|
|
304
373
|
* Check if an import is external (npm package, etc.)
|
|
305
374
|
*
|
|
@@ -322,7 +391,7 @@ function isExternalImport(importPath, language, context) {
|
|
|
322
391
|
return false;
|
|
323
392
|
}
|
|
324
393
|
// Common external patterns
|
|
325
|
-
if (language
|
|
394
|
+
if (ESM_IMPORT_LANGUAGES.has(language)) {
|
|
326
395
|
// Node built-ins
|
|
327
396
|
if (['fs', 'path', 'os', 'crypto', 'http', 'https', 'url', 'util', 'events', 'stream', 'child_process', 'buffer'].includes(importPath)) {
|
|
328
397
|
return true;
|
|
@@ -420,8 +489,44 @@ function resolveRelativeImport(importPath, fromDir, language, context) {
|
|
|
420
489
|
if (context.fileExists(relativePath)) {
|
|
421
490
|
return relativePath;
|
|
422
491
|
}
|
|
492
|
+
return findSourceForEmittedSpecifier(relativePath, language, context);
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* TypeScript under `moduleResolution: node16 | nodenext | bundler` writes the
|
|
496
|
+
* EMITTED extension in the specifier (`import x from './util.js'` for
|
|
497
|
+
* `util.ts`, `.mjs` for `.mts`, `.cjs` for `.cts`), and the source file with that
|
|
498
|
+
* exact name never exists in the repo. Without this remap the import resolver
|
|
499
|
+
* returned null for every such import, so each imported name fell through to
|
|
500
|
+
* bare-name matching: a method wrapping the same-named helper it imports
|
|
501
|
+
* (`renderDockStyles() { return renderDockStyles() }`) resolved to ITSELF, and
|
|
502
|
+
* any repo-wide same-named symbol could win the cross-module edge.
|
|
503
|
+
*/
|
|
504
|
+
const EMITTED_TO_SOURCE_EXTENSIONS = [
|
|
505
|
+
[/\.js$/, ['.ts', '.tsx', '.d.ts']],
|
|
506
|
+
[/\.jsx$/, ['.tsx']],
|
|
507
|
+
[/\.mjs$/, ['.mts', '.d.mts']],
|
|
508
|
+
[/\.cjs$/, ['.cts', '.d.cts']],
|
|
509
|
+
];
|
|
510
|
+
function findSourceForEmittedSpecifier(relativePath, language, context) {
|
|
511
|
+
if (!EMITTED_SPECIFIER_LANGUAGES.has(language))
|
|
512
|
+
return null;
|
|
513
|
+
for (const [emitted, sources] of EMITTED_TO_SOURCE_EXTENSIONS) {
|
|
514
|
+
if (!emitted.test(relativePath))
|
|
515
|
+
continue;
|
|
516
|
+
const stem = relativePath.replace(emitted, '');
|
|
517
|
+
for (const ext of sources) {
|
|
518
|
+
const candidate = stem + ext;
|
|
519
|
+
if (context.fileExists(candidate))
|
|
520
|
+
return candidate;
|
|
521
|
+
}
|
|
522
|
+
return null;
|
|
523
|
+
}
|
|
423
524
|
return null;
|
|
424
525
|
}
|
|
526
|
+
/** Languages whose import specifiers can name the emitted `.js` of a `.ts` source. */
|
|
527
|
+
const EMITTED_SPECIFIER_LANGUAGES = new Set([
|
|
528
|
+
'typescript', 'tsx', 'javascript', 'jsx', 'vue', 'svelte', 'astro', 'arkts',
|
|
529
|
+
]);
|
|
425
530
|
/**
|
|
426
531
|
* Resolve an aliased/absolute import.
|
|
427
532
|
*
|
|
@@ -443,7 +548,7 @@ function resolveAliasedImport(importPath, projectRoot, language, context) {
|
|
|
443
548
|
}
|
|
444
549
|
if (context.fileExists(basePath))
|
|
445
550
|
return basePath;
|
|
446
|
-
return
|
|
551
|
+
return findSourceForEmittedSpecifier(basePath, language, context);
|
|
447
552
|
};
|
|
448
553
|
// 1. Project tsconfig/jsconfig paths.
|
|
449
554
|
const aliasMap = context.getProjectAliases?.();
|
|
@@ -1256,6 +1361,47 @@ function pickClosestJvmCandidate(candidates, fromPath) {
|
|
|
1256
1361
|
}
|
|
1257
1362
|
return best;
|
|
1258
1363
|
}
|
|
1364
|
+
/**
|
|
1365
|
+
* PHP scoped calls are encoded as "Alias.method" by both extractors. A use
|
|
1366
|
+
* mapping names a namespace, not a filesystem path, so resolve the receiver
|
|
1367
|
+
* through its localName and look up the method on that exact imported type.
|
|
1368
|
+
* undefined means this is not an imported static call; null means the import
|
|
1369
|
+
* owns the call but its method is unavailable, so name fallbacks must not guess.
|
|
1370
|
+
*/
|
|
1371
|
+
function resolvePhpImportedStaticCall(ref, context) {
|
|
1372
|
+
if (ref.language !== 'php' || ref.referenceKind !== 'calls')
|
|
1373
|
+
return undefined;
|
|
1374
|
+
const call = /^(\w+)\.(\w+)$/.exec(ref.referenceName);
|
|
1375
|
+
if (!call)
|
|
1376
|
+
return undefined;
|
|
1377
|
+
const [, receiver, member] = call;
|
|
1378
|
+
const imp = context.getImportMappings(ref.filePath, ref.language)
|
|
1379
|
+
.find((i) => i.localName === receiver);
|
|
1380
|
+
if (!imp)
|
|
1381
|
+
return undefined;
|
|
1382
|
+
// PHP variables occupy a different namespace from class imports. Extraction
|
|
1383
|
+
// strips the leading "$" from "$Alias->method()" too; leave that receiver to
|
|
1384
|
+
// local type inference even when a class import has the same local name.
|
|
1385
|
+
const lines = context.getFileLines?.(ref.filePath) ?? context.readFile(ref.filePath)?.split('\n');
|
|
1386
|
+
const line = lines?.[ref.line - 1];
|
|
1387
|
+
if (line?.slice(ref.column).startsWith('$'))
|
|
1388
|
+
return undefined;
|
|
1389
|
+
const fqn = imp.source.replace(/^\\/, '');
|
|
1390
|
+
const separator = fqn.lastIndexOf('\\');
|
|
1391
|
+
const typeName = separator < 0
|
|
1392
|
+
? fqn
|
|
1393
|
+
: `${fqn.slice(0, separator)}::${fqn.slice(separator + 1)}`;
|
|
1394
|
+
const owners = context.getNodesByQualifiedName(typeName)
|
|
1395
|
+
.filter((n) => n.language === 'php' && STATIC_MEMBER_CONTAINERS.has(n.kind));
|
|
1396
|
+
if (owners.length !== 1)
|
|
1397
|
+
return null;
|
|
1398
|
+
const owner = owners[0];
|
|
1399
|
+
const methods = context.getNodesByQualifiedName(`${owner.qualifiedName}::${member}`)
|
|
1400
|
+
.filter((n) => n.language === 'php' && n.kind === 'method' && n.filePath === owner.filePath);
|
|
1401
|
+
if (methods.length !== 1)
|
|
1402
|
+
return null;
|
|
1403
|
+
return { original: ref, targetNodeId: methods[0].id, confidence: 0.95, resolvedBy: 'import' };
|
|
1404
|
+
}
|
|
1259
1405
|
function resolveViaImport(ref, context) {
|
|
1260
1406
|
// C/C++ #include references — resolve directly to the included file
|
|
1261
1407
|
// (file→file edge), bypassing symbol lookup. The extractor emits these
|
|
@@ -1450,13 +1596,21 @@ function resolveViaImport(ref, context) {
|
|
|
1450
1596
|
for (const imp of imports) {
|
|
1451
1597
|
if (imp.localName === ref.referenceName || ref.referenceName.startsWith(imp.localName + '.')) {
|
|
1452
1598
|
// Resolve the import path
|
|
1453
|
-
|
|
1599
|
+
let resolvedPath = resolveImportPath(imp.source, ref.filePath, ref.language, context);
|
|
1600
|
+
// Named Python imports need the same absolute-module lookup as namespace
|
|
1601
|
+
// imports, including aliases used as receiver types (#1820).
|
|
1602
|
+
if (!resolvedPath && ref.language === 'python') {
|
|
1603
|
+
resolvedPath = findPythonModuleFile(imp.source, context, ref.filePath)?.filePath ?? null;
|
|
1604
|
+
}
|
|
1454
1605
|
if (resolvedPath) {
|
|
1455
1606
|
const exportedName = imp.isDefault ? 'default' : imp.exportedName;
|
|
1456
1607
|
const memberName = imp.isNamespace
|
|
1457
1608
|
? ref.referenceName.replace(imp.localName + '.', '')
|
|
1458
1609
|
: null;
|
|
1459
|
-
const targetNode = findExportedSymbol(resolvedPath, { isDefault: imp.isDefault, isNamespace: imp.isNamespace, exportedName, memberName }, ref.language, context, new Set())
|
|
1610
|
+
const targetNode = findExportedSymbol(resolvedPath, { isDefault: imp.isDefault, isNamespace: imp.isNamespace, exportedName, memberName }, ref.language, context, new Set()) ?? (ref.language === 'python'
|
|
1611
|
+
? context.getNodesInFile(resolvedPath).find(n => n.name === (memberName ?? exportedName) && !n.qualifiedName.includes('::') &&
|
|
1612
|
+
(n.kind === 'class' || n.kind === 'function' || n.kind === 'variable' || n.kind === 'constant'))
|
|
1613
|
+
: undefined);
|
|
1460
1614
|
if (targetNode) {
|
|
1461
1615
|
// `Foo.bar()` / `Foo.CONST` — a NAMED (non-namespace) class import
|
|
1462
1616
|
// accessed through a member. `findExportedSymbol` resolved `Foo` to
|
|
@@ -1475,6 +1629,24 @@ function resolveViaImport(ref, context) {
|
|
|
1475
1629
|
resolvedBy: 'import',
|
|
1476
1630
|
};
|
|
1477
1631
|
}
|
|
1632
|
+
// An imported object literal used as a namespace (#1573):
|
|
1633
|
+
// `api.call()` after `import { api } from './api'` where `api` is
|
|
1634
|
+
// `export const api = { call() {…} }`. Its members have bare
|
|
1635
|
+
// qualified names inside the constant's extent, so the
|
|
1636
|
+
// `Container::member` lookup above can't see them and the edge
|
|
1637
|
+
// landed on the constant — every cross-file caller of the method
|
|
1638
|
+
// went missing. Resolve the member by containment instead.
|
|
1639
|
+
if (targetNode.kind === 'constant' || targetNode.kind === 'variable') {
|
|
1640
|
+
const member = ref.referenceName.slice(imp.localName.length + 1).split('.')[0];
|
|
1641
|
+
if (member) {
|
|
1642
|
+
const literalMember = (0, name_matcher_1.resolveObjectLiteralMember)(targetNode, member, ref, context, 0.9, 'import');
|
|
1643
|
+
if (literalMember)
|
|
1644
|
+
return literalMember;
|
|
1645
|
+
const aliasMember = resolveObjectLiteralAlias(targetNode, member, ref, context);
|
|
1646
|
+
if (aliasMember)
|
|
1647
|
+
return aliasMember;
|
|
1648
|
+
}
|
|
1649
|
+
}
|
|
1478
1650
|
// An imported VALUE (singleton constant / shared instance) called
|
|
1479
1651
|
// through a member: `reproStore.notifyJoinGuildStatus()` after
|
|
1480
1652
|
// `import { reproStore } from './store'`. findExportedSymbol
|
|
@@ -1488,6 +1660,13 @@ function resolveViaImport(ref, context) {
|
|
|
1488
1660
|
const instanceMember = resolveImportedInstanceMember(targetNode, ref, imp.localName, context);
|
|
1489
1661
|
if (instanceMember)
|
|
1490
1662
|
return instanceMember;
|
|
1663
|
+
// Finding a named Python import proves the receiver exists, not
|
|
1664
|
+
// its requested attribute. In particular, task.delay() enqueues
|
|
1665
|
+
// work; it does not call the imported task function directly.
|
|
1666
|
+
// Keep unknown members unresolved (including callback values)
|
|
1667
|
+
// instead of falling back to the receiver as their target.
|
|
1668
|
+
if (ref.language === 'python')
|
|
1669
|
+
return null;
|
|
1491
1670
|
}
|
|
1492
1671
|
return {
|
|
1493
1672
|
original: ref,
|
|
@@ -1603,11 +1782,19 @@ function resolvePythonModuleMember(ref, imports, context) {
|
|
|
1603
1782
|
// `import mod` / `import numpy as np` bind the module at `source` itself;
|
|
1604
1783
|
// `from . import certs` / `from pkg import mod` bind a SUBMODULE whose
|
|
1605
1784
|
// dotted path is the source joined with the imported name.
|
|
1785
|
+
//
|
|
1786
|
+
// Join with the EXPORTED name, not the local one: under
|
|
1787
|
+
// `from pkg import mod as alias` the receiver is `alias` but the module on
|
|
1788
|
+
// disk is `pkg.mod`, and building `pkg.alias` looked for a file that does
|
|
1789
|
+
// not exist — so the aliased form dropped its `calls` edge while the plain
|
|
1790
|
+
// form (where the two names coincide) worked (#1626). For an unaliased
|
|
1791
|
+
// import the two are identical, so this changes nothing there.
|
|
1792
|
+
const moduleName = imp.exportedName === '*' ? imp.localName : imp.exportedName;
|
|
1606
1793
|
const modulePath = imp.isNamespace
|
|
1607
1794
|
? imp.source
|
|
1608
1795
|
: imp.source.endsWith('.')
|
|
1609
|
-
? imp.source +
|
|
1610
|
-
: imp.source + '.' +
|
|
1796
|
+
? imp.source + moduleName
|
|
1797
|
+
: imp.source + '.' + moduleName;
|
|
1611
1798
|
// resolveImportPath only maps RELATIVE dotted paths (`.mod`, `..pkg.mod`); an
|
|
1612
1799
|
// ABSOLUTE package path (`pkg.module` from `from pkg import module`, or a bare
|
|
1613
1800
|
// `import pkg.mod`) resolves to null there, so fall back to the dotted-module
|
|
@@ -1696,6 +1883,30 @@ function resolveLuaRequire(ref, context) {
|
|
|
1696
1883
|
}
|
|
1697
1884
|
return null;
|
|
1698
1885
|
}
|
|
1886
|
+
/**
|
|
1887
|
+
* `UploadApi.uploadARCapture()` where `UploadApi` is a NAMESPACE OBJECT — the
|
|
1888
|
+
* default-export façade most React Native API layers are written as:
|
|
1889
|
+
*
|
|
1890
|
+
* import { uploadARCapture } from './frames'
|
|
1891
|
+
* const UploadApi = { uploadARCapture, createFolder }
|
|
1892
|
+
* export default UploadApi
|
|
1893
|
+
*
|
|
1894
|
+
* The member is a shorthand (or `key: ident`) property whose value is a
|
|
1895
|
+
* binding of the object's file, not a function defined inside the literal,
|
|
1896
|
+
* so containment (`resolveObjectLiteralMember`) finds nothing and the call
|
|
1897
|
+
* landed on the constant — every cross-file caller of the API function went
|
|
1898
|
+
* missing. Read the literal's source, take the binding the member names, and
|
|
1899
|
+
* resolve it where the object's file would: a symbol declared there, else
|
|
1900
|
+
* through its own imports. Calls accept callable targets only.
|
|
1901
|
+
*/
|
|
1902
|
+
function resolveObjectLiteralAlias(container, member, ref, context) {
|
|
1903
|
+
if (container.kind !== 'constant' && container.kind !== 'variable')
|
|
1904
|
+
return null;
|
|
1905
|
+
if (!JS_FAMILY_FILE.test(container.filePath))
|
|
1906
|
+
return null;
|
|
1907
|
+
const resolved = (0, name_matcher_1.resolveObjectLiteralBinding)(container, member, ref, context);
|
|
1908
|
+
return resolved ? { ...resolved, confidence: 0.9, resolvedBy: 'import' } : null;
|
|
1909
|
+
}
|
|
1699
1910
|
function resolveModuleImportToFile(ref, imports, context) {
|
|
1700
1911
|
if (ref.referenceKind !== 'imports')
|
|
1701
1912
|
return null;
|
|
@@ -1717,9 +1928,12 @@ function resolveModuleImportToFile(ref, imports, context) {
|
|
|
1717
1928
|
}
|
|
1718
1929
|
else if (ref.language === 'python') {
|
|
1719
1930
|
// `from . import certs` — the imported NAME is a submodule of the source.
|
|
1931
|
+
// As in resolvePythonModuleMember, use the exported name so an alias
|
|
1932
|
+
// still links to the real module file (#1626).
|
|
1933
|
+
const moduleName = imp.exportedName === '*' ? imp.localName : imp.exportedName;
|
|
1720
1934
|
modulePath = imp.source.endsWith('.')
|
|
1721
|
-
? imp.source +
|
|
1722
|
-
: imp.source + '.' +
|
|
1935
|
+
? imp.source + moduleName
|
|
1936
|
+
: imp.source + '.' + moduleName;
|
|
1723
1937
|
}
|
|
1724
1938
|
else {
|
|
1725
1939
|
// A named TS/JS import binds a symbol, not a module — leave it alone.
|
|
@@ -1753,21 +1967,42 @@ function resolveModuleImportToFile(ref, imports, context) {
|
|
|
1753
1967
|
* no edge. Shared by absolute `import a.b.c` and absolute `from a.b import c`
|
|
1754
1968
|
* (where `c` is a submodule) resolution.
|
|
1755
1969
|
*/
|
|
1970
|
+
/**
|
|
1971
|
+
* Per-context memo for findPythonModuleFile: module path → the `<mod>.py` and
|
|
1972
|
+
* `<mod>/__init__.py` file nodes whose path ends with it, in name-lookup
|
|
1973
|
+
* order. Only the importing file's own path is excluded per call, so taking
|
|
1974
|
+
* the first survivor returns the node the unmemoized scan found. Without it,
|
|
1975
|
+
* every ref naming a module outside the project (`from unittest import mock`)
|
|
1976
|
+
* rescanned every `__init__.py` in the tree. Same stable window as the name
|
|
1977
|
+
* caches; dropped by clearImportResolverMemos.
|
|
1978
|
+
*/
|
|
1979
|
+
const pythonModuleFileMemos = new WeakMap();
|
|
1756
1980
|
function findPythonModuleFile(mod, context, excludeFilePath) {
|
|
1757
1981
|
if (!mod || mod.startsWith('.'))
|
|
1758
1982
|
return null; // relative imports handled elsewhere
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
if (
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
.
|
|
1769
|
-
|
|
1770
|
-
|
|
1983
|
+
let memo = pythonModuleFileMemos.get(context);
|
|
1984
|
+
if (!memo) {
|
|
1985
|
+
memo = new Map();
|
|
1986
|
+
pythonModuleFileMemos.set(context, memo);
|
|
1987
|
+
}
|
|
1988
|
+
let files = memo.get(mod);
|
|
1989
|
+
if (!files) {
|
|
1990
|
+
const rel = mod.replace(/\./g, '/');
|
|
1991
|
+
const lastSeg = mod.split('.').pop();
|
|
1992
|
+
const endsWith = (p, want) => p === want || p.endsWith('/' + want);
|
|
1993
|
+
files = {
|
|
1994
|
+
module: context
|
|
1995
|
+
.getNodesByName(`${lastSeg}.py`)
|
|
1996
|
+
.filter((n) => n.kind === 'file' && endsWith(n.filePath, `${rel}.py`)),
|
|
1997
|
+
pkg: context
|
|
1998
|
+
.getNodesByName('__init__.py')
|
|
1999
|
+
.filter((n) => n.kind === 'file' && endsWith(n.filePath, `${rel}/__init__.py`)),
|
|
2000
|
+
};
|
|
2001
|
+
memo.set(mod, files);
|
|
2002
|
+
}
|
|
2003
|
+
return (files.module.find((n) => n.filePath !== excludeFilePath) ??
|
|
2004
|
+
files.pkg.find((n) => n.filePath !== excludeFilePath) ??
|
|
2005
|
+
null);
|
|
1771
2006
|
}
|
|
1772
2007
|
/**
|
|
1773
2008
|
* Resolve a Python ABSOLUTE dotted module import (`import a.b.c`) to its file —
|
|
@@ -1807,6 +2042,7 @@ function resolveRustPathReference(ref, context) {
|
|
|
1807
2042
|
const target = context.getNodesInFile(file).find((n) => n.name === leaf &&
|
|
1808
2043
|
(n.kind === 'function' ||
|
|
1809
2044
|
n.kind === 'struct' ||
|
|
2045
|
+
n.kind === 'union' ||
|
|
1810
2046
|
n.kind === 'enum' ||
|
|
1811
2047
|
n.kind === 'trait' ||
|
|
1812
2048
|
n.kind === 'type_alias' ||
|
|
@@ -2079,17 +2315,19 @@ function findExportedSymbolWalk(filePath, want, language, context, visited, dept
|
|
|
2079
2315
|
// `.ts`/`.tsx` `export default fn`/`class` case. Without the component
|
|
2080
2316
|
// branch, an `export { default as X } from './X.svelte'` barrel never
|
|
2081
2317
|
// resolves and the component shows a false 0 callers (#629).
|
|
2082
|
-
|
|
2318
|
+
// A component file IS its default export; otherwise the statement that
|
|
2319
|
+
// names the binding beats the first-exported-function guess.
|
|
2320
|
+
const direct = exportIndex.defaultComponent ?? defaultExportBindingNode(filePath, exportIndex, context) ?? exportIndex.defaultFnClass;
|
|
2083
2321
|
if (direct)
|
|
2084
2322
|
return direct;
|
|
2085
2323
|
}
|
|
2086
2324
|
else if (want.isNamespace && want.memberName) {
|
|
2087
|
-
const direct = exportIndex
|
|
2325
|
+
const direct = exportedByName(filePath, exportIndex, want.memberName, context);
|
|
2088
2326
|
if (direct)
|
|
2089
2327
|
return direct;
|
|
2090
2328
|
}
|
|
2091
2329
|
else {
|
|
2092
|
-
const direct = exportIndex
|
|
2330
|
+
const direct = exportedByName(filePath, exportIndex, want.exportedName, context);
|
|
2093
2331
|
if (direct)
|
|
2094
2332
|
return direct;
|
|
2095
2333
|
}
|
|
@@ -2132,7 +2370,7 @@ function findExportedSymbolWalk(filePath, want, language, context, visited, dept
|
|
|
2132
2370
|
}
|
|
2133
2371
|
/** Node kinds that own static members reachable as `Container.member`. */
|
|
2134
2372
|
const STATIC_MEMBER_CONTAINERS = new Set([
|
|
2135
|
-
'class', 'struct', 'interface', 'enum', 'trait', 'protocol',
|
|
2373
|
+
'class', 'struct', 'union', 'interface', 'enum', 'trait', 'protocol',
|
|
2136
2374
|
]);
|
|
2137
2375
|
/**
|
|
2138
2376
|
* Resolve `Container.member` — a static method/property access on a NAMED class
|
|
@@ -2209,4 +2447,132 @@ function resolveStaticMember(container, ref, localName, context) {
|
|
|
2209
2447
|
}
|
|
2210
2448
|
return candidates[0];
|
|
2211
2449
|
}
|
|
2450
|
+
/**
|
|
2451
|
+
* Rust `use` declarations, flattened to `localName → full path`.
|
|
2452
|
+
*
|
|
2453
|
+
* Rust is the one supported language with NO `ImportMapping` extraction (see
|
|
2454
|
+
* `extractImportMappings`), so this is the only channel that can tell whether
|
|
2455
|
+
* a bare type name in a Rust file was brought in by a `use`. Handles nested
|
|
2456
|
+
* groups (`use a::{b::C, d as E}`), globs (skipped — they bind no single
|
|
2457
|
+
* name), and `as` aliases.
|
|
2458
|
+
*/
|
|
2459
|
+
function collectRustUseBindings(content) {
|
|
2460
|
+
const out = new Map();
|
|
2461
|
+
// Expand one level of `{...}` at a time so `a::{b::{C, D}, E}` flattens.
|
|
2462
|
+
const expand = (spec) => {
|
|
2463
|
+
const open = spec.indexOf('{');
|
|
2464
|
+
if (open === -1)
|
|
2465
|
+
return [spec.trim()];
|
|
2466
|
+
const prefix = spec.slice(0, open);
|
|
2467
|
+
let depth = 0;
|
|
2468
|
+
let close = -1;
|
|
2469
|
+
for (let i = open; i < spec.length; i++) {
|
|
2470
|
+
if (spec[i] === '{')
|
|
2471
|
+
depth++;
|
|
2472
|
+
else if (spec[i] === '}') {
|
|
2473
|
+
depth--;
|
|
2474
|
+
if (depth === 0) {
|
|
2475
|
+
close = i;
|
|
2476
|
+
break;
|
|
2477
|
+
}
|
|
2478
|
+
}
|
|
2479
|
+
}
|
|
2480
|
+
if (close === -1)
|
|
2481
|
+
return [];
|
|
2482
|
+
const suffix = spec.slice(close + 1);
|
|
2483
|
+
const inner = spec.slice(open + 1, close);
|
|
2484
|
+
const parts = [];
|
|
2485
|
+
let depth2 = 0;
|
|
2486
|
+
let start = 0;
|
|
2487
|
+
for (let i = 0; i <= inner.length; i++) {
|
|
2488
|
+
const ch = inner[i];
|
|
2489
|
+
if (ch === '{')
|
|
2490
|
+
depth2++;
|
|
2491
|
+
else if (ch === '}')
|
|
2492
|
+
depth2--;
|
|
2493
|
+
if (i === inner.length || (ch === ',' && depth2 === 0)) {
|
|
2494
|
+
const seg = inner.slice(start, i).trim();
|
|
2495
|
+
if (seg)
|
|
2496
|
+
parts.push(seg);
|
|
2497
|
+
start = i + 1;
|
|
2498
|
+
}
|
|
2499
|
+
}
|
|
2500
|
+
return parts.flatMap((p) => expand(prefix + p + suffix));
|
|
2501
|
+
};
|
|
2502
|
+
// `use` items end at the first `;`. Attributes/visibility (`pub use`) are
|
|
2503
|
+
// irrelevant to the binding itself.
|
|
2504
|
+
const useRe = /(^|\n)\s*(?:pub(?:\([^)]*\))?\s+)?use\s+([^;]+);/g;
|
|
2505
|
+
let m;
|
|
2506
|
+
while ((m = useRe.exec(content)) !== null) {
|
|
2507
|
+
for (const spec of expand(m[2].replace(/\s+/g, ' '))) {
|
|
2508
|
+
const aliasMatch = /^(.*?)\s+as\s+([A-Za-z_]\w*)$/.exec(spec);
|
|
2509
|
+
const rawPath = (aliasMatch ? aliasMatch[1] : spec).trim();
|
|
2510
|
+
if (!rawPath || rawPath.endsWith('*'))
|
|
2511
|
+
continue;
|
|
2512
|
+
const segments = rawPath.split('::').map((s) => s.trim()).filter(Boolean);
|
|
2513
|
+
const leaf = segments[segments.length - 1];
|
|
2514
|
+
if (!leaf)
|
|
2515
|
+
continue;
|
|
2516
|
+
const local = aliasMatch ? aliasMatch[2] : leaf;
|
|
2517
|
+
out.set(local, segments.join('::'));
|
|
2518
|
+
}
|
|
2519
|
+
}
|
|
2520
|
+
return out;
|
|
2521
|
+
}
|
|
2522
|
+
/**
|
|
2523
|
+
* Is `name`, as used in `ref`'s file, bound by an import whose module lives
|
|
2524
|
+
* OUTSIDE the repository?
|
|
2525
|
+
*
|
|
2526
|
+
* When it is, no in-repo node can be the referent: the symbol is defined in a
|
|
2527
|
+
* third-party crate/package, and any same-named local symbol the name-matcher
|
|
2528
|
+
* finds is a coincidence. Rust `use std::error::Error;` + `impl Error for
|
|
2529
|
+
* MapperError {}` bound to a local `MapperError::Error` variant, and once
|
|
2530
|
+
* non-type kinds were filtered out it simply moved to an unrelated local
|
|
2531
|
+
* `type Error` alias — restricting kinds alone RELOCATES the false edge
|
|
2532
|
+
* instead of removing it, so locality has to be checked too.
|
|
2533
|
+
*
|
|
2534
|
+
* Answers only when it can be CERTAIN, because a false "yes" deletes a real
|
|
2535
|
+
* edge. Two languages qualify, each with an oracle that cannot be wrong:
|
|
2536
|
+
*
|
|
2537
|
+
* - **Rust** — the `use` path is rooted at a standard-library crate
|
|
2538
|
+
* (`std`/`core`/`alloc`/`proc_macro`), which by definition ships outside
|
|
2539
|
+
* any repository. Deliberately NOT generalized to "the module path doesn't
|
|
2540
|
+
* resolve to a file": a crate can re-export another workspace crate's
|
|
2541
|
+
* modules (`pub use pupil_core::{ports, domain};`), so `crate::ports::X`
|
|
2542
|
+
* has no `src/ports/` directory to walk yet is entirely in-repo — that
|
|
2543
|
+
* generalization measured 13 real trait implementations deleted.
|
|
2544
|
+
* - **ES modules** — `isExternalImport`, which already accounts for tsconfig
|
|
2545
|
+
* path aliases and monorepo workspace packages.
|
|
2546
|
+
*
|
|
2547
|
+
* Everything else returns false and resolves exactly as before. JVM and Python
|
|
2548
|
+
* imports notably do NOT go through `resolveImportPath` (they have dedicated
|
|
2549
|
+
* FQN/module matchers), so there is no trustworthy oracle to consult here.
|
|
2550
|
+
*/
|
|
2551
|
+
function isBoundToOutOfRepoImport(ref, context) {
|
|
2552
|
+
const name = ref.referenceName;
|
|
2553
|
+
if (name.includes('::') || name.includes('.'))
|
|
2554
|
+
return false; // qualified refs resolve by path
|
|
2555
|
+
if (ref.language === 'rust') {
|
|
2556
|
+
const content = context.readFile(ref.filePath);
|
|
2557
|
+
if (!content)
|
|
2558
|
+
return false;
|
|
2559
|
+
const usePath = collectRustUseBindings(content).get(name);
|
|
2560
|
+
if (!usePath)
|
|
2561
|
+
return false;
|
|
2562
|
+
const segments = usePath.split('::');
|
|
2563
|
+
if (segments.length < 2 || !RUST_STDLIB_ROOTS.has(segments[0]))
|
|
2564
|
+
return false;
|
|
2565
|
+
// 2015-edition crate-relative paths can shadow a stdlib root with a local
|
|
2566
|
+
// module of the same name — if the path walks to a real file, it's local.
|
|
2567
|
+
return resolveRustModuleFile(segments.slice(0, -1), ref.filePath, context) === null;
|
|
2568
|
+
}
|
|
2569
|
+
if (!ESM_IMPORT_LANGUAGES.has(ref.language))
|
|
2570
|
+
return false;
|
|
2571
|
+
for (const imp of context.getImportMappings(ref.filePath, ref.language)) {
|
|
2572
|
+
if (imp.localName !== name)
|
|
2573
|
+
continue;
|
|
2574
|
+
return isExternalImport(imp.source, ref.language, context);
|
|
2575
|
+
}
|
|
2576
|
+
return false;
|
|
2577
|
+
}
|
|
2212
2578
|
//# sourceMappingURL=import-resolver.js.map
|