ibex 0.2.0 → 0.4.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 (461) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +100 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +274 -0
  40. data/docs/development.md +196 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1617 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/impact.md +101 -0
  56. data/docs/ja/bison-import.md +51 -0
  57. data/docs/ja/stable-api.md +53 -0
  58. data/docs/lexer-construction-profile.md +109 -0
  59. data/docs/lexer-migration.md +5 -0
  60. data/docs/maturity.md +129 -0
  61. data/docs/project-site-strategy.md +54 -0
  62. data/docs/racc-migration-evidence.md +45 -0
  63. data/docs/racc-migration.md +11 -0
  64. data/docs/release-readiness.md +126 -68
  65. data/docs/repair-semantics.md +123 -0
  66. data/docs/runtime-abi-evolution.md +310 -0
  67. data/docs/stability.md +145 -34
  68. data/docs/status.md +43 -0
  69. data/docs/syntax-sessions.md +183 -0
  70. data/docs/table-artifact.md +125 -0
  71. data/docs/test-interactions.md +219 -0
  72. data/docs/verification-report.md +137 -0
  73. data/docs/verifier-trust-boundary.md +199 -0
  74. data/docs/workloads.md +132 -0
  75. data/lib/ibex/analysis/digraph.rb +128 -0
  76. data/lib/ibex/analysis/sets.rb +14 -0
  77. data/lib/ibex/analysis.rb +1 -0
  78. data/lib/ibex/bison_import/importer.rb +516 -0
  79. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  80. data/lib/ibex/bison_import.rb +200 -0
  81. data/lib/ibex/bounded_subprocess.rb +171 -0
  82. data/lib/ibex/cli/ambiguity.rb +14 -5
  83. data/lib/ibex/cli/analysis.rb +134 -0
  84. data/lib/ibex/cli/bison_import.rb +121 -0
  85. data/lib/ibex/cli/config.rb +128 -0
  86. data/lib/ibex/cli/diagnostics.rb +31 -11
  87. data/lib/ibex/cli/documentation.rb +11 -8
  88. data/lib/ibex/cli/equiv.rb +169 -0
  89. data/lib/ibex/cli/error_messages.rb +11 -4
  90. data/lib/ibex/cli/explain.rb +14 -5
  91. data/lib/ibex/cli/fix.rb +203 -0
  92. data/lib/ibex/cli/formatting.rb +11 -10
  93. data/lib/ibex/cli/fuzz.rb +200 -0
  94. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  95. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  96. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  97. data/lib/ibex/cli/grammar_tests.rb +32 -14
  98. data/lib/ibex/cli/impact.rb +393 -0
  99. data/lib/ibex/cli/ir_tools.rb +5 -61
  100. data/lib/ibex/cli/outputs.rb +60 -33
  101. data/lib/ibex/cli/reduce.rb +202 -0
  102. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  103. data/lib/ibex/cli/samples.rb +49 -23
  104. data/lib/ibex/cli/verify.rb +116 -0
  105. data/lib/ibex/cli/watch.rb +6 -5
  106. data/lib/ibex/cli.rb +362 -56
  107. data/lib/ibex/codegen/action_locations.rb +1 -1
  108. data/lib/ibex/codegen/action_method_source.rb +5 -6
  109. data/lib/ibex/codegen/action_source.rb +3 -2
  110. data/lib/ibex/codegen/ambiguity.rb +5 -4
  111. data/lib/ibex/codegen/explain.rb +123 -55
  112. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  113. data/lib/ibex/codegen/rbs.rb +15 -7
  114. data/lib/ibex/codegen/report.rb +25 -13
  115. data/lib/ibex/codegen/ruby.rb +28 -64
  116. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  117. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  118. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  119. data/lib/ibex/configuration/explanation.rb +421 -0
  120. data/lib/ibex/configuration/inspector.rb +232 -0
  121. data/lib/ibex/configuration.rb +580 -0
  122. data/lib/ibex/coverage/collector.rb +21 -11
  123. data/lib/ibex/coverage/event_stream.rb +13 -7
  124. data/lib/ibex/coverage/report.rb +26 -18
  125. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  126. data/lib/ibex/delta_reducer.rb +99 -0
  127. data/lib/ibex/diff.rb +141 -0
  128. data/lib/ibex/equiv/machine.rb +135 -0
  129. data/lib/ibex/equiv.rb +373 -0
  130. data/lib/ibex/fix.rb +557 -0
  131. data/lib/ibex/frontend/ast.rb +22 -2
  132. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  133. data/lib/ibex/frontend/diagnostic.rb +1 -1
  134. data/lib/ibex/frontend/formatter.rb +72 -26
  135. data/lib/ibex/frontend/generated_parser.rb +147 -117
  136. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  137. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  138. data/lib/ibex/frontend/generation.rb +1 -1
  139. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  140. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  141. data/lib/ibex/frontend/regenerator.rb +1 -0
  142. data/lib/ibex/frontend/resolution.rb +2 -1
  143. data/lib/ibex/frontend/resolver.rb +1 -1
  144. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  145. data/lib/ibex/frontend/source_cursor.rb +2 -2
  146. data/lib/ibex/frontend/source_span.rb +9 -1
  147. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  148. data/lib/ibex/frontend/token_adapter.rb +10 -0
  149. data/lib/ibex/frontend.rb +1 -0
  150. data/lib/ibex/fuzz.rb +219 -0
  151. data/lib/ibex/generation_input.rb +1 -1
  152. data/lib/ibex/generation_manifest.rb +36 -25
  153. data/lib/ibex/generation_transaction.rb +1 -1
  154. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  155. data/lib/ibex/generation_transaction_validation.rb +2 -2
  156. data/lib/ibex/grammar_tests.rb +1 -1
  157. data/lib/ibex/impact/action_impact.rb +148 -0
  158. data/lib/ibex/impact/automaton_impact.rb +57 -0
  159. data/lib/ibex/impact/coverage_impact.rb +53 -0
  160. data/lib/ibex/impact/graph.rb +132 -0
  161. data/lib/ibex/impact/propagation.rb +147 -0
  162. data/lib/ibex/impact/report.rb +273 -0
  163. data/lib/ibex/impact/seeds.rb +69 -0
  164. data/lib/ibex/impact/severity.rb +139 -0
  165. data/lib/ibex/impact.rb +16 -0
  166. data/lib/ibex/ir/automaton_ir.rb +61 -19
  167. data/lib/ibex/ir/grammar_ir.rb +76 -45
  168. data/lib/ibex/ir/lexer_ir.rb +5 -5
  169. data/lib/ibex/ir/parser_contract.rb +135 -0
  170. data/lib/ibex/ir/serialize.rb +203 -76
  171. data/lib/ibex/ir/validator/automaton.rb +64 -34
  172. data/lib/ibex/ir/validator/base.rb +51 -33
  173. data/lib/ibex/ir/validator/grammar.rb +113 -83
  174. data/lib/ibex/ir/validator/lexer.rb +2 -2
  175. data/lib/ibex/ir/validator.rb +2 -1
  176. data/lib/ibex/ir.rb +16 -3
  177. data/lib/ibex/lalr/build_metrics.rb +50 -2
  178. data/lib/ibex/lalr/builder.rb +191 -56
  179. data/lib/ibex/lalr/conflict_search.rb +15 -4
  180. data/lib/ibex/lalr/counterexample.rb +19 -14
  181. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  182. data/lib/ibex/lalr/goto_follows.rb +229 -0
  183. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  184. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  185. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  186. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  187. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  188. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  189. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  190. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  191. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  192. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  193. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  194. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  195. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  196. data/lib/ibex/lalr.rb +52 -1
  197. data/lib/ibex/location.rb +3 -3
  198. data/lib/ibex/lsp/document_handlers.rb +9 -7
  199. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  200. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  201. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  202. data/lib/ibex/lsp/position_codec.rb +6 -2
  203. data/lib/ibex/lsp/request_handlers.rb +3 -2
  204. data/lib/ibex/lsp/request_support.rb +14 -7
  205. data/lib/ibex/lsp/server.rb +13 -11
  206. data/lib/ibex/lsp/symbol_index.rb +13 -13
  207. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  208. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  209. data/lib/ibex/lsp/transport.rb +13 -3
  210. data/lib/ibex/lsp/workspace.rb +5 -4
  211. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  212. data/lib/ibex/lsp.rb +1 -0
  213. data/lib/ibex/messages/en.yml +28 -0
  214. data/lib/ibex/messages/ja.yml +28 -0
  215. data/lib/ibex/messages.rb +68 -0
  216. data/lib/ibex/metrics.rb +175 -0
  217. data/lib/ibex/normalize/declarations.rb +2 -0
  218. data/lib/ibex/normalize/diagnostics.rb +63 -38
  219. data/lib/ibex/normalize/expander.rb +5 -4
  220. data/lib/ibex/normalize/expression.rb +8 -6
  221. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  222. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  223. data/lib/ibex/normalize/lexer.rb +3 -3
  224. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  225. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  226. data/lib/ibex/normalize/parameters.rb +31 -4
  227. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  228. data/lib/ibex/normalize.rb +10 -20
  229. data/lib/ibex/racc_migration/report.rb +6 -3
  230. data/lib/ibex/rake_task.rb +1 -1
  231. data/lib/ibex/samples.rb +43 -13
  232. data/lib/ibex/table_artifact/builder.rb +266 -0
  233. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  234. data/lib/ibex/table_artifact/document.rb +39 -0
  235. data/lib/ibex/table_artifact/executor.rb +187 -0
  236. data/lib/ibex/table_artifact/serializer.rb +57 -0
  237. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  238. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  239. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  240. data/lib/ibex/table_artifact/validator.rb +253 -0
  241. data/lib/ibex/table_artifact.rb +88 -0
  242. data/lib/ibex/table_simulation/result.rb +6 -2
  243. data/lib/ibex/table_simulation/step.rb +3 -1
  244. data/lib/ibex/tables.rb +14 -0
  245. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  246. data/lib/ibex/verification_report/builder.rb +159 -0
  247. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  248. data/lib/ibex/verification_report/logical_path.rb +68 -0
  249. data/lib/ibex/verification_report/validator.rb +329 -0
  250. data/lib/ibex/verification_report.rb +69 -0
  251. data/lib/ibex/verify/action_correspondence.rb +138 -0
  252. data/lib/ibex/verify/language_witness.rb +295 -0
  253. data/lib/ibex/verify/reference_collection.rb +190 -0
  254. data/lib/ibex/verify/result.rb +73 -0
  255. data/lib/ibex/verify/verifier.rb +598 -0
  256. data/lib/ibex/verify.rb +15 -0
  257. data/lib/ibex/version.rb +1 -1
  258. data/lib/ibex/watch/runner.rb +10 -1
  259. data/lib/ibex/watch/source_snapshot.rb +13 -8
  260. data/lib/ibex.rb +11 -0
  261. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  262. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  263. data/schema/bison-import-v1.schema.json +106 -0
  264. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  265. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  266. data/schema/construction-profile-v1.schema.json +779 -0
  267. data/schema/diff-v1.schema.json +41 -0
  268. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  269. data/schema/equiv-v1.schema.json +64 -0
  270. data/schema/error-ux-review-v1.schema.json +609 -0
  271. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  272. data/schema/error-ux-round2-v1.schema.json +519 -0
  273. data/schema/explain-v1.schema.json +63 -1
  274. data/schema/fix-v1.schema.json +64 -0
  275. data/schema/fix-v2.schema.json +66 -0
  276. data/schema/fix-v3.schema.json +101 -0
  277. data/schema/fuzz-regression-v1.schema.json +79 -0
  278. data/schema/fuzz-v1.schema.json +114 -0
  279. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  280. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  281. data/schema/grammar-ir.schema.json +271 -0
  282. data/schema/ielr-benchmark-v1.schema.json +85 -0
  283. data/schema/impact-v1.schema.json +208 -0
  284. data/schema/lexer-profile-v1.schema.json +491 -0
  285. data/schema/metrics-v1.schema.json +60 -0
  286. data/schema/reduce-v1.schema.json +22 -0
  287. data/schema/reduce-v2.schema.json +63 -0
  288. data/schema/table-artifact-v1.schema.json +377 -0
  289. data/schema/verification-report-v1.schema.json +222 -0
  290. data/schema/verify-v1.schema.json +42 -0
  291. data/sig/ibex/analysis/digraph.rbs +19 -0
  292. data/sig/ibex/analysis/sets.rbs +10 -0
  293. data/sig/ibex/bison_import/importer.rbs +140 -0
  294. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  295. data/sig/ibex/bison_import.rbs +95 -0
  296. data/sig/ibex/bounded_subprocess.rbs +76 -0
  297. data/sig/ibex/cli/ambiguity.rbs +6 -0
  298. data/sig/ibex/cli/analysis.rbs +43 -0
  299. data/sig/ibex/cli/bison_import.rbs +32 -0
  300. data/sig/ibex/cli/config.rbs +35 -0
  301. data/sig/ibex/cli/diagnostics.rbs +16 -3
  302. data/sig/ibex/cli/documentation.rbs +5 -1
  303. data/sig/ibex/cli/equiv.rbs +49 -0
  304. data/sig/ibex/cli/error_messages.rbs +6 -0
  305. data/sig/ibex/cli/explain.rbs +6 -0
  306. data/sig/ibex/cli/fix.rbs +53 -0
  307. data/sig/ibex/cli/formatting.rbs +5 -1
  308. data/sig/ibex/cli/fuzz.rbs +47 -0
  309. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  310. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  311. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  312. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  313. data/sig/ibex/cli/impact.rbs +95 -0
  314. data/sig/ibex/cli/ir_tools.rbs +7 -19
  315. data/sig/ibex/cli/outputs.rbs +9 -3
  316. data/sig/ibex/cli/reduce.rbs +60 -0
  317. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  318. data/sig/ibex/cli/samples.rbs +8 -0
  319. data/sig/ibex/cli/verify.rbs +28 -0
  320. data/sig/ibex/cli/watch.rbs +2 -2
  321. data/sig/ibex/cli.rbs +79 -5
  322. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  323. data/sig/ibex/codegen/explain.rbs +45 -25
  324. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  325. data/sig/ibex/codegen/rbs.rbs +12 -10
  326. data/sig/ibex/codegen/report.rbs +12 -12
  327. data/sig/ibex/codegen/ruby.rbs +18 -15
  328. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  329. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  330. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  331. data/sig/ibex/configuration/explanation.rbs +195 -0
  332. data/sig/ibex/configuration/inspector.rbs +53 -0
  333. data/sig/ibex/configuration.rbs +242 -0
  334. data/sig/ibex/coverage/collector.rbs +16 -14
  335. data/sig/ibex/coverage/event_stream.rbs +12 -10
  336. data/sig/ibex/coverage/report.rbs +20 -18
  337. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  338. data/sig/ibex/delta_reducer.rbs +38 -0
  339. data/sig/ibex/diff.rbs +47 -0
  340. data/sig/ibex/equiv/machine.rbs +54 -0
  341. data/sig/ibex/equiv.rbs +129 -0
  342. data/sig/ibex/fix.rbs +138 -0
  343. data/sig/ibex/frontend/ast.rbs +33 -7
  344. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  345. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  346. data/sig/ibex/frontend/formatter.rbs +38 -30
  347. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  348. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  349. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  350. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  351. data/sig/ibex/frontend/resolution.rbs +3 -2
  352. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  353. data/sig/ibex/frontend/source_span.rbs +5 -2
  354. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  355. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  356. data/sig/ibex/fuzz.rbs +71 -0
  357. data/sig/ibex/generation_input.rbs +2 -2
  358. data/sig/ibex/generation_manifest.rbs +35 -32
  359. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  360. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  361. data/sig/ibex/grammar_tests.rbs +2 -2
  362. data/sig/ibex/impact/action_impact.rbs +58 -0
  363. data/sig/ibex/impact/automaton_impact.rbs +37 -0
  364. data/sig/ibex/impact/coverage_impact.rbs +28 -0
  365. data/sig/ibex/impact/graph.rbs +67 -0
  366. data/sig/ibex/impact/propagation.rbs +56 -0
  367. data/sig/ibex/impact/report.rbs +107 -0
  368. data/sig/ibex/impact/seeds.rbs +36 -0
  369. data/sig/ibex/impact/severity.rbs +55 -0
  370. data/sig/ibex/impact.rbs +6 -0
  371. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  372. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  373. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  374. data/sig/ibex/ir/parser_contract.rbs +69 -0
  375. data/sig/ibex/ir/serialize.rbs +63 -28
  376. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  377. data/sig/ibex/ir/validator/base.rbs +35 -31
  378. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  379. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  380. data/sig/ibex/ir.rbs +9 -3
  381. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  382. data/sig/ibex/lalr/builder.rbs +75 -24
  383. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  384. data/sig/ibex/lalr/counterexample.rbs +17 -14
  385. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  386. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  387. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  388. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  389. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  390. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  391. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  392. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  393. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  394. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  395. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  396. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  397. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  398. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  399. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  400. data/sig/ibex/lalr.rbs +11 -1
  401. data/sig/ibex/location.rbs +6 -6
  402. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  403. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  404. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  405. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  406. data/sig/ibex/lsp/position_codec.rbs +8 -4
  407. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  408. data/sig/ibex/lsp/request_support.rbs +8 -8
  409. data/sig/ibex/lsp/server.rbs +16 -16
  410. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  411. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  412. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  413. data/sig/ibex/lsp/transport.rbs +18 -6
  414. data/sig/ibex/lsp/workspace.rbs +3 -2
  415. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  416. data/sig/ibex/messages.rbs +26 -0
  417. data/sig/ibex/metrics.rbs +50 -0
  418. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  419. data/sig/ibex/normalize/expander.rbs +2 -2
  420. data/sig/ibex/normalize/expression.rbs +10 -8
  421. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  422. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  423. data/sig/ibex/normalize/lexer.rbs +4 -4
  424. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  425. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  426. data/sig/ibex/normalize/parameters.rbs +13 -8
  427. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  428. data/sig/ibex/normalize.rbs +11 -5
  429. data/sig/ibex/racc_migration/report.rbs +8 -6
  430. data/sig/ibex/rake_task.rbs +1 -1
  431. data/sig/ibex/samples.rbs +13 -4
  432. data/sig/ibex/table_artifact/builder.rbs +93 -0
  433. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  434. data/sig/ibex/table_artifact/document.rbs +27 -0
  435. data/sig/ibex/table_artifact/executor.rbs +66 -0
  436. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  437. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  438. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  439. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  440. data/sig/ibex/table_artifact/validator.rbs +66 -0
  441. data/sig/ibex/table_artifact.rbs +32 -0
  442. data/sig/ibex/table_simulation/result.rbs +8 -4
  443. data/sig/ibex/table_simulation/step.rbs +4 -2
  444. data/sig/ibex/tables.rbs +10 -9
  445. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  446. data/sig/ibex/verification_report/builder.rbs +53 -0
  447. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  448. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  449. data/sig/ibex/verification_report/validator.rbs +114 -0
  450. data/sig/ibex/verification_report.rbs +44 -0
  451. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  452. data/sig/ibex/verify/language_witness.rbs +112 -0
  453. data/sig/ibex/verify/reference_collection.rbs +63 -0
  454. data/sig/ibex/verify/result.rbs +52 -0
  455. data/sig/ibex/verify/verifier.rbs +170 -0
  456. data/sig/ibex/verify.rbs +6 -0
  457. data/sig/ibex/watch/runner.rbs +12 -2
  458. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  459. metadata +254 -12
  460. data/lib/ibex/ir/migration.rb +0 -120
  461. data/sig/ibex/ir/migration.rbs +0 -34
data/sig/ibex/cli.rbs CHANGED
@@ -4,9 +4,9 @@ module Ibex
4
4
  CLI_FEATURE_ROOT: String
5
5
 
6
6
  interface _CLIOutput
7
- def puts: (*untyped) -> untyped
7
+ def puts: (*Object?) -> Object?
8
8
 
9
- def write: (String) -> untyped
9
+ def write: (String) -> Object?
10
10
  end
11
11
 
12
12
  interface _CLIInput
@@ -15,7 +15,7 @@ module Ibex
15
15
  def gets: () -> String?
16
16
  end
17
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 }
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, ?ielr_strategy: Symbol, ?ielr_report: bool, ?remove_unreachable: 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, ?fuzz_seed: Integer, ?fuzz_count: Integer, ?fuzz_max_tokens: Integer, ?fuzz_max_depth: Integer, ?fuzz_max_expansions: Integer, ?fuzz_max_actions: Integer, ?fuzz_max_stack: Integer, ?fuzz_coverage_guided: bool, ?fuzz_path_length: Integer, ?fuzz_against: String, ?fuzz_against_runtime: String, ?fuzz_against_timeout: Integer, ?fuzz_against_max_output: Integer, ?fuzz_max_reduction_trials: Integer, ?fuzz_regression_dir: String, ?fuzz_save_regression: bool, ?fuzz_format: String, ?reduce_command: String, ?reduce_mode: Symbol, ?reduce_max_trials: Integer, ?reduce_timeout: Integer, ?reduce_max_output_bytes: Integer, ?reduce_max_input_bytes: Integer, ?reduce_format: String }
19
19
 
20
20
  # Command-line pipeline coordinator.
21
21
  # rubocop:disable Metrics/ClassLength -- inline type contracts add lines without adding runtime responsibilities.
@@ -30,11 +30,19 @@ module Ibex
30
30
 
31
31
  include CLIOutputs
32
32
 
33
- @options: cli_options
33
+ @stdout: _CLIOutput
34
34
 
35
35
  @stderr: _CLIOutput
36
36
 
37
- @stdout: _CLIOutput
37
+ @options: cli_options
38
+
39
+ @language: String
40
+
41
+ @configuration_explicit_options: Hash[Symbol, bool]
42
+
43
+ @generation_grammar: IR::Grammar?
44
+
45
+ @generation_automaton: IR::Automaton?
38
46
 
39
47
  # rubocop:disable Layout/LineLength
40
48
  # @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
@@ -48,6 +56,39 @@ module Ibex
48
56
 
49
57
  private
50
58
 
59
+ # @rbs (Symbol name) -> void
60
+ def mark_configuration_option: (Symbol name) -> void
61
+
62
+ # OptionParser accepts a heterogeneous set of operation and configuration
63
+ # values. The CLIAdapter is the validation boundary for this dynamic map.
64
+ # @rbs (Symbol name, untyped value) -> void
65
+ def set_configuration_option: (Symbol name, untyped value) -> void
66
+
67
+ # @rbs (String value) -> void
68
+ def select_configuration_mode: (String value) -> void
69
+
70
+ # @rbs () -> Configuration::Resolver
71
+ def effective_configuration: () -> Configuration::Resolver
72
+
73
+ # Resolve a command-local legacy option hash without promoting it into the
74
+ # reusable CLI instance's generation settings.
75
+ # @rbs (Hash[Symbol, untyped] options, explicit_keys: Array[Symbol]) -> Configuration::Resolver
76
+ def resolve_configuration_options: (Hash[Symbol, untyped] options, explicit_keys: Array[Symbol]) -> Configuration::Resolver
77
+
78
+ # @rbs (Hash[Symbol, untyped] options, String name) -> untyped
79
+ def local_configuration_value: (Hash[Symbol, untyped] options, String name) -> untyped
80
+
81
+ # @rbs (Hash[Symbol, untyped] options, Symbol name, untyped value) -> void
82
+ def set_local_configuration_option: (Hash[Symbol, untyped] options, Symbol name, untyped value) -> void
83
+
84
+ # Configuration values have already been validated by Configuration::Resolver;
85
+ # callers narrow the value according to the option they are consuming.
86
+ # @rbs (String name) -> untyped
87
+ def configuration_value: (String name) -> untyped
88
+
89
+ # @rbs (Array[String] arguments) -> Array[String]
90
+ def extract_language: (Array[String] arguments) -> Array[String]
91
+
51
92
  # @rbs (Array[String] arguments) -> Integer?
52
93
  def dispatch_subcommand: (Array[String] arguments) -> Integer?
53
94
 
@@ -61,6 +102,10 @@ module Ibex
61
102
  def option_parser: () -> OptionParser
62
103
 
63
104
  # @rbs (OptionParser options) -> void
105
+ def add_subcommand_help: (OptionParser options) -> void
106
+
107
+ # @rbs (OptionParser options) -> void
108
+ # rubocop:disable Metrics/MethodLength -- pipeline flags share one parser boundary.
64
109
  def add_pipeline_options: (OptionParser options) -> void
65
110
 
66
111
  # @rbs (OptionParser options) -> void
@@ -75,6 +120,15 @@ module Ibex
75
120
  # @rbs (OptionParser options) -> void
76
121
  def add_information_options: (OptionParser options) -> void
77
122
 
123
+ @analysis_configuration: Configuration::Resolver?
124
+
125
+ # @rbs (IR::Grammar grammar, ?options: Hash[Symbol, untyped], ?explicit_keys: Array[Symbol]) -> IR::Grammar
126
+ def activate_analysis_grammar: (IR::Grammar grammar, ?options: Hash[Symbol, untyped], ?explicit_keys: Array[Symbol]) -> IR::Grammar
127
+
128
+ # @rbs (IR::Grammar grammar, Hash[Symbol, untyped] options, Array[Symbol] explicit_keys) ->
129
+ # [IR::Grammar, Symbol, IR::Automaton]
130
+ def construct_analysis_automaton: (IR::Grammar grammar, Hash[Symbol, untyped] options, Array[Symbol] explicit_keys) -> [ IR::Grammar, Symbol, IR::Automaton ]
131
+
78
132
  # @rbs (OptionParser parser) -> Integer?
79
133
  def informational_result: (OptionParser parser) -> Integer?
80
134
 
@@ -84,6 +138,9 @@ module Ibex
84
138
  # @rbs () -> void
85
139
  def validate_generation_options: () -> void
86
140
 
141
+ # @rbs () -> void
142
+ def validate_automaton_construction_options: () -> void
143
+
87
144
  # @rbs () -> void
88
145
  def validate_manifest_generation_options: () -> void
89
146
 
@@ -123,6 +180,9 @@ module Ibex
123
180
  # @rbs (String path) -> IR::Grammar
124
181
  def normalize_grammar_path: (String path) -> IR::Grammar
125
182
 
183
+ # @rbs (String source) -> bool
184
+ def bison_source?: (String source) -> bool
185
+
126
186
  # @rbs (String path) -> Integer
127
187
  def process_ir: (String path) -> Integer
128
188
 
@@ -132,6 +192,15 @@ module Ibex
132
192
  # @rbs (IR::Automaton automaton, String path) -> Integer
133
193
  def dispatch_automaton: (IR::Automaton automaton, String path) -> Integer
134
194
 
195
+ # @rbs (IR::Grammar grammar) -> void
196
+ def activate_generation_grammar: (IR::Grammar grammar) -> void
197
+
198
+ # @rbs (IR::Grammar grammar, Configuration::Resolver configuration) -> IR::Grammar
199
+ def noncanonical_analysis_grammar: (IR::Grammar grammar, Configuration::Resolver configuration) -> IR::Grammar
200
+
201
+ # @rbs (Configuration::Resolver configuration) -> void
202
+ def report_noncanonical_analysis: (Configuration::Resolver configuration) -> void
203
+
135
204
  # @rbs () -> Integer
136
205
  def print_version: () -> Integer
137
206
 
@@ -192,6 +261,9 @@ module Ibex
192
261
  # @rbs (IR::Grammar grammar, String input_path) -> IR::Automaton
193
262
  def build_automaton: (IR::Grammar grammar, String input_path) -> IR::Automaton
194
263
 
264
+ # @rbs (IR::Grammar grammar, IR::Automaton automaton) -> void
265
+ def write_ielr_report: (IR::Grammar grammar, IR::Automaton automaton) -> void
266
+
195
267
  # @rbs (IR::Automaton automaton, String input_path) -> void
196
268
  def prepare_loaded_automaton: (IR::Automaton automaton, String input_path) -> void
197
269
 
@@ -204,4 +276,6 @@ module Ibex
204
276
  # @rbs (String output_path) -> String
205
277
  def manifest_output_path_for: (String output_path) -> String
206
278
  end
279
+
280
+ CONFIG_SUBCOMMAND_HELP: String
207
281
  end
@@ -11,8 +11,8 @@ module Ibex
11
11
  # @rbs (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
12
12
  def initialize: (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
13
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
14
+ # @rbs (IR::Production production, IR::action_composition_step step, Integer index) -> String
15
+ def composed_fragment_method_source: (IR::Production production, IR::action_composition_step step, Integer index) -> String
16
16
 
17
17
  # @rbs (IR::Production production, Integer index) -> String
18
18
  def composed_fragment_name: (IR::Production production, Integer index) -> String
@@ -43,8 +43,8 @@ module Ibex
43
43
  # @rbs (Array[String] lines, production: IR::Production) -> void
44
44
  def append_direct_parameter_values: (Array[String] lines, production: IR::Production) -> void
45
45
 
46
- # @rbs (Hash[Symbol, untyped] step) -> String
47
- def composed_semantic_code: (Hash[Symbol, untyped] step) -> String
46
+ # @rbs (IR::action_composition_step step) -> String
47
+ def composed_semantic_code: (IR::action_composition_step step) -> String
48
48
 
49
49
  # @rbs (String source, Array[IR::named_ref] named_refs) -> void
50
50
  def append_named_values: (String source, Array[IR::named_ref] named_refs) -> void
@@ -4,7 +4,21 @@ module Ibex
4
4
  module Codegen
5
5
  type explain_selection = { state: IR::AutomatonState, conflict: IR::conflict, conflict_index: Integer }
6
6
 
7
- type explain_entry = { state: IR::AutomatonState, conflict: IR::conflict, example: IR::counterexample }
7
+ type explain_entry = { state: IR::AutomatonState, conflict: IR::conflict, example: LALR::search_counterexample }
8
+
9
+ type explain_token = { name: String, display_name: String?, label: String, ?query: String }
10
+
11
+ type explain_alternative = { kind: String, ?state: Integer, ?production: Integer }
12
+
13
+ type explain_search = { status: String, explored: Integer, exhausted: bool, bounds: Hash[Symbol, Integer] }
14
+
15
+ type explain_tree_node = { ?symbol: explain_token, ?token: explain_token, ?production: Integer, ?children: Array[explain_tree] }
16
+
17
+ type explain_tree = untyped
18
+
19
+ type explain_interpretation = Hash[Symbol, untyped]
20
+
21
+ type string_value = String | Integer | Symbol
8
22
 
9
23
  # Renders a selected conflict explanation from Automaton IR and counterexamples.
10
24
  # rubocop:disable Metrics/ClassLength -- inline contracts and two stable output formats stay near selection policy.
@@ -15,8 +29,8 @@ module Ibex
15
29
  # ?max_configurations: Integer) -> void
16
30
  def initialize: (IR::Automaton automaton, ?state: Integer?, ?token: String?, ?max_tokens: Integer, ?max_configurations: Integer) -> void
17
31
 
18
- # @rbs () -> Hash[Symbol, untyped]
19
- def to_h: () -> Hash[Symbol, untyped]
32
+ # @rbs () -> Hash[Symbol, Object?]
33
+ def to_h: () -> Hash[Symbol, Object?]
20
34
 
21
35
  # @rbs () -> String
22
36
  def render_text: () -> String
@@ -35,26 +49,32 @@ module Ibex
35
49
  # @rbs () -> Array[explain_selection]
36
50
  def selected_conflicts: () -> Array[explain_selection]
37
51
 
38
- # @rbs (explain_entry entry) -> Hash[Symbol, untyped]
39
- def conflict_document: (explain_entry entry) -> Hash[Symbol, untyped]
52
+ # @rbs (explain_entry entry) -> Hash[Symbol, Object?]
53
+ def conflict_document: (explain_entry entry) -> Hash[Symbol, Object?]
54
+
55
+ # @rbs (LALR::search_counterexample example) -> String
56
+ def witness_kind: (LALR::search_counterexample example) -> String
57
+
58
+ # @rbs (LALR::search_outcome outcome) -> explain_search
59
+ def search_document: (LALR::search_outcome outcome) -> explain_search
40
60
 
41
- # @rbs (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
42
- def conflict_alternatives: (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
61
+ # @rbs (IR::conflict conflict) -> Array[explain_alternative]
62
+ def conflict_alternatives: (IR::conflict conflict) -> Array[explain_alternative]
43
63
 
44
- # @rbs (IR::interpretation interpretation) -> Hash[Symbol, untyped]
45
- def interpretation_document: (IR::interpretation interpretation) -> Hash[Symbol, untyped]
64
+ # @rbs (IR::interpretation interpretation) -> explain_interpretation
65
+ def interpretation_document: (IR::interpretation interpretation) -> explain_interpretation
46
66
 
47
- # @rbs (untyped tree) -> untyped
48
- def tree_document: (untyped tree) -> untyped
67
+ # @rbs (explain_tree tree) -> explain_tree
68
+ def tree_document: (explain_tree tree) -> explain_tree
49
69
 
50
- # @rbs (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
51
- def string_values: (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
70
+ # @rbs (Hash[Symbol, string_value] value) -> Hash[Symbol, string_value]
71
+ def string_values: (Hash[Symbol, string_value] value) -> Hash[Symbol, string_value]
52
72
 
53
- # @rbs (String name) -> Hash[Symbol, untyped]
54
- def symbol_reference: (String name) -> Hash[Symbol, untyped]
73
+ # @rbs (String name) -> explain_token
74
+ def symbol_reference: (String name) -> explain_token
55
75
 
56
- # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
57
- def token_reference: (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
76
+ # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> explain_token
77
+ def token_reference: (IR::GrammarSymbol symbol, ?query: String?) -> explain_token
58
78
 
59
79
  # @rbs (Array[String] lines, explain_entry entry, Integer number) -> void
60
80
  def append_conflict: (Array[String] lines, explain_entry entry, Integer number) -> void
@@ -63,17 +83,17 @@ module Ibex
63
83
  def append_midrule_origins: (Array[String] lines, IR::conflict conflict) -> void
64
84
 
65
85
  # @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
86
+ # LALR::search_counterexample example) -> void
87
+ def append_witness_steps: (Array[String] lines, IR::AutomatonState state, IR::conflict conflict, LALR::search_counterexample example) -> void
68
88
 
69
- # @rbs (Array[String] lines, IR::counterexample example) -> void
70
- def append_interpretations: (Array[String] lines, IR::counterexample example) -> void
89
+ # @rbs (Array[String] lines, LALR::search_counterexample example) -> void
90
+ def append_interpretations: (Array[String] lines, LALR::search_counterexample example) -> void
71
91
 
72
- # @rbs (Hash[Symbol, untyped] alternative) -> String
73
- def alternative_text: (Hash[Symbol, untyped] alternative) -> String
92
+ # @rbs (explain_alternative alternative) -> String
93
+ def alternative_text: (explain_alternative alternative) -> String
74
94
 
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
95
+ # @rbs (Array[String] lines, explain_tree tree, String prefix, String connector) -> void
96
+ def append_tree: (Array[String] lines, explain_tree tree, String prefix, String connector) -> void
77
97
 
78
98
  # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> String
79
99
  def token_label: (IR::GrammarSymbol symbol, ?query: String?) -> String
@@ -6,6 +6,10 @@ module Ibex
6
6
  # action's declared inputs.
7
7
  # rubocop:disable Metrics/ModuleLength -- ABI proof and source rewriting must evolve together.
8
8
  module GeneratedActionABI
9
+ type ripper_token = [ [ Integer, Integer ], Symbol, String, Integer ]
10
+
11
+ type sexp_value = Symbol | String | Integer | nil | Array[sexp_value]
12
+
9
13
  LEGACY_PARAMETERS: Array[String]
10
14
 
11
15
  SIMPLE_POSITIONAL_READ: Regexp
@@ -76,26 +80,26 @@ module Ibex
76
80
  # @rbs (String source, Array[String] parameters) -> String?
77
81
  def self?.simple_indexed_positional_action_source: (String source, Array[String] parameters) -> String?
78
82
 
79
- # @rbs (Array[untyped] tokens, Array[String] parameters) -> String?
80
- def self?.rewrite_positional_values: (Array[untyped] tokens, Array[String] parameters) -> String?
83
+ # @rbs (Array[ripper_token] tokens, Array[String] parameters) -> String?
84
+ def self?.rewrite_positional_values: (Array[ripper_token] tokens, Array[String] parameters) -> String?
81
85
 
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 ]?
86
+ # @rbs (Array[ripper_token] tokens, Integer index, Array[String] parameters) -> [String, Integer]?
87
+ def self?.positional_value_reference: (Array[ripper_token] tokens, Integer index, Array[String] parameters) -> [ String, Integer ]?
84
88
 
85
- # @rbs (Array[untyped] tokens, Integer index) -> bool
86
- def self?.receiver_before_value?: (Array[untyped] tokens, Integer index) -> bool
89
+ # @rbs (Array[ripper_token] tokens, Integer index) -> bool
90
+ def self?.receiver_before_value?: (Array[ripper_token] tokens, Integer index) -> bool
87
91
 
88
92
  # @rbs (String source) -> bool
89
93
  def self?.references_legacy_parameter?: (String source) -> bool
90
94
 
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
95
+ # @rbs (sexp_value node, ?sexp_value parent, ?Integer? child_index) -> bool
96
+ def self?.read_only_value_references?: (sexp_value node, ?sexp_value parent, ?Integer? child_index) -> bool
93
97
 
94
98
  # @rbs (untyped node) -> bool
95
99
  def self?.value_reference?: (untyped node) -> bool
96
100
 
97
- # @rbs (untyped parent, Integer? child_index) -> bool
98
- def self?.safe_value_reference?: (untyped parent, Integer? child_index) -> bool
101
+ # @rbs (sexp_value? parent, Integer? child_index) -> bool
102
+ def self?.safe_value_reference?: (sexp_value? parent, Integer? child_index) -> bool
99
103
  end
100
104
  end
101
105
  end
@@ -5,6 +5,8 @@ module Ibex
5
5
  # Generates an RBS declaration for the public surface of a generated parser.
6
6
  # rubocop:disable Metrics/ClassLength -- one generator owns the complete parser signature.
7
7
  class RBS
8
+ type syntax_definition = { name: String, kind: Integer, fields: Hash[String, CSTMetadata::field_slot] }
9
+
8
10
  @generated_action_abi: GeneratedActionABI::Cache
9
11
 
10
12
  @omit_action_call: bool
@@ -29,20 +31,20 @@ module Ibex
29
31
  # @rbs (Array[String] lines) -> void
30
32
  def append_syntax_contract: (Array[String] lines) -> void
31
33
 
32
- # @rbs () -> Hash[String, Hash[Symbol, untyped]]
33
- def syntax_node_definitions: () -> Hash[String, Hash[Symbol, untyped]]
34
+ # @rbs () -> Hash[String, syntax_definition]
35
+ def syntax_node_definitions: () -> Hash[String, syntax_definition]
34
36
 
35
- # @rbs (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
36
- def merge_syntax_fields: (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
37
+ # @rbs (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
38
+ def merge_syntax_fields: (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
37
39
 
38
- # @rbs (Array[String] lines, Hash[Symbol, untyped] definition) -> void
39
- def append_syntax_node_contract: (Array[String] lines, Hash[Symbol, untyped] definition) -> void
40
+ # @rbs (Array[String] lines, syntax_definition definition) -> void
41
+ def append_syntax_node_contract: (Array[String] lines, syntax_definition definition) -> void
40
42
 
41
43
  # @rbs (String node_name, Integer index) -> String
42
44
  def syntax_field_type: (String node_name, Integer index) -> String
43
45
 
44
- # @rbs (Array[String] lines, Hash[String, untyped] fields) -> void
45
- def append_repetition_contracts: (Array[String] lines, Hash[String, untyped] fields) -> void
46
+ # @rbs (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
47
+ def append_repetition_contracts: (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
46
48
 
47
49
  # @rbs () -> Hash[String, IR::node_annotation]
48
50
  def ast_node_definitions: () -> Hash[String, IR::node_annotation]
@@ -86,8 +88,8 @@ module Ibex
86
88
  # @rbs (Array[String] lines, IR::Production production) -> void
87
89
  def append_composed_fragment_signatures: (Array[String] lines, IR::Production production) -> void
88
90
 
89
- # @rbs (IR::Production production, Hash[Symbol, untyped] plan, Integer slot, Integer step_index) -> String
90
- def composition_slot_type: (IR::Production production, Hash[Symbol, untyped] plan, Integer slot, Integer step_index) -> String
91
+ # @rbs (IR::Production production, IR::action_composition_plan plan, Integer slot, Integer step_index) -> String
92
+ def composition_slot_type: (IR::Production production, IR::action_composition_plan plan, Integer slot, Integer step_index) -> String
91
93
 
92
94
  # @rbs (IR::Production production) -> bool
93
95
  def action_method?: (IR::Production production) -> bool
@@ -4,17 +4,17 @@ module Ibex
4
4
  module Codegen
5
5
  # Renders a human-readable state and conflict report from Automaton IR.
6
6
  module Report
7
- private def append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[IR::counterexample] examples, Hash[Integer, String] labels) -> void
7
+ private def append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[LALR::search_counterexample] examples, Hash[Integer, String] labels) -> void
8
8
 
9
- private def self.append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[IR::counterexample] examples, Hash[Integer, String] labels) -> void
9
+ private def self.append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[LALR::search_counterexample] examples, Hash[Integer, String] labels) -> void
10
10
 
11
- private def append_counterexample: (Array[String] lines, IR::counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
11
+ private def append_counterexample: (Array[String] lines, LALR::search_counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
12
12
 
13
- private def self.append_counterexample: (Array[String] lines, IR::counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
13
+ private def self.append_counterexample: (Array[String] lines, LALR::search_counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
14
14
 
15
- private def append_tree: (Array[String] lines, untyped tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
15
+ private def append_tree: (Array[String] lines, Object? tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
16
16
 
17
- private def self.append_tree: (Array[String] lines, untyped tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
17
+ private def self.append_tree: (Array[String] lines, Object? tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
18
18
 
19
19
  private def format_item: (IR::AutomatonItem item, IR::Grammar grammar, Hash[Integer, String] labels) -> String
20
20
 
@@ -28,17 +28,17 @@ module Ibex
28
28
 
29
29
  private def self.symbol_name: (Hash[Integer, String] labels, Integer id) -> String
30
30
 
31
- private def tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, untyped value) -> untyped
31
+ private def tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, Object? value) -> Object?
32
32
 
33
- private def self.tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, untyped value) -> untyped
33
+ private def self.tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, Object? value) -> Object?
34
34
 
35
- private def display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, untyped]
35
+ private def display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, Object?]
36
36
 
37
- private def self.display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, untyped]
37
+ private def self.display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, Object?]
38
38
 
39
- private def format_value: (untyped value) -> String
39
+ private def format_value: (Object? value) -> String
40
40
 
41
- private def self.format_value: (untyped value) -> String
41
+ private def self.format_value: (Object? value) -> String
42
42
 
43
43
  # @rbs (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> String
44
44
  def self?.render: (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> String
@@ -19,8 +19,6 @@ module Ibex
19
19
 
20
20
  include RubySyntax
21
21
 
22
- EMBEDDED_RUNTIME_SOURCES: Array[String]
23
-
24
22
  @automaton: IR::Automaton
25
23
 
26
24
  @grammar: IR::Grammar
@@ -60,12 +58,17 @@ module Ibex
60
58
 
61
59
  private
62
60
 
61
+ # @rbs () -> void
62
+ def reject_foreign_actions: () -> void
63
+
64
+ # Kept local so the generic generator does not load the optional Bison
65
+ # importer and its IR validation graph.
66
+ # @rbs () -> String
67
+ def foreign_action_sentinel: () -> String
68
+
63
69
  # @rbs (Array[String] lines) -> void
64
70
  def append_runtime: (Array[String] lines) -> void
65
71
 
66
- # @rbs (String relative_path) -> String
67
- def embedded_source: (String relative_path) -> String
68
-
69
72
  # @rbs (Array[String] lines) -> void
70
73
  def append_tables: (Array[String] lines) -> void
71
74
 
@@ -84,20 +87,20 @@ module Ibex
84
87
  # @rbs () -> bool
85
88
  def shareable_parser_tables?: () -> bool
86
89
 
87
- # @rbs () -> Hash[Symbol, untyped]
88
- def cst_metadata: () -> Hash[Symbol, untyped]
90
+ # @rbs () -> CSTMetadata::metadata
91
+ def cst_metadata: () -> CSTMetadata::metadata
89
92
 
90
- # @rbs (untyped value) -> String
91
- def deep_frozen_literal: (untyped value) -> String
93
+ # @rbs (Object? value) -> String
94
+ def deep_frozen_literal: (Object? value) -> String
92
95
 
93
- # @rbs (untyped table) -> String
94
- def table_literal: (untyped table) -> String
96
+ # @rbs (Object? table) -> String
97
+ def table_literal: (Object? table) -> String
95
98
 
96
- # @rbs (Array[Integer?] values) -> String
97
- def packed_integers_literal: (Array[Integer?] values) -> String
99
+ # @rbs (Array[untyped] values) -> String
100
+ def packed_integers_literal: (Array[untyped] values) -> String
98
101
 
99
- # @rbs (Array[Integer?] values) -> String
100
- def packed_signed_integers_literal: (Array[Integer?] values) -> String
102
+ # @rbs (Array[untyped] values) -> String
103
+ def packed_signed_integers_literal: (Array[untyped] values) -> String
101
104
 
102
105
  # @rbs () -> String
103
106
  def token_ids_literal: () -> String
@@ -23,17 +23,17 @@ module Ibex
23
23
  # @rbs (Array[String] lines, IR::Production production) -> void
24
24
  def append_composed_action_method: (Array[String] lines, IR::Production production) -> void
25
25
 
26
- # @rbs (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
27
- def append_composed_fragment_method: (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
26
+ # @rbs (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
27
+ def append_composed_fragment_method: (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
28
28
 
29
29
  # @rbs (IR::Production production, Integer index) -> String
30
30
  def composed_fragment_name: (IR::Production production, Integer index) -> String
31
31
 
32
- # @rbs (Array[String] lines, IR::Production production, Hash[Symbol, untyped] plan) -> void
33
- def append_composed_orchestrator: (Array[String] lines, IR::Production production, Hash[Symbol, untyped] plan) -> void
32
+ # @rbs (Array[String] lines, IR::Production production, IR::action_composition_plan plan) -> void
33
+ def append_composed_orchestrator: (Array[String] lines, IR::Production production, IR::action_composition_plan plan) -> void
34
34
 
35
- # @rbs (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
36
- def append_composed_step: (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
35
+ # @rbs (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
36
+ def append_composed_step: (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
37
37
 
38
38
  # @rbs (Array[String] lines, IR::Production production) -> void
39
39
  def append_compiled_action_method: (Array[String] lines, IR::Production production) -> void
@@ -4,22 +4,24 @@ module Ibex
4
4
  module Codegen
5
5
  # Generates typed Red syntax views from @node metadata.
6
6
  module RubySyntax
7
+ type syntax_definition = Hash[Symbol, untyped]
8
+
7
9
  private
8
10
 
9
11
  # @rbs (Array[String] lines) -> void
10
12
  def append_syntax: (Array[String] lines) -> void
11
13
 
12
- # @rbs () -> Hash[String, Hash[Symbol, untyped]]
13
- def syntax_node_definitions: () -> Hash[String, Hash[Symbol, untyped]]
14
+ # @rbs () -> Hash[String, syntax_definition]
15
+ def syntax_node_definitions: () -> Hash[String, syntax_definition]
14
16
 
15
- # @rbs (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
16
- def merge_syntax_fields: (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
17
+ # @rbs (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
18
+ def merge_syntax_fields: (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
17
19
 
18
- # @rbs (Array[String] lines, Hash[Symbol, untyped] definition) -> void
19
- def append_syntax_node: (Array[String] lines, Hash[Symbol, untyped] definition) -> void
20
+ # @rbs (Array[String] lines, syntax_definition definition) -> void
21
+ def append_syntax_node: (Array[String] lines, syntax_definition definition) -> void
20
22
 
21
- # @rbs (Array[String] lines, Hash[String, untyped] fields) -> void
22
- def append_repetition_accessors: (Array[String] lines, Hash[String, untyped] fields) -> void
23
+ # @rbs (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
24
+ def append_repetition_accessors: (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
23
25
  end
24
26
  end
25
27
  end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/ibex/configuration/analysis_grammar.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Configuration
5
+ # Produces an immutable Grammar IR view suitable for an explicitly
6
+ # noncanonical analysis algorithm. The source-owned contract remains the
7
+ # authority; callers must report the override through Configuration::Value.
8
+ module AnalysisGrammar
9
+ # @rbs (IR::Grammar grammar, Symbol algorithm) -> IR::Grammar
10
+ def self?.for_algorithm: (IR::Grammar grammar, Symbol algorithm) -> IR::Grammar
11
+ end
12
+ end
13
+ end