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
@@ -11,6 +11,10 @@ module Ibex
11
11
 
12
12
  private def normalize_grammar_path: (String) -> IR::Grammar
13
13
 
14
+ private def configuration_value: (String) -> untyped
15
+
16
+ private def set_configuration_option: (Symbol, Object?) -> void
17
+
14
18
  private
15
19
 
16
20
  # @rbs (Array[String] arguments) -> Integer
@@ -21,5 +25,7 @@ module Ibex
21
25
 
22
26
  # @rbs (OptionParser options) -> void
23
27
  def add_explain_search_options: (OptionParser options) -> void
28
+
29
+ private def activate_analysis_grammar: (IR::Grammar, ?options: Hash[Symbol, Object?], ?explicit_keys: Array[Symbol]) -> IR::Grammar
24
30
  end
25
31
  end
@@ -0,0 +1,53 @@
1
+ # Generated from lib/ibex/cli/fix.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # CLI entry point for bounded conflict-repair proposals.
5
+ # rubocop:disable Metrics/ModuleLength -- CLI option wiring and output projections share one closed contract.
6
+ module CLIFix
7
+ type fix_options = Hash[Symbol, untyped]
8
+
9
+ private def normalize_grammar_path: (String) -> IR::Grammar
10
+
11
+ private def activate_cli_feature: (Symbol) -> void
12
+
13
+ private def configuration_value: (String) -> untyped
14
+
15
+ private def set_configuration_option: (Symbol, Object?) -> void
16
+
17
+ private def local_configuration_value: (Hash[Symbol, Object?], String) -> Object?
18
+
19
+ private def set_local_configuration_option: (Hash[Symbol, Object?], Symbol, Object?) -> void
20
+
21
+ private
22
+
23
+ # @rbs (Array[String] arguments) -> Integer
24
+ def run_fix_command: (Array[String] arguments) -> Integer
25
+
26
+ # @rbs (String path, Hash[Symbol, untyped] settings) -> [String, Fix]
27
+ def prepare_fixer: (String path, Hash[Symbol, untyped] settings) -> [ String, Fix ]
28
+
29
+ # Keep command-local construction settings separate from reusable CLI state.
30
+ # @rbs (Array[String] arguments) -> Hash[Symbol, untyped]
31
+ def fix_options: (Array[String] arguments) -> Hash[Symbol, untyped]
32
+
33
+ # @rbs (OptionParser options, Hash[Symbol, untyped] settings) -> void
34
+ def add_fix_target_options: (OptionParser options, Hash[Symbol, untyped] settings) -> void
35
+
36
+ # @rbs (OptionParser options, Hash[Symbol, untyped] settings) -> void
37
+ def add_fix_budget_options: (OptionParser options, Hash[Symbol, untyped] settings) -> void
38
+
39
+ # @rbs (IR::Grammar grammar, Hash[Symbol, untyped] settings) -> [IR::Grammar, Symbol, IR::Automaton]
40
+ def fixer_construction: (IR::Grammar grammar, Hash[Symbol, untyped] settings) -> [ IR::Grammar, Symbol, IR::Automaton ]
41
+
42
+ private def construct_analysis_automaton: (IR::Grammar, Hash[Symbol, Object?], Array[Symbol]) -> [ IR::Grammar, Symbol, IR::Automaton ]
43
+
44
+ # @rbs (String path, String original, Hash[Symbol, untyped] report, Fix fixer, String | true selector) -> void
45
+ def apply_fix!: (String path, String original, Hash[Symbol, untyped] report, Fix fixer, String | true selector) -> void
46
+
47
+ # @rbs (Array[Hash[Symbol, untyped]] proposals, String | true selector) -> Hash[Symbol, untyped]
48
+ def selected_fix_proposal: (Array[Hash[Symbol, untyped]] proposals, String | true selector) -> Hash[Symbol, untyped]
49
+
50
+ # @rbs (Hash[Symbol, untyped] report, String format) -> void
51
+ def write_fix_report: (Hash[Symbol, untyped] report, String format) -> void
52
+ end
53
+ end
@@ -4,7 +4,7 @@ module Ibex
4
4
  # CLI coordination for deterministic, semantics-preserving grammar formatting.
5
5
  # rubocop:disable Metrics/ModuleLength -- transaction lifecycle stays cohesive and auditable.
6
6
  module CLIFormatting
7
- type formatting_settings = { paths: Array[String], mode: Symbol, check: bool, write: bool, ?stdin_filename: String, ?help: bool }
7
+ type formatting_settings = Hash[Symbol, untyped]
8
8
 
9
9
  type formatting_result = { path: String, label: String, source: String, formatted: String }
10
10
 
@@ -12,6 +12,10 @@ module Ibex
12
12
 
13
13
  type formatting_cleanup_result = { errors: Array[String], remaining: Array[String] }
14
14
 
15
+ private def local_configuration_value: (Hash[Symbol, Object?], String) -> Object?
16
+
17
+ private def set_local_configuration_option: (Hash[Symbol, Object?], Symbol, Object?) -> void
18
+
15
19
  private
16
20
 
17
21
  # @rbs (Array[String] arguments) -> Integer
@@ -0,0 +1,47 @@
1
+ # Generated from lib/ibex/cli/fuzz.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # CLI entry point for bounded grammar-derived differential fuzzing.
5
+ module CLIFuzz
6
+ include CLIFuzzRegressions
7
+
8
+ private def print_help: (OptionParser) -> Integer
9
+
10
+ private def input_path: (Array[String]) -> String
11
+
12
+ private def normalize_grammar_path: (String) -> IR::Grammar
13
+
14
+ private def handle_grammar_warnings: (IR::Grammar, String) -> void
15
+
16
+ private def warning_categories: (String) -> Array[Symbol]
17
+
18
+ private def select_configuration_mode: (String) -> void
19
+
20
+ private
21
+
22
+ # @rbs (Array[String] arguments) -> Integer
23
+ def run_fuzz_command: (Array[String] arguments) -> Integer
24
+
25
+ # @rbs () -> OptionParser
26
+ def fuzz_option_parser: () -> OptionParser
27
+
28
+ # @rbs (OptionParser options) -> void
29
+ def add_fuzz_generation_options: (OptionParser options) -> void
30
+
31
+ # @rbs (OptionParser options) -> void
32
+ def add_fuzz_execution_options: (OptionParser options) -> void
33
+
34
+ # @rbs (OptionParser options) -> void
35
+ def add_fuzz_external_options: (OptionParser options) -> void
36
+
37
+ # @rbs () -> fuzz_external_target?
38
+ def external_fuzz_target: () -> fuzz_external_target?
39
+
40
+ # @rbs (BoundedSubprocess subprocess, Array[String] arguments, Array[String] tokens,
41
+ # Integer timeout, Integer max_output) -> Symbol
42
+ def external_fuzz_outcome: (BoundedSubprocess subprocess, Array[String] arguments, Array[String] tokens, Integer timeout, Integer max_output) -> Symbol
43
+
44
+ # @rbs (String name, Integer value) -> Integer
45
+ def positive_fuzz_option!: (String name, Integer value) -> Integer
46
+ end
47
+ end
@@ -0,0 +1,40 @@
1
+ # Generated from lib/ibex/cli/fuzz_regressions.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ type fuzz_external_description = { command: String, target_runtime: String, timeout_seconds: Integer, max_output_bytes: Integer, host_ruby_engine: String, host_ruby_version: String, host_platform: String }
5
+
6
+ type fuzz_external_target = [ ^(Array[String]) -> Symbol, fuzz_external_description ]
7
+
8
+ # Automatic bounded minimization and persistence for fuzz differences.
9
+ module CLIFuzzRegressions
10
+ private def atomic_write_ir: (String path, String source) -> void
11
+
12
+ private
13
+
14
+ # @rbs (Fuzz fuzzer, Fuzz::Mismatch mismatch, String grammar_path,
15
+ # fuzz_external_target? external) -> Integer
16
+ def write_minimized_fuzz_mismatch: (Fuzz fuzzer, Fuzz::Mismatch mismatch, String grammar_path, fuzz_external_target? external) -> Integer
17
+
18
+ # @rbs (Hash[Symbol, untyped] report) -> void
19
+ def write_fuzz_report: (Hash[Symbol, untyped] report) -> void
20
+
21
+ # @rbs (Fuzz::BudgetExceeded error,
22
+ # fuzz_external_target? external, phase: String) -> Integer
23
+ def write_fuzz_budget_report: (Fuzz::BudgetExceeded error, fuzz_external_target? external, phase: String) -> Integer
24
+
25
+ # @rbs (Fuzz fuzzer, Fuzz::Mismatch mismatch, String grammar_path,
26
+ # fuzz_external_target? external) -> Hash[Symbol, untyped]
27
+ def minimized_fuzz_mismatch: (Fuzz fuzzer, Fuzz::Mismatch mismatch, String grammar_path, fuzz_external_target? external) -> Hash[Symbol, untyped]
28
+
29
+ # @rbs (fuzz_mismatch mismatch, DeltaReducer::Result result, String grammar_path,
30
+ # fuzz_external_description? external) -> Hash[Symbol, String]?
31
+ def persist_fuzz_regression: (fuzz_mismatch mismatch, DeltaReducer::Result result, String grammar_path, fuzz_external_description? external) -> Hash[Symbol, String]?
32
+
33
+ # @rbs (String path) -> void
34
+ def validate_fuzz_regression_target!: (String path) -> void
35
+
36
+ # @rbs (fuzz_mismatch mismatch, DeltaReducer::Result result, String grammar_path,
37
+ # fuzz_external_description? external) -> Hash[Symbol, Object?]
38
+ def fuzz_regression_document: (fuzz_mismatch mismatch, DeltaReducer::Result result, String grammar_path, fuzz_external_description? external) -> Hash[Symbol, Object?]
39
+ end
40
+ end
@@ -9,6 +9,10 @@ module Ibex
9
9
 
10
10
  private def default_output_path: (String, String) -> String
11
11
 
12
+ private def configuration_value: (String) -> Object?
13
+
14
+ private def effective_configuration: () -> Configuration::Resolver
15
+
12
16
  private
13
17
 
14
18
  # @rbs () -> void
@@ -44,7 +48,22 @@ module Ibex
44
48
  # @rbs () -> String
45
49
  def manifest_output_path: () -> String
46
50
 
47
- # @rbs () -> Hash[String, untyped]
48
- def generation_manifest_options: () -> Hash[String, untyped]
51
+ # @rbs () -> Hash[String, Object?]
52
+ def generation_manifest_options: () -> Hash[String, Object?]
53
+
54
+ # @rbs (Hash[String, Object?] options) -> void
55
+ def append_ir_manifest_options: (Hash[String, Object?] options) -> void
56
+
57
+ # @rbs () -> String
58
+ def construction_authority: () -> String
59
+
60
+ # @rbs () -> Array[Hash[String, Object?]]
61
+ def manifest_effective_configuration: () -> Array[Hash[String, Object?]]
62
+
63
+ # @rbs (IR::ParserContract contract) -> Hash[String, Object?]
64
+ def stringify_contract: (IR::ParserContract contract) -> Hash[String, Object?]
65
+
66
+ # @rbs () -> Symbol
67
+ def effective_cst_trivia: () -> Symbol
49
68
  end
50
69
  end
@@ -10,8 +10,8 @@ module Ibex
10
10
  # @rbs (OptionParser options) -> void
11
11
  def add_error_messages_generation_option: (OptionParser options) -> void
12
12
 
13
- # @rbs (IR::Automaton automaton) -> Hash[Integer, untyped]
14
- def configured_error_messages: (IR::Automaton automaton) -> Hash[Integer, untyped]
13
+ # @rbs (IR::Automaton automaton) -> Hash[Integer, String | { id: String, message: String }]
14
+ def configured_error_messages: (IR::Automaton automaton) -> Hash[Integer, String | { id: String, message: String }]
15
15
 
16
16
  # @rbs () -> void
17
17
  def validate_messages_options: () -> void
@@ -3,7 +3,7 @@
3
3
  module Ibex
4
4
  # `%test` command parsing and human-readable result reporting.
5
5
  module CLIGrammarTests
6
- type grammar_test_settings = { mode: Symbol, algorithm: Symbol, entry_isolation: bool, timeout: Integer, coverage: Integer?, ?help: bool }
6
+ type grammar_test_settings = Hash[Symbol, untyped]
7
7
 
8
8
  private def print_help: (OptionParser) -> Integer
9
9
 
@@ -13,17 +13,29 @@ module Ibex
13
13
 
14
14
  private def build_automaton: (IR::Grammar, String) -> IR::Automaton
15
15
 
16
+ private def configuration_value: (String) -> untyped
17
+
18
+ private def mark_configuration_option: (Symbol) -> void
19
+
16
20
  private
17
21
 
18
22
  # @rbs (Array[String] arguments) -> Integer
19
23
  def run_grammar_tests_command: (Array[String] arguments) -> Integer
20
24
 
21
- # @rbs (grammar_test_settings settings) -> OptionParser
22
- def grammar_test_option_parser: (grammar_test_settings settings) -> OptionParser
25
+ # @rbs () -> Hash[Symbol, untyped]
26
+ def default_grammar_test_settings: () -> Hash[Symbol, untyped]
27
+
28
+ # @rbs (Hash[Symbol, untyped] settings) -> OptionParser
29
+ def grammar_test_option_parser: (Hash[Symbol, untyped] settings) -> OptionParser
23
30
 
24
31
  # @rbs (Array[String] remaining, OptionParser options) -> String
25
32
  def single_grammar_test_path: (Array[String] remaining, OptionParser options) -> String
26
33
 
34
+ # @rbs (Frontend::Resolution resolution) -> IR::Grammar
35
+ def normalize_analysis_grammar: (Frontend::Resolution resolution) -> IR::Grammar
36
+
37
+ private def activate_analysis_grammar: (IR::Grammar, ?options: Hash[Symbol, Object?], ?explicit_keys: Array[Symbol]) -> IR::Grammar
38
+
27
39
  # @rbs (Array[GrammarTests::Result] results) -> Integer
28
40
  def render_grammar_test_results: (Array[GrammarTests::Result] results) -> Integer
29
41
 
@@ -0,0 +1,95 @@
1
+ # Generated from lib/ibex/cli/impact.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # CLI adapter for potential and confirmed grammar impact reports.
5
+ # rubocop:disable Metrics/ModuleLength, Metrics/MethodLength, Metrics/AbcSize
6
+ module CLIImpact
7
+ include CLIAnalysis
8
+
9
+ private
10
+
11
+ # @rbs (Array[String] arguments) -> Integer
12
+ def run_impact_command: (Array[String] arguments) -> Integer
13
+
14
+ # @rbs (Array[String]) -> Hash[Symbol, untyped]
15
+ def impact_option_parser: (Array[String]) -> Hash[Symbol, untyped]
16
+
17
+ # @rbs (String value) -> Array[Symbol]
18
+ def parse_kinds: (String value) -> Array[Symbol]
19
+
20
+ # @rbs (Array[String], Hash[Symbol, untyped]) -> [Hash[Symbol, Object?], Array[String], Hash[Symbol, Object?]]
21
+ def potential_impact: (Array[String], Hash[Symbol, untyped]) -> [ Hash[Symbol, Object?], Array[String], Hash[Symbol, Object?] ]
22
+
23
+ # @rbs (Array[String], Hash[Symbol, untyped]) -> [Hash[Symbol, Object?], Array[String], Hash[Symbol, Object?]]
24
+ def confirmed_impact: (Array[String], Hash[Symbol, untyped]) -> [ Hash[Symbol, Object?], Array[String], Hash[Symbol, Object?] ]
25
+
26
+ # @rbs (Impact::Graph, Array[Integer], Hash[Symbol, untyped]) ->
27
+ # [Hash[Integer, Impact::Node], Hash[Integer, Array[String]]]
28
+ def propagate: (Impact::Graph, Array[Integer], Hash[Symbol, untyped]) -> [ Hash[Integer, Impact::Node], Hash[Integer, Array[String]] ]
29
+
30
+ # @rbs (IR::Automaton, Array[Integer], Hash[Symbol, untyped]) -> Impact::CoverageImpact
31
+ def load_coverage: (IR::Automaton, Array[Integer], Hash[Symbol, untyped]) -> Impact::CoverageImpact
32
+
33
+ # @rbs (Impact::Seeds, Impact::CoverageImpact) -> Array[String]
34
+ def nullable_warnings: (Impact::Seeds, Impact::CoverageImpact) -> Array[String]
35
+
36
+ # @rbs (IR::Automaton, Impact::AutomatonImpact) -> Hash[Symbol, Object?]
37
+ def potential_automaton_document: (IR::Automaton, Impact::AutomatonImpact) -> Hash[Symbol, Object?]
38
+
39
+ # @rbs (IR::Automaton, IR::Automaton, Hash[Symbol, Object?], Impact::AutomatonImpact) -> Hash[Symbol, Object?]
40
+ def confirmed_automaton_document: (IR::Automaton, IR::Automaton, Hash[Symbol, Object?], Impact::AutomatonImpact) -> Hash[Symbol, Object?]
41
+
42
+ # @rbs (IR::Grammar) -> Array[String]
43
+ def unreachable_nonterminal_names: (IR::Grammar) -> Array[String]
44
+
45
+ # @rbs (IR::Grammar, IR::Grammar) -> Array[String]
46
+ def newly_unreachable_nonterminal_names: (IR::Grammar, IR::Grammar) -> Array[String]
47
+
48
+ # @rbs (IR::Automaton) -> Array[Integer]
49
+ def unreachable_state_ids: (IR::Automaton) -> Array[Integer]
50
+
51
+ # @rbs (IR::Automaton, IR::Automaton) -> Array[Integer]
52
+ def newly_unreachable_state_ids: (IR::Automaton, IR::Automaton) -> Array[Integer]
53
+
54
+ # @rbs (IR::Automaton) -> Array[String]
55
+ def unreachable_state_keys: (IR::Automaton) -> Array[String]
56
+
57
+ # @rbs (IR::Automaton, Integer) -> String
58
+ def unreachable_state_key: (IR::Automaton, Integer) -> String
59
+
60
+ # @rbs (IR::Automaton, IR::Automaton) ->
61
+ # [Hash[String, Hash[Symbol, Object?]], Hash[String, Array[String]]]
62
+ def compare_sets: (IR::Automaton, IR::Automaton) -> [ Hash[String, Hash[Symbol, Object?]], Hash[String, Array[String]] ]
63
+
64
+ # @rbs (Analysis::Sets, Analysis::Sets, IR::GrammarSymbol?, IR::GrammarSymbol?, Symbol) ->
65
+ # Hash[Symbol, Array[String]]
66
+ def set_change: (Analysis::Sets, Analysis::Sets, IR::GrammarSymbol?, IR::GrammarSymbol?, Symbol) -> Hash[Symbol, Array[String]]
67
+
68
+ # @rbs (Hash[Symbol, Array[String]], Hash[Symbol, Array[String]], Hash[Symbol, Object?]?) -> bool
69
+ def set_change_empty?: (Hash[Symbol, Array[String]], Hash[Symbol, Array[String]], Hash[Symbol, Object?]?) -> bool
70
+
71
+ # @rbs (Analysis::Sets, Analysis::Sets, IR::GrammarSymbol?, IR::GrammarSymbol?) -> Hash[Symbol, Object?]?
72
+ def nullable_change: (Analysis::Sets, Analysis::Sets, IR::GrammarSymbol?, IR::GrammarSymbol?) -> Hash[Symbol, Object?]?
73
+
74
+ # @rbs (Hash[Integer, Array[String]], Hash[String, Array[String]], IR::Grammar) -> Hash[Integer, Array[String]]
75
+ def merge_symbol_kinds: (Hash[Integer, Array[String]], Hash[String, Array[String]], IR::Grammar) -> Hash[Integer, Array[String]]
76
+
77
+ # @rbs (Hash[Symbol, Array[Hash[Symbol, Object?]]], IR::Grammar) -> Hash[String, Array[String]]
78
+ def precedence_symbol_kinds: (Hash[Symbol, Array[Hash[Symbol, Object?]]], IR::Grammar) -> Hash[String, Array[String]]
79
+
80
+ # @rbs (IR::Automaton) -> Array[String]
81
+ def conflict_identities: (IR::Automaton) -> Array[String]
82
+
83
+ # @rbs (IR::Grammar, Hash[Symbol, Object?]) -> String
84
+ def conflict_identity: (IR::Grammar, Hash[Symbol, Object?]) -> String
85
+
86
+ # @rbs (IR::Grammar, Integer) -> String
87
+ def production_shape: (IR::Grammar, Integer) -> String
88
+
89
+ # @rbs (Hash[Symbol, Object?], Array[String], Hash[Symbol, untyped]) -> void
90
+ def apply_baseline: (Hash[Symbol, Object?], Array[String], Hash[Symbol, untyped]) -> void
91
+
92
+ # @rbs (Hash[Symbol, Object?], String) -> void
93
+ def write_impact_report: (Hash[Symbol, Object?], String) -> void
94
+ end
95
+ end
@@ -1,14 +1,8 @@
1
1
  # Generated from lib/ibex/cli/ir_tools.rb with RBS::Inline
2
2
 
3
3
  module Ibex
4
- type migrate_ir_options = { paths: Array[String], ?to: Integer, ?output: String }
5
-
6
- # CLI validation and structural comparison for versioned IR documents.
4
+ # CLI validation and structural comparison for current IR documents.
7
5
  module CLIIRTools
8
- private def same_file_target?: (String left, String right) -> bool
9
-
10
- private def atomic_write_ir: (String path, String source) -> void
11
-
12
6
  private
13
7
 
14
8
  # @rbs (Array[String] arguments) -> Integer
@@ -17,24 +11,18 @@ module Ibex
17
11
  # @rbs (Array[String] arguments) -> Integer
18
12
  def run_compare_command: (Array[String] arguments) -> Integer
19
13
 
20
- # @rbs (Array[String] arguments) -> Integer
21
- def run_migrate_ir_command: (Array[String] arguments) -> Integer
22
-
23
- # @rbs (Array[String] arguments) -> migrate_ir_options
24
- def migrate_ir_options: (Array[String] arguments) -> migrate_ir_options
25
-
26
14
  # @rbs (Array[String] arguments, String command) -> String
27
15
  def single_ir_path: (Array[String] arguments, String command) -> String
28
16
 
29
17
  # @rbs (IR::Grammar | IR::Automaton | IR::Lexer before,
30
- # IR::Grammar | IR::Automaton | IR::Lexer after) -> Hash[Symbol, untyped]
31
- def compare_ir: (IR::Grammar | IR::Automaton | IR::Lexer before, IR::Grammar | IR::Automaton | IR::Lexer after) -> Hash[Symbol, untyped]
18
+ # IR::Grammar | IR::Automaton | IR::Lexer after) -> Hash[Symbol, Object?]
19
+ def compare_ir: (IR::Grammar | IR::Automaton | IR::Lexer before, IR::Grammar | IR::Automaton | IR::Lexer after) -> Hash[Symbol, Object?]
32
20
 
33
- # @rbs (IR::Lexer before, IR::Lexer after) -> Hash[Symbol, untyped]
34
- def compare_lexers: (IR::Lexer before, IR::Lexer after) -> Hash[Symbol, untyped]
21
+ # @rbs (IR::Lexer before, IR::Lexer after) -> Hash[Symbol, Object?]
22
+ def compare_lexers: (IR::Lexer before, IR::Lexer after) -> Hash[Symbol, Object?]
35
23
 
36
- # @rbs (IR::Grammar before, IR::Grammar after) -> Hash[Symbol, untyped]
37
- def compare_grammars: (IR::Grammar before, IR::Grammar after) -> Hash[Symbol, untyped]
24
+ # @rbs (IR::Grammar before, IR::Grammar after) -> Hash[Symbol, Object?]
25
+ def compare_grammars: (IR::Grammar before, IR::Grammar after) -> Hash[Symbol, Object?]
38
26
 
39
27
  # @rbs (IR::Grammar grammar) -> Array[String]
40
28
  def production_shapes: (IR::Grammar grammar) -> Array[String]
@@ -5,7 +5,9 @@ module Ibex
5
5
  module CLIOutputs
6
6
  private def register_artifact: (Symbol, String, String, ?mode: Integer?, ?status: bool) -> Artifact
7
7
 
8
- WARNING_MESSAGES: Hash[Symbol, ^(IR::grammar_warning) -> String]
8
+ private def configuration_value: (String) -> Object?
9
+
10
+ WARNING_MESSAGE_IDS: Hash[Symbol, String]
9
11
 
10
12
  private
11
13
 
@@ -15,8 +17,11 @@ module Ibex
15
17
  # @rbs (IR::Grammar grammar, String input_path) -> void
16
18
  def handle_grammar_warnings: (IR::Grammar grammar, String input_path) -> void
17
19
 
18
- # @rbs (IR::grammar_warning warning, String input_path) -> String
19
- def format_grammar_warning: (IR::grammar_warning warning, String input_path) -> String
20
+ # @rbs (IR::grammar_warning warning, String input_path, ?promoted: bool) -> String
21
+ def format_grammar_warning: (IR::grammar_warning warning, String input_path, ?promoted: bool) -> String
22
+
23
+ # @rbs (IR::grammar_warning warning) -> String
24
+ def grammar_warning_message: (IR::grammar_warning warning) -> String
20
25
 
21
26
  # @rbs (IR::Automaton automaton, String input_path) -> void
22
27
  def report_conflicts: (IR::Automaton automaton, String input_path) -> void
@@ -25,6 +30,7 @@ module Ibex
25
30
  def conflict_messages: (IR::conflict_summary summary, String input_path) -> Array[String]
26
31
 
27
32
  # @rbs (IR::Automaton automaton, String input_path) -> void
33
+ # rubocop:disable Metrics/AbcSize -- the bounded comparison reports each conflict class independently.
28
34
  def suggest_ielr: (IR::Automaton automaton, String input_path) -> void
29
35
 
30
36
  # @rbs (Integer count, String kind) -> String
@@ -0,0 +1,60 @@
1
+ # Generated from lib/ibex/cli/reduce.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ type reduction_bounds = { max_trials: Integer, timeout_seconds: Integer, max_output_bytes: Integer, max_input_bytes: Integer }
5
+
6
+ type reduction_budget_details = { kind: String, message: String, trials: Integer }
7
+
8
+ type reduction_success_document = { ibex_report: String, schema_version: Integer, result: String, mode: Symbol, original_size: Integer, minimized_size: Integer, trials: Integer, complete: bool, minimized: Array[String | Integer], bounded: bool, bounds: reduction_bounds }
9
+
10
+ type reduction_budget_document = { ibex_report: String, schema_version: Integer, result: String, mode: Symbol, bounded: bool, bounds: reduction_bounds, budget: reduction_budget_details }
11
+
12
+ # CLI entry point for generic bounded delta debugging.
13
+ module CLIReduce
14
+ include CLIReduceReporting
15
+
16
+ DEFAULT_MAX_INPUT_BYTES: Integer
17
+
18
+ class ReductionBudgetExceeded < Ibex::Error
19
+ attr_reader details: reduction_budget_details
20
+
21
+ # @rbs (reduction_budget_details details) -> void
22
+ def initialize: (reduction_budget_details details) -> void
23
+ end
24
+
25
+ @reduction_mode: Symbol
26
+
27
+ @reduction_bounds: reduction_bounds
28
+
29
+ @reduction_trials: Integer
30
+
31
+ @reduction_subprocess: BoundedSubprocess
32
+
33
+ private def print_help: (OptionParser) -> Integer
34
+
35
+ private def input_path: (Array[String]) -> String
36
+
37
+ private
38
+
39
+ # @rbs (Array[String] arguments) -> Integer
40
+ def run_reduce_command: (Array[String] arguments) -> Integer
41
+
42
+ # @rbs () -> OptionParser
43
+ def reduce_option_parser: () -> OptionParser
44
+
45
+ # @rbs () -> void
46
+ def prepare_reduction_run: () -> void
47
+
48
+ # @rbs (String path) -> String
49
+ def bounded_reduction_source: (String path) -> String
50
+
51
+ # @rbs (String source, Symbol mode) -> Array[String | Integer]
52
+ def reduction_items: (String source, Symbol mode) -> Array[String | Integer]
53
+
54
+ # @rbs (Array[String] command, Array[String | Integer] candidate, Symbol mode) -> bool
55
+ def reduction_failure?: (Array[String] command, Array[String | Integer] candidate, Symbol mode) -> bool
56
+
57
+ # @rbs (String name, Integer value) -> Integer
58
+ def positive_reduce_option!: (String name, Integer value) -> Integer
59
+ end
60
+ end
@@ -0,0 +1,27 @@
1
+ # Generated from lib/ibex/cli/reduce_reporting.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Versioned machine and terminal reports for bounded delta reduction.
5
+ module CLIReduceReporting
6
+ @reduction_mode: Symbol
7
+
8
+ @reduction_bounds: reduction_bounds
9
+
10
+ private
11
+
12
+ # @rbs (DeltaReducer::Result result) -> reduction_success_document
13
+ def reduction_success_report: (DeltaReducer::Result result) -> reduction_success_document
14
+
15
+ # @rbs (reduction_budget_details details) -> reduction_budget_document
16
+ def reduction_budget_report: (reduction_budget_details details) -> reduction_budget_document
17
+
18
+ # @rbs () -> reduction_bounds
19
+ def default_reduction_bounds: () -> reduction_bounds
20
+
21
+ # @rbs (reduction_success_document report) -> void
22
+ def write_reduction_success: (reduction_success_document report) -> void
23
+
24
+ # @rbs (reduction_budget_document report) -> void
25
+ def write_reduction_budget: (reduction_budget_document report) -> void
26
+ end
27
+ end
@@ -13,6 +13,8 @@ module Ibex
13
13
 
14
14
  private def normalize_grammar_path: (String) -> IR::Grammar
15
15
 
16
+ private def set_configuration_option: (Symbol, Object?) -> void
17
+
16
18
  private
17
19
 
18
20
  # @rbs (Array[String] arguments) -> Integer
@@ -21,6 +23,12 @@ module Ibex
21
23
  # @rbs () -> OptionParser
22
24
  def samples_option_parser: () -> OptionParser
23
25
 
26
+ # @rbs (OptionParser options) -> void
27
+ def add_sample_generation_options: (OptionParser options) -> void
28
+
29
+ # @rbs (OptionParser options) -> void
30
+ def add_sample_input_options: (OptionParser options) -> void
31
+
24
32
  # @rbs (String path) -> IR::Grammar
25
33
  def grammar_for_samples: (String path) -> IR::Grammar
26
34
 
@@ -0,0 +1,28 @@
1
+ # Generated from lib/ibex/cli/verify.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # CLI entry point for bounded, independent Automaton IR verification.
5
+ module CLIVerify
6
+ type verify_options = { paths: Array[String], strict: bool, max_states: Integer, max_items: Integer, ?grammar: String, format: String, ?help: String }
7
+
8
+ private
9
+
10
+ # @rbs (Array[String] arguments) -> Integer
11
+ def run_verify_command: (Array[String] arguments) -> Integer
12
+
13
+ # @rbs (Array[String] arguments) -> verify_options
14
+ def verify_options: (Array[String] arguments) -> verify_options
15
+
16
+ # @rbs (String path) -> IR::Automaton
17
+ def load_verify_automaton: (String path) -> IR::Automaton
18
+
19
+ # @rbs (IR::Automaton automaton, String path) -> void
20
+ def verify_supplied_grammar!: (IR::Automaton automaton, String path) -> void
21
+
22
+ # @rbs (Verify::Result result, String format) -> void
23
+ def write_verify_result: (Verify::Result result, String format) -> void
24
+
25
+ # @rbs (Integer value, String name) -> Integer
26
+ def positive_verify_budget: (Integer value, String name) -> Integer
27
+ end
28
+ end
@@ -34,8 +34,8 @@ module Ibex
34
34
  # @rbs (String path) -> Build
35
35
  def prepare_watch_generation: (String path) -> Build
36
36
 
37
- # @rbs (Build build, Watch::SourceSnapshot snapshot, ^() -> bool continue) -> void
38
- def publish_watch_generation: (Build build, Watch::SourceSnapshot snapshot, ^() -> bool continue) -> void
37
+ # @rbs (Watch::_BuildResult build, Watch::SourceSnapshot snapshot, ^() -> bool continue) -> void
38
+ def publish_watch_generation: (Watch::_BuildResult build, Watch::SourceSnapshot snapshot, ^() -> bool continue) -> void
39
39
 
40
40
  # @rbs (String path) -> Array[String]
41
41
  def watch_failure_paths: (String path) -> Array[String]