@untangle-code/parser-registry 0.0.0-stage → 0.1.0

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 (345) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE +90 -0
  3. package/README.md +352 -2
  4. package/THIRD_PARTY_LICENSES.md +91 -0
  5. package/dist/boundaries/expression.d.ts +10 -0
  6. package/dist/boundaries/expression.d.ts.map +1 -0
  7. package/dist/boundaries/expression.js +95 -0
  8. package/dist/boundaries/expression.js.map +1 -0
  9. package/dist/boundaries/extract.d.ts +12 -0
  10. package/dist/boundaries/extract.d.ts.map +1 -0
  11. package/dist/boundaries/extract.js +259 -0
  12. package/dist/boundaries/extract.js.map +1 -0
  13. package/dist/boundaries/python.d.ts +6 -0
  14. package/dist/boundaries/python.d.ts.map +1 -0
  15. package/dist/boundaries/python.js +154 -0
  16. package/dist/boundaries/python.js.map +1 -0
  17. package/dist/index.d.ts +26 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +19 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/languages/astgrep-backend/adapter.d.ts +101 -0
  22. package/dist/languages/astgrep-backend/adapter.d.ts.map +1 -0
  23. package/dist/languages/astgrep-backend/adapter.js +130 -0
  24. package/dist/languages/astgrep-backend/adapter.js.map +1 -0
  25. package/dist/languages/astgrep-backend/index.d.ts +29 -0
  26. package/dist/languages/astgrep-backend/index.d.ts.map +1 -0
  27. package/dist/languages/astgrep-backend/index.js +28 -0
  28. package/dist/languages/astgrep-backend/index.js.map +1 -0
  29. package/dist/languages/astgrep-backend/lang/bash.d.ts +38 -0
  30. package/dist/languages/astgrep-backend/lang/bash.d.ts.map +1 -0
  31. package/dist/languages/astgrep-backend/lang/bash.js +42 -0
  32. package/dist/languages/astgrep-backend/lang/bash.js.map +1 -0
  33. package/dist/languages/astgrep-backend/lang/c.d.ts +33 -0
  34. package/dist/languages/astgrep-backend/lang/c.d.ts.map +1 -0
  35. package/dist/languages/astgrep-backend/lang/c.js +85 -0
  36. package/dist/languages/astgrep-backend/lang/c.js.map +1 -0
  37. package/dist/languages/astgrep-backend/lang/cpp.d.ts +27 -0
  38. package/dist/languages/astgrep-backend/lang/cpp.d.ts.map +1 -0
  39. package/dist/languages/astgrep-backend/lang/cpp.js +38 -0
  40. package/dist/languages/astgrep-backend/lang/cpp.js.map +1 -0
  41. package/dist/languages/astgrep-backend/lang/csharp.d.ts +24 -0
  42. package/dist/languages/astgrep-backend/lang/csharp.d.ts.map +1 -0
  43. package/dist/languages/astgrep-backend/lang/csharp.js +102 -0
  44. package/dist/languages/astgrep-backend/lang/csharp.js.map +1 -0
  45. package/dist/languages/astgrep-backend/lang/index.d.ts +29 -0
  46. package/dist/languages/astgrep-backend/lang/index.d.ts.map +1 -0
  47. package/dist/languages/astgrep-backend/lang/index.js +22 -0
  48. package/dist/languages/astgrep-backend/lang/index.js.map +1 -0
  49. package/dist/languages/astgrep-backend/lang/java.d.ts +26 -0
  50. package/dist/languages/astgrep-backend/lang/java.d.ts.map +1 -0
  51. package/dist/languages/astgrep-backend/lang/java.js +89 -0
  52. package/dist/languages/astgrep-backend/lang/java.js.map +1 -0
  53. package/dist/languages/astgrep-backend/lang/kotlin.d.ts +44 -0
  54. package/dist/languages/astgrep-backend/lang/kotlin.d.ts.map +1 -0
  55. package/dist/languages/astgrep-backend/lang/kotlin.js +94 -0
  56. package/dist/languages/astgrep-backend/lang/kotlin.js.map +1 -0
  57. package/dist/languages/astgrep-backend/lang/php.d.ts +23 -0
  58. package/dist/languages/astgrep-backend/lang/php.d.ts.map +1 -0
  59. package/dist/languages/astgrep-backend/lang/php.js +80 -0
  60. package/dist/languages/astgrep-backend/lang/php.js.map +1 -0
  61. package/dist/languages/astgrep-backend/lang/ruby.d.ts +37 -0
  62. package/dist/languages/astgrep-backend/lang/ruby.d.ts.map +1 -0
  63. package/dist/languages/astgrep-backend/lang/ruby.js +70 -0
  64. package/dist/languages/astgrep-backend/lang/ruby.js.map +1 -0
  65. package/dist/languages/astgrep-backend/lang/swift.d.ts +34 -0
  66. package/dist/languages/astgrep-backend/lang/swift.d.ts.map +1 -0
  67. package/dist/languages/astgrep-backend/lang/swift.js +86 -0
  68. package/dist/languages/astgrep-backend/lang/swift.js.map +1 -0
  69. package/dist/languages/astgrep-backend/languages.d.ts +55 -0
  70. package/dist/languages/astgrep-backend/languages.d.ts.map +1 -0
  71. package/dist/languages/astgrep-backend/languages.js +214 -0
  72. package/dist/languages/astgrep-backend/languages.js.map +1 -0
  73. package/dist/languages/astgrep-backend/napi.d.ts +71 -0
  74. package/dist/languages/astgrep-backend/napi.d.ts.map +1 -0
  75. package/dist/languages/astgrep-backend/napi.js +176 -0
  76. package/dist/languages/astgrep-backend/napi.js.map +1 -0
  77. package/dist/languages/astgrep-backend/syntax.d.ts +88 -0
  78. package/dist/languages/astgrep-backend/syntax.d.ts.map +1 -0
  79. package/dist/languages/astgrep-backend/syntax.js +180 -0
  80. package/dist/languages/astgrep-backend/syntax.js.map +1 -0
  81. package/dist/languages/index.d.ts +14 -0
  82. package/dist/languages/index.d.ts.map +1 -0
  83. package/dist/languages/index.js +37 -0
  84. package/dist/languages/index.js.map +1 -0
  85. package/dist/languages/javascript/index.d.ts +4 -0
  86. package/dist/languages/javascript/index.d.ts.map +1 -0
  87. package/dist/languages/javascript/index.js +7 -0
  88. package/dist/languages/javascript/index.js.map +1 -0
  89. package/dist/languages/jsx/index.d.ts +4 -0
  90. package/dist/languages/jsx/index.d.ts.map +1 -0
  91. package/dist/languages/jsx/index.js +7 -0
  92. package/dist/languages/jsx/index.js.map +1 -0
  93. package/dist/languages/prose/index.d.ts +53 -0
  94. package/dist/languages/prose/index.d.ts.map +1 -0
  95. package/dist/languages/prose/index.js +172 -0
  96. package/dist/languages/prose/index.js.map +1 -0
  97. package/dist/languages/prose/line-bytes.d.ts +31 -0
  98. package/dist/languages/prose/line-bytes.d.ts.map +1 -0
  99. package/dist/languages/prose/line-bytes.js +39 -0
  100. package/dist/languages/prose/line-bytes.js.map +1 -0
  101. package/dist/languages/python/create-adapter.d.ts +20 -0
  102. package/dist/languages/python/create-adapter.d.ts.map +1 -0
  103. package/dist/languages/python/create-adapter.js +9 -0
  104. package/dist/languages/python/create-adapter.js.map +1 -0
  105. package/dist/languages/python/index.d.ts +4 -0
  106. package/dist/languages/python/index.d.ts.map +1 -0
  107. package/dist/languages/python/index.js +6 -0
  108. package/dist/languages/python/index.js.map +1 -0
  109. package/dist/languages/python/profile.d.ts +36 -0
  110. package/dist/languages/python/profile.d.ts.map +1 -0
  111. package/dist/languages/python/profile.js +282 -0
  112. package/dist/languages/python/profile.js.map +1 -0
  113. package/dist/languages/python/signature.d.ts +53 -0
  114. package/dist/languages/python/signature.d.ts.map +1 -0
  115. package/dist/languages/python/signature.js +188 -0
  116. package/dist/languages/python/signature.js.map +1 -0
  117. package/dist/languages/python/table.d.ts +46 -0
  118. package/dist/languages/python/table.d.ts.map +1 -0
  119. package/dist/languages/python/table.js +88 -0
  120. package/dist/languages/python/table.js.map +1 -0
  121. package/dist/languages/shared/call-detection.d.ts +17 -0
  122. package/dist/languages/shared/call-detection.d.ts.map +1 -0
  123. package/dist/languages/shared/call-detection.js +86 -0
  124. package/dist/languages/shared/call-detection.js.map +1 -0
  125. package/dist/languages/shared/chunks.d.ts +28 -0
  126. package/dist/languages/shared/chunks.d.ts.map +1 -0
  127. package/dist/languages/shared/chunks.js +181 -0
  128. package/dist/languages/shared/chunks.js.map +1 -0
  129. package/dist/languages/shared/create-adapter.d.ts +11 -0
  130. package/dist/languages/shared/create-adapter.d.ts.map +1 -0
  131. package/dist/languages/shared/create-adapter.js +90 -0
  132. package/dist/languages/shared/create-adapter.js.map +1 -0
  133. package/dist/languages/shared/decisions.d.ts +45 -0
  134. package/dist/languages/shared/decisions.d.ts.map +1 -0
  135. package/dist/languages/shared/decisions.js +141 -0
  136. package/dist/languages/shared/decisions.js.map +1 -0
  137. package/dist/languages/shared/dialect.d.ts +18 -0
  138. package/dist/languages/shared/dialect.d.ts.map +1 -0
  139. package/dist/languages/shared/dialect.js +37 -0
  140. package/dist/languages/shared/dialect.js.map +1 -0
  141. package/dist/languages/shared/doc-binding.d.ts +26 -0
  142. package/dist/languages/shared/doc-binding.d.ts.map +1 -0
  143. package/dist/languages/shared/doc-binding.js +50 -0
  144. package/dist/languages/shared/doc-binding.js.map +1 -0
  145. package/dist/languages/shared/engine.d.ts +49 -0
  146. package/dist/languages/shared/engine.d.ts.map +1 -0
  147. package/dist/languages/shared/engine.js +317 -0
  148. package/dist/languages/shared/engine.js.map +1 -0
  149. package/dist/languages/shared/extract-symbols.d.ts +5 -0
  150. package/dist/languages/shared/extract-symbols.d.ts.map +1 -0
  151. package/dist/languages/shared/extract-symbols.js +31 -0
  152. package/dist/languages/shared/extract-symbols.js.map +1 -0
  153. package/dist/languages/shared/fingerprint.d.ts +7 -0
  154. package/dist/languages/shared/fingerprint.d.ts.map +1 -0
  155. package/dist/languages/shared/fingerprint.js +95 -0
  156. package/dist/languages/shared/fingerprint.js.map +1 -0
  157. package/dist/languages/shared/grammar-loader.d.ts +15 -0
  158. package/dist/languages/shared/grammar-loader.d.ts.map +1 -0
  159. package/dist/languages/shared/grammar-loader.js +48 -0
  160. package/dist/languages/shared/grammar-loader.js.map +1 -0
  161. package/dist/languages/shared/import-detection.d.ts +24 -0
  162. package/dist/languages/shared/import-detection.d.ts.map +1 -0
  163. package/dist/languages/shared/import-detection.js +138 -0
  164. package/dist/languages/shared/import-detection.js.map +1 -0
  165. package/dist/languages/shared/js-family-profile.d.ts +5 -0
  166. package/dist/languages/shared/js-family-profile.d.ts.map +1 -0
  167. package/dist/languages/shared/js-family-profile.js +179 -0
  168. package/dist/languages/shared/js-family-profile.js.map +1 -0
  169. package/dist/languages/shared/node-kinds.d.ts +78 -0
  170. package/dist/languages/shared/node-kinds.d.ts.map +1 -0
  171. package/dist/languages/shared/node-kinds.js +141 -0
  172. package/dist/languages/shared/node-kinds.js.map +1 -0
  173. package/dist/languages/shared/node-utils.d.ts +31 -0
  174. package/dist/languages/shared/node-utils.d.ts.map +1 -0
  175. package/dist/languages/shared/node-utils.js +89 -0
  176. package/dist/languages/shared/node-utils.js.map +1 -0
  177. package/dist/languages/shared/parse-diagnostics.d.ts +44 -0
  178. package/dist/languages/shared/parse-diagnostics.d.ts.map +1 -0
  179. package/dist/languages/shared/parse-diagnostics.js +64 -0
  180. package/dist/languages/shared/parse-diagnostics.js.map +1 -0
  181. package/dist/languages/shared/parse-limits.d.ts +24 -0
  182. package/dist/languages/shared/parse-limits.d.ts.map +1 -0
  183. package/dist/languages/shared/parse-limits.js +134 -0
  184. package/dist/languages/shared/parse-limits.js.map +1 -0
  185. package/dist/languages/shared/profile.d.ts +149 -0
  186. package/dist/languages/shared/profile.d.ts.map +1 -0
  187. package/dist/languages/shared/profile.js +9 -0
  188. package/dist/languages/shared/profile.js.map +1 -0
  189. package/dist/languages/shared/scope-model.d.ts +32 -0
  190. package/dist/languages/shared/scope-model.d.ts.map +1 -0
  191. package/dist/languages/shared/scope-model.js +2 -0
  192. package/dist/languages/shared/scope-model.js.map +1 -0
  193. package/dist/languages/shared/scope-naming.d.ts +20 -0
  194. package/dist/languages/shared/scope-naming.d.ts.map +1 -0
  195. package/dist/languages/shared/scope-naming.js +118 -0
  196. package/dist/languages/shared/scope-naming.js.map +1 -0
  197. package/dist/languages/shared/scope-signature.d.ts +14 -0
  198. package/dist/languages/shared/scope-signature.d.ts.map +1 -0
  199. package/dist/languages/shared/scope-signature.js +82 -0
  200. package/dist/languages/shared/scope-signature.js.map +1 -0
  201. package/dist/languages/shared/signature.d.ts +55 -0
  202. package/dist/languages/shared/signature.d.ts.map +1 -0
  203. package/dist/languages/shared/signature.js +147 -0
  204. package/dist/languages/shared/signature.js.map +1 -0
  205. package/dist/languages/shared/syntax.d.ts +115 -0
  206. package/dist/languages/shared/syntax.d.ts.map +1 -0
  207. package/dist/languages/shared/syntax.js +2 -0
  208. package/dist/languages/shared/syntax.js.map +1 -0
  209. package/dist/languages/shared/table-profile-decisions.d.ts +54 -0
  210. package/dist/languages/shared/table-profile-decisions.d.ts.map +1 -0
  211. package/dist/languages/shared/table-profile-decisions.js +245 -0
  212. package/dist/languages/shared/table-profile-decisions.js.map +1 -0
  213. package/dist/languages/shared/table-profile-module-facts.d.ts +29 -0
  214. package/dist/languages/shared/table-profile-module-facts.d.ts.map +1 -0
  215. package/dist/languages/shared/table-profile-module-facts.js +139 -0
  216. package/dist/languages/shared/table-profile-module-facts.js.map +1 -0
  217. package/dist/languages/shared/table-profile-queries.d.ts +27 -0
  218. package/dist/languages/shared/table-profile-queries.d.ts.map +1 -0
  219. package/dist/languages/shared/table-profile-queries.js +70 -0
  220. package/dist/languages/shared/table-profile-queries.js.map +1 -0
  221. package/dist/languages/shared/table-profile-scopes.d.ts +46 -0
  222. package/dist/languages/shared/table-profile-scopes.d.ts.map +1 -0
  223. package/dist/languages/shared/table-profile-scopes.js +180 -0
  224. package/dist/languages/shared/table-profile-scopes.js.map +1 -0
  225. package/dist/languages/shared/table-profile.d.ts +302 -0
  226. package/dist/languages/shared/table-profile.d.ts.map +1 -0
  227. package/dist/languages/shared/table-profile.js +125 -0
  228. package/dist/languages/shared/table-profile.js.map +1 -0
  229. package/dist/languages/shared/tree-sitter-types.d.ts +44 -0
  230. package/dist/languages/shared/tree-sitter-types.d.ts.map +1 -0
  231. package/dist/languages/shared/tree-sitter-types.js +2 -0
  232. package/dist/languages/shared/tree-sitter-types.js.map +1 -0
  233. package/dist/languages/structured-text/index.d.ts +48 -0
  234. package/dist/languages/structured-text/index.d.ts.map +1 -0
  235. package/dist/languages/structured-text/index.js +120 -0
  236. package/dist/languages/structured-text/index.js.map +1 -0
  237. package/dist/languages/tsx/index.d.ts +4 -0
  238. package/dist/languages/tsx/index.d.ts.map +1 -0
  239. package/dist/languages/tsx/index.js +7 -0
  240. package/dist/languages/tsx/index.js.map +1 -0
  241. package/dist/languages/typescript/index.d.ts +4 -0
  242. package/dist/languages/typescript/index.d.ts.map +1 -0
  243. package/dist/languages/typescript/index.js +7 -0
  244. package/dist/languages/typescript/index.js.map +1 -0
  245. package/dist/languages/vue/index.d.ts +21 -0
  246. package/dist/languages/vue/index.d.ts.map +1 -0
  247. package/dist/languages/vue/index.js +234 -0
  248. package/dist/languages/vue/index.js.map +1 -0
  249. package/dist/languages/vue/mapping.d.ts +11 -0
  250. package/dist/languages/vue/mapping.d.ts.map +1 -0
  251. package/dist/languages/vue/mapping.js +77 -0
  252. package/dist/languages/vue/mapping.js.map +1 -0
  253. package/dist/registry.d.ts +24 -0
  254. package/dist/registry.d.ts.map +1 -0
  255. package/dist/registry.js +42 -0
  256. package/dist/registry.js.map +1 -0
  257. package/dist/text/byte-offset-table.d.ts +27 -0
  258. package/dist/text/byte-offset-table.d.ts.map +1 -0
  259. package/dist/text/byte-offset-table.js +39 -0
  260. package/dist/text/byte-offset-table.js.map +1 -0
  261. package/package.json +125 -3
  262. package/src/boundaries/expression.ts +95 -0
  263. package/src/boundaries/extract.ts +307 -0
  264. package/src/boundaries/python.ts +181 -0
  265. package/src/index.ts +51 -0
  266. package/src/languages/__golden__/javascript-basic.json +32 -0
  267. package/src/languages/__golden__/tsx-basic.json +19 -0
  268. package/src/languages/__golden__/typescript-basic.json +37 -0
  269. package/src/languages/astgrep-backend/GRAMMARS.md +86 -0
  270. package/src/languages/astgrep-backend/README.md +112 -0
  271. package/src/languages/astgrep-backend/__golden__/bash-basic.sh +53 -0
  272. package/src/languages/astgrep-backend/__golden__/c-basic.c +64 -0
  273. package/src/languages/astgrep-backend/__golden__/cpp-basic.cpp +65 -0
  274. package/src/languages/astgrep-backend/__golden__/csharp-basic.cs +73 -0
  275. package/src/languages/astgrep-backend/__golden__/go-basic.go +93 -0
  276. package/src/languages/astgrep-backend/__golden__/java-basic.java +62 -0
  277. package/src/languages/astgrep-backend/__golden__/kotlin-basic.kt +58 -0
  278. package/src/languages/astgrep-backend/__golden__/php-basic.php +72 -0
  279. package/src/languages/astgrep-backend/__golden__/ruby-basic.rb +62 -0
  280. package/src/languages/astgrep-backend/__golden__/rust-basic.rs +82 -0
  281. package/src/languages/astgrep-backend/__golden__/swift-basic.swift +73 -0
  282. package/src/languages/astgrep-backend/adapter.ts +240 -0
  283. package/src/languages/astgrep-backend/index.ts +44 -0
  284. package/src/languages/astgrep-backend/lang/README.md +115 -0
  285. package/src/languages/astgrep-backend/lang/bash.ts +78 -0
  286. package/src/languages/astgrep-backend/lang/c.ts +119 -0
  287. package/src/languages/astgrep-backend/lang/cpp.ts +65 -0
  288. package/src/languages/astgrep-backend/lang/csharp.ts +125 -0
  289. package/src/languages/astgrep-backend/lang/index.ts +61 -0
  290. package/src/languages/astgrep-backend/lang/java.ts +115 -0
  291. package/src/languages/astgrep-backend/lang/kotlin.ts +136 -0
  292. package/src/languages/astgrep-backend/lang/php.ts +105 -0
  293. package/src/languages/astgrep-backend/lang/ruby.ts +105 -0
  294. package/src/languages/astgrep-backend/lang/swift.ts +118 -0
  295. package/src/languages/astgrep-backend/languages.ts +238 -0
  296. package/src/languages/astgrep-backend/napi.ts +261 -0
  297. package/src/languages/astgrep-backend/syntax.ts +242 -0
  298. package/src/languages/index.ts +53 -0
  299. package/src/languages/javascript/index.ts +9 -0
  300. package/src/languages/jsx/index.ts +9 -0
  301. package/src/languages/prose/index.ts +270 -0
  302. package/src/languages/prose/line-bytes.ts +52 -0
  303. package/src/languages/python/README.md +246 -0
  304. package/src/languages/python/__golden__/python-basic.json +44 -0
  305. package/src/languages/python/create-adapter.ts +29 -0
  306. package/src/languages/python/index.ts +8 -0
  307. package/src/languages/python/profile.ts +341 -0
  308. package/src/languages/python/signature.ts +183 -0
  309. package/src/languages/python/table.ts +135 -0
  310. package/src/languages/shared/__fixtures__/large-over-32kib.ts.txt +1207 -0
  311. package/src/languages/shared/call-detection.ts +112 -0
  312. package/src/languages/shared/chunks.ts +255 -0
  313. package/src/languages/shared/create-adapter.ts +136 -0
  314. package/src/languages/shared/decisions.ts +204 -0
  315. package/src/languages/shared/dialect.ts +55 -0
  316. package/src/languages/shared/doc-binding.ts +78 -0
  317. package/src/languages/shared/engine.ts +461 -0
  318. package/src/languages/shared/extract-symbols.ts +35 -0
  319. package/src/languages/shared/fingerprint.ts +99 -0
  320. package/src/languages/shared/grammar-loader.ts +67 -0
  321. package/src/languages/shared/import-detection.ts +154 -0
  322. package/src/languages/shared/js-family-profile.ts +246 -0
  323. package/src/languages/shared/node-kinds.ts +153 -0
  324. package/src/languages/shared/node-utils.ts +120 -0
  325. package/src/languages/shared/parse-diagnostics.ts +125 -0
  326. package/src/languages/shared/parse-limits.ts +147 -0
  327. package/src/languages/shared/profile.ts +184 -0
  328. package/src/languages/shared/scope-model.ts +43 -0
  329. package/src/languages/shared/scope-naming.ts +124 -0
  330. package/src/languages/shared/scope-signature.ts +108 -0
  331. package/src/languages/shared/signature.ts +149 -0
  332. package/src/languages/shared/syntax.ts +116 -0
  333. package/src/languages/shared/table-profile-decisions.ts +251 -0
  334. package/src/languages/shared/table-profile-module-facts.ts +177 -0
  335. package/src/languages/shared/table-profile-queries.ts +85 -0
  336. package/src/languages/shared/table-profile-scopes.ts +198 -0
  337. package/src/languages/shared/table-profile.ts +427 -0
  338. package/src/languages/shared/tree-sitter-types.ts +46 -0
  339. package/src/languages/structured-text/index.ts +192 -0
  340. package/src/languages/tsx/index.ts +9 -0
  341. package/src/languages/typescript/index.ts +9 -0
  342. package/src/languages/vue/index.ts +312 -0
  343. package/src/languages/vue/mapping.ts +93 -0
  344. package/src/registry.ts +61 -0
  345. package/src/text/byte-offset-table.ts +63 -0
@@ -0,0 +1,181 @@
1
+ import { UntangleError } from "@untangle-code/domain";
2
+ import { rangeOf, unionRange } from "./node-utils.js";
3
+ function chunkKindOf(kind) {
4
+ switch (kind) {
5
+ case "function":
6
+ return "function";
7
+ case "method":
8
+ return "method";
9
+ case "constructor":
10
+ return "constructor";
11
+ case "class":
12
+ return "class_overview";
13
+ case "interface":
14
+ return "interface";
15
+ case "type":
16
+ return "type";
17
+ case "enum":
18
+ return "enum";
19
+ case "namespace":
20
+ case "file":
21
+ return "module";
22
+ case "property":
23
+ // Individual properties never reach here directly — see groupProperties.
24
+ return "property_group";
25
+ }
26
+ }
27
+ /**
28
+ * The full source span a symbol's chunk should carry: the scope node itself,
29
+ * widened to the wrapping `export` statement (`export function f ...` —
30
+ * the scope node is only the declaration, but the `export` keyword bytes
31
+ * belong to the symbol's chunk, not to an interstitial module gap) and to
32
+ * the bound doc/decorator range (spec.md §8.3 step 2).
33
+ */
34
+ function ownRange(scope, ctx, profile) {
35
+ let range = scope.range;
36
+ const parent = scope.node.parent;
37
+ if (parent !== null && profile.exportWrapperKinds.has(parent.type)) {
38
+ range = unionRange(rangeOf(parent, ctx), range);
39
+ }
40
+ return scope.docRange !== undefined ? unionRange(scope.docRange, range) : range;
41
+ }
42
+ /**
43
+ * Regionen fuer Inhalt, der KEINEN Scope oeffnet, aber Bytes traegt (JS/TS:
44
+ * `static { ... }` im Klassenrumpf). Welche Knoten das sind, weiss das
45
+ * Sprachprofil, nicht diese Datei — sonst stuende hier je Sprache eine weitere
46
+ * verdrahtete Knotenart. Ohne diese Regionen fielen ihre Bytes durch den
47
+ * Mitgliederlauf; spec.md §8.4 verbietet genau das (kein stiller Datenverlust).
48
+ */
49
+ function extraMemberRegions(scopeNode, parentScopeId, ctx, profile) {
50
+ return profile.memberRegions(scopeNode, parentScopeId, ctx).map((member) => ({
51
+ chunkKind: "property_group",
52
+ range: member.range,
53
+ scopeId: member.scopeId,
54
+ headerText: member.headerText,
55
+ splittable: false,
56
+ }));
57
+ }
58
+ function toRegion(scope, groupOrdinal, ctx, profile) {
59
+ let children = buildChildRegions(scope.children, scope.scopeId, groupOrdinal, ctx, profile);
60
+ if (scope.kind === "class") {
61
+ const extras = extraMemberRegions(scope.node, scope.scopeId, ctx, profile);
62
+ if (extras.length > 0) {
63
+ children = [...children, ...extras].sort((a, b) => a.range.startByte - b.range.startByte);
64
+ }
65
+ }
66
+ const headerText = scope.signature ?? scope.normalizedSignature;
67
+ return {
68
+ chunkKind: chunkKindOf(scope.kind),
69
+ range: ownRange(scope, ctx, profile),
70
+ scopeId: scope.scopeId,
71
+ ...(scope.qualifiedName.length > 0 ? { symbolFqn: scope.qualifiedName } : {}),
72
+ ...(headerText !== undefined && headerText.length > 0 ? { headerText } : {}),
73
+ splittable: children.length > 0,
74
+ ...(children.length > 0 ? { children } : {}),
75
+ };
76
+ }
77
+ /**
78
+ * Exported (in addition to being called from {@link buildChildRegions})
79
+ * so `chunks.test.ts` can exercise the WP-73 empty-list guard directly:
80
+ * `buildChildRegions`'s own `flushProperties` never calls this with an
81
+ * empty `properties` array, so that path cannot be reached end-to-end
82
+ * through `buildFileRegion` alone.
83
+ */
84
+ export function propertyGroupRegion(properties, parentScopeId, ordinal, ctx, profile) {
85
+ const [firstProperty, ...restProperties] = properties;
86
+ if (firstProperty === undefined) {
87
+ // WP-73: `properties` must never be empty — the only caller
88
+ // (`flushProperties`) already guards on `pendingProperties.length === 0`
89
+ // and never reaches this function otherwise. An empty list here means
90
+ // that invariant was violated by a future caller; there is no
91
+ // meaningful `SourceRange` for zero properties, so this is an honest
92
+ // internal-defect report (E4) rather than a defined empty-range value
93
+ // that would silently mask the bug, and rather than the bare
94
+ // `Array.prototype.reduce` `TypeError: Reduce of empty array with no
95
+ // initial value` a caller would otherwise see.
96
+ throw new UntangleError("ANALYSIS_INCOMPLETE", "propertyGroupRegion called with an empty properties list — a property_group region requires at least one property (spec.md §8.3)", {
97
+ retryable: false,
98
+ operation: "chunk",
99
+ context: { parentScopeId, ordinal },
100
+ });
101
+ }
102
+ const range = restProperties.reduce((acc, property) => unionRange(acc, ownRange(property, ctx, profile)), ownRange(firstProperty, ctx, profile));
103
+ return {
104
+ chunkKind: "property_group",
105
+ range,
106
+ scopeId: `${parentScopeId}#properties#${ordinal}`,
107
+ splittable: false,
108
+ };
109
+ }
110
+ /** Builds child regions for one scope, merging consecutive `property` children into `property_group`s. */
111
+ function buildChildRegions(children, parentScopeId, groupOrdinal, ctx, profile) {
112
+ const regions = [];
113
+ let pendingProperties = [];
114
+ const flushProperties = () => {
115
+ if (pendingProperties.length === 0)
116
+ return;
117
+ regions.push(propertyGroupRegion(pendingProperties, parentScopeId, groupOrdinal.next, ctx, profile));
118
+ groupOrdinal.next += 1;
119
+ pendingProperties = [];
120
+ };
121
+ for (const child of children) {
122
+ if (child.kind === "property") {
123
+ pendingProperties.push(child);
124
+ continue;
125
+ }
126
+ flushProperties();
127
+ regions.push(toRegion(child, groupOrdinal, ctx, profile));
128
+ }
129
+ flushProperties();
130
+ return regions;
131
+ }
132
+ /** Leading file content (shebang/header comments/imports) before the first top-level region, if non-trivial. */
133
+ /** Builds the single root ("module") `AstRegion` for a whole file. */
134
+ export function buildFileRegion(fileScope, ctx, profile) {
135
+ const groupOrdinal = { next: 0 };
136
+ const topLevelRegions = buildChildRegions(fileScope.children, fileScope.scopeId, groupOrdinal, ctx, profile);
137
+ const firstRegion = topLevelRegions[0];
138
+ const preamble = firstRegion !== undefined ? buildFilePreambleRegion(fileScope, firstRegion, ctx) : null;
139
+ const allChildren = preamble !== null ? [preamble, ...topLevelRegions] : topLevelRegions;
140
+ return {
141
+ chunkKind: "module",
142
+ range: fileScope.range,
143
+ scopeId: fileScope.scopeId,
144
+ splittable: allChildren.length > 0,
145
+ ...(allChildren.length > 0 ? { children: allChildren } : {}),
146
+ };
147
+ }
148
+ function buildFilePreambleRegion(fileScope, firstChild, ctx) {
149
+ if (firstChild.range.startByte <= fileScope.range.startByte)
150
+ return null;
151
+ const rawPreamble = ctx.sourceText.slice(0, indexForByteOffsetApprox(ctx, firstChild.range.startByte));
152
+ if (rawPreamble.trim().length === 0)
153
+ return null;
154
+ return {
155
+ chunkKind: "file_preamble",
156
+ range: {
157
+ startLine: fileScope.range.startLine,
158
+ endLine: firstChild.range.startLine,
159
+ startByte: fileScope.range.startByte,
160
+ endByte: firstChild.range.startByte,
161
+ },
162
+ scopeId: fileScope.scopeId,
163
+ splittable: false,
164
+ };
165
+ }
166
+ // Approximates a UTF-16 slice index for a byte offset by scanning the
167
+ // (small, preamble-sized) prefix — the preamble is always near the top of
168
+ // the file, so this is O(preamble length), not O(file length).
169
+ function indexForByteOffsetApprox(ctx, byteOffset) {
170
+ let low = 0;
171
+ let high = ctx.sourceText.length;
172
+ while (low < high) {
173
+ const mid = Math.floor((low + high) / 2);
174
+ if (ctx.byteTable.toByteOffset(mid) < byteOffset)
175
+ low = mid + 1;
176
+ else
177
+ high = mid;
178
+ }
179
+ return low;
180
+ }
181
+ //# sourceMappingURL=chunks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks.js","sourceRoot":"","sources":["../../../src/languages/shared/chunks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Wires one `Dialect` config into a full `LanguageAdapter` (domain
3
+ * `analysis.ts`), backed by the shared tree-sitter engine.
4
+ *
5
+ * See `engine.ts`'s doc comment for why every extraction method is a
6
+ * projection over one memoized `AnalysisResult`.
7
+ */
8
+ import type { LanguageAdapter } from "@untangle-code/domain";
9
+ import type { Dialect } from "./dialect.js";
10
+ export declare function createTreeSitterAdapter(dialect: Dialect): LanguageAdapter;
11
+ //# sourceMappingURL=create-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-adapter.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/create-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAIV,eAAe,EAMhB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA6C5C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAoEzE"}
@@ -0,0 +1,90 @@
1
+ import { buildByteOffsetTable } from "../../text/byte-offset-table.js";
2
+ import { buildFileRegion } from "./chunks.js";
3
+ import { analyzeTree } from "./engine.js";
4
+ import { extractedSymbolsOf } from "./extract-symbols.js";
5
+ import { loadGrammar, loadParserCtor } from "./grammar-loader.js";
6
+ import { createJsFamilyProfile } from "./js-family-profile.js";
7
+ import { collectParseDiagnostics } from "./parse-diagnostics.js";
8
+ import { parseWithBuffer } from "./parse-limits.js";
9
+ const analysisCache = new WeakMap();
10
+ /**
11
+ * `ComplexityFacts.parseDiagnostics` ist der EINZIGE Kanal, ueber den
12
+ * nachgelagerte Rechnungen (`computeSyntactic`, Berichte, Skip-Ledger) davon
13
+ * erfahren, dass der Syntaxbaum einer Datei beschaedigt ist. `analyzeTree`
14
+ * sieht die Diagnosen nicht — sie entstehen in `parse()` und haengen am
15
+ * `ParsedAst`. Wurde das Feld hier nicht befuellt, blieb es AUSNAHMSLOS leer:
16
+ * `parse_error_node_count` und `missing_node_count` meldeten dann fuer jede
17
+ * Datei 0, auch fuer eine mit `parseQuality: "partial"` und 25 Fehlerknoten.
18
+ * Genau dieses stille Verschlucken verbietet E4.
19
+ */
20
+ function getAnalysis(ast) {
21
+ const cached = analysisCache.get(ast);
22
+ if (cached !== undefined)
23
+ return cached;
24
+ const root = ast.root;
25
+ const analyzed = analyzeTree(root.tree.rootNode, root.ctx, root.fileId, root.profile);
26
+ const result = {
27
+ ...analyzed,
28
+ facts: { ...analyzed.facts, parseDiagnostics: ast.diagnostics },
29
+ };
30
+ analysisCache.set(ast, result);
31
+ return result;
32
+ }
33
+ export function createTreeSitterAdapter(dialect) {
34
+ // EIN Profil je Adapter, einmal gebaut: die Mengen darin sind unveraenderlich,
35
+ // und der Walk liest sie je Knoten (`engine.ts`).
36
+ const profile = createJsFamilyProfile(dialect);
37
+ return {
38
+ languageId: dialect.languageId,
39
+ extensions: dialect.extensions,
40
+ supportLevel: dialect.supportLevel,
41
+ parse(source) {
42
+ const ParserCtor = loadParserCtor();
43
+ const language = loadGrammar(dialect.grammar);
44
+ const parser = new ParserCtor();
45
+ parser.setLanguage(language);
46
+ // NIE `parser.parse(source.content)` — ohne `bufferSize` wirft die native
47
+ // Bindung fuer jede Datei ueber 32 KiB `Invalid argument` (WP-215).
48
+ // `parseWithBuffer` prueft die Groessengrenze, setzt den Puffer und
49
+ // benennt jede Ausnahme (WP-216).
50
+ const tree = parseWithBuffer(parser, source.content);
51
+ const byteTable = buildByteOffsetTable(source.content);
52
+ const ctx = { sourceText: source.content, byteTable };
53
+ const { parseQuality, diagnostics, errorNodeCount, missingNodeCount } = collectParseDiagnostics(tree.rootNode, ctx);
54
+ if (parseQuality === "failed") {
55
+ return { parseQuality, ast: null, diagnostics, errorNodeCount, missingNodeCount };
56
+ }
57
+ const root = { tree, ctx, fileId: source.fileId, profile };
58
+ return {
59
+ parseQuality,
60
+ ast: { languageId: dialect.languageId, parseQuality, root, diagnostics },
61
+ diagnostics,
62
+ errorNodeCount,
63
+ missingNodeCount,
64
+ };
65
+ },
66
+ extractChunks(ast) {
67
+ const { scopeTree } = getAnalysis(ast);
68
+ const root = ast.root;
69
+ return [buildFileRegion(scopeTree, root.ctx, root.profile)];
70
+ },
71
+ extractSymbols(ast) {
72
+ const { scopeTree } = getAnalysis(ast);
73
+ return extractedSymbolsOf(scopeTree);
74
+ },
75
+ extractImports(ast) {
76
+ return getAnalysis(ast).imports;
77
+ },
78
+ extractCalls(ast) {
79
+ return getAnalysis(ast).calls;
80
+ },
81
+ computeComplexity(ast) {
82
+ return getAnalysis(ast).facts;
83
+ },
84
+ tokenizeForHalstead(ast) {
85
+ const { facts } = getAnalysis(ast);
86
+ return { operators: facts.operators, operands: facts.operands };
87
+ },
88
+ };
89
+ }
90
+ //# sourceMappingURL=create-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-adapter.js","sourceRoot":"","sources":["../../../src/languages/shared/create-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Decision-point and nesting-event detection (spec.md §16.2-§16.4).
3
+ *
4
+ * Called once per non-leaf node during the main walk (`engine.ts`); returns
5
+ * the zero-or-one `DecisionFact`/`NestingFact` pair this specific node
6
+ * contributes (attribution to a `symbolScopeId` happens in the caller,
7
+ * which knows the current scope).
8
+ */
9
+ import type { DecisionKind } from "@untangle-code/domain";
10
+ import type { SyntaxNode } from "./syntax.js";
11
+ export interface DetectedDecision {
12
+ kind: DecisionKind;
13
+ countsForClassic: boolean;
14
+ countsForExtended: boolean;
15
+ logicalGroupId?: string;
16
+ /**
17
+ * Wie oft dieser EINE Knoten die Entscheidung beitraegt (Vorgabe: 1).
18
+ *
19
+ * WOFUER: eine Grammatik kann eine n-stellige Alternative FLACH ablegen.
20
+ * Rusts `or_pattern` ist linksrekursiv — `A | B | C` sind zwei
21
+ * verschachtelte Knoten, also zwei Entscheidungen ohne weiteres Zutun.
22
+ * Pythons `union_pattern` ist FLACH: `case 1 | 2 | 3` ist EIN Knoten mit
23
+ * drei Zweigen. Ohne diese Zahl kostete `1 | 2 | 3` genauso viel wie
24
+ * `1 | 2`, und die Metrik behauptete eine Gleichheit, die es nicht gibt.
25
+ *
26
+ * Die zusaetzlichen Entscheidungen teilen sich den Bereich des Knotens:
27
+ * die Alternativen liegen darin, und ein erfundener engerer Bereich waere
28
+ * eine Angabe, die der Baum nicht hergibt.
29
+ */
30
+ repeat?: number;
31
+ }
32
+ export interface DetectedNesting {
33
+ construct: string;
34
+ continuation: boolean;
35
+ }
36
+ export interface DecisionDetectionResult {
37
+ decision?: DetectedDecision;
38
+ nesting?: DetectedNesting;
39
+ }
40
+ /** Kann ein Knoten dieses Typs eine Entscheidung oder ein Nesting-Ereignis tragen? */
41
+ export declare function mayCarryDecisionOrNesting(nodeType: string): boolean;
42
+ export declare function detectDecisionAndNesting(node: SyntaxNode): DecisionDetectionResult;
43
+ /** Nesting construct for a lambda/local-function boundary (spec.md §16.4). */
44
+ export declare function lambdaNesting(): DetectedNesting;
45
+ //# sourceMappingURL=decisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/decisions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAY1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AA8DD,sFAAsF;AACtF,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,uBAAuB,CA+ElF;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,eAAe,CAE/C"}
@@ -0,0 +1,141 @@
1
+ import { BINARY_EXPRESSION, CATCH_CLAUSE, IF_STATEMENT, JUMP_STATEMENT_TYPES, LOOP_TYPES, SWITCH_CASE, SWITCH_STATEMENT, TERNARY_EXPRESSION, } from "./node-kinds.js";
2
+ function isElseIf(node) {
3
+ return node.parent !== null && node.parent.type === "else_clause";
4
+ }
5
+ /** A guard clause: `if (cond) return/throw/break/continue;` with no `else`. */
6
+ function isGuardClause(node) {
7
+ if (node.childForFieldName("alternative") !== null)
8
+ return false;
9
+ const consequence = node.childForFieldName("consequence");
10
+ if (consequence === null)
11
+ return false;
12
+ const soleStatement = consequence.type === "statement_block"
13
+ ? consequence.namedChildCount === 1
14
+ ? consequence.namedChild(0)
15
+ : null
16
+ : consequence;
17
+ return soleStatement !== null && JUMP_STATEMENT_TYPES.has(soleStatement.type);
18
+ }
19
+ /**
20
+ * Finds the topmost node in a maximal chain of the same binary operator (for
21
+ * grouping §16.3/§16.4) and derives a stable id for it from its position in
22
+ * the source (`startIndex`, the group top node's byte offset) rather than
23
+ * tree-sitter's runtime `node.id`. `node.id` is a native-binding identifier
24
+ * (effectively a heap address) that is NOT stable across processes or even
25
+ * across repeated parses of the identical source within the same process —
26
+ * two parse runs of the same file can and do produce different `node.id`
27
+ * values. `startIndex` is deterministic: the same source byte range always
28
+ * yields the same id, which is what vision.md §8.5's determinism principle
29
+ * requires once `ComplexityFacts` are persisted or compared across runs.
30
+ */
31
+ function logicalGroupIdFor(node, operatorText) {
32
+ let top = node;
33
+ while (top.parent !== null && top.parent.type === BINARY_EXPRESSION) {
34
+ const parentOperator = top.parent.childForFieldName("operator")?.text;
35
+ if (parentOperator !== operatorText)
36
+ break;
37
+ top = top.parent;
38
+ }
39
+ return `logical-${top.startIndex}`;
40
+ }
41
+ /**
42
+ * Die Knotentypen, fuer die {@link detectDecisionAndNesting} ueberhaupt etwas
43
+ * anderes als `{}` liefern kann — abgeleitet aus den Verzweigungen unten und
44
+ * durch `decisions.test.ts` an sie gebunden.
45
+ *
46
+ * WOZU: der Cursor-Walk (`engine.ts`, WP-95) materialisiert einen
47
+ * `SyntaxNode`-Wrapper nur dann, wenn ein Detektor ihn wirklich braucht. Ohne
48
+ * dieses Vorsieb muesste er fuer JEDEN inneren Knoten einen Wrapper bauen —
49
+ * also genau die Grenzueberquerung wieder einfuehren, die der Cursor spart.
50
+ */
51
+ const DECISION_CANDIDATE_TYPES = new Set([
52
+ IF_STATEMENT,
53
+ ...LOOP_TYPES,
54
+ CATCH_CLAUSE,
55
+ TERNARY_EXPRESSION,
56
+ SWITCH_STATEMENT,
57
+ SWITCH_CASE,
58
+ BINARY_EXPRESSION,
59
+ ]);
60
+ /** Kann ein Knoten dieses Typs eine Entscheidung oder ein Nesting-Ereignis tragen? */
61
+ export function mayCarryDecisionOrNesting(nodeType) {
62
+ return DECISION_CANDIDATE_TYPES.has(nodeType);
63
+ }
64
+ export function detectDecisionAndNesting(node) {
65
+ if (node.type === IF_STATEMENT) {
66
+ if (isElseIf(node)) {
67
+ return {
68
+ decision: { kind: "else_if", countsForClassic: true, countsForExtended: true },
69
+ nesting: { construct: "if", continuation: true },
70
+ };
71
+ }
72
+ const kind = isGuardClause(node) ? "guard" : "if";
73
+ return {
74
+ decision: { kind, countsForClassic: true, countsForExtended: true },
75
+ nesting: { construct: "if", continuation: false },
76
+ };
77
+ }
78
+ if (LOOP_TYPES.has(node.type)) {
79
+ return {
80
+ decision: { kind: "loop", countsForClassic: true, countsForExtended: true },
81
+ nesting: { construct: "loop", continuation: false },
82
+ };
83
+ }
84
+ if (node.type === CATCH_CLAUSE) {
85
+ return {
86
+ decision: { kind: "catch", countsForClassic: true, countsForExtended: true },
87
+ nesting: { construct: "catch", continuation: false },
88
+ };
89
+ }
90
+ if (node.type === TERNARY_EXPRESSION) {
91
+ return {
92
+ decision: { kind: "ternary", countsForClassic: true, countsForExtended: true },
93
+ nesting: { construct: "ternary", continuation: false },
94
+ };
95
+ }
96
+ if (node.type === SWITCH_STATEMENT) {
97
+ return { nesting: { construct: "switch", continuation: false } };
98
+ }
99
+ if (node.type === SWITCH_CASE) {
100
+ return { decision: { kind: "case", countsForClassic: true, countsForExtended: true } };
101
+ }
102
+ if (node.type === BINARY_EXPRESSION) {
103
+ const operator = node.childForFieldName("operator")?.text;
104
+ if (operator === "&&") {
105
+ return {
106
+ decision: {
107
+ kind: "logical_and",
108
+ countsForClassic: false,
109
+ countsForExtended: true,
110
+ logicalGroupId: logicalGroupIdFor(node, "&&"),
111
+ },
112
+ };
113
+ }
114
+ if (operator === "||") {
115
+ return {
116
+ decision: {
117
+ kind: "logical_or",
118
+ countsForClassic: false,
119
+ countsForExtended: true,
120
+ logicalGroupId: logicalGroupIdFor(node, "||"),
121
+ },
122
+ };
123
+ }
124
+ if (operator === "??") {
125
+ return {
126
+ decision: {
127
+ kind: "short_circuit",
128
+ countsForClassic: false,
129
+ countsForExtended: true,
130
+ logicalGroupId: logicalGroupIdFor(node, "??"),
131
+ },
132
+ };
133
+ }
134
+ }
135
+ return {};
136
+ }
137
+ /** Nesting construct for a lambda/local-function boundary (spec.md §16.4). */
138
+ export function lambdaNesting() {
139
+ return { construct: "lambda", continuation: false };
140
+ }
141
+ //# sourceMappingURL=decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.js","sourceRoot":"","sources":["../../../src/languages/shared/decisions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { SupportLevel } from "@untangle-code/domain";
2
+ import type { GrammarSource } from "./grammar-loader.js";
3
+ /** Static, per-language configuration for the tree-sitter adapter factory. */
4
+ export interface Dialect {
5
+ languageId: string;
6
+ extensions: string[];
7
+ supportLevel: SupportLevel;
8
+ grammar: GrammarSource;
9
+ /** Whether the grammar has TypeScript type syntax (interfaces, type aliases, enums, type annotations, generics). */
10
+ hasTypes: boolean;
11
+ /** Class field/property-signature node type name, which differs between the JS and TS grammars. */
12
+ fieldDefinitionKind: "field_definition" | "public_field_definition";
13
+ }
14
+ export declare const TYPESCRIPT_DIALECT: Dialect;
15
+ export declare const TSX_DIALECT: Dialect;
16
+ export declare const JAVASCRIPT_DIALECT: Dialect;
17
+ export declare const JSX_DIALECT: Dialect;
18
+ //# sourceMappingURL=dialect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,8EAA8E;AAC9E,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,oHAAoH;IACpH,QAAQ,EAAE,OAAO,CAAC;IAClB,mGAAmG;IACnG,mBAAmB,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;CACrE;AAED,eAAO,MAAM,kBAAkB,EAAE,OAOhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,OAOzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,OAOhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,OAWzB,CAAC"}
@@ -0,0 +1,37 @@
1
+ export const TYPESCRIPT_DIALECT = {
2
+ languageId: "typescript",
3
+ extensions: [".ts", ".mts", ".cts"],
4
+ supportLevel: "deep",
5
+ grammar: { moduleName: "tree-sitter-typescript", exportName: "typescript" },
6
+ hasTypes: true,
7
+ fieldDefinitionKind: "public_field_definition",
8
+ };
9
+ export const TSX_DIALECT = {
10
+ languageId: "tsx",
11
+ extensions: [".tsx"],
12
+ supportLevel: "deep",
13
+ grammar: { moduleName: "tree-sitter-typescript", exportName: "tsx" },
14
+ hasTypes: true,
15
+ fieldDefinitionKind: "public_field_definition",
16
+ };
17
+ export const JAVASCRIPT_DIALECT = {
18
+ languageId: "javascript",
19
+ extensions: [".js", ".mjs", ".cjs"],
20
+ supportLevel: "deep",
21
+ grammar: { moduleName: "tree-sitter-javascript" },
22
+ hasTypes: false,
23
+ fieldDefinitionKind: "field_definition",
24
+ };
25
+ export const JSX_DIALECT = {
26
+ languageId: "jsx",
27
+ extensions: [".jsx"],
28
+ supportLevel: "deep",
29
+ // tree-sitter-javascript's single grammar already parses JSX syntax
30
+ // (verified empirically — see README "Grammatik-Wahl"); JSX gets its own
31
+ // languageId/extension per spec.md §7.2's MVP table row ("TSX/JSX"), not
32
+ // its own grammar.
33
+ grammar: { moduleName: "tree-sitter-javascript" },
34
+ hasTypes: false,
35
+ fieldDefinitionKind: "field_definition",
36
+ };
37
+ //# sourceMappingURL=dialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../src/languages/shared/dialect.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,kBAAkB,GAAY;IACzC,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IACnC,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE,UAAU,EAAE,YAAY,EAAE;IAC3E,QAAQ,EAAE,IAAI;IACd,mBAAmB,EAAE,yBAAyB;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE,UAAU,EAAE,KAAK,EAAE;IACpE,QAAQ,EAAE,IAAI;IACd,mBAAmB,EAAE,yBAAyB;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAY;IACzC,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IACnC,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;IACjD,QAAQ,EAAE,KAAK;IACf,mBAAmB,EAAE,kBAAkB;CACxC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM;IACpB,oEAAoE;IACpE,yEAAyE;IACzE,yEAAyE;IACzE,mBAAmB;IACnB,OAAO,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;IACjD,QAAQ,EAAE,KAAK;IACf,mBAAmB,EAAE,kBAAkB;CACxC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Doc-comment binding (spec.md §8.3 step 2: "Doccomment, Annotationen und
3
+ * Dekoratoren an das folgende Symbol binden").
4
+ *
5
+ * Decorators are represented by the grammar as PRECEDING SIBLINGS of the
6
+ * member they decorate inside `class_body` (verified empirically — not as a
7
+ * nested field on the member node, despite `node-types.json` listing
8
+ * `decorator` as an optional field; that field shape applies to parameter
9
+ * decorators, e.g. `constructor(@Inject() dep: Dep)`, which nest inside
10
+ * `required_parameter` instead). A leading doc comment is, in turn, a
11
+ * preceding sibling of the (possibly decorator-preceded) member.
12
+ *
13
+ * For a symbol whose defining node is buried inside an expression (an arrow
14
+ * function assigned to a `const`, a function expression as an object
15
+ * property value, ...), the anchor for "preceding sibling" purposes is not
16
+ * the function node itself but its enclosing statement — see
17
+ * `resolveDocAnchor`.
18
+ */
19
+ import type { SourceRange } from "@untangle-code/domain";
20
+ import type { FileTextContext } from "./node-utils.js";
21
+ import type { SyntaxNode } from "./syntax.js";
22
+ /** Climbs from a (possibly deeply nested) scope-defining node to its statement-level anchor. */
23
+ export declare function resolveDocAnchor(node: SyntaxNode): SyntaxNode;
24
+ /** Resolves the bound doc-comment range for a scope-defining node, if any (spec.md §8.3 step 2). */
25
+ export declare function resolveDocRange(node: SyntaxNode, ctx: FileTextContext): SourceRange | undefined;
26
+ //# sourceMappingURL=doc-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-binding.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/doc-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAwB7D;AAID,oGAAoG;AACpG,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,GAAG,SAAS,CAsB/F"}