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,103 @@
1
+ # Generated from lib/ibex/cli/formatting.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # CLI coordination for deterministic, semantics-preserving grammar formatting.
5
+ # rubocop:disable Metrics/ModuleLength -- transaction lifecycle stays cohesive and auditable.
6
+ module CLIFormatting
7
+ type formatting_settings = { paths: Array[String], mode: Symbol, check: bool, write: bool, ?stdin_filename: String, ?help: bool }
8
+
9
+ type formatting_result = { path: String, label: String, source: String, formatted: String }
10
+
11
+ type formatting_target = { path: String, label: String, target: String, formatted: String, mode: Integer, directory: String, basename: String, changed: bool, installed: bool, ?stage: String, ?backup: String }
12
+
13
+ type formatting_cleanup_result = { errors: Array[String], remaining: Array[String] }
14
+
15
+ private
16
+
17
+ # @rbs (Array[String] arguments) -> Integer
18
+ def run_format_command: (Array[String] arguments) -> Integer
19
+
20
+ # @rbs (Array[String] arguments) -> formatting_settings
21
+ def formatting_options: (Array[String] arguments) -> formatting_settings
22
+
23
+ # @rbs (formatting_settings settings) -> OptionParser
24
+ def formatting_option_parser: (formatting_settings settings) -> OptionParser
25
+
26
+ # @rbs (formatting_settings settings) -> void
27
+ def validate_formatting_settings!: (formatting_settings settings) -> void
28
+
29
+ # @rbs (formatting_settings settings, Array[String] paths) -> void
30
+ def validate_formatting_operation!: (formatting_settings settings, Array[String] paths) -> void
31
+
32
+ # @rbs (formatting_settings settings, Array[String] paths) -> void
33
+ def validate_formatting_stdin!: (formatting_settings settings, Array[String] paths) -> void
34
+
35
+ # @rbs (formatting_settings settings) -> [Array[formatting_result], bool]
36
+ def prepare_formatting_results: (formatting_settings settings) -> [ Array[formatting_result], bool ]
37
+
38
+ # @rbs (Array[formatting_result] results) -> Integer
39
+ def check_formatting_results: (Array[formatting_result] results) -> Integer
40
+
41
+ # @rbs (Array[formatting_result] results) -> Integer
42
+ def write_formatting_results: (Array[formatting_result] results) -> Integer
43
+
44
+ # @rbs (Array[formatting_result] results) -> Array[formatting_target]
45
+ def formatting_targets: (Array[formatting_result] results) -> Array[formatting_target]
46
+
47
+ # @rbs (Array[formatting_target] targets) -> void
48
+ def validate_unique_formatting_targets!: (Array[formatting_target] targets) -> void
49
+
50
+ # @rbs (Array[formatting_target] targets) -> [formatting_target, formatting_target]?
51
+ def duplicate_formatting_target_pair: (Array[formatting_target] targets) -> [ formatting_target, formatting_target ]?
52
+
53
+ # @rbs (Array[formatting_target] targets) -> void
54
+ def transactionally_write_formatted: (Array[formatting_target] targets) -> void
55
+
56
+ # @rbs (Array[formatting_target] targets) -> void
57
+ def stage_formatting_targets: (Array[formatting_target] targets) -> void
58
+
59
+ # @rbs (Array[formatting_target] targets) -> void
60
+ def backup_formatting_targets: (Array[formatting_target] targets) -> void
61
+
62
+ # @rbs (Array[formatting_target] targets) -> void
63
+ def install_formatting_targets: (Array[formatting_target] targets) -> void
64
+
65
+ # @rbs (Array[formatting_target] targets) -> Array[String]
66
+ def rollback_formatting_targets: (Array[formatting_target] targets) -> Array[String]
67
+
68
+ # @rbs (Array[formatting_target] targets, preserve_installed_backups: bool) ->
69
+ # formatting_cleanup_result
70
+ def cleanup_formatting_artifacts: (Array[formatting_target] targets, preserve_installed_backups: bool) -> formatting_cleanup_result
71
+
72
+ # @rbs (String path) -> String?
73
+ def remove_formatting_artifact: (String path) -> String?
74
+
75
+ # @rbs (StandardError error, Array[String] rollback_errors,
76
+ # formatting_cleanup_result cleanup, Array[String] sync_errors) -> Ibex::Error
77
+ def formatting_transaction_error: (StandardError error, Array[String] rollback_errors, formatting_cleanup_result cleanup, Array[String] sync_errors) -> Ibex::Error
78
+
79
+ # @rbs (formatting_cleanup_result cleanup, Array[String] sync_errors) -> void
80
+ def report_formatting_cleanup_warning: (formatting_cleanup_result cleanup, Array[String] sync_errors) -> void
81
+
82
+ # @rbs (Array[formatting_target] targets) -> void
83
+ def sync_formatting_directories!: (Array[formatting_target] targets) -> void
84
+
85
+ # @rbs (Array[formatting_target] targets) -> Array[String]
86
+ def sync_formatting_directories_best_effort: (Array[formatting_target] targets) -> Array[String]
87
+
88
+ # @rbs (Array[formatting_target] targets) -> Array[String]
89
+ def sync_formatting_directories: (Array[formatting_target] targets) -> Array[String]
90
+
91
+ # @rbs (String directory) -> void
92
+ def sync_formatting_directory: (String directory) -> void
93
+
94
+ # @rbs (String value) -> String
95
+ def formatting_label: (String value) -> String
96
+
97
+ # @rbs (String value) -> bool
98
+ def formatting_control_bytes?: (String value) -> bool
99
+
100
+ # @rbs (Integer byte) -> bool
101
+ def control_byte?: (Integer byte) -> bool
102
+ end
103
+ end
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/cli/generation_artifacts.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Collects, verifies, and transactionally publishes CLI generation outputs.
5
+ module CLIGenerationArtifacts
6
+ private def report_status: (String) -> void
7
+
8
+ private def verify_file: (String, String, String) -> void
9
+
10
+ private def default_output_path: (String, String) -> String
11
+
12
+ private
13
+
14
+ # @rbs () -> void
15
+ def begin_artifact_generation: () -> void
16
+
17
+ # @rbs (Symbol kind, String path, String content, ?mode: Integer?, ?status: bool) -> Artifact
18
+ def register_artifact: (Symbol kind, String path, String content, ?mode: Integer?, ?status: bool) -> Artifact
19
+
20
+ # @rbs (Array[String] source_paths) -> Integer
21
+ def finish_artifact_generation: (Array[String] source_paths) -> Integer
22
+
23
+ # @rbs () -> void
24
+ def add_generation_manifest: () -> void
25
+
26
+ # @rbs () -> void
27
+ def verify_artifact_generation: () -> void
28
+
29
+ # @rbs (Symbol kind) -> String
30
+ def artifact_label: (Symbol kind) -> String
31
+
32
+ # @rbs () -> ArtifactSet
33
+ def generation_artifacts: () -> ArtifactSet
34
+
35
+ # @rbs () -> bool
36
+ def generation_inputs_stable?: () -> bool
37
+
38
+ # @rbs () -> void
39
+ def ensure_generation_inputs_stable!: () -> void
40
+
41
+ # @rbs (String path, String source) -> GenerationInput
42
+ def record_generation_input: (String path, String source) -> GenerationInput
43
+
44
+ # @rbs () -> String
45
+ def manifest_output_path: () -> String
46
+
47
+ # @rbs () -> Hash[String, untyped]
48
+ def generation_manifest_options: () -> Hash[String, untyped]
49
+ end
50
+ end
@@ -0,0 +1,19 @@
1
+ # Generated from lib/ibex/cli/generation_error_messages.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Optional example-keyed error-message support for parser generation.
5
+ module CLIGenerationErrorMessages
6
+ private def record_generation_input: (String, String) -> GenerationInput
7
+
8
+ private
9
+
10
+ # @rbs (OptionParser options) -> void
11
+ def add_error_messages_generation_option: (OptionParser options) -> void
12
+
13
+ # @rbs (IR::Automaton automaton) -> Hash[Integer, untyped]
14
+ def configured_error_messages: (IR::Automaton automaton) -> Hash[Integer, untyped]
15
+
16
+ # @rbs () -> void
17
+ def validate_messages_options: () -> void
18
+ end
19
+ end
@@ -0,0 +1,36 @@
1
+ # Generated from lib/ibex/cli/grammar_tests.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # `%test` command parsing and human-readable result reporting.
5
+ module CLIGrammarTests
6
+ type grammar_test_settings = { mode: Symbol, algorithm: Symbol, entry_isolation: bool, timeout: Integer, coverage: Integer?, ?help: bool }
7
+
8
+ private def print_help: (OptionParser) -> Integer
9
+
10
+ private def resolve_grammar_path: (String) -> Frontend::Resolution
11
+
12
+ private def handle_grammar_warnings: (IR::Grammar, String) -> void
13
+
14
+ private def build_automaton: (IR::Grammar, String) -> IR::Automaton
15
+
16
+ private
17
+
18
+ # @rbs (Array[String] arguments) -> Integer
19
+ def run_grammar_tests_command: (Array[String] arguments) -> Integer
20
+
21
+ # @rbs (grammar_test_settings settings) -> OptionParser
22
+ def grammar_test_option_parser: (grammar_test_settings settings) -> OptionParser
23
+
24
+ # @rbs (Array[String] remaining, OptionParser options) -> String
25
+ def single_grammar_test_path: (Array[String] remaining, OptionParser options) -> String
26
+
27
+ # @rbs (Array[GrammarTests::Result] results) -> Integer
28
+ def render_grammar_test_results: (Array[GrammarTests::Result] results) -> Integer
29
+
30
+ # @rbs (GrammarTests::ProductionCoverage coverage, Integer minimum, Integer failures) -> Integer
31
+ def render_grammar_test_coverage: (GrammarTests::ProductionCoverage coverage, Integer minimum, Integer failures) -> Integer
32
+
33
+ # @rbs (GrammarTests::Result result) -> String
34
+ def grammar_test_failure: (GrammarTests::Result result) -> String
35
+ end
36
+ end
@@ -0,0 +1,51 @@
1
+ # Generated from lib/ibex/cli/ir_tools.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ type migrate_ir_options = { paths: Array[String], ?to: Integer, ?output: String }
5
+
6
+ # CLI validation and structural comparison for versioned IR documents.
7
+ module CLIIRTools
8
+ private def same_file_target?: (String left, String right) -> bool
9
+
10
+ private def atomic_write_ir: (String path, String source) -> void
11
+
12
+ private
13
+
14
+ # @rbs (Array[String] arguments) -> Integer
15
+ def run_validate_ir_command: (Array[String] arguments) -> Integer
16
+
17
+ # @rbs (Array[String] arguments) -> Integer
18
+ def run_compare_command: (Array[String] arguments) -> Integer
19
+
20
+ # @rbs (Array[String] arguments) -> Integer
21
+ def run_migrate_ir_command: (Array[String] arguments) -> Integer
22
+
23
+ # @rbs (Array[String] arguments) -> migrate_ir_options
24
+ def migrate_ir_options: (Array[String] arguments) -> migrate_ir_options
25
+
26
+ # @rbs (Array[String] arguments, String command) -> String
27
+ def single_ir_path: (Array[String] arguments, String command) -> String
28
+
29
+ # @rbs (IR::Grammar | IR::Automaton | IR::Lexer before,
30
+ # IR::Grammar | IR::Automaton | IR::Lexer after) -> Hash[Symbol, untyped]
31
+ def compare_ir: (IR::Grammar | IR::Automaton | IR::Lexer before, IR::Grammar | IR::Automaton | IR::Lexer after) -> Hash[Symbol, untyped]
32
+
33
+ # @rbs (IR::Lexer before, IR::Lexer after) -> Hash[Symbol, untyped]
34
+ def compare_lexers: (IR::Lexer before, IR::Lexer after) -> Hash[Symbol, untyped]
35
+
36
+ # @rbs (IR::Grammar before, IR::Grammar after) -> Hash[Symbol, untyped]
37
+ def compare_grammars: (IR::Grammar before, IR::Grammar after) -> Hash[Symbol, untyped]
38
+
39
+ # @rbs (IR::Grammar grammar) -> Array[String]
40
+ def production_shapes: (IR::Grammar grammar) -> Array[String]
41
+
42
+ # @rbs (IR::Automaton automaton) -> Integer
43
+ def transition_count: (IR::Automaton automaton) -> Integer
44
+
45
+ # @rbs (IR::Automaton automaton, Symbol kind) -> Integer
46
+ def summary_count: (IR::Automaton automaton, Symbol kind) -> Integer
47
+
48
+ # @rbs (Integer before, Integer after) -> Hash[Symbol, Integer]
49
+ def numeric_change: (Integer before, Integer after) -> Hash[Symbol, Integer]
50
+ end
51
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/ibex/cli/lsp.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # CLI boundary for the stdio-only language server.
5
+ module CLILSP
6
+ private
7
+
8
+ # @rbs (Array[String] arguments) -> Integer
9
+ def run_lsp_command: (Array[String] arguments) -> Integer
10
+
11
+ # @rbs (Hash[Symbol, bool] settings) -> OptionParser
12
+ def lsp_option_parser: (Hash[Symbol, bool] settings) -> OptionParser
13
+ end
14
+ end
@@ -3,6 +3,8 @@
3
3
  module Ibex
4
4
  # Files, warnings, and progress emitted by CLI pipeline stages.
5
5
  module CLIOutputs
6
+ private def register_artifact: (Symbol, String, String, ?mode: Integer?, ?status: bool) -> Artifact
7
+
6
8
  WARNING_MESSAGES: Hash[Symbol, ^(IR::grammar_warning) -> String]
7
9
 
8
10
  private
@@ -19,6 +21,15 @@ module Ibex
19
21
  # @rbs (IR::Automaton automaton, String input_path) -> void
20
22
  def report_conflicts: (IR::Automaton automaton, String input_path) -> void
21
23
 
24
+ # @rbs (IR::conflict_summary summary, String input_path) -> Array[String]
25
+ def conflict_messages: (IR::conflict_summary summary, String input_path) -> Array[String]
26
+
27
+ # @rbs (IR::Automaton automaton, String input_path) -> void
28
+ def suggest_ielr: (IR::Automaton automaton, String input_path) -> void
29
+
30
+ # @rbs (Integer count, String kind) -> String
31
+ def conflict_count: (Integer count, String kind) -> String
32
+
22
33
  # @rbs (IR::Automaton automaton, String input_path) -> void
23
34
  def write_report: (IR::Automaton automaton, String input_path) -> void
24
35
 
@@ -27,5 +38,11 @@ module Ibex
27
38
 
28
39
  # @rbs (String message) -> void
29
40
  def report_status: (String message) -> void
41
+
42
+ # @rbs (String path, String source) -> void
43
+ def atomic_write_ir: (String path, String source) -> void
44
+
45
+ # @rbs (String path) -> Integer
46
+ def ir_file_mode: (String path) -> Integer
30
47
  end
31
48
  end
@@ -0,0 +1,30 @@
1
+ # Generated from lib/ibex/cli/racc_migration.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Static racc migration checks and differential harness generation.
5
+ module CLIRaccMigration
6
+ type migration_check_settings = { format: String, ?help: bool }
7
+
8
+ type migration_harness_settings = { ?output: String, ?help: bool }
9
+
10
+ private def input_path: (Array[String]) -> String
11
+
12
+ private def atomic_write_ir: (String path, String source) -> void
13
+
14
+ private def same_file_target?: (String left, String right) -> bool
15
+
16
+ private
17
+
18
+ # @rbs (Array[String] arguments) -> Integer
19
+ def run_migrate_check_command: (Array[String] arguments) -> Integer
20
+
21
+ # @rbs (Array[String] arguments) -> Integer
22
+ def run_migrate_harness_command: (Array[String] arguments) -> Integer
23
+
24
+ # @rbs (migration_check_settings settings) -> OptionParser
25
+ def migrate_check_options: (migration_check_settings settings) -> OptionParser
26
+
27
+ # @rbs (migration_harness_settings settings) -> OptionParser
28
+ def migrate_harness_options: (migration_harness_settings settings) -> OptionParser
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ # Generated from lib/ibex/cli/samples.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # CLI entry point for bounded grammar sentence generation.
5
+ module CLISamples
6
+ private def print_help: (OptionParser) -> Integer
7
+
8
+ private def input_path: (Array[String]) -> String
9
+
10
+ private def handle_grammar_warnings: (IR::Grammar, String) -> void
11
+
12
+ private def warning_categories: (String) -> Array[Symbol]
13
+
14
+ private def normalize_grammar_path: (String) -> IR::Grammar
15
+
16
+ private
17
+
18
+ # @rbs (Array[String] arguments) -> Integer
19
+ def run_samples_command: (Array[String] arguments) -> Integer
20
+
21
+ # @rbs () -> OptionParser
22
+ def samples_option_parser: () -> OptionParser
23
+
24
+ # @rbs (String path) -> IR::Grammar
25
+ def grammar_for_samples: (String path) -> IR::Grammar
26
+
27
+ # @rbs (String name, Integer value) -> Integer
28
+ def positive_sample_option!: (String name, Integer value) -> Integer
29
+ end
30
+ end
@@ -0,0 +1,43 @@
1
+ # Generated from lib/ibex/cli/watch.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Long-running CLI generation over stable source snapshots.
5
+ module CLIWatch
6
+ private def process_grammar: (String) -> Integer
7
+
8
+ private def generation_artifacts: () -> ArtifactSet
9
+
10
+ private def report_status: (String) -> void
11
+
12
+ # Rendered watch generation awaiting its stability-guarded publication.
13
+ class Build
14
+ attr_reader artifacts: ArtifactSet
15
+
16
+ attr_reader statuses: Array[String]
17
+
18
+ attr_reader source_paths: Array[String]
19
+
20
+ attr_reader attempted_paths: Array[String]
21
+
22
+ attr_reader source_records: Array[GenerationInput]
23
+
24
+ # rubocop:disable Layout/LineLength
25
+ # @rbs (artifacts: ArtifactSet, statuses: Array[String], source_paths: Array[String], attempted_paths: Array[String], source_records: Array[GenerationInput]) -> void
26
+ def initialize: (artifacts: ArtifactSet, statuses: Array[String], source_paths: Array[String], attempted_paths: Array[String], source_records: Array[GenerationInput]) -> void
27
+ end
28
+
29
+ private
30
+
31
+ # @rbs (String path) -> Integer
32
+ def run_watch: (String path) -> Integer
33
+
34
+ # @rbs (String path) -> Build
35
+ def prepare_watch_generation: (String path) -> Build
36
+
37
+ # @rbs (Build build, Watch::SourceSnapshot snapshot, ^() -> bool continue) -> void
38
+ def publish_watch_generation: (Build build, Watch::SourceSnapshot snapshot, ^() -> bool continue) -> void
39
+
40
+ # @rbs (String path) -> Array[String]
41
+ def watch_failure_paths: (String path) -> Array[String]
42
+ end
43
+ end
data/sig/ibex/cli.rbs CHANGED
@@ -1,19 +1,33 @@
1
1
  # Generated from lib/ibex/cli.rb with RBS::Inline
2
2
 
3
3
  module Ibex
4
+ CLI_FEATURE_ROOT: String
5
+
4
6
  interface _CLIOutput
5
7
  def puts: (*untyped) -> untyped
6
8
 
7
9
  def write: (String) -> untyped
8
10
  end
9
11
 
10
- type cli_options = { emit: String, mode: Symbol, table: Symbol, line_convert: bool, ?line_convert_all: bool, counterexample_max_tokens: Integer, counterexample_max_configurations: Integer, ?from: String, ?algorithm: Symbol, ?warnings: Array[Symbol], ?output: String, ?embedded: bool, ?debug: bool, ?verbose: bool, ?rbs: String | true, ?dot: String, ?html: String, ?log_file: String, ?executable: String, ?frozen: bool, ?omit_actions: bool, ?superclass: String, ?check_only: bool, ?status: bool, ?profile: bool, ?debug_flags: String, ?version: bool, ?runtime_version: bool, ?copyright: bool, ?help: bool }
12
+ interface _CLIInput
13
+ def read: () -> String
14
+
15
+ def gets: () -> String?
16
+ end
17
+
18
+ type cli_options = { emit: String, mode: Symbol, table: Symbol, ?cst_trivia: Symbol, line_convert: bool, ?line_convert_all: bool, counterexample_max_tokens: Integer, counterexample_max_configurations: Integer, ?from: String, ?algorithm: Symbol, ?suggest_ielr: bool, ?entry_isolation: bool, ?warnings: Array[Symbol], ?output: String, ?embedded: bool, ?debug: bool, ?verbose: bool, ?rbs: String | true, ?action_source: String | true, ?manifest: String | true, ?watch: bool, ?dot: String, ?mermaid: String, ?html: String, ?railroad: String, ?messages: String, ?messages_update: String | true, ?messages_algorithm_explicit: bool, ?sample_count: Integer, ?sample_seed: Integer, ?sample_max_tokens: Integer, ?sample_max_depth: Integer, ?sample_max_expansions: Integer, ?log_file: String, ?executable: String, ?frozen: bool, ?omit_actions: bool, ?superclass: String, ?verify_output: bool, ?check_only: bool, ?status: bool, ?profile: bool, ?debug_flags: String, ?version: bool, ?runtime_version: bool, ?copyright: bool, ?help: bool, ?explain_state: Integer, ?explain_token: String, ?explain_format: String, ?check_ambiguity: bool, ?check_format: String }
11
19
 
12
20
  # Command-line pipeline coordinator.
13
21
  # rubocop:disable Metrics/ClassLength -- inline type contracts add lines without adding runtime responsibilities.
14
22
  class CLI
23
+ SUBCOMMAND_HANDLERS: Hash[String, [ Symbol, Symbol ]]
24
+
15
25
  include CLICounterexampleOptions
16
26
 
27
+ include CLIGenerationErrorMessages
28
+
29
+ include CLIGenerationArtifacts
30
+
17
31
  include CLIOutputs
18
32
 
19
33
  @options: cli_options
@@ -22,17 +36,27 @@ module Ibex
22
36
 
23
37
  @stdout: _CLIOutput
24
38
 
25
- # @rbs (Array[String] arguments, ?stdout: _CLIOutput, ?stderr: _CLIOutput) -> Integer
26
- def self.start: (Array[String] arguments, ?stdout: _CLIOutput, ?stderr: _CLIOutput) -> Integer
39
+ # rubocop:disable Layout/LineLength
40
+ # @rbs (Array[String] arguments, ?stdin: _CLIInput, ?stdout: _CLIOutput, ?stderr: _CLIOutput, ?watch_clock: (^() -> Float)?, ?watch_sleeper: (^(Float) -> void)?, ?watch_iteration_hook: (^(Symbol, Integer, Array[String]) -> (Integer | Symbol | nil))?) -> Integer
41
+ def self.start: (Array[String] arguments, ?stdin: _CLIInput, ?stdout: _CLIOutput, ?stderr: _CLIOutput, ?watch_clock: (^() -> Float)?, ?watch_sleeper: (^(Float) -> void)?, ?watch_iteration_hook: (^(Symbol, Integer, Array[String]) -> (Integer | Symbol | nil))?) -> Integer
27
42
 
28
- # @rbs (stdout: _CLIOutput, stderr: _CLIOutput) -> void
29
- def initialize: (stdout: _CLIOutput, stderr: _CLIOutput) -> void
43
+ # @rbs (?stdin: _CLIInput, stdout: _CLIOutput, stderr: _CLIOutput, ?watch_clock: (^() -> Float)?, ?watch_sleeper: (^(Float) -> void)?, ?watch_iteration_hook: (^(Symbol, Integer, Array[String]) -> (Integer | Symbol | nil))?) -> void
44
+ def initialize: (stdout: _CLIOutput, stderr: _CLIOutput, ?stdin: _CLIInput, ?watch_clock: (^() -> Float)?, ?watch_sleeper: (^(Float) -> void)?, ?watch_iteration_hook: (^(Symbol, Integer, Array[String]) -> (Integer | Symbol | nil))?) -> void
30
45
 
31
46
  # @rbs (Array[String] arguments) -> Integer
32
47
  def run: (Array[String] arguments) -> Integer
33
48
 
34
49
  private
35
50
 
51
+ # @rbs (Array[String] arguments) -> Integer?
52
+ def dispatch_subcommand: (Array[String] arguments) -> Integer?
53
+
54
+ # @rbs (Symbol feature) -> void
55
+ def activate_cli_feature: (Symbol feature) -> void
56
+
57
+ # @rbs (String path) -> Integer
58
+ def run_watch_feature: (String path) -> Integer
59
+
36
60
  # @rbs () -> OptionParser
37
61
  def option_parser: () -> OptionParser
38
62
 
@@ -42,6 +66,9 @@ module Ibex
42
66
  # @rbs (OptionParser options) -> void
43
67
  def add_output_options: (OptionParser options) -> void
44
68
 
69
+ # @rbs (OptionParser options) -> void
70
+ def add_signature_output_options: (OptionParser options) -> void
71
+
45
72
  # @rbs (OptionParser options) -> void
46
73
  def add_compatibility_options: (OptionParser options) -> void
47
74
 
@@ -54,9 +81,48 @@ module Ibex
54
81
  # @rbs (Array[String] remaining) -> String
55
82
  def input_path: (Array[String] remaining) -> String
56
83
 
84
+ # @rbs () -> void
85
+ def validate_generation_options: () -> void
86
+
87
+ # @rbs () -> void
88
+ def validate_manifest_generation_options: () -> void
89
+
90
+ # @rbs () -> void
91
+ def validate_action_source_generation_options: () -> void
92
+
93
+ # @rbs () -> void
94
+ def validate_verification_generation_options: () -> void
95
+
96
+ # @rbs () -> void
97
+ def validate_watch_information_options: () -> void
98
+
99
+ # @rbs () -> void
100
+ def validate_watch_generation_options: () -> void
101
+
102
+ # @rbs (String input_path, ?source_paths: Array[String]) -> void
103
+ def validate_generation_paths!: (String input_path, ?source_paths: Array[String]) -> void
104
+
105
+ # @rbs (String left, String right) -> bool
106
+ def same_file_target?: (String left, String right) -> bool
107
+
108
+ # @rbs (String path) -> [String, String]
109
+ def portable_target_key: (String path) -> [ String, String ]
110
+
111
+ # @rbs (String path, ?Hash[String, bool] seen) -> String
112
+ def canonical_target_path: (String path, ?Hash[String, bool] seen) -> String
113
+
114
+ # @rbs (String input_path) -> Hash[Symbol, String?]
115
+ def generation_paths: (String input_path) -> Hash[Symbol, String?]
116
+
57
117
  # @rbs (String path) -> Integer
58
118
  def process_grammar: (String path) -> Integer
59
119
 
120
+ # @rbs (String path) -> Frontend::Resolution
121
+ def resolve_grammar_path: (String path) -> Frontend::Resolution
122
+
123
+ # @rbs (String path) -> IR::Grammar
124
+ def normalize_grammar_path: (String path) -> IR::Grammar
125
+
60
126
  # @rbs (String path) -> Integer
61
127
  def process_ir: (String path) -> Integer
62
128
 
@@ -81,6 +147,12 @@ module Ibex
81
147
  # @rbs (IR::Grammar grammar) -> Integer
82
148
  def emit_grammar: (IR::Grammar grammar) -> Integer
83
149
 
150
+ # @rbs (IR::Grammar grammar) -> Integer
151
+ def emit_lexer: (IR::Grammar grammar) -> Integer
152
+
153
+ # @rbs (IR::Grammar grammar) -> Integer
154
+ def emit_sets: (IR::Grammar grammar) -> Integer
155
+
84
156
  # @rbs (IR::Grammar grammar, String input_path) -> Integer
85
157
  def emit_automaton: (IR::Grammar grammar, String input_path) -> Integer
86
158
 
@@ -90,9 +162,30 @@ module Ibex
90
162
  # @rbs (IR::Automaton automaton, String input_path) -> Integer
91
163
  def generate_ruby: (IR::Automaton automaton, String input_path) -> Integer
92
164
 
165
+ # @rbs (IR::Automaton automaton, String output_path, String source, String? action_source) -> Integer
166
+ def verify_generated_outputs: (IR::Automaton automaton, String output_path, String source, String? action_source) -> Integer
167
+
168
+ # @rbs (String path, String source, String label) -> void
169
+ def verify_file: (String path, String source, String label) -> void
170
+
93
171
  # @rbs (IR::Automaton automaton, String output_path) -> void
94
172
  def write_rbs: (IR::Automaton automaton, String output_path) -> void
95
173
 
174
+ # @rbs (String output_path) -> String
175
+ def rbs_output_path: (String output_path) -> String
176
+
177
+ # @rbs (IR::Automaton automaton) -> String
178
+ def rbs_source: (IR::Automaton automaton) -> String
179
+
180
+ # @rbs (String output_path, String source) -> void
181
+ def write_action_source: (String output_path, String source) -> void
182
+
183
+ # @rbs (String output_path) -> String
184
+ def action_source_output_path: (String output_path) -> String
185
+
186
+ # @rbs (IR::Automaton automaton) -> String
187
+ def action_source_source: (IR::Automaton automaton) -> String
188
+
96
189
  # @rbs (IR::Automaton automaton, String input_path) -> Integer
97
190
  def emit_loaded_automaton: (IR::Automaton automaton, String input_path) -> Integer
98
191
 
@@ -104,5 +197,11 @@ module Ibex
104
197
 
105
198
  # @rbs (IR::Automaton automaton) -> void
106
199
  def write_visualizations: (IR::Automaton automaton) -> void
200
+
201
+ # @rbs (IR::Grammar grammar) -> void
202
+ def write_railroad: (IR::Grammar grammar) -> void
203
+
204
+ # @rbs (String output_path) -> String
205
+ def manifest_output_path_for: (String output_path) -> String
107
206
  end
108
207
  end
@@ -0,0 +1,45 @@
1
+ # Generated from lib/ibex/codegen/action_locations.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Rewrites semantic-location expressions without touching Ruby literals,
6
+ # comments, heredoc bodies, or ordinary instance/class variables.
7
+ class ActionLocations
8
+ SEMANTIC_HELPERS: Array[String]
9
+
10
+ @source: String
11
+
12
+ @maximum: Integer
13
+
14
+ @location: IR::location
15
+
16
+ # @rbs (String source, maximum: Integer, location: IR::location) -> void
17
+ def initialize: (String source, maximum: Integer, location: IR::location) -> void
18
+
19
+ # @rbs () -> String
20
+ def rewrite: () -> String
21
+
22
+ # @rbs () -> bool
23
+ def references?: () -> bool
24
+
25
+ private
26
+
27
+ # @rbs () -> String
28
+ def mutable_binary_source_copy: () -> String
29
+
30
+ # @rbs () -> Array[[Integer, String]]
31
+ def semantic_references: () -> Array[[ Integer, String ]]
32
+
33
+ # Give every Ripper implementation syntactically valid input while
34
+ # preserving byte offsets and lexical string/comment boundaries.
35
+ # @rbs () -> String
36
+ def lexable_source: () -> String
37
+
38
+ # @rbs () -> Array[Integer]
39
+ def line_offsets: () -> Array[Integer]
40
+
41
+ # @rbs (String spelling) -> String
42
+ def replacement_for: (String spelling) -> String
43
+ end
44
+ end
45
+ end