@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,149 @@
1
+ /**
2
+ * Das SPRACHPROFIL: alles, was der vereinheitlichte Walk (`engine.ts`) ueber
3
+ * eine konkrete Sprache wissen muss — als Tabelle plus eine Handvoll Haken,
4
+ * nicht als verdrahtete Zeichenketten im Motor.
5
+ *
6
+ * WARUM (WP-220): bis Welle 6 stand die JS/TS-Familie fest im Motor. `engine.ts`
7
+ * nannte 48 verschiedene Knotenarten woertlich, `fingerprint.ts` kannte
8
+ * `"comment"` als Konstante, `chunks.ts` kannte `export_statement`. Solange es
9
+ * genau ein Backend und genau eine Sprachfamilie gab, war das billig und
10
+ * ehrlich. Mit dem zweiten Backend (`languages/astgrep-backend/`) waere daraus ein
11
+ * ZWEITER Motor neben dem ersten geworden — und damit das Gegenteil der These
12
+ * aus vision.md §1b, die wir belegen wollen: gleiche Leistung mit WENIGER
13
+ * Komplexitaet. Deshalb erst die Verallgemeinerung, dann das Backend.
14
+ *
15
+ * ZWEI ARTEN, EIN PROFIL ZU BAUEN:
16
+ *
17
+ * 1. `js-family-profile.ts` — die handgeschriebene Fassung fuer
18
+ * TypeScript/JavaScript/TSX/JSX. Sie reicht die vorhandenen Detektoren
19
+ * (`decisions.ts`, `import-detection.ts`, `call-detection.ts`,
20
+ * `scope-naming.ts`, `scope-signature.ts`, `doc-binding.ts`) unveraendert
21
+ * durch. Ihr Verhalten ist Zeile fuer Zeile das von vorher; die
22
+ * Golden-Tests dieses Pakets sind der Beleg.
23
+ *
24
+ * 2. `table-profile.ts` — die tabellengetriebene Fassung fuer jede weitere
25
+ * Sprache. Sie kennt keine Sprache, nur Rollen: welche Knotenart ist ein
26
+ * Kommentar, welche oeffnet einen Scope, welche traegt eine Entscheidung.
27
+ * Eine neue Sprache kostet damit eine Tabelle, keinen Motor.
28
+ *
29
+ * WAS HIER NICHT HINEINGEHOERT: alles Backendspezifische. Ein Profil sagt,
30
+ * WAS eine Knotenart bedeutet, nie, WIE der Baum entsteht. Das Backend steht
31
+ * in `create-adapter.ts` (tree-sitter) bzw. `languages/astgrep-backend/create-adapter.ts`.
32
+ */
33
+ import type { LiteralFact, RawCall, RawImport, SourceRange, SupportLevel } from "@untangle-code/domain";
34
+ import type { DecisionDetectionResult } from "./decisions.js";
35
+ import type { FileTextContext } from "./node-utils.js";
36
+ import type { ScopeNode } from "./scope-model.js";
37
+ import type { SyntaxNode } from "./syntax.js";
38
+ /** Die Fakten, die ein Knoten ausserhalb von Entscheidungen beitragen kann. */
39
+ export interface ModuleFactSink {
40
+ imports: RawImport[];
41
+ calls: RawCall[];
42
+ }
43
+ /** Roh- und Normalform der Kopfzeile eines Symbols (siehe `signature.ts`). */
44
+ export interface ScopeSignature {
45
+ raw?: string;
46
+ normalized: string;
47
+ }
48
+ /**
49
+ * Ein Sprachprofil. Jede Eigenschaft wird vom Walk GENAU EINMAL je Knoten
50
+ * gelesen; die Mengen sind deshalb `Set`s und keine Arrays.
51
+ */
52
+ export interface LanguageProfile {
53
+ readonly languageId: string;
54
+ readonly extensions: readonly string[];
55
+ readonly supportLevel: SupportLevel;
56
+ /** Kommentarknoten: nie Operator, nie Operand, nie Teil eines Fingerabdrucks. */
57
+ readonly commentKinds: ReadonlySet<string>;
58
+ /**
59
+ * Knoten, deren ganzer Teilbaum als EIN Operand/Literal zaehlt (der Walk
60
+ * steigt nicht hinein). In der JS/TS-Familie `string` und `regex`.
61
+ */
62
+ readonly literalContainerKinds: ReadonlySet<string>;
63
+ /** Blattknoten, die ein Bezeichnervorkommen sind. */
64
+ readonly identifierLeafKinds: ReadonlySet<string>;
65
+ /** Blattknoten, die ein einfaches Literal sind. */
66
+ readonly simpleLiteralLeafKinds: ReadonlySet<string>;
67
+ /** Statische Textteile in einer Zeichenkettenschablone. */
68
+ readonly templateTextLeafKinds: ReadonlySet<string>;
69
+ /** Satzzeichenblaetter, die weder Operator noch Operand sind. */
70
+ readonly ignoredPunctuationKinds: ReadonlySet<string>;
71
+ /**
72
+ * Elternknotenarten, deren Blaetter reine Typsyntax sind (TS
73
+ * `predefined_type`): gezaehlt in `nodeKinds`, aber nie als Token.
74
+ */
75
+ readonly typeKeywordParentKinds: ReadonlySet<string>;
76
+ /** Funktionsartige Knoten — sie erzeugen zusaetzlich ein Lambda-Nesting. */
77
+ readonly functionLikeKinds: ReadonlySet<string>;
78
+ /** Literalart eines Container-Literals (`literalContainerKinds`). */
79
+ containerLiteralKind(kind: string): LiteralFact["literalKind"];
80
+ /** Literalart eines einfachen Literalblatts (`simpleLiteralLeafKinds`). */
81
+ simpleLiteralKind(kind: string): LiteralFact["literalKind"];
82
+ /** Deklaration oder Verweis? `fieldName` ist der Feldname im Elternknoten. */
83
+ identifierRole(fieldName: string | undefined, parentKind: string): "declaration" | "reference";
84
+ /**
85
+ * Braucht ein innerer Knoten dieser Art ueberhaupt einen Knotenwrapper?
86
+ *
87
+ * Das ist das Vorsieb aus WP-95: fuer die grosse Mehrheit der inneren Knoten
88
+ * (Ausdruecke, Bloecke, Anweisungslisten) faellt die Grenzueberquerung
89
+ * vollstaendig weg. Wer hier `true` zurueckgibt, bezahlt je Knoten — beim
90
+ * ast-grep-Backend deutlich mehr als bei tree-sitter.
91
+ */
92
+ needsNode(kind: string): boolean;
93
+ /** Welche Art von Scope oeffnet dieser Knoten — oder keinen (`null`)? */
94
+ scopeKindOf(node: SyntaxNode): ScopeNode["kind"] | null;
95
+ /**
96
+ * Unterdrueckt einen sonst geoeffneten Scope (JS: ein Feld, dessen Wert
97
+ * selbst eine Funktion ist — die Funktion bekommt den Scope, nicht das Feld).
98
+ */
99
+ suppressesScope(node: SyntaxNode): boolean;
100
+ scopeName(node: SyntaxNode): string;
101
+ /**
102
+ * Ein Namensteil, der VOR den Scope-Namen gehoert, aber nicht aus einem
103
+ * Elternscope stammt (WP-237).
104
+ *
105
+ * Gos Methoden haengen nicht in ihrem Typ, sondern tragen ihn als Feld:
106
+ * `func (a *A) Run()` ist ein Geschwister von `type A struct{}`, kein Kind.
107
+ * Ohne diesen Zusatz heissen `(*A).Run` und `(*B).Run` beide `Run`, und der
108
+ * Symbolgraph haelt zwei verschiedene Methoden fuer dieselbe — eine
109
+ * Impact-Analyse auf einer Go-Codebasis waere damit schlicht falsch.
110
+ *
111
+ * Rueckgabe `undefined` heisst: dieser Knoten braucht keinen Zusatz.
112
+ */
113
+ scopeQualifier?(node: SyntaxNode): string | undefined;
114
+ scopeSignature(node: SyntaxNode, kind: ScopeNode["kind"], name: string): ScopeSignature;
115
+ docRange(node: SyntaxNode, ctx: FileTextContext): SourceRange | undefined;
116
+ visibility(node: SyntaxNode, name: string): string | undefined;
117
+ exportedNames(node: SyntaxNode, name: string): string[];
118
+ detectDecisionAndNesting(node: SyntaxNode): DecisionDetectionResult;
119
+ /**
120
+ * Importe und Aufrufe dieses Knotens. Schreibt DIREKT in `sink`, statt ein
121
+ * Ergebnisobjekt zu bauen: der Haken laeuft im Walk, und ein Objekt je
122
+ * Aufrufknoten waere reiner Muell fuer den Sammler.
123
+ */
124
+ collectModuleFacts(node: SyntaxNode, kind: string, callerScopeId: string, ctx: FileTextContext, sink: ModuleFactSink): void;
125
+ /**
126
+ * Huellknoten, deren Bytes zum Symbol gehoeren (JS/TS: `export_statement`).
127
+ * Leer, wenn die Sprache keine solche Huelle kennt.
128
+ */
129
+ readonly exportWrapperKinds: ReadonlySet<string>;
130
+ /**
131
+ * Zusaetzliche Kindregionen eines Klassen-artigen Scopes, die selbst keinen
132
+ * Scope oeffnen, aber Inhalt tragen (JS/TS: `static { ... }`). Ohne sie
133
+ * fielen ihre Bytes durch den Mitgliederlauf — spec.md §8.4 verbietet das.
134
+ */
135
+ memberRegions(node: SyntaxNode, parentScopeId: string, ctx: FileTextContext): MemberRegion[];
136
+ }
137
+ /** Eine Region ohne Symbol, wie sie `memberRegions` liefert. */
138
+ export interface MemberRegion {
139
+ range: SourceRange;
140
+ scopeId: string;
141
+ headerText: string;
142
+ }
143
+ /**
144
+ * Ausfuehrungseinheiten (spec.md §16.1) — bei jeder Sprache dieselben drei
145
+ * Arten. Der Dateirahmen ist gesondert ausfuehrbar (`engine.ts`); er kommt hier
146
+ * nie an, weil `scopeKindOf` niemals `"file"` liefert.
147
+ */
148
+ export declare function isExecutableScopeKind(kind: ScopeNode["kind"]): boolean;
149
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Ausfuehrungseinheiten (spec.md §16.1) — bei jeder Sprache dieselben drei
3
+ * Arten. Der Dateirahmen ist gesondert ausfuehrbar (`engine.ts`); er kommt hier
4
+ * nie an, weil `scopeKindOf` niemals `"file"` liefert.
5
+ */
6
+ export function isExecutableScopeKind(kind) {
7
+ return kind === "function" || kind === "method" || kind === "constructor";
8
+ }
9
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/languages/shared/profile.ts"],"names":[],"mappings":"AAgLA;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,aAAa,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { SourceRange } from "@untangle-code/domain";
2
+ import type { SyntaxNode } from "./syntax.js";
3
+ /**
4
+ * Internal (package-private) representation of one symbol scope, built once
5
+ * per parse by `engine.ts#analyze` and then projected into the public
6
+ * `ExtractedSymbol[]` / `SymbolScopeFact[]` / `AstRegion[]` shapes by
7
+ * `extractSymbols.ts`, `complexity.ts` and `chunks.ts` respectively. Keeping
8
+ * ONE tree as the single source of truth guarantees `scopeId`s line up
9
+ * exactly across `extractSymbols`, `computeComplexity` and `extractCalls`,
10
+ * since all three are projections of the same walk.
11
+ */
12
+ export interface ScopeNode {
13
+ scopeId: string;
14
+ /** Adapter-internal kind: superset of ExtractedSymbol.kind plus "file". */
15
+ kind: "file" | "function" | "method" | "constructor" | "class" | "interface" | "type" | "enum" | "namespace" | "property";
16
+ name: string;
17
+ qualifiedName: string;
18
+ parentQualifiedName?: string;
19
+ range: SourceRange;
20
+ docRange?: SourceRange;
21
+ signature?: string;
22
+ normalizedSignature: string;
23
+ exportedNames: string[];
24
+ visibility?: string;
25
+ executable: boolean;
26
+ astHash: string;
27
+ tokenFingerprint: string;
28
+ /** The tree-sitter node whose range/body IS this scope (used only within this package). */
29
+ node: SyntaxNode;
30
+ children: ScopeNode[];
31
+ }
32
+ //# sourceMappingURL=scope-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-model.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/scope-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,EACA,MAAM,GACN,UAAU,GACV,QAAQ,GACR,aAAa,GACb,OAAO,GACP,WAAW,GACX,MAAM,GACN,MAAM,GACN,WAAW,GACX,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,2FAA2F;IAC3F,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scope-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-model.js","sourceRoot":"","sources":["../../../src/languages/shared/scope-model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { SyntaxNode } from "./syntax.js";
2
+ /** Derives the declared or contextually-borrowed name of a scope-opening node. */
3
+ export declare function resolveScopeName(node: SyntaxNode): string;
4
+ /**
5
+ * True when a field's initializer is itself a function-like node: in that
6
+ * case the FIELD does not get its own scope — the function value does,
7
+ * borrowing the field's property name (avoids a redundant doubled
8
+ * `Class.field.field` qualified name for `class C { handler = () => {} }`).
9
+ */
10
+ export declare function fieldDelegatesToFunctionValue(node: SyntaxNode): boolean;
11
+ /** `public`/`private`/`protected` if explicit, `"private"` for a `#name`, else `undefined` (implicit public). */
12
+ export declare function resolveVisibility(node: SyntaxNode, name: string): string | undefined;
13
+ /**
14
+ * Names this declaration exports, per spec.md §8.3 step 2/§14 (best-effort:
15
+ * only direct `export` / `export default` wrapping the declaration itself is
16
+ * recognized — a later `export { name }` clause elsewhere in the file is a
17
+ * documented simplification, see README "Entscheidungen").
18
+ */
19
+ export declare function resolveExportedNames(node: SyntaxNode, name: string): string[];
20
+ //# sourceMappingURL=scope-naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-naming.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/scope-naming.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAsDzD;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAIvE;AAID,iHAAiH;AACjH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7E"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Name/signature/visibility derivation for one scope-opening node.
3
+ *
4
+ * A scope-opening node (function/method/class/interface/type/enum/property,
5
+ * see `node-kinds.ts#SCOPE_OPENING_TYPES`) is either self-naming (its own
6
+ * `name` field) or anonymous, in which case the name is borrowed from the
7
+ * enclosing syntactic context — `const x = () => {}`, `{ key: () => {} }`,
8
+ * `x.y = function () {}`, `export default function () {}`, or a class field
9
+ * initialized with an arrow function (spec.md §8.3 step 3: "Top-Level-Symbole
10
+ * bestimmen").
11
+ */
12
+ import { CLASS_TYPES, FIELD_TYPES, FUNCTION_LIKE_TYPES, METHOD_TYPE } from "./node-kinds.js";
13
+ import { unquote } from "./node-utils.js";
14
+ const ANONYMOUS_NAME = "<anonymous>";
15
+ /** Derives the declared or contextually-borrowed name of a scope-opening node. */
16
+ export function resolveScopeName(node) {
17
+ const ownName = node.childForFieldName("name");
18
+ if (ownName !== null) {
19
+ return ownName.type === "computed_property_name" ? ownName.text : unquote(ownName.text);
20
+ }
21
+ if (FIELD_TYPES.has(node.type)) {
22
+ const property = node.childForFieldName("property");
23
+ if (property !== null)
24
+ return unquote(property.text);
25
+ }
26
+ if (FUNCTION_LIKE_TYPES.has(node.type) ||
27
+ node.type === METHOD_TYPE ||
28
+ CLASS_TYPES.has(node.type)) {
29
+ const parent = node.parent;
30
+ if (parent === null)
31
+ return ANONYMOUS_NAME;
32
+ switch (parent.type) {
33
+ case "variable_declarator": {
34
+ const declaratorName = parent.childForFieldName("name");
35
+ return declaratorName !== null && declaratorName.type === "identifier"
36
+ ? declaratorName.text
37
+ : ANONYMOUS_NAME;
38
+ }
39
+ case "pair":
40
+ case "pair_pattern": {
41
+ const key = parent.childForFieldName("key");
42
+ return key !== null ? unquote(key.text) : ANONYMOUS_NAME;
43
+ }
44
+ case "assignment_expression": {
45
+ const left = parent.childForFieldName("left");
46
+ if (left === null)
47
+ return ANONYMOUS_NAME;
48
+ if (left.type === "identifier")
49
+ return left.text;
50
+ if (left.type === "member_expression") {
51
+ const property = left.childForFieldName("property");
52
+ return property !== null ? property.text : ANONYMOUS_NAME;
53
+ }
54
+ return ANONYMOUS_NAME;
55
+ }
56
+ case "field_definition":
57
+ case "public_field_definition": {
58
+ const property = parent.childForFieldName("property");
59
+ return property !== null ? unquote(property.text) : ANONYMOUS_NAME;
60
+ }
61
+ case "export_statement":
62
+ return "default";
63
+ default:
64
+ return ANONYMOUS_NAME;
65
+ }
66
+ }
67
+ return ANONYMOUS_NAME;
68
+ }
69
+ /**
70
+ * True when a field's initializer is itself a function-like node: in that
71
+ * case the FIELD does not get its own scope — the function value does,
72
+ * borrowing the field's property name (avoids a redundant doubled
73
+ * `Class.field.field` qualified name for `class C { handler = () => {} }`).
74
+ */
75
+ export function fieldDelegatesToFunctionValue(node) {
76
+ if (!FIELD_TYPES.has(node.type))
77
+ return false;
78
+ const value = node.childForFieldName("value");
79
+ return value !== null && (FUNCTION_LIKE_TYPES.has(value.type) || value.type === "class");
80
+ }
81
+ const VISIBILITY_MODIFIER_TYPE = "accessibility_modifier";
82
+ /** `public`/`private`/`protected` if explicit, `"private"` for a `#name`, else `undefined` (implicit public). */
83
+ export function resolveVisibility(node, name) {
84
+ const modifier = node.children.find((child) => child.type === VISIBILITY_MODIFIER_TYPE);
85
+ if (modifier !== undefined)
86
+ return modifier.text;
87
+ if (name.startsWith("#"))
88
+ return "private";
89
+ return undefined;
90
+ }
91
+ /**
92
+ * Names this declaration exports, per spec.md §8.3 step 2/§14 (best-effort:
93
+ * only direct `export` / `export default` wrapping the declaration itself is
94
+ * recognized — a later `export { name }` clause elsewhere in the file is a
95
+ * documented simplification, see README "Entscheidungen").
96
+ */
97
+ export function resolveExportedNames(node, name) {
98
+ let current = node;
99
+ // Walk up through wrapping declarator/declaration nodes that carry no name of their own.
100
+ while (current !== null) {
101
+ const parent = current.parent;
102
+ if (parent === null)
103
+ return [];
104
+ if (parent.type === "export_statement") {
105
+ const hasDefault = parent.children.some((child) => child.type === "default");
106
+ return [hasDefault ? "default" : name];
107
+ }
108
+ if (parent.type === "variable_declarator" ||
109
+ parent.type === "lexical_declaration" ||
110
+ parent.type === "variable_declaration") {
111
+ current = parent;
112
+ continue;
113
+ }
114
+ return [];
115
+ }
116
+ return [];
117
+ }
118
+ //# sourceMappingURL=scope-naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-naming.js","sourceRoot":"","sources":["../../../src/languages/shared/scope-naming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { SyntaxNode } from "./syntax.js";
2
+ interface FunctionSignature {
3
+ raw: string;
4
+ normalized: string;
5
+ }
6
+ /** Builds the signature for a function/arrow/method-shaped scope node. */
7
+ export declare function buildFunctionSignature(node: SyntaxNode, name: string): FunctionSignature;
8
+ /** Builds the signature for a class/interface/enum/type-alias/namespace scope node. */
9
+ export declare function buildHeaderSignature(node: SyntaxNode): FunctionSignature;
10
+ /** Builds the signature for a class field / property scope node. */
11
+ export declare function buildPropertySignature(node: SyntaxNode, name: string): FunctionSignature;
12
+ export declare function isFunctionLikeScope(nodeType: string): boolean;
13
+ export {};
14
+ //# sourceMappingURL=scope-signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-signature.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/scope-signature.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA+B9C,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAgCxF;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAOxE;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CASxF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE7D"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Signature text composition per scope kind (see `signature.ts` for the
3
+ * normalization primitives this builds on, and its doc comment for the
4
+ * normative whitespace/defaults/optional-marker/type-annotation rules).
5
+ */
6
+ import { FUNCTION_LIKE_TYPES, METHOD_TYPE } from "./node-kinds.js";
7
+ import { normalizeHeaderText, normalizeParameterList, normalizeReturnType, normalizeTypeParameterList, } from "./signature.js";
8
+ const MODIFIER_ORDER = [
9
+ "accessibility_modifier",
10
+ "static",
11
+ "abstract",
12
+ "override_modifier",
13
+ "readonly",
14
+ "declare",
15
+ "async",
16
+ ];
17
+ function collectModifiers(node) {
18
+ const found = [];
19
+ for (const modifierType of MODIFIER_ORDER) {
20
+ const child = node.children.find((c) => c.type === modifierType);
21
+ if (child !== undefined)
22
+ found.push(child.text);
23
+ }
24
+ return found;
25
+ }
26
+ function isGenerator(node) {
27
+ return node.children.some((child) => child.type === "*");
28
+ }
29
+ function accessorKeyword(node) {
30
+ const hasGet = node.children.some((child) => child.type === "get");
31
+ const hasSet = node.children.some((child) => child.type === "set");
32
+ return hasGet ? "get" : hasSet ? "set" : undefined;
33
+ }
34
+ /** Builds the signature for a function/arrow/method-shaped scope node. */
35
+ export function buildFunctionSignature(node, name) {
36
+ const typeParamsNode = node.childForFieldName("type_parameters");
37
+ const parametersNode = node.childForFieldName("parameters");
38
+ const returnTypeNode = node.childForFieldName("return_type");
39
+ const modifiers = collectModifiers(node);
40
+ const accessor = accessorKeyword(node);
41
+ const generatorMarker = isGenerator(node) ? "*" : "";
42
+ const headParts = [...modifiers];
43
+ if (accessor !== undefined)
44
+ headParts.push(accessor);
45
+ const head = headParts.length > 0
46
+ ? `${headParts.join(" ")} ${generatorMarker}${name}`
47
+ : `${generatorMarker}${name}`;
48
+ const rawTypeParams = typeParamsNode?.text;
49
+ const rawParams = parametersNode?.text ??
50
+ (node.childForFieldName("parameter")?.text !== undefined
51
+ ? `(${node.childForFieldName("parameter")?.text})`
52
+ : "()");
53
+ const rawReturnType = returnTypeNode?.text;
54
+ const raw = `${head}${rawTypeParams ?? ""}${rawParams}${rawReturnType !== undefined ? rawReturnType : ""}`;
55
+ const normalizedTypeParams = normalizeTypeParameterList(rawTypeParams);
56
+ const normalizedParams = normalizeParameterList(rawParams);
57
+ const normalizedReturnType = normalizeReturnType(rawReturnType);
58
+ const normalized = `${head}${normalizedTypeParams}${normalizedParams}${normalizedReturnType}`;
59
+ return { raw, normalized };
60
+ }
61
+ /** Builds the signature for a class/interface/enum/type-alias/namespace scope node. */
62
+ export function buildHeaderSignature(node) {
63
+ const bodyNode = node.childForFieldName("body");
64
+ const raw = bodyNode !== null
65
+ ? node.text.slice(0, bodyNode.startIndex - node.startIndex).trimEnd()
66
+ : node.text.replace(/;\s*$/, "");
67
+ return { raw, normalized: normalizeHeaderText(raw) };
68
+ }
69
+ /** Builds the signature for a class field / property scope node. */
70
+ export function buildPropertySignature(node, name) {
71
+ const typeNode = node.childForFieldName("type");
72
+ const modifiers = collectModifiers(node);
73
+ const head = modifiers.length > 0 ? `${modifiers.join(" ")} ${name}` : name;
74
+ const rawType = typeNode?.text;
75
+ const raw = `${head}${rawType ?? ""}`;
76
+ const normalized = rawType !== undefined ? `${head}${normalizeReturnType(rawType)}` : normalizeHeaderText(head);
77
+ return { raw, normalized };
78
+ }
79
+ export function isFunctionLikeScope(nodeType) {
80
+ return FUNCTION_LIKE_TYPES.has(nodeType) || nodeType === METHOD_TYPE;
81
+ }
82
+ //# sourceMappingURL=scope-signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-signature.js","sourceRoot":"","sources":["../../../src/languages/shared/scope-signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Signature text normalization for the JS/TS grammar family.
3
+ *
4
+ * Normative requirement (WP-06 task, spec.md §5.5): `normalizedSignature`
5
+ * feeds `buildSymbolId`, so it MUST be stable across:
6
+ *
7
+ * 1. Whitespace — any run of spaces/tabs/newlines collapses to a single
8
+ * space; spacing around `,`, `:`, `(`, `)`, `<`, `>`, `?:` is
9
+ * canonicalized rather than preserved verbatim.
10
+ * 2. Default values — `= <expr>` parameter/type-parameter initializers are
11
+ * STRIPPED. Rationale: giving a parameter a default value is (mostly) a
12
+ * call-site convenience, not a new overload; keeping it in the identity
13
+ * signature would needlessly change a symbol's id on a body-only-feeling
14
+ * edit. The optional marker (see next point) already captures "callers
15
+ * may omit this argument".
16
+ * 3. Optional markers — TypeScript's trailing `?` on a parameter name is
17
+ * KEPT and canonicalized to sit directly against the following `:`
18
+ * (`a ?:string` and `a?: string` both become `a?: string`) because it
19
+ * changes the call contract independent of any default value.
20
+ * 4. Type annotations — kept verbatim (modulo the same whitespace rules)
21
+ * because they are part of the observable contract.
22
+ *
23
+ * Known limitation (documented, not a defect): default-value stripping and
24
+ * top-level-comma splitting use a bracket-DEPTH scanner, not a full
25
+ * expression parser. A `<` used as a less-than operator inside a default
26
+ * expression (e.g. `(a = b < c ? 1 : 2)`) is misread as a generic open
27
+ * bracket and can throw off depth tracking for the rest of that one
28
+ * parameter. This is vanishingly rare in default-value position and is
29
+ * accepted as a WP-06 scoping decision (see README "Entscheidungen").
30
+ */
31
+ /** Collapses whitespace and canonicalizes spacing around common punctuation. */
32
+ export declare function normalizeSpacing(text: string): string;
33
+ /**
34
+ * Splits `content` on top-level occurrences of `separator` (depth 0 with
35
+ * respect to `(`, `[`, `{`, `<`/`>`). Used to split parameter lists and
36
+ * type-parameter lists without being confused by nested generics/objects.
37
+ */
38
+ export declare function splitTopLevel(content: string, separator: string): string[];
39
+ /** Strips a single parameter's/type-parameter's default value (`= <expr>`), keeping any `?`/type annotation before it. */
40
+ export declare function stripDefaultValue(entry: string): string;
41
+ /**
42
+ * Normalizes a formal-parameter-list text (including its outer parens),
43
+ * e.g. `(a: number = 1, b ?: string)` -> `(a: number, b?: string)`.
44
+ */
45
+ export declare function normalizeParameterList(paramsText: string): string;
46
+ /**
47
+ * Normalizes a type-parameter list text (including its outer `<>`), e.g.
48
+ * `<T extends object = {}, U>` -> `<T extends object, U>`.
49
+ */
50
+ export declare function normalizeTypeParameterList(typeParamsText: string | undefined): string;
51
+ /** Normalizes a return-type annotation text (e.g. ` : Promise<void> ` -> `: Promise<void>`). */
52
+ export declare function normalizeReturnType(returnTypeText: string | undefined): string;
53
+ /** Normalizes an arbitrary header text (class/interface/type/enum declarations). */
54
+ export declare function normalizeHeaderText(headerText: string): string;
55
+ //# sourceMappingURL=signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/signature.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAarD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB1E;AA6BD,0HAA0H;AAC1H,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CASjE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWrF;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI9E;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D"}