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
@@ -0,0 +1,36 @@
1
+ # Generated from lib/ibex/generation_transaction_recovery.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Failure recovery and best-effort cleanup for GenerationTransaction.
5
+ module GenerationTransactionRecovery
6
+ private
7
+
8
+ # @rbs (Exception cause) -> bot
9
+ def handle_failure: (Exception cause) -> bot
10
+
11
+ # @rbs (Exception cause, Array[String] rollback, Array[String] cleanup, Array[String] sync) -> bool
12
+ def source_change_clean?: (Exception cause, Array[String] rollback, Array[String] cleanup, Array[String] sync) -> bool
13
+
14
+ # rubocop:disable Layout/LineLength
15
+ # @rbs (Exception cause, Array[String] rollback, Array[String] cleanup, Array[String] sync, Array[String] recovery) -> Array[String]
16
+ def failure_details: (Exception cause, Array[String] rollback, Array[String] cleanup, Array[String] sync, Array[String] recovery) -> Array[String]
17
+
18
+ # @rbs () -> Array[String]
19
+ def recovery_artifacts: () -> Array[String]
20
+
21
+ # @rbs () -> Array[String]
22
+ def rollback: () -> Array[String]
23
+
24
+ # @rbs (Hash[Symbol, untyped] record) -> void
25
+ def rollback_record: (Hash[Symbol, untyped] record) -> void
26
+
27
+ # @rbs (preserve_backups: bool) -> Array[String]
28
+ def cleanup_artifacts: (preserve_backups: bool) -> Array[String]
29
+
30
+ # @rbs (String path, Array[String] failures) -> void
31
+ def remove_artifact: (String path, Array[String] failures) -> void
32
+
33
+ # @rbs () -> Array[String]
34
+ def sync_directories_best_effort: () -> Array[String]
35
+ end
36
+ end
@@ -0,0 +1,65 @@
1
+ # Generated from lib/ibex/generation_transaction_validation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Canonical target, source, symlink, and lock identity checks for generation.
5
+ module GenerationTransactionValidation
6
+ private def lock_path: (String) -> String
7
+
8
+ private
9
+
10
+ # Follow a final symlink while preserving the symlink path itself during publication.
11
+ # @rbs (String path, ?Hash[String, bool] seen, ?validate_links: bool) -> String
12
+ def resolved_target: (String path, ?Hash[String, bool] seen, ?validate_links: bool) -> String
13
+
14
+ # @rbs (String expanded, bool validate_links) -> String
15
+ def existing_target: (String expanded, bool validate_links) -> String
16
+
17
+ # @rbs (String target) -> void
18
+ def validate_existing_target!: (String target) -> void
19
+
20
+ # @rbs () -> void
21
+ def validate_source_boundaries!: () -> void
22
+
23
+ # @rbs (Array[String] lock_paths) -> void
24
+ def validate_lock_boundaries!: (Array[String] lock_paths) -> void
25
+
26
+ # @rbs (String path, File lock) -> void
27
+ def validate_lock_identity!: (String path, File lock) -> void
28
+
29
+ # @rbs () -> Array[String]
30
+ def protected_generation_paths: () -> Array[String]
31
+
32
+ # @rbs () -> Array[File::Stat]
33
+ def protected_generation_stats: () -> Array[File::Stat]
34
+
35
+ # @rbs (File::Stat path_stat, File::Stat lock_stat) -> bool
36
+ def stable_lock_identity?: (File::Stat path_stat, File::Stat lock_stat) -> bool
37
+
38
+ # @rbs (File::Stat left, File::Stat right) -> bool
39
+ def same_inode?: (File::Stat left, File::Stat right) -> bool
40
+
41
+ # @rbs (String left, String right) -> bool
42
+ def paths_alias?: (String left, String right) -> bool
43
+
44
+ # Reject target names that collide on common case-insensitive or
45
+ # normalization-insensitive filesystems, even when the current filesystem
46
+ # would permit both names.
47
+ # @rbs (String path) -> [String, String]
48
+ def portable_target_key: (String path) -> [ String, String ]
49
+
50
+ # @rbs (String phase) -> void
51
+ def ensure_sources_stable!: (String phase) -> void
52
+
53
+ # @rbs (String phase) -> void
54
+ def validate_active_locks!: (String phase) -> void
55
+
56
+ # @rbs (String phase) -> void
57
+ def validate_current_targets!: (String phase) -> void
58
+
59
+ # @rbs (Hash[Symbol, untyped] record, Array[String] sources, String phase) -> void
60
+ def validate_current_target!: (Hash[Symbol, untyped] record, Array[String] sources, String phase) -> void
61
+
62
+ # @rbs () -> void
63
+ def validate_locked_targets!: () -> void
64
+ end
65
+ end
@@ -0,0 +1,93 @@
1
+ # Generated from lib/ibex/grammar_tests.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Executes grammar-declared source examples against one generated parser.
5
+ module GrammarTests
6
+ DEFAULT_TIMEOUT: ::Integer
7
+
8
+ RESULT_MARKER: ::String
9
+
10
+ class Result < Struct[Symbol | String? | IR::location | Array[Integer]]
11
+ attr_accessor expectation(): Symbol
12
+
13
+ attr_accessor actual(): Symbol
14
+
15
+ attr_accessor error_class(): String?
16
+
17
+ attr_accessor error_message(): String?
18
+
19
+ attr_accessor location(): IR::location
20
+
21
+ attr_accessor production_ids(): Array[Integer]
22
+
23
+ def self.new: (?expectation: Symbol, ?actual: Symbol, ?error_class: String?, ?error_message: String?, ?location: IR::location, ?production_ids: Array[Integer]) -> instance
24
+ | ({ ?expectation: Symbol, ?actual: Symbol, ?error_class: String?, ?error_message: String?, ?location: IR::location, ?production_ids: Array[Integer] }) -> instance
25
+ end
26
+
27
+ class Result
28
+ # @rbs () -> bool
29
+ def passed?: () -> bool
30
+ end
31
+
32
+ class ProductionCoverage < Struct[Array[Integer] | Integer]
33
+ attr_accessor covered_ids(): Array[Integer]
34
+
35
+ attr_accessor missing_ids(): Array[Integer]
36
+
37
+ attr_accessor production_count(): Integer
38
+
39
+ def self.new: (?covered_ids: Array[Integer], ?missing_ids: Array[Integer], ?production_count: Integer) -> instance
40
+ | ({ ?covered_ids: Array[Integer], ?missing_ids: Array[Integer], ?production_count: Integer }) -> instance
41
+ end
42
+
43
+ class ProductionCoverage
44
+ # @rbs () -> Float
45
+ def percentage: () -> Float
46
+
47
+ # @rbs (Integer minimum) -> bool
48
+ def meets?: (Integer minimum) -> bool
49
+
50
+ # @rbs () -> bool
51
+ def complete?: () -> bool
52
+ end
53
+
54
+ # Runs all examples in one isolated process while creating a fresh parser
55
+ # instance for every case.
56
+ class Runner
57
+ CHILD_RUNNER: ::String
58
+
59
+ @automaton: IR::Automaton
60
+
61
+ @timeout: Integer
62
+
63
+ # @rbs (IR::Automaton automaton, ?timeout: Integer) -> void
64
+ def initialize: (IR::Automaton automaton, ?timeout: Integer) -> void
65
+
66
+ # @rbs () -> Array[Result]
67
+ def run: () -> Array[Result]
68
+
69
+ # @rbs (Array[Result] results) -> ProductionCoverage
70
+ def production_coverage: (Array[Result] results) -> ProductionCoverage
71
+
72
+ private
73
+
74
+ # @rbs () -> String
75
+ def generated_parser: () -> String
76
+
77
+ # @rbs (String parser_path, String runner_path) -> Array[Result]
78
+ def execute_child: (String parser_path, String runner_path) -> Array[Result]
79
+
80
+ # @rbs (Integer pid) -> Process::Status
81
+ def wait_for_child: (Integer pid) -> Process::Status
82
+
83
+ # @rbs (Process::Status status, String errors) -> bot
84
+ def raise_child_failure: (Process::Status status, String errors) -> bot
85
+
86
+ # @rbs (String output) -> Array[Result]
87
+ def decode_results: (String output) -> Array[Result]
88
+
89
+ # @rbs (IR::grammar_test test, untyped document) -> Result
90
+ def build_result: (IR::grammar_test test, untyped document) -> Result
91
+ end
92
+ end
93
+ end
@@ -57,19 +57,25 @@ module Ibex
57
57
 
58
58
  attr_reader states: Array[AutomatonState]
59
59
 
60
+ attr_reader entry_states: Hash[String, Integer]
61
+
60
62
  attr_reader conflict_summary: conflict_summary
61
63
 
62
64
  attr_reader schema_version: Integer
63
65
 
64
66
  # @rbs (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary,
65
- # ?algorithm: String, ?grammar_digest: String?, ?schema_version: Integer) -> void
66
- def initialize: (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary, ?algorithm: String, ?grammar_digest: String?, ?schema_version: Integer) -> void
67
+ # ?algorithm: String, ?grammar_digest: String?, ?schema_version: Integer,
68
+ # ?entry_states: Hash[String, Integer]?) -> void
69
+ def initialize: (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary, ?algorithm: String, ?grammar_digest: String?, ?schema_version: Integer, ?entry_states: Hash[String, Integer]?) -> void
67
70
 
68
71
  # @rbs () -> Hash[Symbol, untyped]
69
72
  def to_h: () -> Hash[Symbol, untyped]
70
73
 
71
74
  private
72
75
 
76
+ # @rbs () -> void
77
+ def validate_entry_states: () -> void
78
+
73
79
  # @rbs (Grammar grammar) -> String
74
80
  def digest_for: (Grammar grammar) -> String
75
81
  end
@@ -4,6 +4,8 @@ module Ibex
4
4
  module IR
5
5
  SCHEMA_VERSION: ::Integer
6
6
 
7
+ SUPPORTED_SCHEMA_VERSIONS: Array[Integer]
8
+
7
9
  # @rbs (untyped value) -> untyped
8
10
  def self?.deep_freeze: (untyped value) -> untyped
9
11
 
@@ -21,9 +23,15 @@ module Ibex
21
23
 
22
24
  attr_reader location: location?
23
25
 
26
+ attr_reader display_name: String?
27
+
28
+ attr_reader semantic_type: String?
29
+
30
+ attr_reader documentation: String?
31
+
24
32
  # @rbs (id: Integer, name: String, kind: Symbol, ?reserved: bool, ?precedence: precedence?,
25
- # ?location: location?) -> void
26
- def initialize: (id: Integer, name: String, kind: Symbol, ?reserved: bool, ?precedence: precedence?, ?location: location?) -> void
33
+ # ?location: location?, ?display_name: String?, ?semantic_type: String?, ?documentation: String?) -> void
34
+ def initialize: (id: Integer, name: String, kind: Symbol, ?reserved: bool, ?precedence: precedence?, ?location: location?, ?display_name: String?, ?semantic_type: String?, ?documentation: String?) -> void
27
35
 
28
36
  # @rbs () -> bool
29
37
  def terminal?: () -> bool
@@ -31,8 +39,8 @@ module Ibex
31
39
  # @rbs () -> bool
32
40
  def nonterminal?: () -> bool
33
41
 
34
- # @rbs () -> Hash[Symbol, untyped]
35
- def to_h: () -> Hash[Symbol, untyped]
42
+ # @rbs (?schema_version: Integer) -> Hash[Symbol, untyped]
43
+ def to_h: (?schema_version: Integer) -> Hash[Symbol, untyped]
36
44
  end
37
45
 
38
46
  # Opaque Ruby semantic action metadata.
@@ -45,11 +53,14 @@ module Ibex
45
53
 
46
54
  attr_reader context_length: Integer
47
55
 
48
- # @rbs (code: String, location: location, ?named_refs: Array[named_ref], ?context_length: Integer) -> void
49
- def initialize: (code: String, location: location, ?named_refs: Array[named_ref], ?context_length: Integer) -> void
56
+ attr_reader composition: action_composition?
50
57
 
51
- # @rbs () -> Hash[Symbol, untyped]
52
- def to_h: () -> Hash[Symbol, untyped]
58
+ # @rbs (code: String, location: location, ?named_refs: Array[named_ref], ?context_length: Integer,
59
+ # ?composition: action_composition?) -> void
60
+ def initialize: (code: String, location: location, ?named_refs: Array[named_ref], ?context_length: Integer, ?composition: action_composition?) -> void
61
+
62
+ # @rbs (?schema_version: Integer) -> Hash[Symbol, untyped]
63
+ def to_h: (?schema_version: Integer) -> Hash[Symbol, untyped]
53
64
  end
54
65
 
55
66
  # A normalized BNF production using symbol ids.
@@ -66,12 +77,19 @@ module Ibex
66
77
 
67
78
  attr_reader origin: Hash[Symbol, untyped]
68
79
 
80
+ attr_reader documentation: String?
81
+
82
+ attr_reader expansion: production_expansion?
83
+
84
+ attr_reader node: node_annotation?
85
+
69
86
  # @rbs (id: Integer, lhs: Integer, rhs: Array[Integer], action: Action?, precedence_override: Integer?,
70
- # origin: Hash[Symbol, untyped]) -> void
71
- def initialize: (id: Integer, lhs: Integer, rhs: Array[Integer], action: Action?, precedence_override: Integer?, origin: Hash[Symbol, untyped]) -> void
87
+ # origin: Hash[Symbol, untyped], ?documentation: String?, ?expansion: production_expansion?,
88
+ # ?node: node_annotation?) -> void
89
+ def initialize: (id: Integer, lhs: Integer, rhs: Array[Integer], action: Action?, precedence_override: Integer?, origin: Hash[Symbol, untyped], ?documentation: String?, ?expansion: production_expansion?, ?node: node_annotation?) -> void
72
90
 
73
- # @rbs () -> Hash[Symbol, untyped]
74
- def to_h: () -> Hash[Symbol, untyped]
91
+ # @rbs (?schema_version: Integer) -> Hash[Symbol, untyped]
92
+ def to_h: (?schema_version: Integer) -> Hash[Symbol, untyped]
75
93
  end
76
94
 
77
95
  # One opaque user-code block and the location of its first code line.
@@ -95,8 +113,24 @@ module Ibex
95
113
 
96
114
  attr_reader start: String
97
115
 
116
+ attr_reader starts: Array[String]
117
+
118
+ attr_reader mode: grammar_mode
119
+
98
120
  attr_reader expect: Integer
99
121
 
122
+ attr_reader expect_rr: Integer?
123
+
124
+ attr_reader parser_parameters: Array[parser_parameter]
125
+
126
+ attr_reader value_printers: Array[value_printer]
127
+
128
+ attr_reader grammar_tests: Array[grammar_test]
129
+
130
+ attr_reader lexer: Lexer?
131
+
132
+ attr_reader recovery: recovery_policy
133
+
100
134
  attr_reader options: grammar_options
101
135
 
102
136
  attr_reader symbols: Array[GrammarSymbol]
@@ -113,11 +147,22 @@ module Ibex
113
147
 
114
148
  attr_reader schema_version: Integer
115
149
 
116
- # @rbs (class_name: String, superclass: String?, start: String, expect: Integer, options: grammar_options,
150
+ attr_reader source_provenance: source_provenance?
151
+
152
+ attr_reader migration: migration_metadata?
153
+
154
+ # @rbs (class_name: String, superclass: String?, start: String, expect: Integer, ?expect_rr: Integer?,
155
+ # options: grammar_options,
117
156
  # symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String],
118
157
  # conversions: Hash[String, String], warnings: Array[grammar_warning], ?user_code_chunks: user_code_chunks?,
119
- # ?schema_version: Integer) -> void
120
- def initialize: (class_name: String, superclass: String?, start: String, expect: Integer, options: grammar_options, symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String], conversions: Hash[String, String], warnings: Array[grammar_warning], ?user_code_chunks: user_code_chunks?, ?schema_version: Integer) -> void
158
+ # ?schema_version: Integer, ?source_provenance: source_provenance?,
159
+ # ?migration: migration_metadata?, ?parser_parameters: Array[parser_parameter],
160
+ # ?value_printers: Array[value_printer], ?grammar_tests: Array[grammar_test],
161
+ # ?recovery: recovery_policy?, ?lexer: Lexer?,
162
+ # ?mode: grammar_mode, ?starts: Array[String]?) -> void
163
+ # rubocop:disable Metrics/AbcSize, Metrics/ParameterLists
164
+ # Immutable versioned IR is constructed from explicit public fields.
165
+ def initialize: (class_name: String, superclass: String?, start: String, expect: Integer, options: grammar_options, symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String], conversions: Hash[String, String], warnings: Array[grammar_warning], ?expect_rr: Integer?, ?user_code_chunks: user_code_chunks?, ?schema_version: Integer, ?source_provenance: source_provenance?, ?migration: migration_metadata?, ?parser_parameters: Array[parser_parameter], ?value_printers: Array[value_printer], ?grammar_tests: Array[grammar_test], ?recovery: recovery_policy?, ?lexer: Lexer?, ?mode: grammar_mode, ?starts: Array[String]?) -> void
121
166
 
122
167
  # @rbs (String name) -> GrammarSymbol?
123
168
  def symbol: (String name) -> GrammarSymbol?
@@ -136,6 +181,21 @@ module Ibex
136
181
 
137
182
  private
138
183
 
184
+ # @rbs (grammar_mode mode) -> void
185
+ def validate_mode: (grammar_mode mode) -> void
186
+
187
+ # @rbs (String start, Array[String]? starts, grammar_mode mode) -> Array[String]
188
+ def validate_starts: (String start, Array[String]? starts, grammar_mode mode) -> Array[String]
189
+
190
+ # @rbs (Hash[Symbol, untyped] value) -> void
191
+ def append_optional_metadata: (Hash[Symbol, untyped] value) -> void
192
+
193
+ # @rbs (Hash[Symbol, untyped] value) -> void
194
+ def append_parser_metadata: (Hash[Symbol, untyped] value) -> void
195
+
196
+ # @rbs (Hash[Symbol, untyped] value) -> void
197
+ def append_recovery_metadata: (Hash[Symbol, untyped] value) -> void
198
+
139
199
  # @rbs () -> void
140
200
  def validate_user_code_chunks: () -> void
141
201
  end
@@ -0,0 +1,57 @@
1
+ # Generated from lib/ibex/ir/lexer_ir.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ LEXER_SCHEMA_VERSION: ::Integer
6
+
7
+ SUPPORTED_LEXER_SCHEMA_VERSIONS: Array[Integer]
8
+
9
+ # One normalized, state-scoped lexer rule.
10
+ class LexerRule
11
+ attr_reader id: Integer
12
+
13
+ attr_reader state: String
14
+
15
+ attr_reader kind: Symbol
16
+
17
+ attr_reader token: String?
18
+
19
+ attr_reader pattern: String
20
+
21
+ attr_reader pattern_kind: Symbol
22
+
23
+ attr_reader options: String
24
+
25
+ attr_reader action: String?
26
+
27
+ attr_reader location: location
28
+
29
+ # @rbs (id: Integer, state: String, kind: Symbol, token: String?, pattern: String, pattern_kind: Symbol,
30
+ # options: String, action: String?, location: location) -> void
31
+ def initialize: (id: Integer, state: String, kind: Symbol, token: String?, pattern: String, pattern_kind: Symbol, options: String, action: String?, location: location) -> void
32
+
33
+ # @rbs () -> Hash[Symbol, untyped]
34
+ def to_h: () -> Hash[Symbol, untyped]
35
+ end
36
+
37
+ # Independently versioned lexer contract embedded by Grammar IR v2.
38
+ class Lexer
39
+ attr_reader states: Array[String]
40
+
41
+ attr_reader rules: Array[LexerRule]
42
+
43
+ attr_reader warnings: Array[Hash[Symbol, untyped]]
44
+
45
+ attr_reader schema_version: Integer
46
+
47
+ attr_reader source_provenance: source_provenance?
48
+
49
+ # @rbs (states: Array[String], rules: Array[LexerRule], warnings: Array[Hash[Symbol, untyped]],
50
+ # ?schema_version: Integer, ?source_provenance: source_provenance?) -> void
51
+ def initialize: (states: Array[String], rules: Array[LexerRule], warnings: Array[Hash[Symbol, untyped]], ?schema_version: Integer, ?source_provenance: source_provenance?) -> void
52
+
53
+ # @rbs () -> Hash[Symbol, untyped]
54
+ def to_h: () -> Hash[Symbol, untyped]
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,34 @@
1
+ # Generated from lib/ibex/ir/migration.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ # Meaning-preserving upgrades between published IR schema versions.
6
+ module Migration
7
+ UNAVAILABLE_V1_METADATA: Array[String]
8
+
9
+ # @rbs (Grammar | Automaton value, ?to: Integer) -> (Grammar | Automaton)
10
+ def self?.to_version: (Grammar | Automaton value, ?to: Integer) -> (Grammar | Automaton)
11
+
12
+ # @rbs (Grammar | Automaton value) -> (Grammar | Automaton)
13
+ def self?.to_v2: (Grammar | Automaton value) -> (Grammar | Automaton)
14
+
15
+ # @rbs (Grammar grammar) -> Grammar
16
+ def self?.migrate_grammar: (Grammar grammar) -> Grammar
17
+
18
+ # @rbs (Grammar grammar) -> Array[GrammarSymbol]
19
+ def self?.migrate_symbols: (Grammar grammar) -> Array[GrammarSymbol]
20
+
21
+ # @rbs (Grammar grammar) -> Array[Production]
22
+ def self?.migrate_productions: (Grammar grammar) -> Array[Production]
23
+
24
+ # @rbs (Grammar grammar, Array[GrammarSymbol] symbols, Array[Production] productions) -> Grammar
25
+ def self?.build_migrated_grammar: (Grammar grammar, Array[GrammarSymbol] symbols, Array[Production] productions) -> Grammar
26
+
27
+ # @rbs (Action? action) -> Action?
28
+ def self?.migrate_action: (Action? action) -> Action?
29
+
30
+ # @rbs (Automaton automaton) -> Automaton
31
+ def self?.migrate_automaton: (Automaton automaton) -> Automaton
32
+ end
33
+ end
34
+ end
@@ -3,6 +3,7 @@
3
3
  module Ibex
4
4
  module IR
5
5
  # Stable JSON serialization for versioned pipeline IR.
6
+ # rubocop:disable Metrics/ModuleLength -- explicit versioned fields keep serialization changes auditable.
6
7
  module Serialize
7
8
  private def validate_version: (untyped data) -> untyped
8
9
 
@@ -16,6 +17,10 @@ module Ibex
16
17
 
17
18
  private def self.load_automaton: (untyped data) -> untyped
18
19
 
20
+ private def load_lexer: (untyped data) -> untyped
21
+
22
+ private def self.load_lexer: (untyped data) -> untyped
23
+
19
24
  private def load_state: (untyped state, untyped grammar) -> untyped
20
25
 
21
26
  private def self.load_state: (untyped state, untyped grammar) -> untyped
@@ -28,23 +33,35 @@ module Ibex
28
33
 
29
34
  private def self.normalize_action: (untyped value) -> untyped
30
35
 
31
- private def load_production: (untyped production) -> untyped
36
+ private def load_production: (untyped production, Integer schema_version) -> untyped
32
37
 
33
- private def self.load_production: (untyped production) -> untyped
38
+ private def self.load_production: (untyped production, Integer schema_version) -> untyped
34
39
 
35
40
  private def load_user_code_chunks: (untyped chunks) -> untyped
36
41
 
37
42
  private def self.load_user_code_chunks: (untyped chunks) -> untyped
38
43
 
44
+ private def load_symbol_metadata: (untyped symbol, String field) -> String?
45
+
46
+ private def self.load_symbol_metadata: (untyped symbol, String field) -> String?
47
+
48
+ private def load_grammar_tests: (untyped tests) -> untyped
49
+
50
+ private def self.load_grammar_tests: (untyped tests) -> untyped
51
+
52
+ private def symbol_source_position: (untyped symbol) -> String
53
+
54
+ private def self.symbol_source_position: (untyped symbol) -> String
55
+
39
56
  private def symbolize: (untyped value) -> untyped
40
57
 
41
58
  private def self.symbolize: (untyped value) -> untyped
42
59
 
43
- # @rbs (Grammar | Automaton value) -> String
44
- def self?.dump: (Grammar | Automaton value) -> String
60
+ # @rbs (Grammar | Automaton | Lexer value) -> String
61
+ def self?.dump: (Grammar | Automaton | Lexer value) -> String
45
62
 
46
- # @rbs (String source) -> (Grammar | Automaton)
47
- def self?.load: (String source) -> (Grammar | Automaton)
63
+ # @rbs (String source) -> (Grammar | Automaton | Lexer)
64
+ def self?.load: (String source) -> (Grammar | Automaton | Lexer)
48
65
  end
49
66
  end
50
67
  end
@@ -0,0 +1,109 @@
1
+ # Generated from lib/ibex/ir/validator/automaton.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module IR
5
+ module Validator
6
+ # Structural and referential validation for a versioned Automaton IR JSON object.
7
+ # rubocop:disable Metrics/ClassLength -- inline type contracts accompany one cohesive document validator.
8
+ class AutomatonDocument < Base
9
+ ROOT_REQUIRED: Array[String]
10
+
11
+ V2_ROOT_OPTIONAL: Array[String]
12
+
13
+ STATE_REQUIRED: Array[String]
14
+
15
+ ACTION_TYPES: Array[String]
16
+
17
+ RESOLUTION_KINDS: Array[String]
18
+
19
+ @version: Integer
20
+
21
+ @grammar: GrammarDocument
22
+
23
+ @states_by_id: Hash[Integer, Hash[String, untyped]]
24
+
25
+ @data: Hash[String, untyped]
26
+
27
+ # @rbs (Hash[String, untyped] data, ?version: Integer) -> void
28
+ def initialize: (Hash[String, untyped] data, ?version: Integer) -> void
29
+
30
+ # @rbs () -> self
31
+ def validate: () -> self
32
+
33
+ private
34
+
35
+ # @rbs () -> void
36
+ def validate_entry_states: () -> void
37
+
38
+ # @rbs () -> void
39
+ def validate_digest: () -> void
40
+
41
+ # @rbs () -> void
42
+ def validate_state_records: () -> void
43
+
44
+ # @rbs () -> void
45
+ def validate_state_contents: () -> void
46
+
47
+ # @rbs (untyped value, String path) -> void
48
+ def validate_items: (untyped value, String path) -> void
49
+
50
+ # @rbs (Integer production_id, untyped dot_value, String path) -> void
51
+ def validate_item_production: (Integer production_id, untyped dot_value, String path) -> void
52
+
53
+ # @rbs (untyped value, String path) -> void
54
+ def validate_lookaheads: (untyped value, String path) -> void
55
+
56
+ # @rbs (untyped value, String path) -> void
57
+ def validate_transitions: (untyped value, String path) -> void
58
+
59
+ # @rbs (untyped value, String path) -> void
60
+ def validate_actions: (untyped value, String path) -> void
61
+
62
+ # @rbs (untyped value, String path) -> void
63
+ def validate_gotos: (untyped value, String path) -> void
64
+
65
+ # @rbs (untyped value, String path, ?kind: String?) { (untyped, String, Hash[String, untyped]) -> void } -> void
66
+ def symbol_map: (untyped value, String path, ?kind: String?) { (untyped, String, Hash[String, untyped]) -> void } -> void
67
+
68
+ # @rbs (untyped value, String path) -> void
69
+ def validate_state_reference: (untyped value, String path) -> void
70
+
71
+ # @rbs (untyped value, String path, ?nullable: bool) -> void
72
+ def validate_parser_action: (untyped value, String path, ?nullable: bool) -> void
73
+
74
+ # @rbs (untyped value, String path) -> void
75
+ def validate_production_reference: (untyped value, String path) -> void
76
+
77
+ # @rbs (untyped value, String path) -> void
78
+ def validate_conflicts: (untyped value, String path) -> void
79
+
80
+ # @rbs (Hash[String, untyped] conflict, String path) -> void
81
+ def validate_shift_reduce: (Hash[String, untyped] conflict, String path) -> void
82
+
83
+ # @rbs (Hash[String, untyped] conflict, String path) -> void
84
+ def validate_reduce_reduce: (Hash[String, untyped] conflict, String path) -> void
85
+
86
+ # @rbs (Hash[String, untyped] conflict, String path) -> void
87
+ def validate_conflict_entries: (Hash[String, untyped] conflict, String path) -> void
88
+
89
+ # @rbs (untyped value, String path) -> void
90
+ def validate_midrule_origins: (untyped value, String path) -> void
91
+
92
+ # @rbs (untyped value, String path) -> void
93
+ def validate_conflict_symbol: (untyped value, String path) -> void
94
+
95
+ # @rbs (untyped value, String path, ?reductions: Array[Integer]?) -> void
96
+ def validate_resolution: (untyped value, String path, ?reductions: Array[Integer]?) -> void
97
+
98
+ # @rbs () -> void
99
+ def validate_conflict_summary: () -> void
100
+
101
+ # @rbs (Hash[String, untyped] summary, String path) -> void
102
+ def validate_conflict_counts: (Hash[String, untyped] summary, String path) -> void
103
+
104
+ # @rbs (Hash[String, untyped] summary, String path) -> void
105
+ def validate_expectation: (Hash[String, untyped] summary, String path) -> void
106
+ end
107
+ end
108
+ end
109
+ end