@mpeggroup/mpeg-sdl-parser 4.0.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 (375) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +337 -0
  3. package/bun.lock +65 -0
  4. package/dist/index.js +11829 -0
  5. package/grammar/sdl.ebnf.grammar +399 -0
  6. package/grammar/sdl.lezer.grammar +629 -0
  7. package/index.ts +83 -0
  8. package/package.json +61 -0
  9. package/src/analyser/checks/check-array-definition.ts +90 -0
  10. package/src/analyser/checks/check-array-element-access.ts +31 -0
  11. package/src/analyser/checks/check-class-declaration.ts +417 -0
  12. package/src/analyser/checks/check-computed-array-definition.ts +44 -0
  13. package/src/analyser/checks/check-computed-elementary-type-definition.ts +45 -0
  14. package/src/analyser/checks/check-elementary-type-definition.ts +167 -0
  15. package/src/analyser/checks/check-expression-binary.ts +242 -0
  16. package/src/analyser/checks/check-expression-lengthof.ts +34 -0
  17. package/src/analyser/checks/check-expression-unary.ts +166 -0
  18. package/src/analyser/checks/check-identifier.ts +71 -0
  19. package/src/analyser/checks/check-if-statement.ts +164 -0
  20. package/src/analyser/checks/check-map-declaration.ts +180 -0
  21. package/src/analyser/checks/check-map-definition.ts +118 -0
  22. package/src/analyser/checks/check-number-literal-float.ts +28 -0
  23. package/src/analyser/checks/check-parameter-list.ts +42 -0
  24. package/src/analyser/checks/check-specification.ts +53 -0
  25. package/src/analyser/checks/check-switch-statement.ts +206 -0
  26. package/src/analyser/checks/check.ts +20 -0
  27. package/src/analyser/create-sdl-analyser.ts +85 -0
  28. package/src/analyser/node-handler/abstract-analysis-node-handler.ts +626 -0
  29. package/src/analyser/node-handler/build-symbol-table-node-handler.ts +649 -0
  30. package/src/analyser/node-handler/specific-check-node-handler.ts +46 -0
  31. package/src/analyser/node-handler/validate-scope-node-handler.ts +290 -0
  32. package/src/analyser/node-handler/validate-type-node-handler.ts +497 -0
  33. package/src/analyser/sdl-analyser.ts +119 -0
  34. package/src/analyser/symbol-table.ts +388 -0
  35. package/src/analyser/util/symbol-table-utils.ts +458 -0
  36. package/src/analyser/util/type-utils.ts +238 -0
  37. package/src/ast/build/consume/consume-abstract-node.ts +199 -0
  38. package/src/ast/build/consume/consume-ast-node.ts +400 -0
  39. package/src/ast/build/consume/consume-primitive.ts +59 -0
  40. package/src/ast/build/consume/consume-trivia.ts +96 -0
  41. package/src/ast/build/consume/consume-white-space-and-missing-errors.ts +27 -0
  42. package/src/ast/build/node/build-aggregate-output-value.ts +57 -0
  43. package/src/ast/build/node/build-aligned-modifier.ts +99 -0
  44. package/src/ast/build/node/build-array-definition.ts +131 -0
  45. package/src/ast/build/node/build-array-element-access.ts +45 -0
  46. package/src/ast/build/node/build-base64-string-literal.ts +41 -0
  47. package/src/ast/build/node/build-binary-expression.ts +113 -0
  48. package/src/ast/build/node/build-binary-literal.ts +37 -0
  49. package/src/ast/build/node/build-bit-modifier.ts +86 -0
  50. package/src/ast/build/node/build-case-clause.ts +101 -0
  51. package/src/ast/build/node/build-class-declaration.ts +124 -0
  52. package/src/ast/build/node/build-class-definition.ts +56 -0
  53. package/src/ast/build/node/build-class-id-range.ts +32 -0
  54. package/src/ast/build/node/build-class-id.ts +19 -0
  55. package/src/ast/build/node/build-class-member-access.ts +27 -0
  56. package/src/ast/build/node/build-compound-statement.ts +33 -0
  57. package/src/ast/build/node/build-computed-array-definition.ts +53 -0
  58. package/src/ast/build/node/build-computed-elementary-type-definition.ts +100 -0
  59. package/src/ast/build/node/build-decimal-literal.ts +15 -0
  60. package/src/ast/build/node/build-default-clause.ts +76 -0
  61. package/src/ast/build/node/build-do-statement.ts +71 -0
  62. package/src/ast/build/node/build-elementary-type-definition.ts +164 -0
  63. package/src/ast/build/node/build-elementary-type-output-value.ts +25 -0
  64. package/src/ast/build/node/build-elementary-type.ts +36 -0
  65. package/src/ast/build/node/build-expandable-modifier.ts +68 -0
  66. package/src/ast/build/node/build-explicit-array-dimension.ts +37 -0
  67. package/src/ast/build/node/build-expression-statement.ts +31 -0
  68. package/src/ast/build/node/build-extended-class-id-range.ts +27 -0
  69. package/src/ast/build/node/build-extends-modifier.ts +41 -0
  70. package/src/ast/build/node/build-floating-point-literal.ts +15 -0
  71. package/src/ast/build/node/build-for-statement.ts +117 -0
  72. package/src/ast/build/node/build-hexadecimal-literal.ts +38 -0
  73. package/src/ast/build/node/build-identifier.ts +8 -0
  74. package/src/ast/build/node/build-if-statement.ts +82 -0
  75. package/src/ast/build/node/build-implicit-array-dimension.ts +78 -0
  76. package/src/ast/build/node/build-integer-literal.ts +15 -0
  77. package/src/ast/build/node/build-length-attribute.ts +48 -0
  78. package/src/ast/build/node/build-lengthof-expression.ts +45 -0
  79. package/src/ast/build/node/build-map-declaration.ts +110 -0
  80. package/src/ast/build/node/build-map-definition.ts +103 -0
  81. package/src/ast/build/node/build-map-entry.ts +33 -0
  82. package/src/ast/build/node/build-missing-error.ts +10 -0
  83. package/src/ast/build/node/build-multiple-character-literal.ts +65 -0
  84. package/src/ast/build/node/build-parameter-list.ts +50 -0
  85. package/src/ast/build/node/build-parameter-value-list.ts +54 -0
  86. package/src/ast/build/node/build-parameter.ts +47 -0
  87. package/src/ast/build/node/build-partial-array-dimension.ts +55 -0
  88. package/src/ast/build/node/build-specification.ts +24 -0
  89. package/src/ast/build/node/build-string-definition.ts +106 -0
  90. package/src/ast/build/node/build-switch-statement.ts +84 -0
  91. package/src/ast/build/node/build-token.ts +26 -0
  92. package/src/ast/build/node/build-unary-expression.ts +109 -0
  93. package/src/ast/build/node/build-unexpected-error.ts +14 -0
  94. package/src/ast/build/node/build-utf-string-literal.ts +110 -0
  95. package/src/ast/build/node/build-while-statement.ts +55 -0
  96. package/src/ast/build/util/array-dimension-kind-by-token-type-id-map.ts +167 -0
  97. package/src/ast/build/util/binary-operator-kind-by-token-type-id-map.ts +152 -0
  98. package/src/ast/build/util/build-context.ts +36 -0
  99. package/src/ast/build/util/class-id-kind-by-token-type-id-map.ts +160 -0
  100. package/src/ast/build/util/expression-kind-by-token-type-id-map.ts +168 -0
  101. package/src/ast/build/util/fetch-node.ts +433 -0
  102. package/src/ast/build/util/node-kind-by-token-type-id-map.ts +202 -0
  103. package/src/ast/build/util/statement-kind-by-token-type-id-map.ts +210 -0
  104. package/src/ast/build/util/string-literal-kind-by-token-type-id-map.ts +162 -0
  105. package/src/ast/build/util/token-kind-by-token-type-id-map.ts +337 -0
  106. package/src/ast/build-ast.ts +114 -0
  107. package/src/ast/node/abstract-array-definition.ts +17 -0
  108. package/src/ast/node/abstract-array-dimension.ts +20 -0
  109. package/src/ast/node/abstract-class-id.ts +13 -0
  110. package/src/ast/node/abstract-composite-node.ts +58 -0
  111. package/src/ast/node/abstract-elementary-type-definition.ts +29 -0
  112. package/src/ast/node/abstract-expression.ts +13 -0
  113. package/src/ast/node/abstract-leaf-node.ts +10 -0
  114. package/src/ast/node/abstract-node.ts +16 -0
  115. package/src/ast/node/abstract-statement.ts +13 -0
  116. package/src/ast/node/aggregate-output-value.ts +28 -0
  117. package/src/ast/node/aligned-modifier.ts +21 -0
  118. package/src/ast/node/array-definition.ts +44 -0
  119. package/src/ast/node/array-element-access.ts +24 -0
  120. package/src/ast/node/binary-expression.ts +28 -0
  121. package/src/ast/node/bit-modifier.ts +24 -0
  122. package/src/ast/node/case-clause.ts +30 -0
  123. package/src/ast/node/class-declaration.ts +39 -0
  124. package/src/ast/node/class-definition.ts +23 -0
  125. package/src/ast/node/class-id-range.ts +17 -0
  126. package/src/ast/node/class-id.ts +14 -0
  127. package/src/ast/node/class-member-access.ts +19 -0
  128. package/src/ast/node/compound-statement.ts +19 -0
  129. package/src/ast/node/computed-array-definition.ts +26 -0
  130. package/src/ast/node/computed-elementary-type-definition.ts +34 -0
  131. package/src/ast/node/default-clause.ts +26 -0
  132. package/src/ast/node/do-statement.ts +28 -0
  133. package/src/ast/node/elementary-type-definition.ts +49 -0
  134. package/src/ast/node/elementary-type-output-value.ts +19 -0
  135. package/src/ast/node/elementary-type.ts +18 -0
  136. package/src/ast/node/enum/array-dimension-kind.ts +11 -0
  137. package/src/ast/node/enum/binary-operator-kind.ts +41 -0
  138. package/src/ast/node/enum/class-id-kind.ts +12 -0
  139. package/src/ast/node/enum/elementary-type-kind.ts +13 -0
  140. package/src/ast/node/enum/expression-kind.ts +11 -0
  141. package/src/ast/node/enum/node-kind.ts +57 -0
  142. package/src/ast/node/enum/number-literal-kind.ts +17 -0
  143. package/src/ast/node/enum/statement-kind.ts +37 -0
  144. package/src/ast/node/enum/string-literal-kind.ts +13 -0
  145. package/src/ast/node/enum/string-variable-kind.ts +25 -0
  146. package/src/ast/node/enum/token-kind.ts +87 -0
  147. package/src/ast/node/expandable-modifier.ts +21 -0
  148. package/src/ast/node/explicit-array-dimension.ts +26 -0
  149. package/src/ast/node/expression-statement.ts +23 -0
  150. package/src/ast/node/extended-class-id-range.ts +20 -0
  151. package/src/ast/node/extends-modifier.ts +21 -0
  152. package/src/ast/node/for-statement.ts +29 -0
  153. package/src/ast/node/identifier.ts +12 -0
  154. package/src/ast/node/if-statement.ts +28 -0
  155. package/src/ast/node/implicit-array-dimension.ts +34 -0
  156. package/src/ast/node/length-attribute.ts +24 -0
  157. package/src/ast/node/length-of-expression.ts +21 -0
  158. package/src/ast/node/map-declaration.ts +34 -0
  159. package/src/ast/node/map-definition.ts +27 -0
  160. package/src/ast/node/map-entry.ts +18 -0
  161. package/src/ast/node/missing-error.ts +9 -0
  162. package/src/ast/node/number-literal.ts +18 -0
  163. package/src/ast/node/parameter-list.ts +25 -0
  164. package/src/ast/node/parameter-value-list.ts +29 -0
  165. package/src/ast/node/parameter.ts +20 -0
  166. package/src/ast/node/partial-array-dimension.ts +28 -0
  167. package/src/ast/node/specification.ts +21 -0
  168. package/src/ast/node/string-definition.ts +28 -0
  169. package/src/ast/node/string-literal.ts +21 -0
  170. package/src/ast/node/switch-statement.ts +32 -0
  171. package/src/ast/node/token.ts +20 -0
  172. package/src/ast/node/trivia.ts +13 -0
  173. package/src/ast/node/unary-expression.ts +31 -0
  174. package/src/ast/node/unexpected-error.ts +12 -0
  175. package/src/ast/node/while-statement.ts +26 -0
  176. package/src/ast/util/types.ts +138 -0
  177. package/src/ast/visitor/node-handler.ts +15 -0
  178. package/src/ast/visitor/node-visitor.ts +13 -0
  179. package/src/ast/visitor/traversing-visitor.ts +69 -0
  180. package/src/completion/completion-rules.ts +447 -0
  181. package/src/completion/get-potential-syntactic-tokens.ts +54 -0
  182. package/src/completion/get-potential-token-type-ids.ts +116 -0
  183. package/src/completion/hierarchical-map.ts +43 -0
  184. package/src/completion/rules/abstract-types.ts +174 -0
  185. package/src/completion/rules/aggregate-output-value-rules.ts +48 -0
  186. package/src/completion/rules/aligned-modifier-rules.ts +45 -0
  187. package/src/completion/rules/array-definition-rules.ts +87 -0
  188. package/src/completion/rules/array-element-access-rules.ts +22 -0
  189. package/src/completion/rules/assignment-expression-rules.ts +19 -0
  190. package/src/completion/rules/binary-expression-rules.ts +23 -0
  191. package/src/completion/rules/bit-modifier-rules.ts +25 -0
  192. package/src/completion/rules/case-clause-rules.ts +39 -0
  193. package/src/completion/rules/class-declaration-rules.ts +81 -0
  194. package/src/completion/rules/class-definition-rules.ts +28 -0
  195. package/src/completion/rules/class-id-range-rules.ts +17 -0
  196. package/src/completion/rules/class-id-rules.ts +9 -0
  197. package/src/completion/rules/class-member-access-rules.ts +7 -0
  198. package/src/completion/rules/compound-statement-rules.ts +25 -0
  199. package/src/completion/rules/computed-array-definition-rules.ts +25 -0
  200. package/src/completion/rules/computed-elementary-type-rules.ts +44 -0
  201. package/src/completion/rules/default-clause-rules.ts +23 -0
  202. package/src/completion/rules/do-statement-rules.ts +38 -0
  203. package/src/completion/rules/elementary-type-definition-rules.ts +62 -0
  204. package/src/completion/rules/elementary-type-output-value-rules.ts +13 -0
  205. package/src/completion/rules/elementary-type-rules.ts +18 -0
  206. package/src/completion/rules/expandable-modifier-rules.ts +21 -0
  207. package/src/completion/rules/explicit-array-dimension-rules.ts +22 -0
  208. package/src/completion/rules/expression-statement-rules.ts +22 -0
  209. package/src/completion/rules/extended-class-id-range-rules.ts +17 -0
  210. package/src/completion/rules/extends-modifier-rules.ts +17 -0
  211. package/src/completion/rules/for-statement-rules.ts +51 -0
  212. package/src/completion/rules/if-statement-rules.ts +42 -0
  213. package/src/completion/rules/implicit-array-dimension-rules.ts +21 -0
  214. package/src/completion/rules/length-attribute-rules.ts +19 -0
  215. package/src/completion/rules/lengthof-expression-rules.ts +23 -0
  216. package/src/completion/rules/map-declaration-rules.ts +45 -0
  217. package/src/completion/rules/map-definition-rules.ts +46 -0
  218. package/src/completion/rules/map-entry-rules.ts +17 -0
  219. package/src/completion/rules/parameter-list-rules.ts +21 -0
  220. package/src/completion/rules/parameter-rules.ts +17 -0
  221. package/src/completion/rules/parameter-value-list-rules.ts +27 -0
  222. package/src/completion/rules/partial-array-dimension-rules.ts +33 -0
  223. package/src/completion/rules/specification-rules.ts +37 -0
  224. package/src/completion/rules/string-definition-rules.ts +103 -0
  225. package/src/completion/rules/switch-statement-rules.ts +50 -0
  226. package/src/completion/rules/unary-expression-rules.ts +41 -0
  227. package/src/completion/rules/utf-string-literal-rules.ts +17 -0
  228. package/src/completion/rules/while-statement-rules.ts +38 -0
  229. package/src/lezer/context-tracker.ts +45 -0
  230. package/src/lezer/create-sdl-parser.ts +88 -0
  231. package/src/lezer/create-syntax-error-from-text-and-cursor.ts +110 -0
  232. package/src/lezer/create-syntax-error-from-text-and-position.ts +36 -0
  233. package/src/lezer/parser.terms.ts +129 -0
  234. package/src/lezer/parser.ts +63 -0
  235. package/src/lezer/props/fold-node-prop-source.ts +27 -0
  236. package/src/lezer/props/primitive-node-prop-source.ts +19 -0
  237. package/src/lezer/props/style-tags-node-prop-source.ts +188 -0
  238. package/src/lezer/props/syntactic-token-node-prop-source.ts +298 -0
  239. package/src/lezer/sdl-string-input.ts +46 -0
  240. package/src/location.ts +13 -0
  241. package/src/parse-helper.ts +93 -0
  242. package/src/prettier/prettier-plugin-sdl.ts +89 -0
  243. package/src/prettier/print-abstract-array-dimension.ts +84 -0
  244. package/src/prettier/print-abstract-class-id.ts +53 -0
  245. package/src/prettier/print-abstract-expression.ts +168 -0
  246. package/src/prettier/print-abstract-node.ts +224 -0
  247. package/src/prettier/print-abstract-statement.ts +124 -0
  248. package/src/prettier/print-aggregate-output-value.ts +35 -0
  249. package/src/prettier/print-aligned-modifier.ts +50 -0
  250. package/src/prettier/print-array-definition.ts +95 -0
  251. package/src/prettier/print-array-element-access.ts +14 -0
  252. package/src/prettier/print-bit-modifier.ts +48 -0
  253. package/src/prettier/print-case-clause.ts +58 -0
  254. package/src/prettier/print-class-declaration.ts +99 -0
  255. package/src/prettier/print-class-definition.ts +44 -0
  256. package/src/prettier/print-class-member-access.ts +13 -0
  257. package/src/prettier/print-computed-array-definition.ts +33 -0
  258. package/src/prettier/print-computed-elementary-type-definition.ts +60 -0
  259. package/src/prettier/print-default-clause.ts +39 -0
  260. package/src/prettier/print-do-statement.ts +31 -0
  261. package/src/prettier/print-elementary-type-definition.ts +108 -0
  262. package/src/prettier/print-elementary-type-output-value.ts +13 -0
  263. package/src/prettier/print-elementary-type.ts +28 -0
  264. package/src/prettier/print-expandable-modifier.ts +41 -0
  265. package/src/prettier/print-extends-modifier.ts +29 -0
  266. package/src/prettier/print-for-statement.ts +64 -0
  267. package/src/prettier/print-identifier.ts +10 -0
  268. package/src/prettier/print-if-statement.ts +76 -0
  269. package/src/prettier/print-length-attribute.ts +14 -0
  270. package/src/prettier/print-map-declaration.ts +75 -0
  271. package/src/prettier/print-map-definition.ts +67 -0
  272. package/src/prettier/print-map-entry.ts +22 -0
  273. package/src/prettier/print-number-literal.ts +84 -0
  274. package/src/prettier/print-parameter-list.ts +20 -0
  275. package/src/prettier/print-parameter-value-list.ts +20 -0
  276. package/src/prettier/print-parameter.ts +34 -0
  277. package/src/prettier/print-specification.ts +51 -0
  278. package/src/prettier/print-string-definition.ts +114 -0
  279. package/src/prettier/print-string-literal.ts +57 -0
  280. package/src/prettier/print-switch-statement.ts +46 -0
  281. package/src/prettier/print-token.ts +7 -0
  282. package/src/prettier/print-unexpected-error.ts +10 -0
  283. package/src/prettier/print-while-statement.ts +26 -0
  284. package/src/prettier/util/print-utils.ts +607 -0
  285. package/src/prettier/util/types.ts +40 -0
  286. package/src/scanner-error.ts +65 -0
  287. package/src/util/location-utils.ts +16 -0
  288. package/src/util/logger.ts +165 -0
  289. package/tests/analyser/create-sdl-analyser.test.ts +54 -0
  290. package/tests/analyser/get-sdl-analyser-test-scenarios.ts +80 -0
  291. package/tests/analyser/sdl-analyser-scenarios.test.ts +67 -0
  292. package/tests/analyser/semantic-error-scenarios.test.ts +40 -0
  293. package/tests/analyser/symbol-table.test.ts +188 -0
  294. package/tests/analyser/test-cases/array_definition.txt +50 -0
  295. package/tests/analyser/test-cases/class_declaration.txt +112 -0
  296. package/tests/analyser/test-cases/class_definition.txt +60 -0
  297. package/tests/analyser/test-cases/compound_statement.txt +63 -0
  298. package/tests/analyser/test-cases/computed_array_definition.txt +12 -0
  299. package/tests/analyser/test-cases/computed_elementary_type_definition.txt +39 -0
  300. package/tests/analyser/test-cases/do_statement.txt +16 -0
  301. package/tests/analyser/test-cases/elementary_type_definition.txt +58 -0
  302. package/tests/analyser/test-cases/expression.txt +159 -0
  303. package/tests/analyser/test-cases/for_statement.txt +55 -0
  304. package/tests/analyser/test-cases/if_statement.txt +57 -0
  305. package/tests/analyser/test-cases/map_declaration.txt +89 -0
  306. package/tests/analyser/test-cases/map_definition.txt +35 -0
  307. package/tests/analyser/test-cases/number_literal.txt +31 -0
  308. package/tests/analyser/test-cases/parameter_list.txt +16 -0
  309. package/tests/analyser/test-cases/scopes.txt +239 -0
  310. package/tests/analyser/test-cases/specification.txt +28 -0
  311. package/tests/analyser/test-cases/string_definition.txt +40 -0
  312. package/tests/analyser/test-cases/switch_statement.txt +96 -0
  313. package/tests/analyser/test-cases/while_statement.txt +16 -0
  314. package/tests/analyser/util/symbol-table-utils.test.ts +65 -0
  315. package/tests/ast/__snapshots__/build-ast.test.ts.snap +38897 -0
  316. package/tests/ast/build-ast.test.ts +463 -0
  317. package/tests/ast/visitor/traversing-visitor.test.ts +36 -0
  318. package/tests/completion/get-potential-syntactic-tokens.test.ts +89 -0
  319. package/tests/completion/get-potential-token-type-ids.test.ts +76 -0
  320. package/tests/completion/test-potential-syntactic-tokens-scenario.ts +24 -0
  321. package/tests/completion/test-potential-token-type-ids-scenario.ts +33 -0
  322. package/tests/fixtures/history-recording-node-handler.ts +232 -0
  323. package/tests/lezer/create-parse-error-from-text-and-position.test.ts +129 -0
  324. package/tests/lezer/create-sdl-parser.test.ts +15 -0
  325. package/tests/lezer/sdl-parser-scenarios.test.ts +24 -0
  326. package/tests/lezer/sdl-string-input.test.ts +12 -0
  327. package/tests/lezer/syntax-error-scenarios.test.ts +114 -0
  328. package/tests/lezer/test-cases/array_definition.txt +109 -0
  329. package/tests/lezer/test-cases/class_declaration.txt +141 -0
  330. package/tests/lezer/test-cases/class_definition.txt +89 -0
  331. package/tests/lezer/test-cases/comment.txt +335 -0
  332. package/tests/lezer/test-cases/compound_statement.txt +109 -0
  333. package/tests/lezer/test-cases/computed_array_definition.txt +33 -0
  334. package/tests/lezer/test-cases/computed_elementary_type_definition.txt +59 -0
  335. package/tests/lezer/test-cases/do_statement.txt +48 -0
  336. package/tests/lezer/test-cases/elementary_type_definition.txt +158 -0
  337. package/tests/lezer/test-cases/expression.txt +1203 -0
  338. package/tests/lezer/test-cases/for_statement.txt +183 -0
  339. package/tests/lezer/test-cases/if_statement.txt +183 -0
  340. package/tests/lezer/test-cases/invalid.txt +97 -0
  341. package/tests/lezer/test-cases/map_declaration.txt +152 -0
  342. package/tests/lezer/test-cases/map_definition.txt +59 -0
  343. package/tests/lezer/test-cases/number_literal.txt +273 -0
  344. package/tests/lezer/test-cases/specification.txt +38 -0
  345. package/tests/lezer/test-cases/string_definition.txt +263 -0
  346. package/tests/lezer/test-cases/string_literal.txt +303 -0
  347. package/tests/lezer/test-cases/switch_statement.txt +407 -0
  348. package/tests/lezer/test-cases/while_statement.txt +45 -0
  349. package/tests/parse-helper.test.ts +361 -0
  350. package/tests/prettier/__snapshots__/prettier-plugin-sdl.test.ts.snap +127 -0
  351. package/tests/prettier/prettier-plugin-sdl.test.ts +58 -0
  352. package/tests/prettier/print-array.test.ts +29 -0
  353. package/tests/prettier/print-class.test.ts +15 -0
  354. package/tests/prettier/print-do.test.ts +25 -0
  355. package/tests/prettier/print-elementary-type.test.ts +62 -0
  356. package/tests/prettier/print-error.test.ts +40 -0
  357. package/tests/prettier/print-expression.test.ts +17 -0
  358. package/tests/prettier/print-for.test.ts +23 -0
  359. package/tests/prettier/print-if.test.ts +71 -0
  360. package/tests/prettier/print-number-literal.test.ts +28 -0
  361. package/tests/prettier/print-specification.test.ts +54 -0
  362. package/tests/prettier/print-string.test.ts +36 -0
  363. package/tests/prettier/print-switch.test.ts +69 -0
  364. package/tests/prettier/print-while.test.ts +23 -0
  365. package/tests/prettier/test-prettier-scenario.ts +41 -0
  366. package/tests/prettier/util/print-utils.test.ts +665 -0
  367. package/tests/prettier/util/types.test.ts +38 -0
  368. package/tests/sample-specifications/invalid.sdl +24 -0
  369. package/tests/sample-specifications/prettified-invalid.sdl +28 -0
  370. package/tests/sample-specifications/prettified-various-elements-narrow.sdl +97 -0
  371. package/tests/sample-specifications/prettified-various-elements.sdl +90 -0
  372. package/tests/sample-specifications/sample.sdl +24 -0
  373. package/tests/sample-specifications/various-elements.sdl +88 -0
  374. package/tests/util/logger.test.ts +36 -0
  375. package/tsconfig.json +29 -0
@@ -0,0 +1,202 @@
1
+ import { NodeKind } from "../../node/enum/node-kind.ts";
2
+ import { InternalScannerError } from "../../../scanner-error.ts";
3
+
4
+ // Generated by Lezer from the SDL grammar
5
+ import * as TokenTypeId from "../../../lezer/parser.terms.ts";
6
+
7
+ export const nodeKindByTokenTypeId: Map<number, NodeKind> = new Map();
8
+
9
+ /**
10
+ * Map parsed token type ID to AST token type enum.
11
+ * Exhaustive switch statement to ensure all token type IDs are handled.
12
+ */
13
+ Object.values(TokenTypeId).forEach((tokenTypeId) => {
14
+ switch (tokenTypeId) {
15
+ case TokenTypeId.AlignedModifier:
16
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.ALIGNED_MODIFIER);
17
+ break;
18
+ case TokenTypeId.AggregateOutputValue:
19
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.AGGREGATE_OUTPUT_VALUE);
20
+ break;
21
+ case TokenTypeId.ArrayDefinition:
22
+ case TokenTypeId.ClassDefinition:
23
+ case TokenTypeId.ClassDeclaration:
24
+ case TokenTypeId.CompoundStatement:
25
+ case TokenTypeId.ComputedArrayDefinition:
26
+ case TokenTypeId.ComputedElementaryTypeDefinition:
27
+ case TokenTypeId.DoStatement:
28
+ case TokenTypeId.ElementaryTypeDefinition:
29
+ case TokenTypeId.ExpressionStatement:
30
+ case TokenTypeId.ForStatement:
31
+ case TokenTypeId.IfStatement:
32
+ case TokenTypeId.MapDeclaration:
33
+ case TokenTypeId.MapDefinition:
34
+ case TokenTypeId.StringDefinition:
35
+ case TokenTypeId.SwitchStatement:
36
+ case TokenTypeId.WhileStatement:
37
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.STATEMENT);
38
+ break;
39
+ case TokenTypeId.AssignmentExpression:
40
+ case TokenTypeId.BinaryExpression:
41
+ case TokenTypeId.LengthofExpression:
42
+ case TokenTypeId.UnaryExpression:
43
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.EXPRESSION);
44
+ break;
45
+ case TokenTypeId.ArrayElementAccess:
46
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.ARRAY_ELEMENT_ACCESS);
47
+ break;
48
+ case TokenTypeId.Base64StringLiteral:
49
+ case TokenTypeId.UtfStringLiteral:
50
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.STRING_LITERAL);
51
+ break;
52
+ case TokenTypeId.BitModifier:
53
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.BIT_MODIFIER);
54
+ break;
55
+ case TokenTypeId.CaseClause:
56
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.CASE_CLAUSE);
57
+ break;
58
+ case TokenTypeId.ClassId:
59
+ case TokenTypeId.ClassIdRange:
60
+ case TokenTypeId.ExtendedClassIdRange:
61
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.CLASS_ID);
62
+ break;
63
+ case TokenTypeId.ClassMemberAccess:
64
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.CLASS_MEMBER_ACCESS);
65
+ break;
66
+ case TokenTypeId.DefaultClause:
67
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.DEFAULT_CLAUSE);
68
+ break;
69
+ case TokenTypeId.ElementaryType:
70
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.ELEMENTARY_TYPE);
71
+ break;
72
+ case TokenTypeId.ElementaryTypeOutputValue:
73
+ nodeKindByTokenTypeId.set(
74
+ tokenTypeId,
75
+ NodeKind.ELEMENTARY_TYPE_OUTPUT_VALUE,
76
+ );
77
+ break;
78
+ case TokenTypeId.ExpandableModifier:
79
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.EXPANDABLE_MODIFIER);
80
+ break;
81
+ case TokenTypeId.ExplicitArrayDimension:
82
+ case TokenTypeId.ImplicitArrayDimension:
83
+ case TokenTypeId.PartialArrayDimension:
84
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.ARRAY_DIMENSION);
85
+ break;
86
+ case TokenTypeId.ExtendsModifier:
87
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.EXTENDS_MODIFIER);
88
+ break;
89
+ case TokenTypeId.LengthAttribute:
90
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.LENGTH_ATTRIBUTE);
91
+ break;
92
+ case TokenTypeId.MapEntry:
93
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.MAP_ENTRY);
94
+ break;
95
+ case TokenTypeId.MultipleCharacterLiteral:
96
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.NUMBER_LITERAL);
97
+ break;
98
+ case TokenTypeId.Parameter:
99
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.PARAMETER);
100
+ break;
101
+ case TokenTypeId.ParameterList:
102
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.PARAMETER_LIST);
103
+ break;
104
+ case TokenTypeId.ParameterValueList:
105
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.PARAMETER_VALUE_LIST);
106
+ break;
107
+ case TokenTypeId.Specification:
108
+ nodeKindByTokenTypeId.set(tokenTypeId, NodeKind.SPECIFICATION);
109
+ break;
110
+
111
+ // Parser tokens that do not map to AST NodeKinds
112
+ case TokenTypeId._break:
113
+ case TokenTypeId._case:
114
+ case TokenTypeId._class:
115
+ case TokenTypeId._const:
116
+ case TokenTypeId._default:
117
+ case TokenTypeId._do:
118
+ case TokenTypeId._else:
119
+ case TokenTypeId._extends:
120
+ case TokenTypeId._for:
121
+ case TokenTypeId._if:
122
+ case TokenTypeId._switch:
123
+ case TokenTypeId._while:
124
+ case TokenTypeId.abstract:
125
+ case TokenTypeId.Addition:
126
+ case TokenTypeId.AlignmentBitCount8:
127
+ case TokenTypeId.AlignmentBitCount16:
128
+ case TokenTypeId.AlignmentBitCount32:
129
+ case TokenTypeId.AlignmentBitCount64:
130
+ case TokenTypeId.AlignmentBitCount128:
131
+ case TokenTypeId.aligned:
132
+ case TokenTypeId.Assignment:
133
+ case TokenTypeId.base64string:
134
+ case TokenTypeId.Base64StringLiteralCharacters:
135
+ case TokenTypeId.BinaryLiteral:
136
+ case TokenTypeId.bit:
137
+ case TokenTypeId.BitwiseAnd:
138
+ case TokenTypeId.BitwiseOr:
139
+ case TokenTypeId.BitwiseShiftLeft:
140
+ case TokenTypeId.BitwiseShiftRight:
141
+ case TokenTypeId.CloseBrace:
142
+ case TokenTypeId.CloseBracket:
143
+ case TokenTypeId.CloseParenthesis:
144
+ case TokenTypeId.Colon:
145
+ case TokenTypeId.Comma:
146
+ case TokenTypeId.Comment:
147
+ case TokenTypeId.computed:
148
+ case TokenTypeId.DecimalLiteral:
149
+ case TokenTypeId.Division:
150
+ case TokenTypeId.DoubleQuote:
151
+ case TokenTypeId.expandable:
152
+ case TokenTypeId.float:
153
+ case TokenTypeId.FloatingPointLiteral:
154
+ case TokenTypeId.HexadecimalLiteral:
155
+ case TokenTypeId.Identifier:
156
+ case TokenTypeId.int:
157
+ case TokenTypeId.IntegerLiteral:
158
+ case TokenTypeId.legacy:
159
+ case TokenTypeId.lengthof:
160
+ case TokenTypeId.LogicalAnd:
161
+ case TokenTypeId.LogicalOr:
162
+ case TokenTypeId.LookAhead:
163
+ case TokenTypeId.map:
164
+ case TokenTypeId.Modulus:
165
+ case TokenTypeId.MultipleCharacterLiteralCharacters:
166
+ case TokenTypeId.Multiplication:
167
+ case TokenTypeId.OpenBrace:
168
+ case TokenTypeId.OpenBracket:
169
+ case TokenTypeId.OpenParenthesis:
170
+ case TokenTypeId.Period:
171
+ case TokenTypeId.PostfixDecrement:
172
+ case TokenTypeId.PostfixIncrement:
173
+ case TokenTypeId.RangeOperator:
174
+ case TokenTypeId.reserved:
175
+ case TokenTypeId.RelationalEqual:
176
+ case TokenTypeId.RelationalGreaterThan:
177
+ case TokenTypeId.RelationalGreaterThanOrEqual:
178
+ case TokenTypeId.RelationalLessThan:
179
+ case TokenTypeId.RelationalLessThanOrEqual:
180
+ case TokenTypeId.RelationalNotEqual:
181
+ case TokenTypeId.Semicolon:
182
+ case TokenTypeId.SingleQuote:
183
+ case TokenTypeId.Subtraction:
184
+ case TokenTypeId.UnaryNegation:
185
+ case TokenTypeId.UnaryPlus:
186
+ case TokenTypeId.unsigned:
187
+ case TokenTypeId.utf16string:
188
+ case TokenTypeId.utf8list:
189
+ case TokenTypeId.utf8string:
190
+ case TokenTypeId.utfstring:
191
+ case TokenTypeId.UtfPrefix:
192
+ case TokenTypeId.UtfStringLiteralCharacters:
193
+ case TokenTypeId.Whitespace:
194
+ break;
195
+ default: {
196
+ const exhaustiveCheck: never = tokenTypeId;
197
+ throw new InternalScannerError(
198
+ "Unreachable code reached, tokenTypeId == " + exhaustiveCheck,
199
+ );
200
+ }
201
+ }
202
+ });
@@ -0,0 +1,210 @@
1
+ import { StatementKind } from "../../node/enum/statement-kind.ts";
2
+ import { InternalScannerError } from "../../../scanner-error.ts";
3
+
4
+ // Generated by Lezer from the SDL grammar
5
+ import * as TokenTypeId from "../../../lezer/parser.terms.ts";
6
+
7
+ export const statementKindByTokenTypeId: Map<number, StatementKind> = new Map();
8
+
9
+ /**
10
+ * Map parsed token type ID to AST token type enum.
11
+ * Exhaustive switch statement to ensure all token type IDs are handled.
12
+ */
13
+ Object.values(TokenTypeId).forEach((tokenTypeId) => {
14
+ switch (tokenTypeId) {
15
+ case TokenTypeId.ArrayDefinition:
16
+ statementKindByTokenTypeId.set(
17
+ tokenTypeId,
18
+ StatementKind.ARRAY_DEFINITION,
19
+ );
20
+ break;
21
+ case TokenTypeId.ComputedArrayDefinition:
22
+ statementKindByTokenTypeId.set(
23
+ tokenTypeId,
24
+ StatementKind.COMPUTED_ARRAY_DEFINITION,
25
+ );
26
+ break;
27
+ case TokenTypeId.ComputedElementaryTypeDefinition:
28
+ statementKindByTokenTypeId.set(
29
+ tokenTypeId,
30
+ StatementKind.COMPUTED_ELEMENTARY_TYPE_DEFINITION,
31
+ );
32
+ break;
33
+ case TokenTypeId.ClassDeclaration:
34
+ statementKindByTokenTypeId.set(
35
+ tokenTypeId,
36
+ StatementKind.CLASS_DECLARATION,
37
+ );
38
+ break;
39
+ case TokenTypeId.ClassDefinition:
40
+ statementKindByTokenTypeId.set(
41
+ tokenTypeId,
42
+ StatementKind.CLASS_DEFINITION,
43
+ );
44
+ break;
45
+ case TokenTypeId.CompoundStatement:
46
+ statementKindByTokenTypeId.set(tokenTypeId, StatementKind.COMPOUND);
47
+ break;
48
+ case TokenTypeId.DoStatement:
49
+ statementKindByTokenTypeId.set(tokenTypeId, StatementKind.DO);
50
+ break;
51
+ case TokenTypeId.ElementaryTypeDefinition:
52
+ statementKindByTokenTypeId.set(
53
+ tokenTypeId,
54
+ StatementKind.ELEMENTARY_TYPE_DEFINITION,
55
+ );
56
+ break;
57
+ case TokenTypeId.ExpressionStatement:
58
+ statementKindByTokenTypeId.set(tokenTypeId, StatementKind.EXPRESSION);
59
+ break;
60
+ case TokenTypeId.ForStatement:
61
+ statementKindByTokenTypeId.set(tokenTypeId, StatementKind.FOR);
62
+ break;
63
+ case TokenTypeId.IfStatement:
64
+ statementKindByTokenTypeId.set(tokenTypeId, StatementKind.IF);
65
+ break;
66
+ case TokenTypeId.MapDeclaration:
67
+ statementKindByTokenTypeId.set(
68
+ tokenTypeId,
69
+ StatementKind.MAP_DECLARATION,
70
+ );
71
+ break;
72
+ case TokenTypeId.MapDefinition:
73
+ statementKindByTokenTypeId.set(
74
+ tokenTypeId,
75
+ StatementKind.MAP_DEFINITION,
76
+ );
77
+ break;
78
+ case TokenTypeId.StringDefinition:
79
+ statementKindByTokenTypeId.set(
80
+ tokenTypeId,
81
+ StatementKind.STRING_DEFINITION,
82
+ );
83
+ break;
84
+ case TokenTypeId.SwitchStatement:
85
+ statementKindByTokenTypeId.set(tokenTypeId, StatementKind.SWITCH);
86
+ break;
87
+ case TokenTypeId.WhileStatement:
88
+ statementKindByTokenTypeId.set(tokenTypeId, StatementKind.WHILE);
89
+ break;
90
+ case TokenTypeId.AlignedModifier:
91
+ case TokenTypeId.AggregateOutputValue:
92
+ case TokenTypeId.AssignmentExpression:
93
+ case TokenTypeId.BinaryExpression:
94
+ case TokenTypeId.LengthofExpression:
95
+ case TokenTypeId.UnaryExpression:
96
+ case TokenTypeId.ArrayElementAccess:
97
+ case TokenTypeId.Base64StringLiteral:
98
+ case TokenTypeId.UtfStringLiteral:
99
+ case TokenTypeId.BitModifier:
100
+ case TokenTypeId.CaseClause:
101
+ case TokenTypeId.ClassId:
102
+ case TokenTypeId.ClassIdRange:
103
+ case TokenTypeId.ExtendedClassIdRange:
104
+ case TokenTypeId.ClassMemberAccess:
105
+ case TokenTypeId.DefaultClause:
106
+ case TokenTypeId.ElementaryType:
107
+ case TokenTypeId.ElementaryTypeOutputValue:
108
+ case TokenTypeId.ExpandableModifier:
109
+ case TokenTypeId.ExplicitArrayDimension:
110
+ case TokenTypeId.ImplicitArrayDimension:
111
+ case TokenTypeId.PartialArrayDimension:
112
+ case TokenTypeId.ExtendsModifier:
113
+ case TokenTypeId.LengthAttribute:
114
+ case TokenTypeId.MapEntry:
115
+ case TokenTypeId.MultipleCharacterLiteral:
116
+ case TokenTypeId.Parameter:
117
+ case TokenTypeId.ParameterList:
118
+ case TokenTypeId.ParameterValueList:
119
+ case TokenTypeId.Specification:
120
+ case TokenTypeId._break:
121
+ case TokenTypeId._case:
122
+ case TokenTypeId._class:
123
+ case TokenTypeId._const:
124
+ case TokenTypeId._default:
125
+ case TokenTypeId._do:
126
+ case TokenTypeId._else:
127
+ case TokenTypeId._extends:
128
+ case TokenTypeId._for:
129
+ case TokenTypeId._if:
130
+ case TokenTypeId._switch:
131
+ case TokenTypeId._while:
132
+ case TokenTypeId.abstract:
133
+ case TokenTypeId.Addition:
134
+ case TokenTypeId.AlignmentBitCount8:
135
+ case TokenTypeId.AlignmentBitCount16:
136
+ case TokenTypeId.AlignmentBitCount32:
137
+ case TokenTypeId.AlignmentBitCount64:
138
+ case TokenTypeId.AlignmentBitCount128:
139
+ case TokenTypeId.aligned:
140
+ case TokenTypeId.Assignment:
141
+ case TokenTypeId.base64string:
142
+ case TokenTypeId.Base64StringLiteralCharacters:
143
+ case TokenTypeId.BinaryLiteral:
144
+ case TokenTypeId.bit:
145
+ case TokenTypeId.BitwiseAnd:
146
+ case TokenTypeId.BitwiseOr:
147
+ case TokenTypeId.BitwiseShiftLeft:
148
+ case TokenTypeId.BitwiseShiftRight:
149
+ case TokenTypeId.CloseBrace:
150
+ case TokenTypeId.CloseBracket:
151
+ case TokenTypeId.CloseParenthesis:
152
+ case TokenTypeId.Colon:
153
+ case TokenTypeId.Comma:
154
+ case TokenTypeId.Comment:
155
+ case TokenTypeId.computed:
156
+ case TokenTypeId.DecimalLiteral:
157
+ case TokenTypeId.Division:
158
+ case TokenTypeId.DoubleQuote:
159
+ case TokenTypeId.expandable:
160
+ case TokenTypeId.float:
161
+ case TokenTypeId.FloatingPointLiteral:
162
+ case TokenTypeId.HexadecimalLiteral:
163
+ case TokenTypeId.Identifier:
164
+ case TokenTypeId.int:
165
+ case TokenTypeId.IntegerLiteral:
166
+ case TokenTypeId.legacy:
167
+ case TokenTypeId.lengthof:
168
+ case TokenTypeId.LogicalAnd:
169
+ case TokenTypeId.LogicalOr:
170
+ case TokenTypeId.LookAhead:
171
+ case TokenTypeId.map:
172
+ case TokenTypeId.Modulus:
173
+ case TokenTypeId.MultipleCharacterLiteralCharacters:
174
+ case TokenTypeId.Multiplication:
175
+ case TokenTypeId.OpenBrace:
176
+ case TokenTypeId.OpenBracket:
177
+ case TokenTypeId.OpenParenthesis:
178
+ case TokenTypeId.Period:
179
+ case TokenTypeId.PostfixDecrement:
180
+ case TokenTypeId.PostfixIncrement:
181
+ case TokenTypeId.RangeOperator:
182
+ case TokenTypeId.reserved:
183
+ case TokenTypeId.RelationalEqual:
184
+ case TokenTypeId.RelationalGreaterThan:
185
+ case TokenTypeId.RelationalGreaterThanOrEqual:
186
+ case TokenTypeId.RelationalLessThan:
187
+ case TokenTypeId.RelationalLessThanOrEqual:
188
+ case TokenTypeId.RelationalNotEqual:
189
+ case TokenTypeId.Semicolon:
190
+ case TokenTypeId.SingleQuote:
191
+ case TokenTypeId.Subtraction:
192
+ case TokenTypeId.UnaryNegation:
193
+ case TokenTypeId.UnaryPlus:
194
+ case TokenTypeId.unsigned:
195
+ case TokenTypeId.utf16string:
196
+ case TokenTypeId.utf8list:
197
+ case TokenTypeId.utf8string:
198
+ case TokenTypeId.utfstring:
199
+ case TokenTypeId.UtfPrefix:
200
+ case TokenTypeId.UtfStringLiteralCharacters:
201
+ case TokenTypeId.Whitespace:
202
+ break;
203
+ default: {
204
+ const exhaustiveCheck: never = tokenTypeId;
205
+ throw new InternalScannerError(
206
+ "Unreachable code reached, tokenTypeId == " + exhaustiveCheck,
207
+ );
208
+ }
209
+ }
210
+ });
@@ -0,0 +1,162 @@
1
+ import { StringLiteralKind } from "../../node/enum/string-literal-kind.ts";
2
+ import { InternalScannerError } from "../../../scanner-error.ts";
3
+
4
+ // Generated by Lezer from the SDL grammar
5
+ import * as TokenTypeId from "../../../lezer/parser.terms.ts";
6
+
7
+ export const stringLiteralKindByTokenTypeId: Map<number, StringLiteralKind> =
8
+ new Map();
9
+
10
+ /**
11
+ * Map parsed token type ID to AST token type enum.
12
+ * Exhaustive switch statement to ensure all token type IDs are handled.
13
+ */
14
+ Object.values(TokenTypeId).forEach((tokenTypeId) => {
15
+ switch (tokenTypeId) {
16
+ case TokenTypeId.Base64StringLiteral:
17
+ stringLiteralKindByTokenTypeId.set(
18
+ tokenTypeId,
19
+ StringLiteralKind.BASIC,
20
+ );
21
+ break;
22
+ case TokenTypeId.UtfStringLiteral:
23
+ stringLiteralKindByTokenTypeId.set(
24
+ tokenTypeId,
25
+ StringLiteralKind.UTF,
26
+ );
27
+ break;
28
+ case TokenTypeId.AlignedModifier:
29
+ case TokenTypeId.AggregateOutputValue:
30
+ case TokenTypeId.ArrayDefinition:
31
+ case TokenTypeId.ClassDefinition:
32
+ case TokenTypeId.ClassDeclaration:
33
+ case TokenTypeId.CompoundStatement:
34
+ case TokenTypeId.ComputedArrayDefinition:
35
+ case TokenTypeId.ComputedElementaryTypeDefinition:
36
+ case TokenTypeId.DoStatement:
37
+ case TokenTypeId.ElementaryTypeDefinition:
38
+ case TokenTypeId.ExpressionStatement:
39
+ case TokenTypeId.ForStatement:
40
+ case TokenTypeId.IfStatement:
41
+ case TokenTypeId.MapDeclaration:
42
+ case TokenTypeId.StringDefinition:
43
+ case TokenTypeId.SwitchStatement:
44
+ case TokenTypeId.WhileStatement:
45
+ case TokenTypeId.AssignmentExpression:
46
+ case TokenTypeId.BinaryExpression:
47
+ case TokenTypeId.LengthofExpression:
48
+ case TokenTypeId.UnaryExpression:
49
+ case TokenTypeId.ArrayElementAccess:
50
+ case TokenTypeId.BitModifier:
51
+ case TokenTypeId.CaseClause:
52
+ case TokenTypeId.ClassId:
53
+ case TokenTypeId.ClassIdRange:
54
+ case TokenTypeId.ExtendedClassIdRange:
55
+ case TokenTypeId.ClassMemberAccess:
56
+ case TokenTypeId.DefaultClause:
57
+ case TokenTypeId.ElementaryType:
58
+ case TokenTypeId.ElementaryTypeOutputValue:
59
+ case TokenTypeId.ExpandableModifier:
60
+ case TokenTypeId.ExplicitArrayDimension:
61
+ case TokenTypeId.ImplicitArrayDimension:
62
+ case TokenTypeId.PartialArrayDimension:
63
+ case TokenTypeId.ExtendsModifier:
64
+ case TokenTypeId.LengthAttribute:
65
+ case TokenTypeId.MapDefinition:
66
+ case TokenTypeId.MapEntry:
67
+ case TokenTypeId.MultipleCharacterLiteral:
68
+ case TokenTypeId.Parameter:
69
+ case TokenTypeId.ParameterList:
70
+ case TokenTypeId.ParameterValueList:
71
+ case TokenTypeId.Specification:
72
+ case TokenTypeId._break:
73
+ case TokenTypeId._case:
74
+ case TokenTypeId._class:
75
+ case TokenTypeId._const:
76
+ case TokenTypeId._default:
77
+ case TokenTypeId._do:
78
+ case TokenTypeId._else:
79
+ case TokenTypeId._extends:
80
+ case TokenTypeId._for:
81
+ case TokenTypeId._if:
82
+ case TokenTypeId._switch:
83
+ case TokenTypeId._while:
84
+ case TokenTypeId.abstract:
85
+ case TokenTypeId.Addition:
86
+ case TokenTypeId.AlignmentBitCount8:
87
+ case TokenTypeId.AlignmentBitCount16:
88
+ case TokenTypeId.AlignmentBitCount32:
89
+ case TokenTypeId.AlignmentBitCount64:
90
+ case TokenTypeId.AlignmentBitCount128:
91
+ case TokenTypeId.aligned:
92
+ case TokenTypeId.Assignment:
93
+ case TokenTypeId.base64string:
94
+ case TokenTypeId.Base64StringLiteralCharacters:
95
+ case TokenTypeId.BinaryLiteral:
96
+ case TokenTypeId.bit:
97
+ case TokenTypeId.BitwiseAnd:
98
+ case TokenTypeId.BitwiseOr:
99
+ case TokenTypeId.BitwiseShiftLeft:
100
+ case TokenTypeId.BitwiseShiftRight:
101
+ case TokenTypeId.CloseBrace:
102
+ case TokenTypeId.CloseBracket:
103
+ case TokenTypeId.CloseParenthesis:
104
+ case TokenTypeId.Colon:
105
+ case TokenTypeId.Comma:
106
+ case TokenTypeId.Comment:
107
+ case TokenTypeId.computed:
108
+ case TokenTypeId.DecimalLiteral:
109
+ case TokenTypeId.Division:
110
+ case TokenTypeId.DoubleQuote:
111
+ case TokenTypeId.expandable:
112
+ case TokenTypeId.float:
113
+ case TokenTypeId.FloatingPointLiteral:
114
+ case TokenTypeId.HexadecimalLiteral:
115
+ case TokenTypeId.Identifier:
116
+ case TokenTypeId.int:
117
+ case TokenTypeId.IntegerLiteral:
118
+ case TokenTypeId.legacy:
119
+ case TokenTypeId.lengthof:
120
+ case TokenTypeId.LogicalAnd:
121
+ case TokenTypeId.LogicalOr:
122
+ case TokenTypeId.LookAhead:
123
+ case TokenTypeId.map:
124
+ case TokenTypeId.Modulus:
125
+ case TokenTypeId.MultipleCharacterLiteralCharacters:
126
+ case TokenTypeId.Multiplication:
127
+ case TokenTypeId.OpenBrace:
128
+ case TokenTypeId.OpenBracket:
129
+ case TokenTypeId.OpenParenthesis:
130
+ case TokenTypeId.Period:
131
+ case TokenTypeId.PostfixDecrement:
132
+ case TokenTypeId.PostfixIncrement:
133
+ case TokenTypeId.RangeOperator:
134
+ case TokenTypeId.reserved:
135
+ case TokenTypeId.RelationalEqual:
136
+ case TokenTypeId.RelationalGreaterThan:
137
+ case TokenTypeId.RelationalGreaterThanOrEqual:
138
+ case TokenTypeId.RelationalLessThan:
139
+ case TokenTypeId.RelationalLessThanOrEqual:
140
+ case TokenTypeId.RelationalNotEqual:
141
+ case TokenTypeId.Semicolon:
142
+ case TokenTypeId.SingleQuote:
143
+ case TokenTypeId.Subtraction:
144
+ case TokenTypeId.UnaryNegation:
145
+ case TokenTypeId.UnaryPlus:
146
+ case TokenTypeId.unsigned:
147
+ case TokenTypeId.utf16string:
148
+ case TokenTypeId.utf8list:
149
+ case TokenTypeId.utf8string:
150
+ case TokenTypeId.utfstring:
151
+ case TokenTypeId.UtfPrefix:
152
+ case TokenTypeId.UtfStringLiteralCharacters:
153
+ case TokenTypeId.Whitespace:
154
+ break;
155
+ default: {
156
+ const exhaustiveCheck: never = tokenTypeId;
157
+ throw new InternalScannerError(
158
+ "Unreachable code reached, tokenTypeId == " + exhaustiveCheck,
159
+ );
160
+ }
161
+ }
162
+ });