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,65 @@
1
+ # Generated from lib/ibex/codegen/action_method_source.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Builds semantic method source shared by runtime and static shadow output.
6
+ class ActionMethodSource
7
+ @generated_action_abi: GeneratedActionABI::Cache
8
+
9
+ @grammar: IR::Grammar
10
+
11
+ # @rbs (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
12
+ def initialize: (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
13
+
14
+ # @rbs (IR::Production production, Hash[Symbol, untyped] step, Integer index) -> String
15
+ def composed_fragment_method_source: (IR::Production production, Hash[Symbol, untyped] step, Integer index) -> String
16
+
17
+ # @rbs (IR::Production production, Integer index) -> String
18
+ def composed_fragment_name: (IR::Production production, Integer index) -> String
19
+
20
+ # @rbs (IR::Production production) -> String
21
+ def compiled_action_method_source: (IR::Production production) -> String
22
+
23
+ # @rbs (IR::Production production) -> String
24
+ def direct_action_method_source: (IR::Production production) -> String
25
+
26
+ # @rbs (Integer symbol_id, IR::value_printer printer) -> String
27
+ def value_printer_method_source: (Integer symbol_id, IR::value_printer printer) -> String
28
+
29
+ # @rbs (String source) -> bool
30
+ def column_sensitive?: (String source) -> bool
31
+
32
+ private
33
+
34
+ # @rbs (IR::Production production) -> String
35
+ def action_parameters: (IR::Production production) -> String
36
+
37
+ # @rbs (IR::Production production, Integer index) -> String
38
+ def value_expression: (IR::Production production, Integer index) -> String
39
+
40
+ # @rbs (String source, ?production: IR::Production?) -> void
41
+ def append_parameter_values: (String source, ?production: IR::Production?) -> void
42
+
43
+ # @rbs (Array[String] lines, production: IR::Production) -> void
44
+ def append_direct_parameter_values: (Array[String] lines, production: IR::Production) -> void
45
+
46
+ # @rbs (Hash[Symbol, untyped] step) -> String
47
+ def composed_semantic_code: (Hash[Symbol, untyped] step) -> String
48
+
49
+ # @rbs (String source, Array[IR::named_ref] named_refs) -> void
50
+ def append_named_values: (String source, Array[IR::named_ref] named_refs) -> void
51
+
52
+ # @rbs (String source, IR::Production production, IR::Action action) -> void
53
+ def append_action_body: (String source, IR::Production production, IR::Action action) -> void
54
+
55
+ # @rbs (Array[String] lines, IR::Production production, IR::Action? action) -> void
56
+ def append_direct_action_body: (Array[String] lines, IR::Production production, IR::Action? action) -> void
57
+
58
+ # @rbs (IR::Production production, IR::Action action) -> String
59
+ def semantic_action_code: (IR::Production production, IR::Action action) -> String
60
+
61
+ # @rbs (IR::Production production) -> String
62
+ def default_value_expression: (IR::Production production) -> String
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/codegen/action_source.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Generates static-check-only Ruby containing semantic action methods.
6
+ class ActionSource
7
+ include RubyAST
8
+
9
+ @automaton: IR::Automaton
10
+
11
+ @grammar: IR::Grammar
12
+
13
+ @omit_action_call: bool
14
+
15
+ @method_source: ActionMethodSource
16
+
17
+ # @rbs (IR::Automaton automaton, ?omit_action_call: bool?) -> void
18
+ def initialize: (IR::Automaton automaton, ?omit_action_call: bool?) -> void
19
+
20
+ # @rbs () -> String
21
+ def generate: () -> String
22
+
23
+ private
24
+
25
+ # @rbs (Array[String] lines) -> void
26
+ def append_value_printers: (Array[String] lines) -> void
27
+
28
+ # @rbs (Array[String] lines) -> void
29
+ def append_actions: (Array[String] lines) -> void
30
+
31
+ # @rbs (Array[String] lines, IR::Production production) -> void
32
+ def append_composed_actions: (Array[String] lines, IR::Production production) -> void
33
+
34
+ # @rbs (Array[String] lines, IR::Production production) -> void
35
+ def append_action: (Array[String] lines, IR::Production production) -> void
36
+
37
+ # @rbs (Array[String] lines, IR::location location, String source) -> void
38
+ def append_method: (Array[String] lines, IR::location location, String source) -> void
39
+
40
+ # @rbs (IR::Production production) -> bool
41
+ def composed_action?: (IR::Production production) -> bool
42
+
43
+ # @rbs () -> [Array[String], String]
44
+ def class_parts: () -> [ Array[String], String ]
45
+
46
+ # @rbs () -> String
47
+ def grammar_digest_comment: () -> String
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,60 @@
1
+ # Generated from lib/ibex/codegen/ambiguity.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ type ambiguity_search = { max_tokens: Integer, max_configurations: Integer }
6
+
7
+ type ambiguity_summary = { conflicts: Integer, ambiguous: Integer, not_found: Integer, configuration_budget_exhausted: Integer }
8
+
9
+ type ambiguity_check = { state: Integer, type: String, token: String, result: String, sentence: Array[String], lookahead_index: Integer?, interpretations: Array[IR::interpretation], explored_configurations: Integer, configuration_budget_exhausted: bool }
10
+
11
+ type ambiguity_document = { ibex_check: String, schema_version: Integer, algorithm: String, search: ambiguity_search, status: String, summary: ambiguity_summary, conflicts: Array[ambiguity_check] }
12
+
13
+ # Renders a bounded ambiguity search over every parser conflict.
14
+ class Ambiguity
15
+ SCHEMA_VERSION: Integer
16
+
17
+ @checks: Array[ambiguity_check]
18
+
19
+ @max_configurations: Integer
20
+
21
+ @max_tokens: Integer
22
+
23
+ @grammar: IR::Grammar
24
+
25
+ @automaton: IR::Automaton
26
+
27
+ # @rbs (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
28
+ def initialize: (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> void
29
+
30
+ # @rbs () -> Integer
31
+ def exit_status: () -> Integer
32
+
33
+ # @rbs () -> ambiguity_document
34
+ def to_h: () -> ambiguity_document
35
+
36
+ # @rbs () -> String
37
+ def render_text: () -> String
38
+
39
+ private
40
+
41
+ # @rbs () -> String
42
+ def status: () -> String
43
+
44
+ # @rbs () -> ambiguity_summary
45
+ def summary: () -> ambiguity_summary
46
+
47
+ # @rbs () -> Array[ambiguity_check]
48
+ def check_conflicts: () -> Array[ambiguity_check]
49
+
50
+ # @rbs (IR::AutomatonState state, IR::conflict conflict) -> ambiguity_check
51
+ def check_conflict: (IR::AutomatonState state, IR::conflict conflict) -> ambiguity_check
52
+
53
+ # @rbs (Array[Integer] ids) -> Array[String]
54
+ def symbol_names: (Array[Integer] ids) -> Array[String]
55
+
56
+ # @rbs (Array[String] lines, ambiguity_check check, Integer number) -> void
57
+ def append_check: (Array[String] lines, ambiguity_check check, Integer number) -> void
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,59 @@
1
+ # Generated from lib/ibex/codegen/cst_metadata.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Builds the deterministic kind space embedded in CST-aware parser tables.
6
+ class CSTMetadata
7
+ type kind_map = Hash[String, Integer]
8
+
9
+ type kinds = { names: Array[String], terminal_range: Array[Integer], nonterminal_range: Array[Integer], named: kind_map, named_nonterminals: Hash[Integer, Integer], trivia: kind_map, synthetic: kind_map }
10
+
11
+ type field_slot = Integer | { index: Integer, extraction: Symbol }
12
+
13
+ type slot = { node_kind: Integer, node_name: String, fields: Hash[String, field_slot] }
14
+
15
+ type metadata = { version: Integer, trivia_policy: Symbol, kinds: kinds, slots: Hash[Integer, slot] }
16
+
17
+ TRIVIA_KINDS: Array[String]
18
+
19
+ SYNTHETIC_KINDS: Array[String]
20
+
21
+ @grammar: IR::Grammar
22
+
23
+ @trivia_policy: Symbol
24
+
25
+ # @rbs (IR::Grammar grammar, ?trivia_policy: Symbol | String) -> void
26
+ def initialize: (IR::Grammar grammar, ?trivia_policy: Symbol | String) -> void
27
+
28
+ # Return table-ready CST metadata with stable insertion order.
29
+ # @rbs () -> metadata
30
+ def build: () -> metadata
31
+
32
+ private
33
+
34
+ # @rbs (Symbol | String policy) -> Symbol
35
+ def normalize_trivia_policy: (Symbol | String policy) -> Symbol
36
+
37
+ # @rbs (Array[String] names) -> Hash[String, Integer]
38
+ def append_named_kinds: (Array[String] names) -> Hash[String, Integer]
39
+
40
+ # @rbs (Array[String] names, Array[String] additions) -> Hash[String, Integer]
41
+ def append_kinds: (Array[String] names, Array[String] additions) -> Hash[String, Integer]
42
+
43
+ # @rbs (Array[Integer] ids) -> Array[Integer]
44
+ def half_open_range: (Array[Integer] ids) -> Array[Integer]
45
+
46
+ # @rbs (Hash[String, Integer] named) -> Hash[Integer, Integer]
47
+ def named_nonterminals: (Hash[String, Integer] named) -> Hash[Integer, Integer]
48
+
49
+ # @rbs (Hash[String, Integer] named) -> Hash[Integer, slot]
50
+ def slot_metadata: (Hash[String, Integer] named) -> Hash[Integer, slot]
51
+
52
+ # @rbs (Integer index, Integer symbol_id) -> field_slot
53
+ def field_slot: (Integer index, Integer symbol_id) -> field_slot
54
+
55
+ # @rbs (Integer symbol_id) -> Symbol?
56
+ def repetition_extraction: (Integer symbol_id) -> Symbol?
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/codegen/documentation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Renders normalized user rules as deterministic Markdown, HTML, or railroad SVG.
6
+ module Documentation
7
+ FORMATS: Array[String]
8
+
9
+ # @rbs (IR::Grammar grammar, format: String | Symbol) -> String
10
+ def self.render: (IR::Grammar grammar, format: String | Symbol) -> String
11
+
12
+ # @rbs (IR::Grammar grammar) -> String
13
+ private def self.render_markdown: (IR::Grammar grammar) -> String
14
+
15
+ # @rbs (Array[String] lines, String? documentation) -> void
16
+ private def self.append_markdown_documentation: (Array[String] lines, String? documentation) -> void
17
+
18
+ # @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
19
+ private def self.markdown_alternative: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
20
+
21
+ # @rbs (IR::Grammar grammar) -> String
22
+ private def self.render_html: (IR::Grammar grammar) -> String
23
+
24
+ # @rbs (String title) -> Array[String]
25
+ private def self.html_start: (String title) -> Array[String]
26
+
27
+ # @rbs (Array[String] lines, IR::Grammar grammar, IR::GrammarSymbol symbol,
28
+ # Array[IR::Production] productions, Hash[Integer, String] labels) -> void
29
+ private def self.append_html_rule: (Array[String] lines, IR::Grammar grammar, IR::GrammarSymbol symbol, Array[IR::Production] productions, Hash[Integer, String] labels) -> void
30
+
31
+ # @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
32
+ private def self.html_alternative: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels) -> String
33
+
34
+ # @rbs (IR::Grammar grammar) -> Array[[IR::GrammarSymbol, Array[IR::Production]]]
35
+ private def self.rule_groups: (IR::Grammar grammar) -> Array[[ IR::GrammarSymbol, Array[IR::Production] ]]
36
+
37
+ # @rbs (String value) -> String
38
+ private def self.markdown_code: (String value) -> String
39
+
40
+ # @rbs (String value) -> bool
41
+ private def self.markdown_code_padding?: (String value) -> bool
42
+
43
+ # @rbs (String value) -> String
44
+ private def self.markdown_escape: (String value) -> String
45
+
46
+ # @rbs (String value) -> String
47
+ private def self.html_escape: (String value) -> String
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,85 @@
1
+ # Generated from lib/ibex/codegen/explain.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ type explain_selection = { state: IR::AutomatonState, conflict: IR::conflict, conflict_index: Integer }
6
+
7
+ type explain_entry = { state: IR::AutomatonState, conflict: IR::conflict, example: IR::counterexample }
8
+
9
+ # Renders a selected conflict explanation from Automaton IR and counterexamples.
10
+ # rubocop:disable Metrics/ClassLength -- inline contracts and two stable output formats stay near selection policy.
11
+ class Explain
12
+ SCHEMA_VERSION: Integer
13
+
14
+ # @rbs (IR::Automaton automaton, ?state: Integer?, ?token: String?, ?max_tokens: Integer,
15
+ # ?max_configurations: Integer) -> void
16
+ def initialize: (IR::Automaton automaton, ?state: Integer?, ?token: String?, ?max_tokens: Integer, ?max_configurations: Integer) -> void
17
+
18
+ # @rbs () -> Hash[Symbol, untyped]
19
+ def to_h: () -> Hash[Symbol, untyped]
20
+
21
+ # @rbs () -> String
22
+ def render_text: () -> String
23
+
24
+ private
25
+
26
+ # @rbs (String? query) -> IR::GrammarSymbol?
27
+ def resolve_token: (String? query) -> IR::GrammarSymbol?
28
+
29
+ # @rbs () -> void
30
+ def validate_state!: () -> void
31
+
32
+ # @rbs () -> Array[explain_entry]
33
+ def select_entries: () -> Array[explain_entry]
34
+
35
+ # @rbs () -> Array[explain_selection]
36
+ def selected_conflicts: () -> Array[explain_selection]
37
+
38
+ # @rbs (explain_entry entry) -> Hash[Symbol, untyped]
39
+ def conflict_document: (explain_entry entry) -> Hash[Symbol, untyped]
40
+
41
+ # @rbs (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
42
+ def conflict_alternatives: (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
43
+
44
+ # @rbs (IR::interpretation interpretation) -> Hash[Symbol, untyped]
45
+ def interpretation_document: (IR::interpretation interpretation) -> Hash[Symbol, untyped]
46
+
47
+ # @rbs (untyped tree) -> untyped
48
+ def tree_document: (untyped tree) -> untyped
49
+
50
+ # @rbs (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
51
+ def string_values: (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
52
+
53
+ # @rbs (String name) -> Hash[Symbol, untyped]
54
+ def symbol_reference: (String name) -> Hash[Symbol, untyped]
55
+
56
+ # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
57
+ def token_reference: (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
58
+
59
+ # @rbs (Array[String] lines, explain_entry entry, Integer number) -> void
60
+ def append_conflict: (Array[String] lines, explain_entry entry, Integer number) -> void
61
+
62
+ # @rbs (Array[String] lines, IR::conflict conflict) -> void
63
+ def append_midrule_origins: (Array[String] lines, IR::conflict conflict) -> void
64
+
65
+ # @rbs (Array[String] lines, IR::AutomatonState state, IR::conflict conflict,
66
+ # IR::counterexample example) -> void
67
+ def append_witness_steps: (Array[String] lines, IR::AutomatonState state, IR::conflict conflict, IR::counterexample example) -> void
68
+
69
+ # @rbs (Array[String] lines, IR::counterexample example) -> void
70
+ def append_interpretations: (Array[String] lines, IR::counterexample example) -> void
71
+
72
+ # @rbs (Hash[Symbol, untyped] alternative) -> String
73
+ def alternative_text: (Hash[Symbol, untyped] alternative) -> String
74
+
75
+ # @rbs (Array[String] lines, untyped tree, String prefix, String connector) -> void
76
+ def append_tree: (Array[String] lines, untyped tree, String prefix, String connector) -> void
77
+
78
+ # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> String
79
+ def token_label: (IR::GrammarSymbol symbol, ?query: String?) -> String
80
+
81
+ # @rbs (String name) -> String
82
+ def display_name: (String name) -> String
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,101 @@
1
+ # Generated from lib/ibex/codegen/generated_action_abi.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Selects the smallest generated semantic-action ABI that preserves the
6
+ # action's declared inputs.
7
+ # rubocop:disable Metrics/ModuleLength -- ABI proof and source rewriting must evolve together.
8
+ module GeneratedActionABI
9
+ LEGACY_PARAMETERS: Array[String]
10
+
11
+ SIMPLE_POSITIONAL_READ: Regexp
12
+
13
+ SIMPLE_POSITIONAL_UNSAFE: Regexp
14
+
15
+ # Keeps semantic-action analysis local to one code-generation run.
16
+ class Cache
17
+ @values_only: Hash[Integer, bool]
18
+
19
+ @borrowed_values: Hash[Integer, bool]
20
+
21
+ @positional_actions: Hash[Integer, String?]
22
+
23
+ # @rbs () -> void
24
+ def initialize: () -> void
25
+
26
+ # @rbs (IR::Production production) -> bool
27
+ def values_only?: (IR::Production production) -> bool
28
+
29
+ # @rbs (IR::Production production) -> bool
30
+ def borrowed_values?: (IR::Production production) -> bool
31
+
32
+ # @rbs (IR::Production production) -> String?
33
+ def positional_action_source: (IR::Production production) -> String?
34
+
35
+ # @rbs (IR::Production production) -> bool
36
+ def positional_values?: (IR::Production production) -> bool
37
+ end
38
+
39
+ # @rbs (IR::Production production) -> bool
40
+ def self?.values_only?: (IR::Production production) -> bool
41
+
42
+ # The direct runtime can share one reduction-values array with an action
43
+ # and a hook installed by that action only when the action cannot mutate
44
+ # or retain the array itself. Element reads and parallel assignment copy
45
+ # values out without exposing the container.
46
+ # @rbs (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> bool
47
+ def self?.borrowed_values?: (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> bool
48
+
49
+ # Return semantic source rewritten for zero-to-four positional RHS
50
+ # arguments, or nil when the values container remains observable.
51
+ # @rbs (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> String?
52
+ def self?.positional_action_source: (IR::Production production, ?analysis: singleton(GeneratedActionABI) | Cache) -> String?
53
+
54
+ # @rbs (String source, Array[String] parameters) -> String?
55
+ def self?.fast_positional_action_source: (String source, Array[String] parameters) -> String?
56
+
57
+ # @rbs (IR::Production production) -> bool
58
+ def self?.positional_values?: (IR::Production production) -> bool
59
+
60
+ # Avoid loading a Ruby parser for the overwhelmingly common generated
61
+ # action shape. This accepts only a single result assignment (or a bare
62
+ # expression), simple numeric val reads, and no further assignment.
63
+ # Anything less obvious falls back to Ripper below.
64
+ # @rbs (String source) -> bool
65
+ def self?.simple_indexed_values_action?: (String source) -> bool
66
+
67
+ # Keep the most common identity action off the Ripper load path. The
68
+ # whole-source match excludes strings, comments, receivers, and compound
69
+ # expressions before replacing the one direct read.
70
+ # @rbs (String source, Array[String] parameters) -> String?
71
+ def self?.simple_positional_action_source: (String source, Array[String] parameters) -> String?
72
+
73
+ # Rewrite the common string/comment/regexp-free action shape without
74
+ # loading Ripper. The borrowed-values proof has already rejected writes
75
+ # and escaping uses of the values container.
76
+ # @rbs (String source, Array[String] parameters) -> String?
77
+ def self?.simple_indexed_positional_action_source: (String source, Array[String] parameters) -> String?
78
+
79
+ # @rbs (Array[untyped] tokens, Array[String] parameters) -> String?
80
+ def self?.rewrite_positional_values: (Array[untyped] tokens, Array[String] parameters) -> String?
81
+
82
+ # @rbs (Array[untyped] tokens, Integer index, Array[String] parameters) -> [String, Integer]?
83
+ def self?.positional_value_reference: (Array[untyped] tokens, Integer index, Array[String] parameters) -> [ String, Integer ]?
84
+
85
+ # @rbs (Array[untyped] tokens, Integer index) -> bool
86
+ def self?.receiver_before_value?: (Array[untyped] tokens, Integer index) -> bool
87
+
88
+ # @rbs (String source) -> bool
89
+ def self?.references_legacy_parameter?: (String source) -> bool
90
+
91
+ # @rbs (untyped node, ?untyped parent, ?Integer? child_index) -> bool
92
+ def self?.read_only_value_references?: (untyped node, ?untyped parent, ?Integer? child_index) -> bool
93
+
94
+ # @rbs (untyped node) -> bool
95
+ def self?.value_reference?: (untyped node) -> bool
96
+
97
+ # @rbs (untyped parent, Integer? child_index) -> bool
98
+ def self?.safe_value_reference?: (untyped parent, Integer? child_index) -> bool
99
+ end
100
+ end
101
+ end
@@ -8,6 +8,22 @@ module Ibex
8
8
 
9
9
  private def self.state_sections: (IR::Automaton automaton, IR::Grammar grammar, Hash[Integer, String] labels) -> String
10
10
 
11
+ private def controls: (IR::Automaton automaton) -> String
12
+
13
+ private def self.controls: (IR::Automaton automaton) -> String
14
+
15
+ private def styles: () -> String
16
+
17
+ private def self.styles: () -> String
18
+
19
+ private def interaction_script: () -> String
20
+
21
+ private def self.interaction_script: () -> String
22
+
23
+ private def one_hop_neighbors: (IR::Automaton automaton, Integer state_id) -> Array[Integer]
24
+
25
+ private def self.one_hop_neighbors: (IR::Automaton automaton, Integer state_id) -> Array[Integer]
26
+
11
27
  private def item_html: (IR::AutomatonItem item, IR::Grammar grammar, Hash[Integer, String] labels) -> String
12
28
 
13
29
  private def self.item_html: (IR::AutomatonItem item, IR::Grammar grammar, Hash[Integer, String] labels) -> String
@@ -16,9 +32,9 @@ module Ibex
16
32
 
17
33
  private def self.rule_sections: (IR::Grammar grammar, Hash[Integer, String] labels) -> String
18
34
 
19
- private def conflict_sections: (IR::Automaton automaton) -> String
35
+ private def conflict_sections: (IR::Automaton automaton, IR::Grammar grammar, Hash[Integer, String] labels) -> String
20
36
 
21
- private def self.conflict_sections: (IR::Automaton automaton) -> String
37
+ private def self.conflict_sections: (IR::Automaton automaton, IR::Grammar grammar, Hash[Integer, String] labels) -> String
22
38
 
23
39
  private def escape: (String value) -> String
24
40
 
@@ -0,0 +1,16 @@
1
+ # Generated from lib/ibex/codegen/mermaid.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Renders an Automaton IR graph as a GitHub-compatible Mermaid flowchart.
6
+ module Mermaid
7
+ # @rbs (IR::Automaton automaton) -> String
8
+ def self?.render: (IR::Automaton automaton) -> String
9
+
10
+ private
11
+
12
+ # @rbs (String value) -> String
13
+ def self?.escape: (String value) -> String
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,82 @@
1
+ # Generated from lib/ibex/codegen/railroad.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Renders normalized Grammar IR as a self-contained SVG railroad diagram.
6
+ module Railroad
7
+ CHAR_WIDTH: Integer
8
+
9
+ BOX_HEIGHT: Integer
10
+
11
+ BOX_PADDING: Integer
12
+
13
+ TRACK_GAP: Integer
14
+
15
+ ROW_HEIGHT: Integer
16
+
17
+ SECTION_HEADER: Integer
18
+
19
+ SECTION_GAP: Integer
20
+
21
+ PAGE_PADDING: Integer
22
+
23
+ TITLE_HEIGHT: Integer
24
+
25
+ EPSILON_WIDTH: Integer
26
+
27
+ START_RADIUS: Integer
28
+
29
+ END_RADIUS: Integer
30
+
31
+ MIN_RAIL_X: Integer
32
+
33
+ # @rbs STYLE: String
34
+ STYLE: ::String
35
+
36
+ extend RailroadDocumentation
37
+
38
+ # @rbs (IR::Grammar grammar) -> String
39
+ def self.render: (IR::Grammar grammar) -> String
40
+
41
+ # @rbs (IR::Grammar grammar) -> Array[[IR::GrammarSymbol, Array[IR::Production]]]
42
+ private def self.production_groups: (IR::Grammar grammar) -> Array[[ IR::GrammarSymbol, Array[IR::Production] ]]
43
+
44
+ # @rbs (IR::Grammar grammar, Array[[IR::GrammarSymbol, Array[IR::Production]]] groups,
45
+ # Hash[Integer, String] labels, Integer rail_x) -> Integer
46
+ private def self.document_width: (IR::Grammar grammar, Array[[ IR::GrammarSymbol, Array[IR::Production] ]] groups, Hash[Integer, String] labels, Integer rail_x) -> Integer
47
+
48
+ # @rbs (Array[[IR::GrammarSymbol, Array[IR::Production]]] groups) -> Integer
49
+ private def self.document_height: (Array[[ IR::GrammarSymbol, Array[IR::Production] ]] groups) -> Integer
50
+
51
+ # @rbs (IR::Grammar grammar, Integer width, Integer height) -> Array[String]
52
+ private def self.document_start: (IR::Grammar grammar, Integer width, Integer height) -> Array[String]
53
+
54
+ # @rbs (Array[String] lines, IR::Grammar grammar,
55
+ # Array[[IR::GrammarSymbol, Array[IR::Production]]] groups,
56
+ # Hash[Integer, String] labels, Integer rail_x) -> void
57
+ private def self.append_sections: (Array[String] lines, IR::Grammar grammar, Array[[ IR::GrammarSymbol, Array[IR::Production] ]] groups, Hash[Integer, String] labels, Integer rail_x) -> void
58
+
59
+ # @rbs (Array[String] lines, IR::Grammar grammar, Array[IR::Production] productions,
60
+ # Hash[Integer, String] labels, Integer rail_x, Integer header_height) -> void
61
+ private def self.append_productions: (Array[String] lines, IR::Grammar grammar, Array[IR::Production] productions, Hash[Integer, String] labels, Integer rail_x, Integer header_height) -> void
62
+
63
+ # @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels,
64
+ # Integer rail_x, Integer offset_y) -> Array[String]
65
+ private def self.production_lines: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels, Integer rail_x, Integer offset_y) -> Array[String]
66
+
67
+ # @rbs (Array[String] lines, IR::Grammar grammar, IR::Production production,
68
+ # Hash[Integer, String] labels, Integer cursor) -> Integer
69
+ private def self.append_rhs: (Array[String] lines, IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels, Integer cursor) -> Integer
70
+
71
+ # @rbs (Array[String] lines, Integer cursor) -> Integer
72
+ private def self.append_epsilon: (Array[String] lines, Integer cursor) -> Integer
73
+
74
+ # @rbs (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels,
75
+ # Integer rail_x) -> Integer
76
+ private def self.row_end_x: (IR::Grammar grammar, IR::Production production, Hash[Integer, String] labels, Integer rail_x) -> Integer
77
+
78
+ # @rbs (String value) -> Integer
79
+ private def self.label_width: (String value) -> Integer
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,31 @@
1
+ # Generated from lib/ibex/codegen/railroad_documentation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Documentation layout helpers mixed into the railroad renderer singleton.
6
+ module RailroadDocumentation
7
+ DOCUMENTATION_COLUMNS: Integer
8
+
9
+ DOCUMENTATION_LINE_HEIGHT: Integer
10
+
11
+ DOCUMENTATION_GAP: Integer
12
+
13
+ private
14
+
15
+ # @rbs (Array[String] lines, IR::GrammarSymbol symbol) -> void
16
+ def append_rule_documentation: (Array[String] lines, IR::GrammarSymbol symbol) -> void
17
+
18
+ # @rbs (IR::GrammarSymbol symbol) -> Integer
19
+ def section_header_height: (IR::GrammarSymbol symbol) -> Integer
20
+
21
+ # @rbs (String? documentation) -> Array[String]
22
+ def documentation_lines: (String? documentation) -> Array[String]
23
+
24
+ # @rbs (String | Integer value) -> String
25
+ def escape: (String | Integer value) -> String
26
+
27
+ # @rbs (Integer from, Integer to) -> String
28
+ def track: (Integer from, Integer to) -> String
29
+ end
30
+ end
31
+ end