@lzehrung/codegraph 2.3.28 → 2.3.30

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.
Files changed (325) hide show
  1. package/dist/bin/cli.js +7008 -4340
  2. package/dist/bin/query-index-worker.js +1357 -724
  3. package/dist/document-links/asciidoc.d.ts.map +1 -1
  4. package/dist/document-links/asciidoc.js +3 -4
  5. package/dist/document-links/asciidoc.js.map +1 -1
  6. package/dist/document-links/html-forms.d.ts +39 -0
  7. package/dist/document-links/html-forms.d.ts.map +1 -0
  8. package/dist/document-links/html-forms.js +94 -0
  9. package/dist/document-links/html-forms.js.map +1 -0
  10. package/dist/document-links/html.d.ts +8 -0
  11. package/dist/document-links/html.d.ts.map +1 -1
  12. package/dist/document-links/html.js +30 -15
  13. package/dist/document-links/html.js.map +1 -1
  14. package/dist/document-links/markdown.d.ts.map +1 -1
  15. package/dist/document-links/markdown.js +6 -7
  16. package/dist/document-links/markdown.js.map +1 -1
  17. package/dist/document-links/rst.d.ts.map +1 -1
  18. package/dist/document-links/rst.js +6 -0
  19. package/dist/document-links/rst.js.map +1 -1
  20. package/dist/document-links/sfc.d.ts.map +1 -1
  21. package/dist/document-links/sfc.js +4 -4
  22. package/dist/document-links/sfc.js.map +1 -1
  23. package/dist/graphs/angularjs.d.ts.map +1 -1
  24. package/dist/graphs/angularjs.js +9 -1
  25. package/dist/graphs/angularjs.js.map +1 -1
  26. package/dist/graphs/edge-resolution.d.ts.map +1 -1
  27. package/dist/graphs/edge-resolution.js +12 -2
  28. package/dist/graphs/edge-resolution.js.map +1 -1
  29. package/dist/graphs/specifiers.d.ts.map +1 -1
  30. package/dist/graphs/specifiers.js +62 -104
  31. package/dist/graphs/specifiers.js.map +1 -1
  32. package/dist/graphs/symbol-graph-detailed/ast.d.ts.map +1 -1
  33. package/dist/graphs/symbol-graph-detailed/ast.js +3 -0
  34. package/dist/graphs/symbol-graph-detailed/ast.js.map +1 -1
  35. package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -1
  36. package/dist/graphs/symbol-graph-detailed/edge-passes.js +157 -91
  37. package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -1
  38. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +34 -0
  39. package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -1
  40. package/dist/graphs/symbol-graph-detailed/receiver-calls.js +531 -24
  41. package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -1
  42. package/dist/impact/analyzer.d.ts.map +1 -1
  43. package/dist/impact/analyzer.js +82 -4
  44. package/dist/impact/analyzer.js.map +1 -1
  45. package/dist/impact/call-compatibility/providers/index.d.ts +3 -1
  46. package/dist/impact/call-compatibility/providers/index.d.ts.map +1 -1
  47. package/dist/impact/call-compatibility/providers/index.js +11 -4
  48. package/dist/impact/call-compatibility/providers/index.js.map +1 -1
  49. package/dist/impact/call-compatibility.d.ts.map +1 -1
  50. package/dist/impact/call-compatibility.js +2 -7
  51. package/dist/impact/call-compatibility.js.map +1 -1
  52. package/dist/impact/map.d.ts.map +1 -1
  53. package/dist/impact/map.js +58 -1
  54. package/dist/impact/map.js.map +1 -1
  55. package/dist/impact/member-resolution-coverage.d.ts.map +1 -1
  56. package/dist/impact/member-resolution-coverage.js +2 -5
  57. package/dist/impact/member-resolution-coverage.js.map +1 -1
  58. package/dist/indexer/build-cache/manifest.d.ts +7 -0
  59. package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
  60. package/dist/indexer/build-cache/manifest.js +32 -1
  61. package/dist/indexer/build-cache/manifest.js.map +1 -1
  62. package/dist/indexer/build-cache/options.d.ts +20 -2
  63. package/dist/indexer/build-cache/options.d.ts.map +1 -1
  64. package/dist/indexer/build-cache/options.js +21 -3
  65. package/dist/indexer/build-cache/options.js.map +1 -1
  66. package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
  67. package/dist/indexer/build-cache/project-snapshot.js +1 -0
  68. package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
  69. package/dist/indexer/build-index.d.ts.map +1 -1
  70. package/dist/indexer/build-index.js +80 -2
  71. package/dist/indexer/build-index.js.map +1 -1
  72. package/dist/indexer/build-manifest.d.ts +1 -0
  73. package/dist/indexer/build-manifest.d.ts.map +1 -1
  74. package/dist/indexer/build-manifest.js +18 -0
  75. package/dist/indexer/build-manifest.js.map +1 -1
  76. package/dist/indexer/build-workers.js +1 -1
  77. package/dist/indexer/build-workers.js.map +1 -1
  78. package/dist/indexer/declaration-visibility.d.ts +43 -0
  79. package/dist/indexer/declaration-visibility.d.ts.map +1 -0
  80. package/dist/indexer/declaration-visibility.js +202 -0
  81. package/dist/indexer/declaration-visibility.js.map +1 -0
  82. package/dist/indexer/imports/binding-ranges.d.ts +1 -1
  83. package/dist/indexer/imports/binding-ranges.d.ts.map +1 -1
  84. package/dist/indexer/imports/binding-ranges.js +2 -123
  85. package/dist/indexer/imports/binding-ranges.js.map +1 -1
  86. package/dist/indexer/imports/js-text-imports.d.ts.map +1 -1
  87. package/dist/indexer/imports/js-text-imports.js +5 -2
  88. package/dist/indexer/imports/js-text-imports.js.map +1 -1
  89. package/dist/indexer/imports/language-specific.d.ts.map +1 -1
  90. package/dist/indexer/imports/language-specific.js +58 -215
  91. package/dist/indexer/imports/language-specific.js.map +1 -1
  92. package/dist/indexer/imports/native-captures.d.ts.map +1 -1
  93. package/dist/indexer/imports/native-captures.js +23 -32
  94. package/dist/indexer/imports/native-captures.js.map +1 -1
  95. package/dist/indexer/imports/text-import-extractors.d.ts +37 -0
  96. package/dist/indexer/imports/text-import-extractors.d.ts.map +1 -0
  97. package/dist/indexer/imports/text-import-extractors.js +358 -0
  98. package/dist/indexer/imports/text-import-extractors.js.map +1 -0
  99. package/dist/indexer/locals-and-exports.d.ts.map +1 -1
  100. package/dist/indexer/locals-and-exports.js +26 -27
  101. package/dist/indexer/locals-and-exports.js.map +1 -1
  102. package/dist/indexer/navigation-goto.d.ts +1 -7
  103. package/dist/indexer/navigation-goto.d.ts.map +1 -1
  104. package/dist/indexer/navigation-goto.js +406 -276
  105. package/dist/indexer/navigation-goto.js.map +1 -1
  106. package/dist/indexer/navigation-resolve.d.ts.map +1 -1
  107. package/dist/indexer/navigation-resolve.js +20 -1
  108. package/dist/indexer/navigation-resolve.js.map +1 -1
  109. package/dist/indexer/navigation.d.ts.map +1 -1
  110. package/dist/indexer/navigation.js +49 -7
  111. package/dist/indexer/navigation.js.map +1 -1
  112. package/dist/indexer/parse-context.js +2 -2
  113. package/dist/indexer/parse-context.js.map +1 -1
  114. package/dist/indexer/scope-nodes.d.ts +108 -0
  115. package/dist/indexer/scope-nodes.d.ts.map +1 -0
  116. package/dist/indexer/scope-nodes.js +238 -0
  117. package/dist/indexer/scope-nodes.js.map +1 -0
  118. package/dist/indexer/scope.d.ts.map +1 -1
  119. package/dist/indexer/scope.js +70 -130
  120. package/dist/indexer/scope.js.map +1 -1
  121. package/dist/indexer/types.d.ts +7 -0
  122. package/dist/indexer/types.d.ts.map +1 -1
  123. package/dist/languages/definitions/c-family.d.ts +18 -4
  124. package/dist/languages/definitions/c-family.d.ts.map +1 -1
  125. package/dist/languages/definitions/c-family.js +51 -13
  126. package/dist/languages/definitions/c-family.js.map +1 -1
  127. package/dist/languages/definitions/c.d.ts.map +1 -1
  128. package/dist/languages/definitions/c.js +7 -43
  129. package/dist/languages/definitions/c.js.map +1 -1
  130. package/dist/languages/definitions/cpp.d.ts.map +1 -1
  131. package/dist/languages/definitions/cpp.js +34 -53
  132. package/dist/languages/definitions/cpp.js.map +1 -1
  133. package/dist/languages/definitions/csharp.d.ts.map +1 -1
  134. package/dist/languages/definitions/csharp.js +47 -53
  135. package/dist/languages/definitions/csharp.js.map +1 -1
  136. package/dist/languages/definitions/css-like.d.ts.map +1 -1
  137. package/dist/languages/definitions/css-like.js +13 -10
  138. package/dist/languages/definitions/css-like.js.map +1 -1
  139. package/dist/languages/definitions/go.d.ts.map +1 -1
  140. package/dist/languages/definitions/go.js +29 -42
  141. package/dist/languages/definitions/go.js.map +1 -1
  142. package/dist/languages/definitions/html.d.ts.map +1 -1
  143. package/dist/languages/definitions/html.js +15 -14
  144. package/dist/languages/definitions/html.js.map +1 -1
  145. package/dist/languages/definitions/java.d.ts.map +1 -1
  146. package/dist/languages/definitions/java.js +42 -48
  147. package/dist/languages/definitions/java.js.map +1 -1
  148. package/dist/languages/definitions/javascript.d.ts.map +1 -1
  149. package/dist/languages/definitions/javascript.js +26 -54
  150. package/dist/languages/definitions/javascript.js.map +1 -1
  151. package/dist/languages/definitions/js-family.d.ts +15 -1
  152. package/dist/languages/definitions/js-family.d.ts.map +1 -1
  153. package/dist/languages/definitions/js-family.js +51 -0
  154. package/dist/languages/definitions/js-family.js.map +1 -1
  155. package/dist/languages/definitions/kotlin.d.ts.map +1 -1
  156. package/dist/languages/definitions/kotlin.js +26 -43
  157. package/dist/languages/definitions/kotlin.js.map +1 -1
  158. package/dist/languages/definitions/php.d.ts.map +1 -1
  159. package/dist/languages/definitions/php.js +50 -60
  160. package/dist/languages/definitions/php.js.map +1 -1
  161. package/dist/languages/definitions/python.d.ts +5 -1
  162. package/dist/languages/definitions/python.d.ts.map +1 -1
  163. package/dist/languages/definitions/python.js +62 -14
  164. package/dist/languages/definitions/python.js.map +1 -1
  165. package/dist/languages/definitions/ruby.d.ts.map +1 -1
  166. package/dist/languages/definitions/ruby.js +14 -17
  167. package/dist/languages/definitions/ruby.js.map +1 -1
  168. package/dist/languages/definitions/rust.d.ts.map +1 -1
  169. package/dist/languages/definitions/rust.js +30 -52
  170. package/dist/languages/definitions/rust.js.map +1 -1
  171. package/dist/languages/definitions/scss.d.ts.map +1 -1
  172. package/dist/languages/definitions/scss.js +36 -30
  173. package/dist/languages/definitions/scss.js.map +1 -1
  174. package/dist/languages/definitions/sfc-graph.d.ts +4 -0
  175. package/dist/languages/definitions/sfc-graph.d.ts.map +1 -0
  176. package/dist/languages/definitions/sfc-graph.js +16 -0
  177. package/dist/languages/definitions/sfc-graph.js.map +1 -0
  178. package/dist/languages/definitions/shared.d.ts +33 -0
  179. package/dist/languages/definitions/shared.d.ts.map +1 -0
  180. package/dist/languages/definitions/shared.js +63 -0
  181. package/dist/languages/definitions/shared.js.map +1 -0
  182. package/dist/languages/definitions/sql.d.ts.map +1 -1
  183. package/dist/languages/definitions/sql.js +1 -0
  184. package/dist/languages/definitions/sql.js.map +1 -1
  185. package/dist/languages/definitions/svelte.d.ts.map +1 -1
  186. package/dist/languages/definitions/svelte.js +2 -10
  187. package/dist/languages/definitions/svelte.js.map +1 -1
  188. package/dist/languages/definitions/swift.d.ts.map +1 -1
  189. package/dist/languages/definitions/swift.js +37 -31
  190. package/dist/languages/definitions/swift.js.map +1 -1
  191. package/dist/languages/definitions/typescript.d.ts.map +1 -1
  192. package/dist/languages/definitions/typescript.js +65 -79
  193. package/dist/languages/definitions/typescript.js.map +1 -1
  194. package/dist/languages/definitions/vue.d.ts.map +1 -1
  195. package/dist/languages/definitions/vue.js +2 -10
  196. package/dist/languages/definitions/vue.js.map +1 -1
  197. package/dist/languages/definitions/zig.d.ts.map +1 -1
  198. package/dist/languages/definitions/zig.js +9 -15
  199. package/dist/languages/definitions/zig.js.map +1 -1
  200. package/dist/languages/graph-captures.d.ts +40 -0
  201. package/dist/languages/graph-captures.d.ts.map +1 -0
  202. package/dist/languages/graph-captures.js +46 -0
  203. package/dist/languages/graph-captures.js.map +1 -0
  204. package/dist/languages/import-statement-parsers.d.ts +17 -0
  205. package/dist/languages/import-statement-parsers.d.ts.map +1 -1
  206. package/dist/languages/import-statement-parsers.js +108 -0
  207. package/dist/languages/import-statement-parsers.js.map +1 -1
  208. package/dist/languages/js-family.d.ts +2 -0
  209. package/dist/languages/js-family.d.ts.map +1 -1
  210. package/dist/languages/js-family.js +15 -6
  211. package/dist/languages/js-family.js.map +1 -1
  212. package/dist/languages/types.d.ts +4 -0
  213. package/dist/languages/types.d.ts.map +1 -1
  214. package/dist/languages/types.js +1 -1
  215. package/dist/languages/types.js.map +1 -1
  216. package/dist/languages.js +1 -1
  217. package/dist/languages.js.map +1 -1
  218. package/dist/native/contracts.d.ts +1 -1
  219. package/dist/native/contracts.d.ts.map +1 -1
  220. package/dist/native/js-bridge.d.ts +10 -0
  221. package/dist/native/js-bridge.d.ts.map +1 -1
  222. package/dist/native/js-bridge.js +10 -0
  223. package/dist/native/js-bridge.js.map +1 -1
  224. package/dist/native/native-backend-report.d.ts.map +1 -1
  225. package/dist/native/native-backend-report.js +2 -0
  226. package/dist/native/native-backend-report.js.map +1 -1
  227. package/dist/sql/graph.d.ts +1 -1
  228. package/dist/sql/graph.d.ts.map +1 -1
  229. package/dist/sql/graph.js.map +1 -1
  230. package/dist/sql/lookup.d.ts +7 -0
  231. package/dist/sql/lookup.d.ts.map +1 -1
  232. package/dist/sql/lookup.js +17 -0
  233. package/dist/sql/lookup.js.map +1 -1
  234. package/dist/sql/source-graph.d.ts +2 -0
  235. package/dist/sql/source-graph.d.ts.map +1 -1
  236. package/dist/sql/source-graph.js +20 -1
  237. package/dist/sql/source-graph.js.map +1 -1
  238. package/dist/util/comments.d.ts +7 -7
  239. package/dist/util/comments.d.ts.map +1 -1
  240. package/dist/util/comments.js +15 -214
  241. package/dist/util/comments.js.map +1 -1
  242. package/dist/util/lines.d.ts.map +1 -1
  243. package/dist/util/lines.js +4 -1
  244. package/dist/util/lines.js.map +1 -1
  245. package/dist/util/member-access.d.ts +2 -0
  246. package/dist/util/member-access.d.ts.map +1 -1
  247. package/dist/util/member-access.js +18 -5
  248. package/dist/util/member-access.js.map +1 -1
  249. package/dist/util/paths.d.ts +4 -0
  250. package/dist/util/paths.d.ts.map +1 -1
  251. package/dist/util/paths.js +26 -0
  252. package/dist/util/paths.js.map +1 -1
  253. package/dist/util/project-files.js +1 -1
  254. package/dist/util/project-files.js.map +1 -1
  255. package/dist/util/resolution/cargo-targets.d.ts.map +1 -1
  256. package/dist/util/resolution/cargo-targets.js +17 -14
  257. package/dist/util/resolution/cargo-targets.js.map +1 -1
  258. package/dist/util/resolution/cpp.d.ts +6 -0
  259. package/dist/util/resolution/cpp.d.ts.map +1 -0
  260. package/dist/util/resolution/cpp.js +69 -0
  261. package/dist/util/resolution/cpp.js.map +1 -0
  262. package/dist/util/resolution/csharp.d.ts +8 -0
  263. package/dist/util/resolution/csharp.d.ts.map +1 -0
  264. package/dist/util/resolution/csharp.js +103 -0
  265. package/dist/util/resolution/csharp.js.map +1 -0
  266. package/dist/util/resolution/files.d.ts +6 -0
  267. package/dist/util/resolution/files.d.ts.map +1 -1
  268. package/dist/util/resolution/files.js +108 -4
  269. package/dist/util/resolution/files.js.map +1 -1
  270. package/dist/util/resolution/go.d.ts +1 -0
  271. package/dist/util/resolution/go.d.ts.map +1 -1
  272. package/dist/util/resolution/go.js +4 -3
  273. package/dist/util/resolution/go.js.map +1 -1
  274. package/dist/util/resolution/jvm.d.ts +3 -3
  275. package/dist/util/resolution/jvm.d.ts.map +1 -1
  276. package/dist/util/resolution/jvm.js +90 -54
  277. package/dist/util/resolution/jvm.js.map +1 -1
  278. package/dist/util/resolution/node.js +2 -2
  279. package/dist/util/resolution/node.js.map +1 -1
  280. package/dist/util/resolution/php-composer.d.ts.map +1 -1
  281. package/dist/util/resolution/php-composer.js +8 -7
  282. package/dist/util/resolution/php-composer.js.map +1 -1
  283. package/dist/util/resolution/php.d.ts.map +1 -1
  284. package/dist/util/resolution/php.js +30 -43
  285. package/dist/util/resolution/php.js.map +1 -1
  286. package/dist/util/resolution/project-symbols.d.ts +5 -7
  287. package/dist/util/resolution/project-symbols.d.ts.map +1 -1
  288. package/dist/util/resolution/project-symbols.js +23 -9
  289. package/dist/util/resolution/project-symbols.js.map +1 -1
  290. package/dist/util/resolution/python.d.ts.map +1 -1
  291. package/dist/util/resolution/python.js +107 -62
  292. package/dist/util/resolution/python.js.map +1 -1
  293. package/dist/util/resolution/rust.d.ts.map +1 -1
  294. package/dist/util/resolution/rust.js +45 -34
  295. package/dist/util/resolution/rust.js.map +1 -1
  296. package/dist/util/resolution/tsconfig.d.ts.map +1 -1
  297. package/dist/util/resolution/tsconfig.js +3 -9
  298. package/dist/util/resolution/tsconfig.js.map +1 -1
  299. package/dist/util/resolution-candidates.d.ts +5 -1
  300. package/dist/util/resolution-candidates.d.ts.map +1 -1
  301. package/dist/util/resolution-candidates.js +18 -0
  302. package/dist/util/resolution-candidates.js.map +1 -1
  303. package/dist/util/resolution.d.ts.map +1 -1
  304. package/dist/util/resolution.js +95 -49
  305. package/dist/util/resolution.js.map +1 -1
  306. package/dist/util/specifiers.d.ts +4 -10
  307. package/dist/util/specifiers.d.ts.map +1 -1
  308. package/dist/util/specifiers.js +213 -164
  309. package/dist/util/specifiers.js.map +1 -1
  310. package/dist/util/trivia-tables.d.ts +69 -0
  311. package/dist/util/trivia-tables.d.ts.map +1 -0
  312. package/dist/util/trivia-tables.js +186 -0
  313. package/dist/util/trivia-tables.js.map +1 -0
  314. package/dist/util/trivia.d.ts +24 -0
  315. package/dist/util/trivia.d.ts.map +1 -0
  316. package/dist/util/trivia.js +621 -0
  317. package/dist/util/trivia.js.map +1 -0
  318. package/dist/util.d.ts +1 -1
  319. package/dist/util.d.ts.map +1 -1
  320. package/dist/util.js +1 -1
  321. package/dist/util.js.map +1 -1
  322. package/dist/worker/native-extract-worker.d.ts.map +1 -1
  323. package/dist/worker/native-extract-worker.js +4 -4
  324. package/dist/worker/native-extract-worker.js.map +1 -1
  325. package/package.json +3 -3
@@ -0,0 +1,358 @@
1
+ import { CSHARP_IDENTIFIER_SOURCE, JAVA_IDENTIFIER_SOURCE, KOTLIN_IDENTIFIER_SOURCE, XID_IDENTIFIER_SOURCE, } from "../../util/identifiers.js";
2
+ import { parsePhpImportStatement, parseRustImportStatements, rustImportKeywordOffset, scanRustImportStatements, } from "../../languages/import-statement-parsers.js";
3
+ import { isRustCfgTestStatement } from "../../util/rust-test-modules.js";
4
+ import { extractRustModPathAttribute, rustGraphModuleSpecifier } from "../../util/resolution/rust.js";
5
+ import { extractPythonSpecifiers } from "../../util/specifiers.js";
6
+ import { maskTrivia } from "../../util/trivia.js";
7
+ import { maskImportBindingTrivia } from "./binding-ranges.js";
8
+ const QUOTED_VALUE_QUOTES = ['"', "'"];
9
+ const GO_IMPORT_QUOTES = ['"', "`"];
10
+ /**
11
+ * Values of the quoted literals in `text[from, to)`.
12
+ *
13
+ * `text` must be the comment-only mask (`maskStrings: false`), not the fully masked source: the
14
+ * discovery passes prove a statement is real code, and this pass reads the string payload it
15
+ * contains. A quote inside a comment cannot forge a value because comments are blanked here.
16
+ */
17
+ function scanQuotedValues(text, from, to, quotes) {
18
+ const out = [];
19
+ for (let index = from; index < to; index += 1) {
20
+ const ch = text[index];
21
+ if (ch === undefined || !quotes.includes(ch))
22
+ continue;
23
+ const close = text.indexOf(ch, index + 1);
24
+ if (close < 0 || close >= to)
25
+ break;
26
+ out.push({ value: text.slice(index + 1, close), start: index, end: close + 1 });
27
+ index = close;
28
+ }
29
+ return out;
30
+ }
31
+ /** Index of the `close` delimiter matching the `open` delimiter at `index`, or -1. */
32
+ function matchingDelimiterIndex(masked, index, open, close) {
33
+ let depth = 0;
34
+ for (let cursor = index; cursor < masked.length; cursor += 1) {
35
+ const ch = masked[cursor];
36
+ if (ch === open) {
37
+ depth += 1;
38
+ continue;
39
+ }
40
+ if (ch !== close)
41
+ continue;
42
+ depth -= 1;
43
+ if (depth === 0)
44
+ return cursor;
45
+ }
46
+ return -1;
47
+ }
48
+ function lineEndAt(text, index) {
49
+ const newline = text.indexOf("\n", index);
50
+ return newline < 0 ? text.length : newline;
51
+ }
52
+ const JAVA_DOTTED_SOURCE = String.raw `${JAVA_IDENTIFIER_SOURCE}(?:[\t ]*\.[\t ]*${JAVA_IDENTIFIER_SOURCE})*`;
53
+ const JAVA_IMPORT_STATEMENT_PATTERN = new RegExp(String.raw `^[\t ]*import[\t ]+(?:static[\t ]+)?(${JAVA_DOTTED_SOURCE})(?:[\t ]*\.[\t ]*\*)?[\t ]*;`, "gmu");
54
+ function extractJavaImports(source, sink) {
55
+ if (!source.includes("import"))
56
+ return;
57
+ const masked = maskImportBindingTrivia(source, "java");
58
+ for (const match of masked.matchAll(JAVA_IMPORT_STATEMENT_PATTERN)) {
59
+ const rawSpecifier = match[1];
60
+ if (!rawSpecifier || match.index === undefined)
61
+ continue;
62
+ const spec = rawSpecifier.replace(/\s+/gu, "");
63
+ if (!spec)
64
+ continue;
65
+ sink.specifier({ spec, typeOnly: false });
66
+ sink.binding({ raw: source.slice(match.index, match.index + match[0].length), start: match.index });
67
+ }
68
+ }
69
+ const KOTLIN_DOTTED_SOURCE = String.raw `${KOTLIN_IDENTIFIER_SOURCE}(?:[\t ]*\.[\t ]*${KOTLIN_IDENTIFIER_SOURCE})*`;
70
+ const KOTLIN_IMPORT_STATEMENT_PATTERN = new RegExp(String.raw `^[\t ]*import[\t ]+(${KOTLIN_DOTTED_SOURCE})(?:[\t ]*\.[\t ]*\*)?(?:[\t ]+as[\t ]+${KOTLIN_IDENTIFIER_SOURCE})?[\t ]*;?[\t ]*$`, "gmu");
71
+ function extractKotlinImports(source, sink) {
72
+ if (!source.includes("import"))
73
+ return;
74
+ const masked = maskImportBindingTrivia(source, "kotlin");
75
+ for (const match of masked.matchAll(KOTLIN_IMPORT_STATEMENT_PATTERN)) {
76
+ const rawSpecifier = match[1];
77
+ if (!rawSpecifier || match.index === undefined)
78
+ continue;
79
+ const spec = rawSpecifier.replace(/\s+/gu, "");
80
+ if (!spec)
81
+ continue;
82
+ sink.specifier({ spec, typeOnly: false });
83
+ sink.binding({ raw: source.slice(match.index, match.index + match[0].length), start: match.index });
84
+ }
85
+ }
86
+ const CSHARP_DOTTED_SOURCE = String.raw `${CSHARP_IDENTIFIER_SOURCE}(?:[\t ]*\.[\t ]*${CSHARP_IDENTIFIER_SOURCE})*`;
87
+ const CSHARP_USING_STATEMENT_PATTERN = new RegExp(String.raw `^[\t ]*(?:global[\t ]+)?using[\t ]+(?:${CSHARP_IDENTIFIER_SOURCE}[\t ]*=[\t ]*)?(?:static[\t ]+)?(${CSHARP_DOTTED_SOURCE})[\t ]*;`, "gmu");
88
+ function extractCsharpImports(source, sink) {
89
+ if (!source.includes("using"))
90
+ return;
91
+ const masked = maskImportBindingTrivia(source, "csharp");
92
+ for (const match of masked.matchAll(CSHARP_USING_STATEMENT_PATTERN)) {
93
+ const rawSpecifier = match[1];
94
+ if (!rawSpecifier || match.index === undefined)
95
+ continue;
96
+ const spec = rawSpecifier.replace(/\s+/gu, "");
97
+ if (!spec)
98
+ continue;
99
+ sink.specifier({ spec, typeOnly: false });
100
+ sink.binding({ raw: source.slice(match.index, match.index + match[0].length), start: match.index });
101
+ }
102
+ }
103
+ const PHP_USE_STATEMENT_PATTERN = /^[\t ]*use[\t ]+/gmu;
104
+ const PHP_INCLUDE_STATEMENT_PATTERN = /^[\t ]*(?:require_once|include_once|require|include)[\t ]+/gmu;
105
+ function pushPhpStatement(source, start, end, sink, context) {
106
+ const raw = source.slice(start, end);
107
+ const parsedList = parsePhpImportStatement(raw, context.file);
108
+ if (!parsedList.length)
109
+ return;
110
+ for (const parsed of parsedList) {
111
+ if (parsed.kind === "include") {
112
+ sink.specifier({ spec: parsed.from, typeOnly: false });
113
+ continue;
114
+ }
115
+ sink.specifier({ spec: parsed.from, typeOnly: false, phpImportType: parsed.importType });
116
+ }
117
+ sink.binding({ raw, start });
118
+ }
119
+ function extractPhpImports(source, sink, context) {
120
+ if (!source.includes("use") && !source.includes("require") && !source.includes("include"))
121
+ return;
122
+ const masked = maskImportBindingTrivia(source, "php");
123
+ // A namespace `use` declaration is only valid at namespace scope. Tracking the brace depth of
124
+ // real code keeps a class-body trait `use SomeTrait;` from being reported as an import; a
125
+ // braced namespace's `use` is deliberately left out rather than guessed at.
126
+ let braceDepth = 0;
127
+ let scannedThrough = 0;
128
+ for (const match of masked.matchAll(PHP_USE_STATEMENT_PATTERN)) {
129
+ if (match.index === undefined)
130
+ continue;
131
+ for (; scannedThrough < match.index; scannedThrough += 1) {
132
+ const ch = masked[scannedThrough];
133
+ if (ch === "{")
134
+ braceDepth += 1;
135
+ else if (ch === "}")
136
+ braceDepth = Math.max(0, braceDepth - 1);
137
+ }
138
+ const end = masked.indexOf(";", match.index + match[0].length);
139
+ if (end < 0)
140
+ continue;
141
+ // Skip the whole statement when advancing, so a grouped `use A\{B, C};` cannot raise depth.
142
+ scannedThrough = end + 1;
143
+ if (braceDepth !== 0)
144
+ continue;
145
+ pushPhpStatement(source, match.index, end + 1, sink, context);
146
+ }
147
+ // `include`-family expressions are valid inside function bodies, so they are not depth-filtered.
148
+ for (const match of masked.matchAll(PHP_INCLUDE_STATEMENT_PATTERN)) {
149
+ if (match.index === undefined)
150
+ continue;
151
+ const end = masked.indexOf(";", match.index + match[0].length);
152
+ if (end < 0)
153
+ continue;
154
+ pushPhpStatement(source, match.index, end + 1, sink, context);
155
+ }
156
+ }
157
+ export function rustSpecifierForParsedImport(parsed, source, statementStartIndex) {
158
+ if (parsed.kind === "module" && !parsed.isExternCrate) {
159
+ const pathAttribute = parsed.pathAttribute ?? extractRustModPathAttribute(source, parsed.from, statementStartIndex);
160
+ return {
161
+ spec: rustGraphModuleSpecifier(source, parsed.from, statementStartIndex),
162
+ typeOnly: false,
163
+ ...(pathAttribute ? { pathAttribute } : {}),
164
+ ...(statementStartIndex !== undefined ? { statementStartIndex } : {}),
165
+ };
166
+ }
167
+ if (parsed.kind !== "member") {
168
+ return { spec: parsed.from, typeOnly: false };
169
+ }
170
+ const root = parsed.from.split("::", 1)[0] ?? "";
171
+ if (root === "crate" || root === "self" || root === "super") {
172
+ return { spec: parsed.from, raw: `${parsed.from}::${parsed.imported}`, typeOnly: false };
173
+ }
174
+ return { spec: parsed.from, typeOnly: false };
175
+ }
176
+ function extractRustImports(source, sink) {
177
+ if (!source.includes("use") && !source.includes("mod") && !source.includes("crate"))
178
+ return;
179
+ const masked = maskImportBindingTrivia(source, "rust");
180
+ for (const statement of scanRustImportStatements(masked)) {
181
+ const raw = source.slice(statement.start, statement.start + statement.text.length);
182
+ const keywordOffset = rustImportKeywordOffset(raw);
183
+ const keywordIndex = keywordOffset >= 0 ? statement.start + keywordOffset : statement.start;
184
+ const keywordText = keywordOffset >= 0 ? raw.slice(keywordOffset) : raw;
185
+ if (isRustCfgTestStatement(source, keywordText, keywordIndex))
186
+ continue;
187
+ const parsedList = parseRustImportStatements(raw);
188
+ if (!parsedList.length)
189
+ continue;
190
+ for (const parsed of parsedList) {
191
+ sink.specifier(rustSpecifierForParsedImport(parsed, source, statement.start));
192
+ }
193
+ sink.binding({ raw, start: statement.start });
194
+ }
195
+ }
196
+ function extractPythonImports(source, sink) {
197
+ if (!source.includes("import"))
198
+ return;
199
+ for (const spec of extractPythonSpecifiers(source))
200
+ sink.specifier({ spec });
201
+ }
202
+ const GO_IMPORT_KEYWORD_PATTERN = /^[\t ]*import\b/gmu;
203
+ function extractGoImports(source, sink) {
204
+ if (!source.includes("import"))
205
+ return;
206
+ const masked = maskImportBindingTrivia(source, "go");
207
+ const commentsOnly = maskTrivia(source, "go", { maskStrings: false });
208
+ for (const match of masked.matchAll(GO_IMPORT_KEYWORD_PATTERN)) {
209
+ if (match.index === undefined)
210
+ continue;
211
+ const afterKeyword = match.index + match[0].length;
212
+ let cursor = afterKeyword;
213
+ while (cursor < masked.length && (masked[cursor] === " " || masked[cursor] === "\t"))
214
+ cursor += 1;
215
+ if (source[cursor] === "(") {
216
+ const close = matchingDelimiterIndex(masked, cursor, "(", ")");
217
+ if (close < 0)
218
+ continue;
219
+ for (const literal of scanQuotedValues(commentsOnly, cursor + 1, close, GO_IMPORT_QUOTES)) {
220
+ const spec = literal.value.trim();
221
+ if (spec)
222
+ sink.specifier({ spec, typeOnly: false });
223
+ }
224
+ continue;
225
+ }
226
+ const literal = scanQuotedValues(commentsOnly, cursor, lineEndAt(commentsOnly, cursor), GO_IMPORT_QUOTES)[0];
227
+ const spec = literal?.value.trim();
228
+ if (spec)
229
+ sink.specifier({ spec, typeOnly: false });
230
+ }
231
+ }
232
+ const RUBY_REQUIRE_PATTERN = /^[\t ]*(autoload|require_relative|require|load)\b/gmu;
233
+ const RUBY_AUTOLOAD_PREFIX_PATTERN = /^[\t ]*\(?[\t ]*:?[\p{L}_][\p{L}\p{Nd}_]*[\t ]*,[\t ]*$/u;
234
+ const RUBY_DIRECT_ARGUMENT_PREFIX_PATTERN = /^[\t ]*\(?[\t ]*$/;
235
+ function extractRubyImports(source, sink) {
236
+ if (!source.includes("require") && !source.includes("load") && !source.includes("autoload"))
237
+ return;
238
+ const masked = maskImportBindingTrivia(source, "ruby");
239
+ const commentsOnly = maskTrivia(source, "ruby", { maskStrings: false });
240
+ for (const match of masked.matchAll(RUBY_REQUIRE_PATTERN)) {
241
+ if (match.index === undefined)
242
+ continue;
243
+ const afterKeyword = match.index + match[0].length;
244
+ const to = lineEndAt(commentsOnly, afterKeyword);
245
+ const literal = scanQuotedValues(commentsOnly, afterKeyword, to, QUOTED_VALUE_QUOTES)[0];
246
+ if (!literal)
247
+ continue;
248
+ const prefix = commentsOnly.slice(afterKeyword, literal.start);
249
+ const expectedPrefix = match[1] === "autoload" ? RUBY_AUTOLOAD_PREFIX_PATTERN : RUBY_DIRECT_ARGUMENT_PREFIX_PATTERN;
250
+ if (!expectedPrefix.test(prefix))
251
+ continue;
252
+ const spec = literal.value.trim();
253
+ if (spec)
254
+ sink.specifier({ spec, typeOnly: false });
255
+ }
256
+ }
257
+ const C_INCLUDE_PATTERN = /^[\t ]*#[\t ]*include[\t ]+/gmu;
258
+ function extractCIncludeImports(source, sink) {
259
+ if (!source.includes("#"))
260
+ return;
261
+ const masked = maskImportBindingTrivia(source, "c");
262
+ const commentsOnly = maskTrivia(source, "c", { maskStrings: false });
263
+ for (const match of masked.matchAll(C_INCLUDE_PATTERN)) {
264
+ if (match.index === undefined)
265
+ continue;
266
+ const from = match.index + match[0].length;
267
+ const to = lineEndAt(commentsOnly, from);
268
+ const quoted = scanQuotedValues(commentsOnly, from, to, ['"'])[0];
269
+ if (quoted) {
270
+ const spec = quoted.value.trim();
271
+ if (spec)
272
+ sink.specifier({ spec, typeOnly: false });
273
+ continue;
274
+ }
275
+ const angle = /^[\t ]*<([^>\n]+)>/.exec(commentsOnly.slice(from, to));
276
+ const spec = angle?.[1]?.trim();
277
+ if (spec)
278
+ sink.specifier({ spec, typeOnly: false });
279
+ }
280
+ }
281
+ const SWIFT_MODULE_SOURCE = String.raw `${XID_IDENTIFIER_SOURCE}(?:\.${XID_IDENTIFIER_SOURCE})*`;
282
+ const SWIFT_IMPORT_PATTERN = new RegExp(String.raw `^[\t ]*(?:@[A-Za-z_][A-Za-z0-9_]*(?:\([^)]*\))?[\t ]+)*import[\t ]+(?:(?:typealias|struct|class|enum|protocol|let|var|func)[\t ]+)?(${SWIFT_MODULE_SOURCE})[\t ]*$`, "gmu");
283
+ function extractSwiftImports(source, sink) {
284
+ if (!source.includes("import"))
285
+ return;
286
+ const masked = maskImportBindingTrivia(source, "swift");
287
+ for (const match of masked.matchAll(SWIFT_IMPORT_PATTERN)) {
288
+ const spec = match[1];
289
+ if (!spec)
290
+ continue;
291
+ sink.specifier({ spec, typeOnly: false });
292
+ }
293
+ }
294
+ const ZIG_IMPORT_PATTERN = /@import[\t ]*\(/g;
295
+ function extractZigImports(source, sink) {
296
+ if (!source.includes("@import"))
297
+ return;
298
+ const masked = maskImportBindingTrivia(source, "zig");
299
+ const commentsOnly = maskTrivia(source, "zig", { maskStrings: false });
300
+ for (const match of masked.matchAll(ZIG_IMPORT_PATTERN)) {
301
+ if (match.index === undefined)
302
+ continue;
303
+ const open = match.index + match[0].length - 1;
304
+ const close = matchingDelimiterIndex(masked, open, "(", ")");
305
+ const literal = scanQuotedValues(commentsOnly, open + 1, close < 0 ? commentsOnly.length : close, ['"'])[0];
306
+ const spec = literal?.value.trim();
307
+ if (spec)
308
+ sink.specifier({ spec, typeOnly: false });
309
+ }
310
+ }
311
+ /**
312
+ * Text import extractors keyed by language id. Every entry has the same shape, so adding a
313
+ * language is one registry row and no consumer branch.
314
+ */
315
+ const TEXT_IMPORT_EXTRACTORS = {
316
+ java: extractJavaImports,
317
+ kotlin: extractKotlinImports,
318
+ rust: extractRustImports,
319
+ csharp: extractCsharpImports,
320
+ php: extractPhpImports,
321
+ python: extractPythonImports,
322
+ go: extractGoImports,
323
+ ruby: extractRubyImports,
324
+ c: extractCIncludeImports,
325
+ cpp: extractCIncludeImports,
326
+ swift: extractSwiftImports,
327
+ zig: extractZigImports,
328
+ };
329
+ /** Languages whose extractor also emits binding requests the indexer can resolve. */
330
+ const TEXT_IMPORT_BINDING_LANGUAGES = {
331
+ java: true,
332
+ kotlin: true,
333
+ rust: true,
334
+ csharp: true,
335
+ php: true,
336
+ };
337
+ export function hasTextImportBindings(languageId) {
338
+ return !!TEXT_IMPORT_BINDING_LANGUAGES[languageId];
339
+ }
340
+ /** Module specifiers a language's text extractor can prove, in source order. */
341
+ export function collectTextImportSpecifiers(languageId, source, context) {
342
+ const extractor = TEXT_IMPORT_EXTRACTORS[languageId];
343
+ if (!extractor)
344
+ return [];
345
+ const out = [];
346
+ extractor(source, { specifier: (specifier) => out.push(specifier), binding: () => { } }, context ?? {});
347
+ return out;
348
+ }
349
+ /** Binding requests a language's text extractor can prove, in source order. */
350
+ export function collectTextImportBindingRequests(languageId, source, context) {
351
+ const extractor = TEXT_IMPORT_EXTRACTORS[languageId];
352
+ if (!extractor)
353
+ return [];
354
+ const out = [];
355
+ extractor(source, { specifier: () => { }, binding: (request) => out.push(request) }, context ?? {});
356
+ return out;
357
+ }
358
+ //# sourceMappingURL=text-import-extractors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-import-extractors.js","sourceRoot":"","sources":["../../../src/indexer/imports/text-import-extractors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"locals-and-exports.d.ts","sourceRoot":"","sources":["../../src/indexer/locals-and-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAe,aAAa,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AA+VrF,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,aAAa,EAAO,EAC7B,IAAI,CAAC,EAAE;IACL,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GACA,WAAW,CAqwBb"}
1
+ {"version":3,"file":"locals-and-exports.d.ts","sourceRoot":"","sources":["../../src/indexer/locals-and-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,KAAK,EAAe,aAAa,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AA6VrF,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,aAAa,EAAO,EAC7B,IAAI,CAAC,EAAE;IACL,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GACA,WAAW,CA2vBb"}
@@ -8,7 +8,10 @@ import { sliceText, toRange, unquote } from "../util/ast.js";
8
8
  import { bindingKindToSymbolKind } from "./declarations.js";
9
9
  import { buildScopeIndexFromSource } from "./scope.js";
10
10
  import { SymbolKind } from "./types.js";
11
+ import { isPythonInstanceAttributeDeclaration } from "../languages/definitions/python.js";
12
+ import { importCapture } from "../languages/graph-captures.js";
11
13
  import { ECMASCRIPT_IDENTIFIER_SOURCE, XID_IDENTIFIER_SOURCE } from "../util/identifiers.js";
14
+ import { isExportedDeclaration } from "./declaration-visibility.js";
12
15
  /**
13
16
  * Matches one `exportScopeBlockers` entry against an ancestor node. A plain entry compares the
14
17
  * node type; a `parent>node` entry also requires that parent type, which is how Python separates a
@@ -28,7 +31,6 @@ const JS_FALLBACK_REEXPORT_TYPE_SPECIFIER_PATTERN = new RegExp(String.raw `^type
28
31
  const JS_FALLBACK_REEXPORT_NAMESPACE_PATTERN = new RegExp(String.raw `\bexport\s*\*\s+as\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})\s+from\s*("|')([^"']*)\2`, "gu");
29
32
  const JS_FALLBACK_CJS_FUNCTION_PATTERN = new RegExp(String.raw `(?:^|[;\n\r])\s*(?:exports|module\.exports)\.(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*=\s*(function\b|\([^)]*\)\s*=>)`, "gu");
30
33
  const JS_FALLBACK_CJS_OBJECT_FUNCTION_PATTERN = new RegExp(String.raw `(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*:\s*(function\b|\([^)]*\)\s*=>)`, "gu");
31
- const JS_FALLBACK_TS_EXPORT_ASSIGN_PATTERN = new RegExp(String.raw `^\s*export\s*=\s*(${ECMASCRIPT_IDENTIFIER_SOURCE})\s*;?\s*$`, "u");
32
34
  const JS_DEFAULT_FUNCTION_PATTERN = new RegExp(String.raw `\bexport\s+default\s+(?:async\s+)?function\b\s*\*?\s*(${ECMASCRIPT_IDENTIFIER_SOURCE})`, "u");
33
35
  const JS_DEFAULT_CLASS_PATTERN = new RegExp(String.raw `\bexport\s+default\s+(?:abstract\s+)?class\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})`, "u");
34
36
  const JS_DEFAULT_IDENTIFIER_PATTERN = new RegExp(String.raw `\bexport\s+default\s+(${ECMASCRIPT_IDENTIFIER_SOURCE})(?![$_\p{ID_Continue}\u200c\u200d])`, "u");
@@ -73,6 +75,8 @@ const CALLABLE_DECLARATION_NODE_TYPES = {
73
75
  singleton_method: true,
74
76
  };
75
77
  function isTypeMemberDeclaration(node) {
78
+ if (isPythonInstanceAttributeDeclaration(node))
79
+ return true;
76
80
  let current = node.parent?.parent ?? null;
77
81
  while (current) {
78
82
  if (MEMBER_CONTAINER_NODE_TYPES[current.type])
@@ -625,12 +629,10 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
625
629
  };
626
630
  const hasDefaultExport = () => exports.some((entry) => entry.type === "local" && entry.exportedAs === "default");
627
631
  const excludedCaptures = [];
628
- if (!treeForEnrichment) {
629
- for (const match of matches) {
630
- for (const capture of match.captures) {
631
- if (capture.name === "export_scope" || capture.name === "private_declaration")
632
- excludedCaptures.push(capture);
633
- }
632
+ for (const match of matches) {
633
+ for (const capture of match.captures) {
634
+ if (capture.name === "export_scope" || capture.name === "private_declaration")
635
+ excludedCaptures.push(capture);
634
636
  }
635
637
  }
636
638
  // Native scope captures preserve C/C++ exclusions without an enrichment tree.
@@ -649,14 +651,11 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
649
651
  for (const match of matches) {
650
652
  const map = capturesByName(match);
651
653
  const stmtText = map["stmt"]?.text ?? "";
652
- if (support.id === "c" || support.id === "cpp") {
653
- const declarationNode = nodeForCapture(map["declaration"]);
654
- const hasStaticStorageClass = declarationNode?.namedChildren.some((child) => child.type === "storage_class_specifier" && child.text === "static");
655
- if (hasStaticStorageClass)
656
- continue;
657
- }
658
654
  if (isOutsideModuleScope(map["name"] ?? map["src"]))
659
655
  continue;
656
+ const exportNameNode = nodeForCapture(map["name"] ?? map["src"]);
657
+ if (exportNameNode && !isExportedDeclaration(support.id, exportNameNode))
658
+ continue;
660
659
  const isTypeOnly = support.isTypeOnly(stmtText);
661
660
  if (support.id === "python") {
662
661
  const leftText = map["left"]?.text ?? "";
@@ -708,7 +707,7 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
708
707
  typeOnly: Boolean(map["type_kw"]) || isTypeOnly,
709
708
  });
710
709
  }
711
- else if (/^\s*export\s*\*/.test(stmtText)) {
710
+ else if (importCapture(map, "wild")) {
712
711
  exports.push({
713
712
  type: "exportStar",
714
713
  fromModule: from,
@@ -868,19 +867,6 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
868
867
  }
869
868
  continue;
870
869
  }
871
- const tsExportAssignMatch = support.id === "ts" || support.id === "tsx" ? JS_FALLBACK_TS_EXPORT_ASSIGN_PATTERN.exec(stmtText) : null;
872
- if (tsExportAssignMatch) {
873
- const ident = tsExportAssignMatch[1];
874
- const local = locals.find((def) => def.localName === ident);
875
- if (local) {
876
- exports.push({
877
- type: "local",
878
- exportedAs: "default",
879
- target: { ...local, kind: SymbolKind.Default },
880
- });
881
- }
882
- continue;
883
- }
884
870
  if (map["ts_export_assign"]) {
885
871
  const ident = map["ts_export_assign"].text;
886
872
  const local = locals.find((def) => def.localName === ident);
@@ -897,6 +883,9 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
897
883
  if (nameCapture) {
898
884
  if (isOutsideModuleScope(nameCapture))
899
885
  continue;
886
+ const visibilityNameNode = nodeForCapture(nameCapture);
887
+ if (visibilityNameNode && !isExportedDeclaration(support.id, visibilityNameNode))
888
+ continue;
900
889
  const nameText = map["declarator"]
901
890
  ? declaratorCaptureName(nameCapture, nodeForCapture(nameCapture))
902
891
  : nameCapture.text;
@@ -991,6 +980,16 @@ export function collectLocalsAndExportsFromSource(file, source, support, imports
991
980
  moduleSpecifier: binding.from,
992
981
  });
993
982
  }
983
+ else if (binding.kind === "star") {
984
+ if (!exports.some((entry) => entry.type === "exportStar" && entry.fromModule === binding.resolved)) {
985
+ exports.push({
986
+ type: "exportStar",
987
+ fromModule: binding.resolved,
988
+ moduleSpecifier: binding.from,
989
+ sourceSpecifier: binding.from,
990
+ });
991
+ }
992
+ }
994
993
  }
995
994
  }
996
995
  if (support.id === "python" && hasPythonAll) {