@renovatebot/good-enough-parser 1.1.24

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 (331) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/dist/cjs/index.d.ts +5 -0
  4. package/dist/cjs/index.d.ts.map +1 -0
  5. package/dist/cjs/index.js +8 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/lang/groovy.d.ts +7 -0
  8. package/dist/cjs/lang/groovy.d.ts.map +1 -0
  9. package/dist/cjs/lang/groovy.js +84 -0
  10. package/dist/cjs/lang/groovy.js.map +1 -0
  11. package/dist/cjs/lang/index.d.ts +21 -0
  12. package/dist/cjs/lang/index.d.ts.map +1 -0
  13. package/dist/cjs/lang/index.js +57 -0
  14. package/dist/cjs/lang/index.js.map +1 -0
  15. package/dist/cjs/lang/python.d.ts +7 -0
  16. package/dist/cjs/lang/python.d.ts.map +1 -0
  17. package/dist/cjs/lang/python.js +74 -0
  18. package/dist/cjs/lang/python.js.map +1 -0
  19. package/dist/cjs/lang/scala.d.ts +7 -0
  20. package/dist/cjs/lang/scala.d.ts.map +1 -0
  21. package/dist/cjs/lang/scala.js +72 -0
  22. package/dist/cjs/lang/scala.js.map +1 -0
  23. package/dist/cjs/lang/starlark.d.ts +7 -0
  24. package/dist/cjs/lang/starlark.d.ts.map +1 -0
  25. package/dist/cjs/lang/starlark.js +59 -0
  26. package/dist/cjs/lang/starlark.js.map +1 -0
  27. package/dist/cjs/lang/types.d.ts +7 -0
  28. package/dist/cjs/lang/types.d.ts.map +1 -0
  29. package/dist/cjs/lang/types.js +3 -0
  30. package/dist/cjs/lang/types.js.map +1 -0
  31. package/dist/cjs/lexer/bracket.d.ts +7 -0
  32. package/dist/cjs/lexer/bracket.d.ts.map +1 -0
  33. package/dist/cjs/lexer/bracket.js +58 -0
  34. package/dist/cjs/lexer/bracket.js.map +1 -0
  35. package/dist/cjs/lexer/comment.d.ts +4 -0
  36. package/dist/cjs/lexer/comment.d.ts.map +1 -0
  37. package/dist/cjs/lexer/comment.js +45 -0
  38. package/dist/cjs/lexer/comment.js.map +1 -0
  39. package/dist/cjs/lexer/index.d.ts +6 -0
  40. package/dist/cjs/lexer/index.d.ts.map +1 -0
  41. package/dist/cjs/lexer/index.js +156 -0
  42. package/dist/cjs/lexer/index.js.map +1 -0
  43. package/dist/cjs/lexer/number.d.ts +3 -0
  44. package/dist/cjs/lexer/number.d.ts.map +1 -0
  45. package/dist/cjs/lexer/number.js +19 -0
  46. package/dist/cjs/lexer/number.js.map +1 -0
  47. package/dist/cjs/lexer/operator.d.ts +3 -0
  48. package/dist/cjs/lexer/operator.d.ts.map +1 -0
  49. package/dist/cjs/lexer/operator.js +25 -0
  50. package/dist/cjs/lexer/operator.js.map +1 -0
  51. package/dist/cjs/lexer/rules.d.ts +5 -0
  52. package/dist/cjs/lexer/rules.d.ts.map +1 -0
  53. package/dist/cjs/lexer/rules.js +75 -0
  54. package/dist/cjs/lexer/rules.js.map +1 -0
  55. package/dist/cjs/lexer/string.d.ts +3 -0
  56. package/dist/cjs/lexer/string.d.ts.map +1 -0
  57. package/dist/cjs/lexer/string.js +182 -0
  58. package/dist/cjs/lexer/string.js.map +1 -0
  59. package/dist/cjs/lexer/symbol.d.ts +3 -0
  60. package/dist/cjs/lexer/symbol.d.ts.map +1 -0
  61. package/dist/cjs/lexer/symbol.js +19 -0
  62. package/dist/cjs/lexer/symbol.js.map +1 -0
  63. package/dist/cjs/lexer/token.d.ts +4 -0
  64. package/dist/cjs/lexer/token.d.ts.map +1 -0
  65. package/dist/cjs/lexer/token.js +65 -0
  66. package/dist/cjs/lexer/token.js.map +1 -0
  67. package/dist/cjs/lexer/types.d.ts +143 -0
  68. package/dist/cjs/lexer/types.d.ts.map +1 -0
  69. package/dist/cjs/lexer/types.js +3 -0
  70. package/dist/cjs/lexer/types.js.map +1 -0
  71. package/dist/cjs/parser/cursor.d.ts +3 -0
  72. package/dist/cjs/parser/cursor.d.ts.map +1 -0
  73. package/dist/cjs/parser/cursor.js +14 -0
  74. package/dist/cjs/parser/cursor.js.map +1 -0
  75. package/dist/cjs/parser/index.d.ts +4 -0
  76. package/dist/cjs/parser/index.d.ts.map +1 -0
  77. package/dist/cjs/parser/index.js +20 -0
  78. package/dist/cjs/parser/index.js.map +1 -0
  79. package/dist/cjs/parser/tree.d.ts +5 -0
  80. package/dist/cjs/parser/tree.d.ts.map +1 -0
  81. package/dist/cjs/parser/tree.js +247 -0
  82. package/dist/cjs/parser/tree.js.map +1 -0
  83. package/dist/cjs/parser/types.d.ts +34 -0
  84. package/dist/cjs/parser/types.d.ts.map +1 -0
  85. package/dist/cjs/parser/types.js +3 -0
  86. package/dist/cjs/parser/types.js.map +1 -0
  87. package/dist/cjs/query/builder.d.ts +145 -0
  88. package/dist/cjs/query/builder.d.ts.map +1 -0
  89. package/dist/cjs/query/builder.js +333 -0
  90. package/dist/cjs/query/builder.js.map +1 -0
  91. package/dist/cjs/query/handler.d.ts +3 -0
  92. package/dist/cjs/query/handler.d.ts.map +1 -0
  93. package/dist/cjs/query/handler.js +11 -0
  94. package/dist/cjs/query/handler.js.map +1 -0
  95. package/dist/cjs/query/index.d.ts +3 -0
  96. package/dist/cjs/query/index.d.ts.map +1 -0
  97. package/dist/cjs/query/index.js +33 -0
  98. package/dist/cjs/query/index.js.map +1 -0
  99. package/dist/cjs/query/matchers/abstract-matcher.d.ts +10 -0
  100. package/dist/cjs/query/matchers/abstract-matcher.d.ts.map +1 -0
  101. package/dist/cjs/query/matchers/abstract-matcher.js +37 -0
  102. package/dist/cjs/query/matchers/abstract-matcher.js.map +1 -0
  103. package/dist/cjs/query/matchers/alt-matcher.d.ts +11 -0
  104. package/dist/cjs/query/matchers/alt-matcher.d.ts.map +1 -0
  105. package/dist/cjs/query/matchers/alt-matcher.js +34 -0
  106. package/dist/cjs/query/matchers/alt-matcher.js.map +1 -0
  107. package/dist/cjs/query/matchers/anchor-matcher.d.ts +18 -0
  108. package/dist/cjs/query/matchers/anchor-matcher.d.ts.map +1 -0
  109. package/dist/cjs/query/matchers/anchor-matcher.js +51 -0
  110. package/dist/cjs/query/matchers/anchor-matcher.js.map +1 -0
  111. package/dist/cjs/query/matchers/comment-matcher.d.ts +11 -0
  112. package/dist/cjs/query/matchers/comment-matcher.d.ts.map +1 -0
  113. package/dist/cjs/query/matchers/comment-matcher.js +40 -0
  114. package/dist/cjs/query/matchers/comment-matcher.js.map +1 -0
  115. package/dist/cjs/query/matchers/index.d.ts +7 -0
  116. package/dist/cjs/query/matchers/index.d.ts.map +1 -0
  117. package/dist/cjs/query/matchers/index.js +23 -0
  118. package/dist/cjs/query/matchers/index.js.map +1 -0
  119. package/dist/cjs/query/matchers/many-matcher.d.ts +14 -0
  120. package/dist/cjs/query/matchers/many-matcher.d.ts.map +1 -0
  121. package/dist/cjs/query/matchers/many-matcher.js +62 -0
  122. package/dist/cjs/query/matchers/many-matcher.js.map +1 -0
  123. package/dist/cjs/query/matchers/num-matcher.d.ts +9 -0
  124. package/dist/cjs/query/matchers/num-matcher.d.ts.map +1 -0
  125. package/dist/cjs/query/matchers/num-matcher.js +35 -0
  126. package/dist/cjs/query/matchers/num-matcher.js.map +1 -0
  127. package/dist/cjs/query/matchers/op-matcher.d.ts +9 -0
  128. package/dist/cjs/query/matchers/op-matcher.d.ts.map +1 -0
  129. package/dist/cjs/query/matchers/op-matcher.js +35 -0
  130. package/dist/cjs/query/matchers/op-matcher.js.map +1 -0
  131. package/dist/cjs/query/matchers/seq-matcher.d.ts +15 -0
  132. package/dist/cjs/query/matchers/seq-matcher.d.ts.map +1 -0
  133. package/dist/cjs/query/matchers/seq-matcher.js +77 -0
  134. package/dist/cjs/query/matchers/seq-matcher.js.map +1 -0
  135. package/dist/cjs/query/matchers/str-matcher.d.ts +39 -0
  136. package/dist/cjs/query/matchers/str-matcher.d.ts.map +1 -0
  137. package/dist/cjs/query/matchers/str-matcher.js +109 -0
  138. package/dist/cjs/query/matchers/str-matcher.js.map +1 -0
  139. package/dist/cjs/query/matchers/sym-matcher.d.ts +9 -0
  140. package/dist/cjs/query/matchers/sym-matcher.d.ts.map +1 -0
  141. package/dist/cjs/query/matchers/sym-matcher.js +35 -0
  142. package/dist/cjs/query/matchers/sym-matcher.js.map +1 -0
  143. package/dist/cjs/query/matchers/tree-matcher.d.ts +24 -0
  144. package/dist/cjs/query/matchers/tree-matcher.d.ts.map +1 -0
  145. package/dist/cjs/query/matchers/tree-matcher.js +122 -0
  146. package/dist/cjs/query/matchers/tree-matcher.js.map +1 -0
  147. package/dist/cjs/query/options.d.ts +11 -0
  148. package/dist/cjs/query/options.d.ts.map +1 -0
  149. package/dist/cjs/query/options.js +150 -0
  150. package/dist/cjs/query/options.js.map +1 -0
  151. package/dist/cjs/query/regex.d.ts +2 -0
  152. package/dist/cjs/query/regex.d.ts.map +1 -0
  153. package/dist/cjs/query/regex.js +14 -0
  154. package/dist/cjs/query/regex.js.map +1 -0
  155. package/dist/cjs/query/types.d.ts +101 -0
  156. package/dist/cjs/query/types.d.ts.map +1 -0
  157. package/dist/cjs/query/types.js +3 -0
  158. package/dist/cjs/query/types.js.map +1 -0
  159. package/dist/cjs/util/clone.d.ts +2 -0
  160. package/dist/cjs/util/clone.d.ts.map +1 -0
  161. package/dist/cjs/util/clone.js +6 -0
  162. package/dist/cjs/util/clone.js.map +1 -0
  163. package/dist/cjs/util/regex.d.ts +2 -0
  164. package/dist/cjs/util/regex.d.ts.map +1 -0
  165. package/dist/cjs/util/regex.js +8 -0
  166. package/dist/cjs/util/regex.js.map +1 -0
  167. package/dist/esm/index.d.ts +5 -0
  168. package/dist/esm/index.d.ts.map +1 -0
  169. package/dist/esm/index.js +9 -0
  170. package/dist/esm/index.js.map +1 -0
  171. package/dist/esm/lang/groovy.d.ts +7 -0
  172. package/dist/esm/lang/groovy.d.ts.map +1 -0
  173. package/dist/esm/lang/groovy.js +81 -0
  174. package/dist/esm/lang/groovy.js.map +1 -0
  175. package/dist/esm/lang/index.d.ts +21 -0
  176. package/dist/esm/lang/index.d.ts.map +1 -0
  177. package/dist/esm/lang/index.js +38 -0
  178. package/dist/esm/lang/index.js.map +1 -0
  179. package/dist/esm/lang/python.d.ts +7 -0
  180. package/dist/esm/lang/python.d.ts.map +1 -0
  181. package/dist/esm/lang/python.js +71 -0
  182. package/dist/esm/lang/python.js.map +1 -0
  183. package/dist/esm/lang/scala.d.ts +7 -0
  184. package/dist/esm/lang/scala.d.ts.map +1 -0
  185. package/dist/esm/lang/scala.js +69 -0
  186. package/dist/esm/lang/scala.js.map +1 -0
  187. package/dist/esm/lang/starlark.d.ts +7 -0
  188. package/dist/esm/lang/starlark.d.ts.map +1 -0
  189. package/dist/esm/lang/starlark.js +56 -0
  190. package/dist/esm/lang/starlark.js.map +1 -0
  191. package/dist/esm/lang/types.d.ts +7 -0
  192. package/dist/esm/lang/types.d.ts.map +1 -0
  193. package/dist/esm/lang/types.js +2 -0
  194. package/dist/esm/lang/types.js.map +1 -0
  195. package/dist/esm/lexer/bracket.d.ts +7 -0
  196. package/dist/esm/lexer/bracket.d.ts.map +1 -0
  197. package/dist/esm/lexer/bracket.js +50 -0
  198. package/dist/esm/lexer/bracket.js.map +1 -0
  199. package/dist/esm/lexer/comment.d.ts +4 -0
  200. package/dist/esm/lexer/comment.d.ts.map +1 -0
  201. package/dist/esm/lexer/comment.js +40 -0
  202. package/dist/esm/lexer/comment.js.map +1 -0
  203. package/dist/esm/lexer/index.d.ts +6 -0
  204. package/dist/esm/lexer/index.d.ts.map +1 -0
  205. package/dist/esm/lexer/index.js +137 -0
  206. package/dist/esm/lexer/index.js.map +1 -0
  207. package/dist/esm/lexer/number.d.ts +3 -0
  208. package/dist/esm/lexer/number.d.ts.map +1 -0
  209. package/dist/esm/lexer/number.js +15 -0
  210. package/dist/esm/lexer/number.js.map +1 -0
  211. package/dist/esm/lexer/operator.d.ts +3 -0
  212. package/dist/esm/lexer/operator.d.ts.map +1 -0
  213. package/dist/esm/lexer/operator.js +21 -0
  214. package/dist/esm/lexer/operator.js.map +1 -0
  215. package/dist/esm/lexer/rules.d.ts +5 -0
  216. package/dist/esm/lexer/rules.d.ts.map +1 -0
  217. package/dist/esm/lexer/rules.js +70 -0
  218. package/dist/esm/lexer/rules.js.map +1 -0
  219. package/dist/esm/lexer/string.d.ts +3 -0
  220. package/dist/esm/lexer/string.d.ts.map +1 -0
  221. package/dist/esm/lexer/string.js +178 -0
  222. package/dist/esm/lexer/string.js.map +1 -0
  223. package/dist/esm/lexer/symbol.d.ts +3 -0
  224. package/dist/esm/lexer/symbol.d.ts.map +1 -0
  225. package/dist/esm/lexer/symbol.js +15 -0
  226. package/dist/esm/lexer/symbol.js.map +1 -0
  227. package/dist/esm/lexer/token.d.ts +4 -0
  228. package/dist/esm/lexer/token.d.ts.map +1 -0
  229. package/dist/esm/lexer/token.js +61 -0
  230. package/dist/esm/lexer/token.js.map +1 -0
  231. package/dist/esm/lexer/types.d.ts +143 -0
  232. package/dist/esm/lexer/types.d.ts.map +1 -0
  233. package/dist/esm/lexer/types.js +2 -0
  234. package/dist/esm/lexer/types.js.map +1 -0
  235. package/dist/esm/parser/cursor.d.ts +3 -0
  236. package/dist/esm/parser/cursor.d.ts.map +1 -0
  237. package/dist/esm/parser/cursor.js +10 -0
  238. package/dist/esm/parser/cursor.js.map +1 -0
  239. package/dist/esm/parser/index.d.ts +4 -0
  240. package/dist/esm/parser/index.d.ts.map +1 -0
  241. package/dist/esm/parser/index.js +4 -0
  242. package/dist/esm/parser/index.js.map +1 -0
  243. package/dist/esm/parser/tree.d.ts +5 -0
  244. package/dist/esm/parser/tree.d.ts.map +1 -0
  245. package/dist/esm/parser/tree.js +242 -0
  246. package/dist/esm/parser/tree.js.map +1 -0
  247. package/dist/esm/parser/types.d.ts +34 -0
  248. package/dist/esm/parser/types.d.ts.map +1 -0
  249. package/dist/esm/parser/types.js +2 -0
  250. package/dist/esm/parser/types.js.map +1 -0
  251. package/dist/esm/query/builder.d.ts +145 -0
  252. package/dist/esm/query/builder.d.ts.map +1 -0
  253. package/dist/esm/query/builder.js +305 -0
  254. package/dist/esm/query/builder.js.map +1 -0
  255. package/dist/esm/query/handler.d.ts +3 -0
  256. package/dist/esm/query/handler.d.ts.map +1 -0
  257. package/dist/esm/query/handler.js +7 -0
  258. package/dist/esm/query/handler.js.map +1 -0
  259. package/dist/esm/query/index.d.ts +3 -0
  260. package/dist/esm/query/index.d.ts.map +1 -0
  261. package/dist/esm/query/index.js +3 -0
  262. package/dist/esm/query/index.js.map +1 -0
  263. package/dist/esm/query/matchers/abstract-matcher.d.ts +10 -0
  264. package/dist/esm/query/matchers/abstract-matcher.d.ts.map +1 -0
  265. package/dist/esm/query/matchers/abstract-matcher.js +33 -0
  266. package/dist/esm/query/matchers/abstract-matcher.js.map +1 -0
  267. package/dist/esm/query/matchers/alt-matcher.d.ts +11 -0
  268. package/dist/esm/query/matchers/alt-matcher.d.ts.map +1 -0
  269. package/dist/esm/query/matchers/alt-matcher.js +30 -0
  270. package/dist/esm/query/matchers/alt-matcher.js.map +1 -0
  271. package/dist/esm/query/matchers/anchor-matcher.d.ts +18 -0
  272. package/dist/esm/query/matchers/anchor-matcher.d.ts.map +1 -0
  273. package/dist/esm/query/matchers/anchor-matcher.js +45 -0
  274. package/dist/esm/query/matchers/anchor-matcher.js.map +1 -0
  275. package/dist/esm/query/matchers/comment-matcher.d.ts +11 -0
  276. package/dist/esm/query/matchers/comment-matcher.d.ts.map +1 -0
  277. package/dist/esm/query/matchers/comment-matcher.js +36 -0
  278. package/dist/esm/query/matchers/comment-matcher.js.map +1 -0
  279. package/dist/esm/query/matchers/index.d.ts +7 -0
  280. package/dist/esm/query/matchers/index.d.ts.map +1 -0
  281. package/dist/esm/query/matchers/index.js +7 -0
  282. package/dist/esm/query/matchers/index.js.map +1 -0
  283. package/dist/esm/query/matchers/many-matcher.d.ts +14 -0
  284. package/dist/esm/query/matchers/many-matcher.d.ts.map +1 -0
  285. package/dist/esm/query/matchers/many-matcher.js +58 -0
  286. package/dist/esm/query/matchers/many-matcher.js.map +1 -0
  287. package/dist/esm/query/matchers/num-matcher.d.ts +9 -0
  288. package/dist/esm/query/matchers/num-matcher.d.ts.map +1 -0
  289. package/dist/esm/query/matchers/num-matcher.js +31 -0
  290. package/dist/esm/query/matchers/num-matcher.js.map +1 -0
  291. package/dist/esm/query/matchers/op-matcher.d.ts +9 -0
  292. package/dist/esm/query/matchers/op-matcher.d.ts.map +1 -0
  293. package/dist/esm/query/matchers/op-matcher.js +31 -0
  294. package/dist/esm/query/matchers/op-matcher.js.map +1 -0
  295. package/dist/esm/query/matchers/seq-matcher.d.ts +15 -0
  296. package/dist/esm/query/matchers/seq-matcher.d.ts.map +1 -0
  297. package/dist/esm/query/matchers/seq-matcher.js +73 -0
  298. package/dist/esm/query/matchers/seq-matcher.js.map +1 -0
  299. package/dist/esm/query/matchers/str-matcher.d.ts +39 -0
  300. package/dist/esm/query/matchers/str-matcher.d.ts.map +1 -0
  301. package/dist/esm/query/matchers/str-matcher.js +103 -0
  302. package/dist/esm/query/matchers/str-matcher.js.map +1 -0
  303. package/dist/esm/query/matchers/sym-matcher.d.ts +9 -0
  304. package/dist/esm/query/matchers/sym-matcher.d.ts.map +1 -0
  305. package/dist/esm/query/matchers/sym-matcher.js +31 -0
  306. package/dist/esm/query/matchers/sym-matcher.js.map +1 -0
  307. package/dist/esm/query/matchers/tree-matcher.d.ts +24 -0
  308. package/dist/esm/query/matchers/tree-matcher.d.ts.map +1 -0
  309. package/dist/esm/query/matchers/tree-matcher.js +118 -0
  310. package/dist/esm/query/matchers/tree-matcher.js.map +1 -0
  311. package/dist/esm/query/options.d.ts +11 -0
  312. package/dist/esm/query/options.d.ts.map +1 -0
  313. package/dist/esm/query/options.js +140 -0
  314. package/dist/esm/query/options.js.map +1 -0
  315. package/dist/esm/query/regex.d.ts +2 -0
  316. package/dist/esm/query/regex.d.ts.map +1 -0
  317. package/dist/esm/query/regex.js +10 -0
  318. package/dist/esm/query/regex.js.map +1 -0
  319. package/dist/esm/query/types.d.ts +101 -0
  320. package/dist/esm/query/types.d.ts.map +1 -0
  321. package/dist/esm/query/types.js +2 -0
  322. package/dist/esm/query/types.js.map +1 -0
  323. package/dist/esm/util/clone.d.ts +2 -0
  324. package/dist/esm/util/clone.d.ts.map +1 -0
  325. package/dist/esm/util/clone.js +2 -0
  326. package/dist/esm/util/clone.js.map +1 -0
  327. package/dist/esm/util/regex.d.ts +2 -0
  328. package/dist/esm/util/regex.d.ts.map +1 -0
  329. package/dist/esm/util/regex.js +4 -0
  330. package/dist/esm/util/regex.js.map +1 -0
  331. package/package.json +76 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Sergei Zharinov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # Good enough parser
2
+
3
+ TypeScript library aiming to fill the gap between usage of ad-hoc regular expressions and generation of complete grammar descriptions.
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/zharinov/good-enough-parser/blob/main/LICENSE)
6
+ [![Trunk](https://github.com/zharinov/good-enough-parser/actions/workflows/trunk.yml/badge.svg)](https://github.com/zharinov/good-enough-parser/actions/workflows/trunk.yml)
7
+
8
+ ## Motivation
9
+
10
+ While most programming languages provide parser tooling for the language they're written in, sometimes we need a uniform way to deal with the variety of languages from JavaScript (or TypeScript).
11
+
12
+ ### Goals
13
+
14
+ - _Be good enough for source code written well enough._
15
+ - Go much further than is possible with regular expressions.
16
+ - Respect location info. Once something interesting is found, it can be located in the source test via offset info. Once something is written, it should not affect the whole document formatting.
17
+ - Incorporate poorly recognized fragments into the output and continue parsing.
18
+ - Expressive API which helps you focus on syntactic structure, not the space or quote variations.
19
+ - Allow to define a language of interest quickly. Provide definitions for popular languages out-of-the-box.
20
+
21
+ ### Non-goals
22
+
23
+ - Catch all syntactic edge-cases
24
+ - Compete with parsing tools with strict grammar definitions
25
+
26
+ ## Details
27
+
28
+ The library is divided into multiple levels of abstraction, from the lowest to the highest one:
29
+
30
+ ### [`lib/lexer`](https://github.com/zharinov/good-enough-parser/tree/main/lib/lexer)
31
+
32
+ Configures the [moo](https://github.com/no-context/moo) tokenizer for specific language features such as:
33
+
34
+ - Brackets: `()`, `{}`, `[]`, etc
35
+ - Strings: `'foo'`, `"bar"`, `"""baz"""`, etc
36
+ - Templates: `${foo}`, `{{bar}}`, `$(baz)`, etc
37
+ - Single-line comments: `#...`, `//...`, etc
38
+ - Multi-line comments: `/*...*/`, `(*...*)`, etc
39
+ - Identifiers: `foo`, `Bar`, `_baz123`, etc
40
+ - Line joins: if the line ends with `\`, the next one will be treated as its continuation
41
+
42
+ Refer to the `LexerConfig` interface for more details.
43
+ Also check out [our usage example for Python](https://github.com/zharinov/good-enough-parser/blob/main/lib/lang/python.ts).
44
+
45
+ ### [`lib/parser`](https://github.com/zharinov/good-enough-parser/tree/main/lib/tree)
46
+
47
+ This layer is responsible for transforming the token sequence to the nested tree with the tokens as leafs.
48
+ Internally, we're using functional [zipper](<https://en.wikipedia.org/wiki/Zipper_(data_structure)>) data structure to perform queries on the tree.
49
+
50
+ ### [`lib/query`](https://github.com/zharinov/good-enough-parser/tree/main/lib/query)
51
+
52
+ To understand `parser-utils` queries, it's useful to keep in mind the principle of how regular expressions work.
53
+ Each query represents sequence of adjacent tokens and tree elements.
54
+
55
+ For example, consider following query:
56
+
57
+ ```ts
58
+ q.num('2').op('+').num('2').op('=').num('4');
59
+ ```
60
+
61
+ It will match on the following fragments `2 + 2 = 4` or `2+2=4`, but won't match on `2+2==4` nor `4=2+2`.
62
+
63
+ Once brackets are defined, their inner contents will be wrapped into a tree node.
64
+ It's possible to query tree nodes:
65
+
66
+ ```ts
67
+ q.tree({
68
+ search: q.num('2').op('+').num('2'),
69
+ })
70
+ .op('=')
71
+ .num('4');
72
+ ```
73
+
74
+ The above query will match these strings:
75
+
76
+ - `(2 + 2) = 4`
77
+ - `[2 + 2] = 4`
78
+ - `(1 + 2 + 2 - 1) = 4`
79
+ - `(1 + (2 + 2) - 1) = 4`
80
+
81
+ It won't match `2 + 2 = 4` because there is no any nesting.
82
+
83
+ ## Contributing
84
+
85
+ Add link to CONTRIBUTING.md file that will explain how to get started developing for this package.
86
+ This can be done once things stabilize enough for us to accept external contributions.
@@ -0,0 +1,5 @@
1
+ export * as lang from './lang';
2
+ export * as lexer from './lexer';
3
+ export * as parser from './parser';
4
+ export * as query from './query';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.query = exports.parser = exports.lexer = exports.lang = void 0;
4
+ exports.lang = require("./lang");
5
+ exports.lexer = require("./lexer");
6
+ exports.parser = require("./parser");
7
+ exports.query = require("./query");
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;AAAA,iCAA+B;AAC/B,mCAAiC;AACjC,qCAAmC;AACnC,mCAAiC"}
@@ -0,0 +1,7 @@
1
+ import type { LexerConfig } from '../lexer/types';
2
+ import type { ParserConfig } from '../parser/types';
3
+ import type { LanguageConfig } from './types';
4
+ export declare const lexer: LexerConfig;
5
+ export declare const parser: ParserConfig;
6
+ export declare const lang: LanguageConfig;
7
+ //# sourceMappingURL=groovy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groovy.d.ts","sourceRoot":"","sources":["../../../lib/lang/groovy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA8D9C,eAAO,MAAM,KAAK,EAAE,WAqBnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,YAEpB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAAkC,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lang = exports.parser = exports.lexer = void 0;
4
+ /**
5
+ * @see https://docs.groovy-lang.org/latest/html/documentation/#groovy-operators
6
+ */
7
+ const operators =
8
+ /* prettier-ignore */ [
9
+ '+', '-', '*', '/', '%', '**',
10
+ '++', '--',
11
+ '+=', '-=', '*=', '/=', '%=', '**=',
12
+ '==', '!=', '<', '<=', '>', '>=', '===', '!==', '<=>',
13
+ '&&', '||', '!',
14
+ '&', '|', '^', '~',
15
+ '<<', '>>', '>>>',
16
+ '?', '?:',
17
+ '=', '?=',
18
+ '.', '?.', '.@', '.&', '::',
19
+ '=~', '==~',
20
+ '*.', ':',
21
+ '..', '..<',
22
+ '<>',
23
+ '<<=', '>>=', '>>>=', '&=', '^=', '|=', '?=',
24
+ '->',
25
+ ',', ';',
26
+ ];
27
+ /**
28
+ * Borrowed from Python implementation:
29
+ *
30
+ * @see https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
31
+ */
32
+ const bindigit = '[01]';
33
+ const octdigit = '[0-7]';
34
+ const digit = '[0-9]';
35
+ const nonzerodigit = '[1-9]';
36
+ const hexdigit = `(?:${digit}|[a-fA-F])`;
37
+ const bininteger = `(?:0[bB](?:_?${bindigit})+)`;
38
+ const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
39
+ const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
40
+ const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
41
+ const integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;
42
+ const digitpart = `(?:${digit}(?:_?${digit})*)`;
43
+ const fraction = `(?:\\.${digitpart})`;
44
+ const exponent = `(?:[eE][-+]?${digitpart})`;
45
+ const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
46
+ const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
47
+ const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
48
+ const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
49
+ const templates = [
50
+ {
51
+ type: 'var',
52
+ startsWith: '$',
53
+ symbols: /[a-zA-Z_][a-zA-Z0-9_]*/,
54
+ operators: ['.'],
55
+ },
56
+ { type: 'expr', startsWith: '${', endsWith: '}' },
57
+ ];
58
+ exports.lexer = {
59
+ joinLines: '\\',
60
+ comments: [
61
+ { type: 'line-comment', startsWith: '#!' },
62
+ { type: 'line-comment', startsWith: '//' },
63
+ { type: 'multiline-comment', startsWith: '/*', endsWith: '*/' },
64
+ ],
65
+ symbols: /[a-zA-Z$_][a-zA-Z0-9$_]*/,
66
+ numbers,
67
+ operators,
68
+ brackets: [
69
+ { startsWith: '{', endsWith: '}' },
70
+ { startsWith: '[', endsWith: ']' },
71
+ { startsWith: '(', endsWith: ')' },
72
+ ],
73
+ strings: [
74
+ { startsWith: "'", escapeChar: '\\' },
75
+ { startsWith: "'''", escapeChar: '\\' },
76
+ { startsWith: '"', templates, escapeChar: '\\' },
77
+ { startsWith: '"""', templates, escapeChar: '\\' },
78
+ ],
79
+ };
80
+ exports.parser = {
81
+ useIndentBlocks: false,
82
+ };
83
+ exports.lang = { lexer: exports.lexer, parser: exports.parser };
84
+ //# sourceMappingURL=groovy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groovy.js","sourceRoot":"","sources":["../../../lib/lang/groovy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Cursor, Node } from '../parser/types';
2
+ import type { QueryBuilder } from '../query/types';
3
+ import type { LanguageConfig } from './types';
4
+ export * from './types';
5
+ export declare class Language {
6
+ readonly config: LanguageConfig;
7
+ private lexer;
8
+ constructor(config: LanguageConfig);
9
+ parse(input: string): Cursor;
10
+ query<Ctx, T extends Node>(input: string | Cursor, q: QueryBuilder<Ctx, T>, context: Ctx): Ctx | null;
11
+ }
12
+ declare const languagePresets: {
13
+ groovy: LanguageConfig;
14
+ python: LanguageConfig;
15
+ scala: LanguageConfig;
16
+ starlark: LanguageConfig;
17
+ };
18
+ type LanguagePreset = keyof typeof languagePresets;
19
+ export declare function createLang(key: LanguagePreset): Language;
20
+ export declare function createLang(config: LanguageConfig): Language;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/lang/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc,SAAS,CAAC;AAExB,qBAAa,QAAQ;IAGP,QAAQ,CAAC,MAAM,EAAE,cAAc;IAF3C,OAAO,CAAC,KAAK,CAAQ;gBAEA,MAAM,EAAE,cAAc;IAI3C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAM5B,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,IAAI,EACvB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,EACvB,OAAO,EAAE,GAAG,GACX,GAAG,GAAG,IAAI;CAOd;AAED,QAAA,MAAM,eAAe;;;;;CAKpB,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,OAAO,eAAe,CAAC;AAEnD,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,CAAC;AAC1D,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createLang = exports.Language = void 0;
18
+ const lexer_1 = require("../lexer");
19
+ const parser_1 = require("../parser");
20
+ const query_1 = require("../query");
21
+ const clone_1 = require("../util/clone");
22
+ const groovy_1 = require("./groovy");
23
+ const python_1 = require("./python");
24
+ const scala_1 = require("./scala");
25
+ const starlark_1 = require("./starlark");
26
+ __exportStar(require("./types"), exports);
27
+ class Language {
28
+ constructor(config) {
29
+ this.config = config;
30
+ this.lexer = (0, lexer_1.createLexer)(config.lexer);
31
+ }
32
+ parse(input) {
33
+ this.lexer.reset(input);
34
+ const root = (0, parser_1.createTree)(this.lexer, this.config.parser);
35
+ return (0, parser_1.createCursor)(root);
36
+ }
37
+ query(input, q, context) {
38
+ const matcher = (0, query_1.buildRoot)(q);
39
+ const cursor = typeof input === 'string' ? this.parse(input) : input;
40
+ const checkpoint = matcher.match({ cursor, context });
41
+ const result = checkpoint === null || checkpoint === void 0 ? void 0 : checkpoint.context;
42
+ return result ? (0, clone_1.clone)(result) : null;
43
+ }
44
+ }
45
+ exports.Language = Language;
46
+ const languagePresets = {
47
+ groovy: groovy_1.lang,
48
+ python: python_1.lang,
49
+ scala: scala_1.lang,
50
+ starlark: starlark_1.lang,
51
+ };
52
+ function createLang(arg1) {
53
+ const config = typeof arg1 === 'string' ? languagePresets[arg1] : arg1;
54
+ return new Language(config);
55
+ }
56
+ exports.createLang = createLang;
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/lang/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oCAAuC;AAEvC,sCAAqD;AAErD,oCAAqC;AAErC,yCAAsC;AACtC,qCAA0C;AAC1C,qCAA0C;AAC1C,mCAAwC;AACxC,yCAA8C;AAG9C,0CAAwB;AAExB,MAAa,QAAQ;IAGnB,YAAqB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;QACzC,IAAI,CAAC,KAAK,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,IAAA,qBAAY,EAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CACH,KAAsB,EACtB,CAAuB,EACvB,OAAY;QAEZ,MAAM,OAAO,GAAG,IAAA,iBAAS,EAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC;QACnC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAA,aAAK,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;CACF;AAxBD,4BAwBC;AAED,MAAM,eAAe,GAAG;IACtB,MAAM,EAAN,aAAM;IACN,MAAM,EAAN,aAAM;IACN,KAAK,EAAL,YAAK;IACL,QAAQ,EAAR,eAAQ;CACT,CAAC;AAMF,SAAgB,UAAU,CAAC,IAAqC;IAC9D,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAHD,gCAGC"}
@@ -0,0 +1,7 @@
1
+ import type { LexerConfig } from '../lexer/types';
2
+ import type { ParserConfig } from '../parser/types';
3
+ import type { LanguageConfig } from './types';
4
+ export declare const lexer: LexerConfig;
5
+ export declare const parser: ParserConfig;
6
+ export declare const lang: LanguageConfig;
7
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../lib/lang/python.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA0C9C,eAAO,MAAM,KAAK,EAAE,WA+BnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,YAEpB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAAkC,CAAC"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lang = exports.parser = exports.lexer = void 0;
4
+ /**
5
+ * @see https://docs.python.org/3/reference/lexical_analysis.html#operators
6
+ */
7
+ const operators =
8
+ /* prettier-ignore */ [
9
+ // Operators
10
+ '+', '-', '*', '**', '/', '//', '%', '@',
11
+ '<<', '>>', '&', '|', '^', '~', ':=',
12
+ '<', '>', '<=', '>=', '==', '!=',
13
+ // Delimiters
14
+ ',', ':', '.', ';', '@', '=', '->',
15
+ '+=', '-=', '*=', '/=', '//=', '%=', '@=',
16
+ '&=', '|=', '^=', '>>=', '<<=', '**=',
17
+ ];
18
+ /**
19
+ * @see https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
20
+ */
21
+ const bindigit = '[01]';
22
+ const octdigit = '[0-7]';
23
+ const digit = '[0-9]';
24
+ const nonzerodigit = '[1-9]';
25
+ const hexdigit = `(?:${digit}|[a-fA-F])`;
26
+ const bininteger = `(?:0[bB](?:_?${bindigit})+)`;
27
+ const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
28
+ const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
29
+ const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
30
+ const integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;
31
+ const digitpart = `(?:${digit}(?:_?${digit})*)`;
32
+ const fraction = `(?:\\.${digitpart})`;
33
+ const exponent = `(?:[eE][-+]?${digitpart})`;
34
+ const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
35
+ const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
36
+ const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
37
+ const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
38
+ exports.lexer = {
39
+ joinLines: '\\',
40
+ comments: [{ type: 'line-comment', startsWith: '#' }],
41
+ symbols: /[_a-zA-Z][_a-zA-Z0-9]*/,
42
+ numbers,
43
+ operators,
44
+ brackets: [
45
+ { startsWith: '{', endsWith: '}' },
46
+ { startsWith: '[', endsWith: ']' },
47
+ { startsWith: '(', endsWith: ')' },
48
+ ],
49
+ strings: [
50
+ { startsWith: "'", escapeChar: '\\' },
51
+ { startsWith: '"', escapeChar: '\\' },
52
+ { startsWith: "'''", escapeChar: '\\' },
53
+ { startsWith: '"""', escapeChar: '\\' },
54
+ {
55
+ startsWith: "f'",
56
+ endsWith: "'",
57
+ escapeChar: '\\',
58
+ templates: [{ type: 'expr', startsWith: '{', endsWith: '}' }],
59
+ },
60
+ {
61
+ startsWith: 'f"',
62
+ endsWith: '"',
63
+ escapeChar: '\\',
64
+ templates: [{ type: 'expr', startsWith: '{', endsWith: '}' }],
65
+ },
66
+ { startsWith: "r'", endsWith: "'" },
67
+ { startsWith: 'r"', endsWith: '"' },
68
+ ],
69
+ };
70
+ exports.parser = {
71
+ useIndentBlocks: true,
72
+ };
73
+ exports.lang = { lexer: exports.lexer, parser: exports.parser };
74
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../lib/lang/python.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { LexerConfig } from '../lexer/types';
2
+ import type { ParserConfig } from '../parser/types';
3
+ import type { LanguageConfig } from './types';
4
+ export declare const lexer: LexerConfig;
5
+ export declare const parser: ParserConfig;
6
+ export declare const lang: LanguageConfig;
7
+ //# sourceMappingURL=scala.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scala.d.ts","sourceRoot":"","sources":["../../../lib/lang/scala.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAmD9C,eAAO,MAAM,KAAK,EAAE,WAoBnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,YAEpB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAAkC,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lang = exports.parser = exports.lexer = void 0;
4
+ const operators =
5
+ /* prettier-ignore */ [
6
+ '+', '-', '*', '/', '%', '%%', '%%%', '**',
7
+ '++', '--',
8
+ '+=', '++=', '-=', '*=', '/=', '%=', '**=',
9
+ '==', '!=', '<', '<=', '>', '>=', '===', '!==', '<=>',
10
+ '&&', '||', '!',
11
+ '&', '|', '^', '~',
12
+ '<<', '>>', '>>>',
13
+ '?', '?:',
14
+ ':=', '=', '?=',
15
+ '.', '?.', '.@', '.&', '::', ':::',
16
+ '=~', '==~',
17
+ '*.', ':',
18
+ '..', '..<',
19
+ '<>',
20
+ '<<=', '>>=', '>>>=', '&=', '^=', '|=', '?=',
21
+ '->',
22
+ ',', ';',
23
+ ];
24
+ const octdigit = '[0-7]';
25
+ const digit = '[0-9]';
26
+ const nonzerodigit = '[1-9]';
27
+ const hexdigit = `(?:${digit}|[a-fA-F])`;
28
+ const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
29
+ const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
30
+ const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
31
+ const integer = `(?:${decinteger}|${octinteger}|${hexinteger})`;
32
+ const digitpart = `(?:${digit}(?:_?${digit})*)`;
33
+ const fraction = `(?:\\.${digitpart})`;
34
+ const exponent = `(?:[eE][-+]?${digitpart})`;
35
+ const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
36
+ const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
37
+ const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
38
+ const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
39
+ const templates = [
40
+ {
41
+ type: 'var',
42
+ startsWith: '$',
43
+ symbols: /[a-zA-Z_][a-zA-Z0-9_]+/,
44
+ },
45
+ { type: 'expr', startsWith: '${', endsWith: '}' },
46
+ ];
47
+ exports.lexer = {
48
+ joinLines: '\\',
49
+ comments: [
50
+ { type: 'line-comment', startsWith: '//' },
51
+ { type: 'multiline-comment', startsWith: '/*', endsWith: '*/' },
52
+ ],
53
+ symbols: /[_a-zA-Z][_a-zA-Z0-9]*/,
54
+ numbers,
55
+ operators,
56
+ brackets: [
57
+ { startsWith: '{', endsWith: '}' },
58
+ { startsWith: '[', endsWith: ']' },
59
+ { startsWith: '(', endsWith: ')' },
60
+ ],
61
+ strings: [
62
+ { startsWith: '"', escapeChar: '\\' },
63
+ { startsWith: 'raw"', endsWith: '"' },
64
+ { startsWith: 's"', templates, endsWith: '"', escapeChar: '\\' },
65
+ { startsWith: 'f"', templates, endsWith: '"', escapeChar: '\\' },
66
+ ],
67
+ };
68
+ exports.parser = {
69
+ useIndentBlocks: false,
70
+ };
71
+ exports.lang = { lexer: exports.lexer, parser: exports.parser };
72
+ //# sourceMappingURL=scala.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scala.js","sourceRoot":"","sources":["../../../lib/lang/scala.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { LexerConfig } from '../lexer/types';
2
+ import type { ParserConfig } from '../parser/types';
3
+ import type { LanguageConfig } from './types';
4
+ export declare const lexer: LexerConfig;
5
+ export declare const parser: ParserConfig;
6
+ export declare const lang: LanguageConfig;
7
+ //# sourceMappingURL=starlark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starlark.d.ts","sourceRoot":"","sources":["../../../lib/lang/starlark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAmC9C,eAAO,MAAM,KAAK,EAAE,WAuBnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,YAEpB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,cAAkC,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lang = exports.parser = exports.lexer = void 0;
4
+ /**
5
+ * @see https://github.com/bazelbuild/starlark/blob/master/spec.md#lexical-elements
6
+ */
7
+ const operators =
8
+ /* prettier-ignore */ [
9
+ '+', '-', '*', '//', '%', '**',
10
+ '~', '&', '|', '^', '<<', '>>',
11
+ '.', ',', '=', ';', ':',
12
+ '<', '>', '>=', '<=', '==', '!=',
13
+ '+=', '-=', '*=', '//=', '%=',
14
+ '&=', '|=', '^=', '<<=', '>>=',
15
+ ];
16
+ const octdigit = '[0-7]';
17
+ const digit = '[0-9]';
18
+ const nonzerodigit = '[1-9]';
19
+ const hexdigit = `(?:${digit}|[a-fA-F])`;
20
+ const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
21
+ const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
22
+ const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
23
+ const integer = `(?:${decinteger}|${octinteger}|${hexinteger})`;
24
+ const digitpart = `(?:${digit}(?:_?${digit})*)`;
25
+ const fraction = `(?:\\.${digitpart})`;
26
+ const exponent = `(?:[eE][-+]?${digitpart})`;
27
+ const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
28
+ const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
29
+ const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
30
+ const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
31
+ exports.lexer = {
32
+ joinLines: '\\',
33
+ comments: [{ type: 'line-comment', startsWith: '#' }],
34
+ symbols: /[_a-zA-Z][_a-zA-Z0-9]*/,
35
+ numbers,
36
+ operators,
37
+ brackets: [
38
+ { startsWith: '{', endsWith: '}' },
39
+ { startsWith: '[', endsWith: ']' },
40
+ { startsWith: '(', endsWith: ')' },
41
+ ],
42
+ strings: [
43
+ { startsWith: "'", escapeChar: '\\' },
44
+ { startsWith: '"', escapeChar: '\\' },
45
+ { startsWith: "'''", escapeChar: '\\' },
46
+ { startsWith: '"""', escapeChar: '\\' },
47
+ { startsWith: "r'", endsWith: "'" },
48
+ { startsWith: 'r"', endsWith: '"' },
49
+ { startsWith: "rb'", endsWith: "'" },
50
+ { startsWith: 'rb"', endsWith: '"' },
51
+ { startsWith: "br'", endsWith: "'" },
52
+ { startsWith: 'br"', endsWith: '"' },
53
+ ],
54
+ };
55
+ exports.parser = {
56
+ useIndentBlocks: true,
57
+ };
58
+ exports.lang = { lexer: exports.lexer, parser: exports.parser };
59
+ //# sourceMappingURL=starlark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starlark.js","sourceRoot":"","sources":["../../../lib/lang/starlark.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { LexerConfig } from '../lexer/types';
2
+ import type { ParserConfig } from '../parser/types';
3
+ export interface LanguageConfig {
4
+ lexer: LexerConfig;
5
+ parser: ParserConfig;
6
+ }
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/lang/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/lang/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { BracketOption, StatesMap } from './types';
2
+ export declare function isBracketKey(key: string): boolean;
3
+ export declare function isLeftKey(key: string): boolean;
4
+ export declare function isRightKey(key: string): boolean;
5
+ export declare function getCounterpartBracketKey(rightKey: string): string | undefined;
6
+ export declare function configBrackets(states: StatesMap, opts: BracketOption[]): StatesMap;
7
+ //# sourceMappingURL=bracket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bracket.d.ts","sourceRoot":"","sources":["../../../lib/lexer/bracket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,SAAS,EAEV,MAAM,SAAS,CAAC;AAEjB,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU7E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,aAAa,EAAE,GACpB,SAAS,CAgCX"}