ibex 0.1.0 → 0.2.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 (384) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +247 -104
  3. data/docs/architecture.md +322 -28
  4. data/docs/cst-migration.md +107 -0
  5. data/docs/cst.md +213 -0
  6. data/docs/development.md +129 -0
  7. data/docs/editor-setup.md +25 -0
  8. data/docs/error-ux.md +60 -0
  9. data/docs/grammar-reference.md +458 -18
  10. data/docs/lexer-migration.md +51 -0
  11. data/docs/racc-migration.md +34 -6
  12. data/docs/release-readiness.md +163 -0
  13. data/docs/stability.md +124 -0
  14. data/examples/README.md +60 -0
  15. data/examples/calculator.y +44 -0
  16. data/examples/csv.y +32 -0
  17. data/examples/ini.y +70 -0
  18. data/examples/json.y +48 -0
  19. data/examples/tiny_language.y +75 -0
  20. data/lib/ibex/analysis/sets.rb +5 -4
  21. data/lib/ibex/artifact_set.rb +63 -0
  22. data/lib/ibex/cli/ambiguity.rb +66 -0
  23. data/lib/ibex/cli/counterexample_options.rb +6 -2
  24. data/lib/ibex/cli/coverage.rb +173 -0
  25. data/lib/ibex/cli/debug.rb +106 -0
  26. data/lib/ibex/cli/diagnostics.rb +116 -0
  27. data/lib/ibex/cli/documentation.rb +67 -0
  28. data/lib/ibex/cli/error_messages.rb +177 -0
  29. data/lib/ibex/cli/explain.rb +76 -0
  30. data/lib/ibex/cli/formatting.rb +386 -0
  31. data/lib/ibex/cli/generation_artifacts.rb +138 -0
  32. data/lib/ibex/cli/generation_error_messages.rb +39 -0
  33. data/lib/ibex/cli/grammar_tests.rb +122 -0
  34. data/lib/ibex/cli/ir_tools.rb +184 -0
  35. data/lib/ibex/cli/lsp.rb +33 -0
  36. data/lib/ibex/cli/outputs.rb +91 -8
  37. data/lib/ibex/cli/racc_migration.rb +87 -0
  38. data/lib/ibex/cli/samples.rb +92 -0
  39. data/lib/ibex/cli/watch.rb +103 -0
  40. data/lib/ibex/cli.rb +506 -37
  41. data/lib/ibex/codegen/action_locations.rb +103 -0
  42. data/lib/ibex/codegen/action_method_source.rb +210 -0
  43. data/lib/ibex/codegen/action_source.rb +118 -0
  44. data/lib/ibex/codegen/ambiguity.rb +173 -0
  45. data/lib/ibex/codegen/cst_metadata.rb +171 -0
  46. data/lib/ibex/codegen/documentation.rb +170 -0
  47. data/lib/ibex/codegen/explain.rb +312 -0
  48. data/lib/ibex/codegen/generated_action_abi.rb +288 -0
  49. data/lib/ibex/codegen/html.rb +94 -10
  50. data/lib/ibex/codegen/mermaid.rb +43 -0
  51. data/lib/ibex/codegen/railroad.rb +197 -0
  52. data/lib/ibex/codegen/railroad_documentation.rb +59 -0
  53. data/lib/ibex/codegen/rbs.rb +323 -2
  54. data/lib/ibex/codegen/report.rb +46 -6
  55. data/lib/ibex/codegen/ruby.rb +334 -59
  56. data/lib/ibex/codegen/ruby_actions.rb +143 -0
  57. data/lib/ibex/codegen/ruby_ast.rb +121 -0
  58. data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
  59. data/lib/ibex/codegen/ruby_lexer.rb +83 -0
  60. data/lib/ibex/codegen/ruby_syntax.rb +90 -0
  61. data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
  62. data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
  63. data/lib/ibex/codegen/symbol_labels.rb +1 -1
  64. data/lib/ibex/coverage/collector.rb +188 -0
  65. data/lib/ibex/coverage/event_stream.rb +97 -0
  66. data/lib/ibex/coverage/report.rb +259 -0
  67. data/lib/ibex/coverage/runtime_event_validator.rb +160 -0
  68. data/lib/ibex/coverage.rb +13 -0
  69. data/lib/ibex/error_messages/parser.rb +159 -0
  70. data/lib/ibex/error_messages/parser_v2.rb +198 -0
  71. data/lib/ibex/error_messages/renderer.rb +65 -0
  72. data/lib/ibex/error_messages/sentence_search.rb +196 -0
  73. data/lib/ibex/error_messages/update.rb +169 -0
  74. data/lib/ibex/error_messages.rb +165 -0
  75. data/lib/ibex/frontend/ast.rb +145 -6
  76. data/lib/ibex/frontend/bootstrap_parser.rb +47 -4
  77. data/lib/ibex/frontend/diagnostic.rb +81 -0
  78. data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
  79. data/lib/ibex/frontend/dsl.rb +66 -7
  80. data/lib/ibex/frontend/formatter.rb +407 -0
  81. data/lib/ibex/frontend/generated_parser.rb +614 -190
  82. data/lib/ibex/frontend/generated_parser_base.rb +164 -30
  83. data/lib/ibex/frontend/generated_parser_includes.rb +61 -0
  84. data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
  85. data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
  86. data/lib/ibex/frontend/generation.rb +33 -0
  87. data/lib/ibex/frontend/lexer.rb +162 -10
  88. data/lib/ibex/frontend/lexer_recovery.rb +84 -0
  89. data/lib/ibex/frontend/parser/declarations.rb +247 -11
  90. data/lib/ibex/frontend/parser/parameters.rb +82 -0
  91. data/lib/ibex/frontend/parser/rules.rb +43 -6
  92. data/lib/ibex/frontend/parser.rb +182 -4
  93. data/lib/ibex/frontend/regenerator.rb +26 -1
  94. data/lib/ibex/frontend/resolution.rb +69 -0
  95. data/lib/ibex/frontend/resolver.rb +217 -0
  96. data/lib/ibex/frontend/rule_documentation.rb +103 -0
  97. data/lib/ibex/frontend/source_cursor.rb +132 -8
  98. data/lib/ibex/frontend/source_document.rb +229 -0
  99. data/lib/ibex/frontend/source_loader.rb +150 -0
  100. data/lib/ibex/frontend/source_span.rb +81 -0
  101. data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
  102. data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
  103. data/lib/ibex/frontend/token_adapter/declaration_state.rb +216 -26
  104. data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
  105. data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
  106. data/lib/ibex/frontend/token_adapter.rb +8 -3
  107. data/lib/ibex/frontend.rb +13 -2
  108. data/lib/ibex/generation_input.rb +57 -0
  109. data/lib/ibex/generation_manifest.rb +200 -0
  110. data/lib/ibex/generation_transaction.rb +261 -0
  111. data/lib/ibex/generation_transaction_recovery.rb +109 -0
  112. data/lib/ibex/generation_transaction_validation.rb +196 -0
  113. data/lib/ibex/grammar_tests.rb +206 -0
  114. data/lib/ibex/ir/automaton_ir.rb +38 -5
  115. data/lib/ibex/ir/grammar_ir.rb +137 -24
  116. data/lib/ibex/ir/lexer_ir.rb +76 -0
  117. data/lib/ibex/ir/migration.rb +120 -0
  118. data/lib/ibex/ir/serialize.rb +110 -19
  119. data/lib/ibex/ir/validator/automaton.rb +345 -0
  120. data/lib/ibex/ir/validator/base.rb +129 -0
  121. data/lib/ibex/ir/validator/grammar.rb +604 -0
  122. data/lib/ibex/ir/validator/lexer.rb +113 -0
  123. data/lib/ibex/ir/validator.rb +62 -0
  124. data/lib/ibex/ir.rb +57 -4
  125. data/lib/ibex/lalr/build_metrics.rb +23 -0
  126. data/lib/ibex/lalr/builder.rb +379 -52
  127. data/lib/ibex/lalr/conflict.rb +1 -0
  128. data/lib/ibex/lalr/conflict_search.rb +11 -5
  129. data/lib/ibex/lalr/counterexample.rb +20 -5
  130. data/lib/ibex/lalr/direct_lookaheads.rb +236 -0
  131. data/lib/ibex/lalr/ielr_partition.rb +152 -0
  132. data/lib/ibex/lalr/on_error_reductions.rb +74 -0
  133. data/lib/ibex/lalr.rb +7 -0
  134. data/lib/ibex/location.rb +129 -0
  135. data/lib/ibex/lsp/document_handlers.rb +66 -0
  136. data/lib/ibex/lsp/document_store.rb +264 -0
  137. data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
  138. data/lib/ibex/lsp/document_store_validation.rb +61 -0
  139. data/lib/ibex/lsp/initialization_handlers.rb +78 -0
  140. data/lib/ibex/lsp/navigation_handlers.rb +56 -0
  141. data/lib/ibex/lsp/position_codec.rb +109 -0
  142. data/lib/ibex/lsp/protocol_error.rb +33 -0
  143. data/lib/ibex/lsp/request_handlers.rb +45 -0
  144. data/lib/ibex/lsp/request_support.rb +87 -0
  145. data/lib/ibex/lsp/server.rb +146 -0
  146. data/lib/ibex/lsp/symbol_index.rb +241 -0
  147. data/lib/ibex/lsp/symbol_index_builder.rb +267 -0
  148. data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
  149. data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
  150. data/lib/ibex/lsp/symbol_occurrence.rb +17 -0
  151. data/lib/ibex/lsp/transport.rb +118 -0
  152. data/lib/ibex/lsp/workspace.rb +127 -0
  153. data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
  154. data/lib/ibex/lsp.rb +32 -0
  155. data/lib/ibex/normalize/declarations.rb +140 -7
  156. data/lib/ibex/normalize/diagnostics.rb +50 -5
  157. data/lib/ibex/normalize/expander.rb +59 -55
  158. data/lib/ibex/normalize/expression.rb +60 -39
  159. data/lib/ibex/normalize/inline_expansion.rb +414 -0
  160. data/lib/ibex/normalize/inline_validation.rb +174 -0
  161. data/lib/ibex/normalize/lexer.rb +131 -0
  162. data/lib/ibex/normalize/named_references.rb +60 -0
  163. data/lib/ibex/normalize/nodes.rb +46 -0
  164. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +69 -0
  165. data/lib/ibex/normalize/parameter_lowering.rb +126 -0
  166. data/lib/ibex/normalize/parameter_substitution.rb +125 -0
  167. data/lib/ibex/normalize/parameter_validation.rb +140 -0
  168. data/lib/ibex/normalize/parameters.rb +199 -0
  169. data/lib/ibex/normalize/recovery_declarations.rb +84 -0
  170. data/lib/ibex/normalize.rb +179 -14
  171. data/lib/ibex/racc_migration/checker.rb +122 -0
  172. data/lib/ibex/racc_migration/harness.rb +177 -0
  173. data/lib/ibex/racc_migration/report.rb +94 -0
  174. data/lib/ibex/racc_migration.rb +12 -0
  175. data/lib/ibex/rake_task.rb +116 -0
  176. data/lib/ibex/samples.rb +186 -0
  177. data/lib/ibex/table_simulation/result.rb +51 -0
  178. data/lib/ibex/table_simulation/simulator.rb +253 -0
  179. data/lib/ibex/table_simulation/step.rb +60 -0
  180. data/lib/ibex/table_simulation/text.rb +31 -0
  181. data/lib/ibex/table_simulation.rb +13 -0
  182. data/lib/ibex/tables.rb +9 -70
  183. data/lib/ibex/version.rb +1 -1
  184. data/lib/ibex/watch/runner.rb +172 -0
  185. data/lib/ibex/watch/source_snapshot.rb +93 -0
  186. data/lib/ibex/watch.rb +11 -0
  187. data/lib/ibex.rb +25 -1
  188. data/schema/automaton-ir-v1.schema.json +401 -0
  189. data/schema/automaton-ir-v2.schema.json +58 -0
  190. data/schema/benchmark-v1.schema.json +212 -0
  191. data/schema/benchmark-v2.schema.json +61 -0
  192. data/schema/cst-v1.json +170 -0
  193. data/schema/error-ux-v1.schema.json +258 -0
  194. data/schema/explain-v1.schema.json +433 -0
  195. data/schema/frontend-diagnostics-v1.schema.json +154 -0
  196. data/schema/generation-manifest-v1.schema.json +115 -0
  197. data/schema/grammar-ir-v1.schema.json +426 -0
  198. data/schema/grammar-ir-v2.schema.json +779 -0
  199. data/schema/lexer-ir-v1.schema.json +215 -0
  200. data/schema/migration-check-v1.schema.json +60 -0
  201. data/schema/performance-comparison-v1.schema.json +395 -0
  202. data/schema/public-performance-comparison-v1.schema.json +506 -0
  203. data/schema/public-performance-profile-v1.schema.json +360 -0
  204. data/schema/runtime-coverage-v1.schema.json +86 -0
  205. data/schema/runtime-event-v1.schema.json +308 -0
  206. data/schema/table-simulation-v1.schema.json +70 -0
  207. data/sig/ibex/artifact_set.rbs +37 -0
  208. data/sig/ibex/cli/ambiguity.rbs +22 -0
  209. data/sig/ibex/cli/counterexample_options.rbs +2 -0
  210. data/sig/ibex/cli/coverage.rbs +53 -0
  211. data/sig/ibex/cli/debug.rbs +28 -0
  212. data/sig/ibex/cli/diagnostics.rbs +38 -0
  213. data/sig/ibex/cli/documentation.rbs +25 -0
  214. data/sig/ibex/cli/error_messages.rbs +57 -0
  215. data/sig/ibex/cli/explain.rbs +25 -0
  216. data/sig/ibex/cli/formatting.rbs +103 -0
  217. data/sig/ibex/cli/generation_artifacts.rbs +50 -0
  218. data/sig/ibex/cli/generation_error_messages.rbs +19 -0
  219. data/sig/ibex/cli/grammar_tests.rbs +36 -0
  220. data/sig/ibex/cli/ir_tools.rbs +51 -0
  221. data/sig/ibex/cli/lsp.rbs +14 -0
  222. data/sig/ibex/cli/outputs.rbs +17 -0
  223. data/sig/ibex/cli/racc_migration.rbs +30 -0
  224. data/sig/ibex/cli/samples.rbs +30 -0
  225. data/sig/ibex/cli/watch.rbs +43 -0
  226. data/sig/ibex/cli.rbs +104 -5
  227. data/sig/ibex/codegen/action_locations.rbs +45 -0
  228. data/sig/ibex/codegen/action_method_source.rbs +65 -0
  229. data/sig/ibex/codegen/action_source.rbs +50 -0
  230. data/sig/ibex/codegen/ambiguity.rbs +60 -0
  231. data/sig/ibex/codegen/cst_metadata.rbs +59 -0
  232. data/sig/ibex/codegen/documentation.rbs +50 -0
  233. data/sig/ibex/codegen/explain.rbs +85 -0
  234. data/sig/ibex/codegen/generated_action_abi.rbs +101 -0
  235. data/sig/ibex/codegen/html.rbs +18 -2
  236. data/sig/ibex/codegen/mermaid.rbs +16 -0
  237. data/sig/ibex/codegen/railroad.rbs +82 -0
  238. data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
  239. data/sig/ibex/codegen/rbs.rbs +84 -4
  240. data/sig/ibex/codegen/report.rbs +8 -0
  241. data/sig/ibex/codegen/ruby.rbs +97 -23
  242. data/sig/ibex/codegen/ruby_actions.rbs +54 -0
  243. data/sig/ibex/codegen/ruby_ast.rbs +34 -0
  244. data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
  245. data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
  246. data/sig/ibex/codegen/ruby_syntax.rbs +25 -0
  247. data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
  248. data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
  249. data/sig/ibex/coverage/collector.rbs +76 -0
  250. data/sig/ibex/coverage/event_stream.rbs +42 -0
  251. data/sig/ibex/coverage/report.rbs +100 -0
  252. data/sig/ibex/coverage/runtime_event_validator.rbs +68 -0
  253. data/sig/ibex/coverage.rbs +7 -0
  254. data/sig/ibex/error_messages/parser.rbs +58 -0
  255. data/sig/ibex/error_messages/parser_v2.rbs +67 -0
  256. data/sig/ibex/error_messages/renderer.rbs +23 -0
  257. data/sig/ibex/error_messages/sentence_search.rbs +80 -0
  258. data/sig/ibex/error_messages/update.rbs +43 -0
  259. data/sig/ibex/error_messages.rbs +85 -0
  260. data/sig/ibex/frontend/ast.rbs +208 -19
  261. data/sig/ibex/frontend/bootstrap_parser.rbs +11 -0
  262. data/sig/ibex/frontend/diagnostic.rbs +53 -0
  263. data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
  264. data/sig/ibex/frontend/dsl.rbs +33 -4
  265. data/sig/ibex/frontend/formatter.rbs +135 -0
  266. data/sig/ibex/frontend/generated_parser.rbs +218 -68
  267. data/sig/ibex/frontend/generated_parser_base.rbs +61 -10
  268. data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
  269. data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
  270. data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
  271. data/sig/ibex/frontend/generation.rbs +6 -0
  272. data/sig/ibex/frontend/lexer.rbs +49 -2
  273. data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
  274. data/sig/ibex/frontend/parser/declarations.rbs +54 -0
  275. data/sig/ibex/frontend/parser/parameters.rbs +28 -0
  276. data/sig/ibex/frontend/parser/rules.rbs +3 -0
  277. data/sig/ibex/frontend/parser.rbs +66 -0
  278. data/sig/ibex/frontend/regenerator.rbs +11 -0
  279. data/sig/ibex/frontend/resolution.rbs +33 -0
  280. data/sig/ibex/frontend/resolver.rbs +91 -0
  281. data/sig/ibex/frontend/rule_documentation.rbs +42 -0
  282. data/sig/ibex/frontend/source_cursor.rbs +36 -3
  283. data/sig/ibex/frontend/source_document.rbs +119 -0
  284. data/sig/ibex/frontend/source_loader.rbs +66 -0
  285. data/sig/ibex/frontend/source_span.rbs +53 -0
  286. data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
  287. data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
  288. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +73 -5
  289. data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
  290. data/sig/ibex/frontend/token_adapter.rbs +5 -2
  291. data/sig/ibex/frontend.rbs +1 -1
  292. data/sig/ibex/generation_input.rbs +37 -0
  293. data/sig/ibex/generation_manifest.rbs +67 -0
  294. data/sig/ibex/generation_transaction.rbs +82 -0
  295. data/sig/ibex/generation_transaction_recovery.rbs +36 -0
  296. data/sig/ibex/generation_transaction_validation.rbs +65 -0
  297. data/sig/ibex/grammar_tests.rbs +93 -0
  298. data/sig/ibex/ir/automaton_ir.rbs +8 -2
  299. data/sig/ibex/ir/grammar_ir.rbs +75 -15
  300. data/sig/ibex/ir/lexer_ir.rbs +57 -0
  301. data/sig/ibex/ir/migration.rbs +34 -0
  302. data/sig/ibex/ir/serialize.rbs +23 -6
  303. data/sig/ibex/ir/validator/automaton.rbs +109 -0
  304. data/sig/ibex/ir/validator/base.rbs +65 -0
  305. data/sig/ibex/ir/validator/grammar.rbs +184 -0
  306. data/sig/ibex/ir/validator/lexer.rbs +37 -0
  307. data/sig/ibex/ir/validator.rbs +16 -0
  308. data/sig/ibex/ir.rbs +38 -4
  309. data/sig/ibex/lalr/build_metrics.rbs +20 -0
  310. data/sig/ibex/lalr/builder.rbs +95 -15
  311. data/sig/ibex/lalr/conflict_search.rbs +7 -3
  312. data/sig/ibex/lalr/counterexample.rbs +5 -2
  313. data/sig/ibex/lalr/direct_lookaheads.rbs +86 -0
  314. data/sig/ibex/lalr/ielr_partition.rbs +59 -0
  315. data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
  316. data/sig/ibex/lalr.rbs +6 -0
  317. data/sig/ibex/location.rbs +67 -0
  318. data/sig/ibex/lsp/document_handlers.rbs +24 -0
  319. data/sig/ibex/lsp/document_store.rbs +94 -0
  320. data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
  321. data/sig/ibex/lsp/document_store_validation.rbs +26 -0
  322. data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
  323. data/sig/ibex/lsp/navigation_handlers.rbs +30 -0
  324. data/sig/ibex/lsp/position_codec.rbs +40 -0
  325. data/sig/ibex/lsp/protocol_error.rbs +32 -0
  326. data/sig/ibex/lsp/request_handlers.rbs +26 -0
  327. data/sig/ibex/lsp/request_support.rbs +40 -0
  328. data/sig/ibex/lsp/server.rbs +55 -0
  329. data/sig/ibex/lsp/symbol_index.rbs +78 -0
  330. data/sig/ibex/lsp/symbol_index_builder.rbs +87 -0
  331. data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
  332. data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
  333. data/sig/ibex/lsp/symbol_occurrence.rbs +25 -0
  334. data/sig/ibex/lsp/transport.rbs +35 -0
  335. data/sig/ibex/lsp/workspace.rbs +41 -0
  336. data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
  337. data/sig/ibex/lsp.rbs +7 -0
  338. data/sig/ibex/normalize/declarations.rbs +31 -0
  339. data/sig/ibex/normalize/diagnostics.rbs +9 -0
  340. data/sig/ibex/normalize/expander.rbs +20 -14
  341. data/sig/ibex/normalize/expression.rbs +10 -10
  342. data/sig/ibex/normalize/inline_expansion.rbs +120 -0
  343. data/sig/ibex/normalize/inline_validation.rbs +40 -0
  344. data/sig/ibex/normalize/lexer.rbs +37 -0
  345. data/sig/ibex/normalize/named_references.rbs +20 -0
  346. data/sig/ibex/normalize/nodes.rbs +14 -0
  347. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +32 -0
  348. data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
  349. data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
  350. data/sig/ibex/normalize/parameter_validation.rbs +44 -0
  351. data/sig/ibex/normalize/parameters.rbs +46 -0
  352. data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
  353. data/sig/ibex/normalize.rbs +123 -18
  354. data/sig/ibex/racc_migration/checker.rbs +36 -0
  355. data/sig/ibex/racc_migration/harness.rbs +16 -0
  356. data/sig/ibex/racc_migration/report.rbs +53 -0
  357. data/sig/ibex/racc_migration.rbs +8 -0
  358. data/sig/ibex/rake_task.rbs +51 -0
  359. data/sig/ibex/samples.rbs +51 -0
  360. data/sig/ibex/table_simulation/result.rbs +32 -0
  361. data/sig/ibex/table_simulation/simulator.rbs +98 -0
  362. data/sig/ibex/table_simulation/step.rbs +40 -0
  363. data/sig/ibex/table_simulation/text.rbs +14 -0
  364. data/sig/ibex/table_simulation.rbs +7 -0
  365. data/sig/ibex/tables.rbs +0 -26
  366. data/sig/ibex/watch/runner.rbs +48 -0
  367. data/sig/ibex/watch/source_snapshot.rbs +42 -0
  368. data/sig/ibex/watch.rbs +7 -0
  369. data/sig/ibex.rbs +2 -0
  370. metadata +301 -16
  371. data/.rubocop.yml +0 -43
  372. data/CHANGELOG.md +0 -30
  373. data/Rakefile +0 -25
  374. data/Steepfile +0 -10
  375. data/docs/compat-notes.md +0 -37
  376. data/docs/lexer-coverage.md +0 -14
  377. data/docs/phase10-extensions.md +0 -27
  378. data/gemfiles/Gemfile +0 -7
  379. data/gemfiles/Gemfile.lock +0 -98
  380. data/lib/ibex/frontend/grammar.y +0 -156
  381. data/lib/ibex/runtime/parser.rb +0 -360
  382. data/lib/ibex/runtime.rb +0 -8
  383. data/sig/ibex/runtime/parser.rbs +0 -167
  384. data/sig/ibex/runtime.rbs +0 -6
@@ -2,14 +2,36 @@
2
2
 
3
3
  module Ibex
4
4
  module Frontend
5
+ # Keeps the public Rule constructor compatible with ASTs built before parameters and inline rules existed.
6
+ module ASTRuleDefaults
7
+ # @rbs (*untyped arguments, **untyped keywords) -> void
8
+ def initialize: (*untyped arguments, **untyped keywords) -> void
9
+ end
10
+
5
11
  # Grammar frontend node types.
12
+ # rubocop:disable Metrics/ModuleLength -- the public node vocabulary is intentionally kept together.
6
13
  module AST
7
- type declaration = Tokens | Precedence | Options | Expect | Start | Convert
14
+ type symbol_metadata = DisplayName | SemanticType
15
+
16
+ type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | symbol_metadata
17
+
18
+ type lexer_entry = LexerRule | LexerState
8
19
 
9
- type item = SymbolReference | InlineAction | Optional | Star | Plus | Group | SeparatedList
20
+ type item = SymbolReference | ParameterizedReference | InlineAction | Optional | Star | Plus | Group | SeparatedList | Empty
10
21
 
11
22
  type user_code = Hash[String, Array[UserCode]]
12
23
 
24
+ class Rule < Struct[String | Array[String] | Array[Alternative] | Location | String? | bool]
25
+ attr_accessor lhs: String
26
+ attr_accessor parameters: Array[String]
27
+ attr_accessor alternatives: Array[Alternative]
28
+ attr_accessor loc: Location
29
+ attr_accessor documentation: String?
30
+ attr_accessor inline: bool
31
+ def self.new: (?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool?) -> instance
32
+ | ({ ?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool? }) -> instance
33
+ end
34
+
13
35
  # Adds deterministic, recursively serializable hashes to Struct nodes.
14
36
  # @rbs module-self Struct[untyped]
15
37
  module Node : Struct[untyped]
@@ -20,7 +42,7 @@ module Ibex
20
42
  def serialize: (untyped value) -> untyped
21
43
  end
22
44
 
23
- class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location]
45
+ class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool?]
24
46
  attr_accessor class_name(): String
25
47
 
26
48
  attr_accessor superclass(): String?
@@ -33,17 +55,43 @@ module Ibex
33
55
 
34
56
  attr_accessor loc(): Location
35
57
 
36
- def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location) -> instance
37
- | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location }) -> instance
58
+ attr_accessor extended(): bool?
59
+
60
+ attr_accessor cst(): bool?
61
+
62
+ def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?) -> instance
63
+ | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool? }) -> instance
64
+ end
65
+
66
+ class Fragment < Struct[Array[declaration] | Array[Rule] | Location]
67
+ attr_accessor declarations(): Array[declaration]
68
+
69
+ attr_accessor rules(): Array[Rule]
70
+
71
+ attr_accessor loc(): Location
72
+
73
+ def self.new: (?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location) -> instance
74
+ | ({ ?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location }) -> instance
75
+ end
76
+
77
+ class Include < Struct[String | Location]
78
+ attr_accessor path(): String
79
+
80
+ attr_accessor loc(): Location
81
+
82
+ def self.new: (?path: String, ?loc: Location) -> instance
83
+ | ({ ?path: String, ?loc: Location }) -> instance
38
84
  end
39
85
 
40
- class Tokens < Struct[Array[String] | Location]
86
+ class Tokens < Struct[Array[String] | Hash[String, String]? | Location]
41
87
  attr_accessor names(): Array[String]
42
88
 
89
+ attr_accessor aliases(): Hash[String, String]?
90
+
43
91
  attr_accessor loc(): Location
44
92
 
45
- def self.new: (?names: Array[String], ?loc: Location) -> instance
46
- | ({ ?names: Array[String], ?loc: Location }) -> instance
93
+ def self.new: (?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location) -> instance
94
+ | ({ ?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location }) -> instance
47
95
  end
48
96
 
49
97
  class Precedence < Struct[Symbol | Array[PrecedenceLevel] | Location]
@@ -86,13 +134,88 @@ module Ibex
86
134
  | ({ ?conflicts: Integer, ?loc: Location }) -> instance
87
135
  end
88
136
 
89
- class Start < Struct[String | Location]
137
+ class ExpectRR < Struct[Integer | Location]
138
+ attr_accessor conflicts(): Integer
139
+
140
+ attr_accessor loc(): Location
141
+
142
+ def self.new: (?conflicts: Integer, ?loc: Location) -> instance
143
+ | ({ ?conflicts: Integer, ?loc: Location }) -> instance
144
+ end
145
+
146
+ class Start < Struct[Array[String] | Location]
147
+ attr_accessor names(): Array[String]
148
+
149
+ attr_accessor loc(): Location
150
+
151
+ def self.new: (?names: Array[String], ?loc: Location) -> instance
152
+ | ({ ?names: Array[String], ?loc: Location }) -> instance
153
+ end
154
+
155
+ class Recovery < Struct[Array[String] | Location]
156
+ attr_accessor sync_tokens(): Array[String]
157
+
158
+ attr_accessor loc(): Location
159
+
160
+ def self.new: (?sync_tokens: Array[String], ?loc: Location) -> instance
161
+ | ({ ?sync_tokens: Array[String], ?loc: Location }) -> instance
162
+ end
163
+
164
+ class OnErrorReduce < Struct[Array[String] | Location]
165
+ attr_accessor names(): Array[String]
166
+
167
+ attr_accessor loc(): Location
168
+
169
+ def self.new: (?names: Array[String], ?loc: Location) -> instance
170
+ | ({ ?names: Array[String], ?loc: Location }) -> instance
171
+ end
172
+
173
+ class GrammarTest < Struct[Symbol | String | Location]
174
+ attr_accessor expectation(): Symbol
175
+
176
+ attr_accessor source(): String
177
+
178
+ attr_accessor loc(): Location
179
+
180
+ def self.new: (?expectation: Symbol, ?source: String, ?loc: Location) -> instance
181
+ | ({ ?expectation: Symbol, ?source: String, ?loc: Location }) -> instance
182
+ end
183
+
184
+ class Lexer < Struct[Array[lexer_entry] | Location]
185
+ attr_accessor definitions(): Array[lexer_entry]
186
+
187
+ attr_accessor loc(): Location
188
+
189
+ def self.new: (?definitions: Array[lexer_entry], ?loc: Location) -> instance
190
+ | ({ ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
191
+ end
192
+
193
+ class LexerRule < Struct[Symbol | String? | String | Location]
194
+ attr_accessor kind(): Symbol
195
+
196
+ attr_accessor token(): String?
197
+
198
+ attr_accessor pattern(): String
199
+
200
+ attr_accessor pattern_kind(): Symbol
201
+
202
+ attr_accessor action(): String?
203
+
204
+ attr_accessor loc(): Location
205
+
206
+ def self.new: (?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location) -> instance
207
+ | ({ ?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location }) -> instance
208
+ end
209
+
210
+ class LexerState < Struct[String | Array[lexer_entry] | Location]
90
211
  attr_accessor name(): String
91
212
 
213
+ attr_accessor definitions(): Array[lexer_entry]
214
+
92
215
  attr_accessor loc(): Location
93
216
 
94
- def self.new: (?name: String, ?loc: Location) -> instance
95
- | ({ ?name: String, ?loc: Location }) -> instance
217
+ def self.new: (?name: String, ?definitions: Array[lexer_entry], ?loc: Location) -> instance
218
+ | ({ ?name: String, ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
96
219
  end
97
220
 
98
221
  class Convert < Struct[Array[Conversion] | Location]
@@ -115,28 +238,74 @@ module Ibex
115
238
  | ({ ?name: String, ?expression: String, ?loc: Location }) -> instance
116
239
  end
117
240
 
118
- class Rule < Struct[String | Array[Alternative] | Location]
119
- attr_accessor lhs(): String
241
+ class DisplayName < Struct[String | Location]
242
+ attr_accessor name(): String
243
+
244
+ attr_accessor value(): String
245
+
246
+ attr_accessor loc(): Location
247
+
248
+ def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
249
+ | ({ ?name: String, ?value: String, ?loc: Location }) -> instance
250
+ end
251
+
252
+ class SemanticType < Struct[String | Location]
253
+ attr_accessor name(): String
254
+
255
+ attr_accessor value(): String
256
+
257
+ attr_accessor loc(): Location
258
+
259
+ def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
260
+ | ({ ?name: String, ?value: String, ?loc: Location }) -> instance
261
+ end
262
+
263
+ class Parameter < Struct[String | String? | Location]
264
+ attr_accessor name(): String
265
+
266
+ attr_accessor semantic_type(): String?
267
+
268
+ attr_accessor loc(): Location
269
+
270
+ def self.new: (?name: String, ?semantic_type: String?, ?loc: Location) -> instance
271
+ | ({ ?name: String, ?semantic_type: String?, ?loc: Location }) -> instance
272
+ end
273
+
274
+ class Printer < Struct[String | Location]
275
+ attr_accessor name(): String
120
276
 
121
- attr_accessor alternatives(): Array[Alternative]
277
+ attr_accessor code(): String
122
278
 
123
279
  attr_accessor loc(): Location
124
280
 
125
- def self.new: (?lhs: String, ?alternatives: Array[Alternative], ?loc: Location) -> instance
126
- | ({ ?lhs: String, ?alternatives: Array[Alternative], ?loc: Location }) -> instance
281
+ def self.new: (?name: String, ?code: String, ?loc: Location) -> instance
282
+ | ({ ?name: String, ?code: String, ?loc: Location }) -> instance
127
283
  end
128
284
 
129
- class Alternative < Struct[Array[item] | InlineAction? | String? | Location]
285
+ class Alternative < Struct[Array[item] | InlineAction? | String? | NodeAnnotation? | Location]
130
286
  attr_accessor items(): Array[item]
131
287
 
132
288
  attr_accessor action(): InlineAction?
133
289
 
134
290
  attr_accessor precedence(): String?
135
291
 
292
+ attr_accessor node_annotation(): NodeAnnotation?
293
+
294
+ attr_accessor loc(): Location
295
+
296
+ def self.new: (?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location) -> instance
297
+ | ({ ?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location }) -> instance
298
+ end
299
+
300
+ class NodeAnnotation < Struct[String | Array[String] | Location]
301
+ attr_accessor name(): String
302
+
303
+ attr_accessor fields(): Array[String]
304
+
136
305
  attr_accessor loc(): Location
137
306
 
138
- def self.new: (?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?loc: Location) -> instance
139
- | ({ ?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?loc: Location }) -> instance
307
+ def self.new: (?name: String, ?fields: Array[String], ?loc: Location) -> instance
308
+ | ({ ?name: String, ?fields: Array[String], ?loc: Location }) -> instance
140
309
  end
141
310
 
142
311
  class SymbolReference < Struct[String | String? | Location]
@@ -150,6 +319,19 @@ module Ibex
150
319
  | ({ ?name: String, ?named_reference: String?, ?loc: Location }) -> instance
151
320
  end
152
321
 
322
+ class ParameterizedReference < Struct[String | Array[item] | String? | Location]
323
+ attr_accessor name(): String
324
+
325
+ attr_accessor arguments(): Array[item]
326
+
327
+ attr_accessor named_reference(): String?
328
+
329
+ attr_accessor loc(): Location
330
+
331
+ def self.new: (?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location) -> instance
332
+ | ({ ?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location }) -> instance
333
+ end
334
+
153
335
  class InlineAction < Struct[String | Location]
154
336
  attr_accessor code(): String
155
337
 
@@ -159,6 +341,13 @@ module Ibex
159
341
  | ({ ?code: String, ?loc: Location }) -> instance
160
342
  end
161
343
 
344
+ class Empty < Struct[Location]
345
+ attr_accessor loc(): Location
346
+
347
+ def self.new: (?loc: Location) -> instance
348
+ | ({ ?loc: Location }) -> instance
349
+ end
350
+
162
351
  class Optional < Struct[item | Location]
163
352
  attr_accessor item(): item
164
353
 
@@ -8,6 +8,8 @@ module Ibex
8
8
 
9
9
  include BootstrapParserRules
10
10
 
11
+ include BootstrapParserParameters
12
+
11
13
  @mode: Symbol
12
14
 
13
15
  @index: Integer
@@ -20,8 +22,17 @@ module Ibex
20
22
  # @rbs () -> AST::Root
21
23
  def parse: () -> AST::Root
22
24
 
25
+ # @rbs () -> AST::Fragment
26
+ def parse_fragment: () -> AST::Fragment
27
+
23
28
  private
24
29
 
30
+ # @rbs (Array[AST::declaration] declarations) -> void
31
+ def reject_fragment_root_declarations: (Array[AST::declaration] declarations) -> void
32
+
33
+ # @rbs (AST::declaration declaration) -> String?
34
+ def fragment_root_declaration_name: (AST::declaration declaration) -> String?
35
+
25
36
  # @rbs () -> String
26
37
  def parse_constant_path: () -> String
27
38
 
@@ -0,0 +1,53 @@
1
+ # Generated from lib/ibex/frontend/diagnostic.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # An immutable machine-readable frontend error.
6
+ class Diagnostic
7
+ attr_reader code: String
8
+
9
+ attr_reader phase: Symbol
10
+
11
+ attr_reader message: String
12
+
13
+ attr_reader location: Location
14
+
15
+ attr_reader span: SourceSpan?
16
+
17
+ attr_reader expected: Array[String]
18
+
19
+ attr_reader received: String?
20
+
21
+ # @rbs (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?,
22
+ # ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
23
+ def initialize: (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?, ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
24
+
25
+ # @rbs () -> String
26
+ def severity: () -> String
27
+
28
+ # @rbs () -> String
29
+ def to_s: () -> String
30
+
31
+ # @rbs () -> Hash[Symbol, untyped]
32
+ def to_h: () -> Hash[Symbol, untyped]
33
+ end
34
+
35
+ # Immutable output from a diagnostic parse.
36
+ class ParseResult
37
+ attr_reader diagnostics: Array[Diagnostic]
38
+
39
+ attr_reader ast: AST::Root?
40
+
41
+ attr_reader document: SourceDocument?
42
+
43
+ # @rbs (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
44
+ def initialize: (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
45
+
46
+ # @rbs () -> bool
47
+ def success?: () -> bool
48
+
49
+ # @rbs () -> bool
50
+ def partial?: () -> bool
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,98 @@
1
+ # Generated from lib/ibex/frontend/diagnostic_recovery.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Re-runs the generated parser after suppressing only conservative source regions.
6
+ class DiagnosticRecovery
7
+ DECLARATION_STARTS: Array[String]
8
+
9
+ @suppressed: Hash[Integer, bool]
10
+
11
+ @max_diagnostics: Integer
12
+
13
+ @mode: Symbol
14
+
15
+ @tokens: Array[Token]
16
+
17
+ # @rbs (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
18
+ def initialize: (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
19
+
20
+ # @rbs () -> [AST::Root | AST::Fragment | nil, Array[Diagnostic]]
21
+ def parse: () -> [ AST::Root | AST::Fragment | nil, Array[Diagnostic] ]
22
+
23
+ private
24
+
25
+ # @rbs () -> (AST::Root | AST::Fragment | nil)
26
+ def parse_until_stable: () -> (AST::Root | AST::Fragment | nil)
27
+
28
+ # @rbs () -> Array[Token]
29
+ def working_tokens: () -> Array[Token]
30
+
31
+ # @rbs (Diagnostic diagnostic) -> void
32
+ def append_diagnostic: (Diagnostic diagnostic) -> void
33
+
34
+ # @rbs (Diagnostic diagnostic) -> [String, String, Integer, Integer, String]
35
+ def diagnostic_key: (Diagnostic diagnostic) -> [ String, String, Integer, Integer, String ]
36
+
37
+ # @rbs () -> Array[Diagnostic]
38
+ def sorted_diagnostics: () -> Array[Diagnostic]
39
+
40
+ # @rbs (Diagnostic diagnostic) -> [String, Integer, Integer, String, String]
41
+ def diagnostic_sort_key: (Diagnostic diagnostic) -> [ String, Integer, Integer, String, String ]
42
+
43
+ # @rbs (Token? token, Exception error) -> Range[Integer]?
44
+ def suppression_range: (Token? token, Exception error) -> Range[Integer]?
45
+
46
+ # @rbs (Token? token) -> Integer?
47
+ def token_index: (Token? token) -> Integer?
48
+
49
+ # @rbs (String message) -> Integer?
50
+ def token_index_for_message: (String message) -> Integer?
51
+
52
+ # @rbs () -> Integer?
53
+ def rule_marker_index: () -> Integer?
54
+
55
+ # @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
56
+ def declaration_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
57
+
58
+ # @rbs (Integer index) -> bool
59
+ def declaration_start?: (Integer index) -> bool
60
+
61
+ # @rbs (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
62
+ def declaration_finish: (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
63
+
64
+ # @rbs (Integer start, Integer fallback, String closer) -> Integer
65
+ def matching_declaration_end: (Integer start, Integer fallback, String closer) -> Integer
66
+
67
+ # @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
68
+ def rule_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
69
+
70
+ # @rbs (Integer rule_marker) -> Integer
71
+ def grammar_end_index: (Integer rule_marker) -> Integer
72
+
73
+ # @rbs (Integer rule_marker, Integer grammar_end) -> Array[Integer]
74
+ def rule_definition_starts: (Integer rule_marker, Integer grammar_end) -> Array[Integer]
75
+
76
+ # @rbs (Integer index, Integer? lhs_column) -> bool
77
+ def lhs_candidate?: (Integer index, Integer? lhs_column) -> bool
78
+
79
+ # @rbs (Integer failure, Integer start, Integer finish) -> Range[Integer]?
80
+ def alternative_range: (Integer failure, Integer start, Integer finish) -> Range[Integer]?
81
+
82
+ # @rbs (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
83
+ def alternative_slice: (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
84
+
85
+ # @rbs (Integer start, Integer finish) -> Array[Integer]
86
+ def top_level_pipes: (Integer start, Integer finish) -> Array[Integer]
87
+
88
+ # @rbs (Range[Integer] range) -> bool
89
+ def suppress: (Range[Integer] range) -> bool
90
+
91
+ # @rbs (Exception error, Token? token, phase: Symbol) -> Diagnostic
92
+ def diagnostic_from: (Exception error, Token? token, phase: Symbol) -> Diagnostic
93
+
94
+ # @rbs (String message) -> [Array[String], String?]
95
+ def expected_and_received: (String message) -> [ Array[String], String? ]
96
+ end
97
+ end
98
+ end
@@ -35,12 +35,36 @@ module Ibex
35
35
  # @rbs (Integer conflicts) -> void
36
36
  def expect: (Integer conflicts) -> void
37
37
 
38
- # @rbs (Object name) -> void
39
- def start: (Object name) -> void
38
+ # @rbs (*Object names) -> void
39
+ def start: (*Object names) -> void
40
+
41
+ # @rbs (*Object names) -> void
42
+ def recover_sync: (*Object names) -> void
43
+
44
+ # @rbs (*Object names) -> void
45
+ def on_error_reduce: (*Object names) -> void
46
+
47
+ # @rbs (Object source) -> void
48
+ def test_accept: (Object source) -> void
49
+
50
+ # @rbs (Object source) -> void
51
+ def test_reject: (Object source) -> void
40
52
 
41
53
  # @rbs (Object name, Object expression) -> void
42
54
  def convert: (Object name, Object expression) -> void
43
55
 
56
+ # @rbs (Object name, Object value) -> void
57
+ def display: (Object name, Object value) -> void
58
+
59
+ # @rbs (Object name, Object value) -> void
60
+ def type: (Object name, Object value) -> void
61
+
62
+ # @rbs (Object name, ?Object? semantic_type) -> void
63
+ def param: (Object name, ?Object? semantic_type) -> void
64
+
65
+ # @rbs (Object name, Object code) -> void
66
+ def printer: (Object name, Object code) -> void
67
+
44
68
  # @rbs (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
45
69
  def precedence: (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
46
70
 
@@ -79,6 +103,11 @@ module Ibex
79
103
 
80
104
  # @rbs () -> Location
81
105
  def next_location: () -> Location
106
+
107
+ private
108
+
109
+ # @rbs (Object value, String feature) -> String
110
+ def metadata_value: (Object value, String feature) -> String
82
111
  end
83
112
 
84
113
  # Collects ordered associativity levels.
@@ -116,8 +145,8 @@ module Ibex
116
145
  # @rbs (Builder grammar, Location default_location) -> void
117
146
  def initialize: (Builder grammar, Location default_location) -> void
118
147
 
119
- # @rbs (*Object items, ?action: Object?, ?precedence: Object?) -> void
120
- def alt: (*Object items, ?action: Object?, ?precedence: Object?) -> void
148
+ # @rbs (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
149
+ def alt: (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
121
150
  end
122
151
  end
123
152
  end
@@ -0,0 +1,135 @@
1
+ # Generated from lib/ibex/frontend/formatter.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Deterministically formats grammar trivia and rejects any semantic change.
6
+ # rubocop:disable Metrics/ClassLength -- token layout policy stays together so adjacency rules remain auditable.
7
+ class Formatter
8
+ DECLARATION_STARTS: Array[Symbol]
9
+
10
+ ASSOCIATIONS: Array[Symbol]
11
+
12
+ CALLABLES: Array[Symbol]
13
+
14
+ SUFFIXES: Array[String]
15
+
16
+ CLOSERS: Array[String]
17
+
18
+ ADJACENT_AFTER: Array[String]
19
+
20
+ type formatter_element = { segment: Segment, external: external_token?, role: Symbol?, gap: Array[Segment] }
21
+
22
+ # @rbs (String source, ?file: String, ?mode: Symbol) -> String
23
+ def self.format: (String source, ?file: String, ?mode: Symbol) -> String
24
+
25
+ # @rbs (?mode: Symbol) -> void
26
+ def initialize: (?mode: Symbol) -> void
27
+
28
+ # @rbs (String source, ?file: String) -> String
29
+ def format: (String source, ?file: String) -> String
30
+
31
+ private
32
+
33
+ # @rbs (SourceDocument document) -> String
34
+ def render: (SourceDocument document) -> String
35
+
36
+ # @rbs (SourceDocument document) -> Array[formatter_element]
37
+ def build_elements: (SourceDocument document) -> Array[formatter_element]
38
+
39
+ # @rbs (Array[Token] tokens) -> Hash[Integer, external_token]
40
+ def external_types: (Array[Token] tokens) -> Hash[Integer, external_token]
41
+
42
+ # @rbs (Array[formatter_element] elements) -> void
43
+ def annotate_roles: (Array[formatter_element] elements) -> void
44
+
45
+ # @rbs (Array[formatter_element] elements) -> void
46
+ def annotate_comment_indentation: (Array[formatter_element] elements) -> void
47
+
48
+ # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
49
+ def token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
50
+
51
+ # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
52
+ def document_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
53
+
54
+ # @rbs (Hash[Symbol, untyped] state) -> Symbol?
55
+ def section_end_role: (Hash[Symbol, untyped] state) -> Symbol?
56
+
57
+ # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
58
+ def rule_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
59
+
60
+ # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol
61
+ def precedence_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol
62
+
63
+ # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
64
+ def advance_role_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
65
+
66
+ # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
67
+ def advance_precedence_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
68
+
69
+ # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
70
+ def advance_conversion_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
71
+
72
+ # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
73
+ def advance_rule_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
74
+
75
+ # @rbs (formatter_element? previous, formatter_element current) -> String
76
+ def separator: (formatter_element? previous, formatter_element current) -> String
77
+
78
+ # @rbs (formatter_element current, Array[Segment] gap) -> String
79
+ def leading_separator: (formatter_element current, Array[Segment] gap) -> String
80
+
81
+ # @rbs (formatter_element previous, Array[Segment] gap) -> String
82
+ def trailing_separator: (formatter_element previous, Array[Segment] gap) -> String
83
+
84
+ # @rbs (Segment previous, Segment current) -> bool
85
+ def direct_opaque_pair?: (Segment previous, Segment current) -> bool
86
+
87
+ # @rbs (Segment segment) -> bool
88
+ def comment?: (Segment segment) -> bool
89
+
90
+ # @rbs (formatter_element previous, formatter_element current, Array[Segment] gap) -> String
91
+ def comment_separator: (formatter_element previous, formatter_element current, Array[Segment] gap) -> String
92
+
93
+ # @rbs (formatter_element previous, formatter_element current) -> Symbol
94
+ def separator_kind: (formatter_element previous, formatter_element current) -> Symbol
95
+
96
+ # @rbs (external_token? previous_external, external_token? current_external,
97
+ # Symbol? previous_role, Symbol? current_role) -> bool
98
+ def adjacent_tokens?: (external_token? previous_external, external_token? current_external, Symbol? previous_role, Symbol? current_role) -> bool
99
+
100
+ # @rbs (Symbol? previous_role, Symbol? current_role, formatter_element previous,
101
+ # formatter_element current) -> bool
102
+ def line_boundary?: (Symbol? previous_role, Symbol? current_role, formatter_element previous, formatter_element current) -> bool
103
+
104
+ # @rbs (formatter_element element) -> Integer
105
+ def indentation: (formatter_element element) -> Integer
106
+
107
+ # @rbs (Symbol kind, Array[Segment] gap, Integer indentation) -> String
108
+ def render_separator: (Symbol kind, Array[Segment] gap, Integer indentation) -> String
109
+
110
+ # @rbs (Array[Segment] gap) -> bool
111
+ def newline_in?: (Array[Segment] gap) -> bool
112
+
113
+ # @rbs (String text) -> bool
114
+ def text_ends_with_newline?: (String text) -> bool
115
+
116
+ # @rbs (untyped left, untyped right) -> bool
117
+ def same_semantic_projection?: (untyped left, untyped right) -> bool
118
+
119
+ # @rbs (untyped left, untyped right) -> bool
120
+ def comparable_semantic_values?: (untyped left, untyped right) -> bool
121
+
122
+ # @rbs (Hash[untyped, untyped] left, untyped right) -> bool
123
+ def comparable_semantic_hashes?: (Hash[untyped, untyped] left, untyped right) -> bool
124
+
125
+ # @rbs (Array[[untyped, untyped]] pending, untyped left, untyped right) -> void
126
+ def append_semantic_children: (Array[[ untyped, untyped ]] pending, untyped left, untyped right) -> void
127
+
128
+ # @rbs (Struct[untyped] value) -> Array[Symbol]
129
+ def semantic_members: (Struct[untyped] value) -> Array[Symbol]
130
+
131
+ # @rbs (Hash[untyped, untyped] value) -> Array[untyped]
132
+ def semantic_keys: (Hash[untyped, untyped] value) -> Array[untyped]
133
+ end
134
+ end
135
+ end