ibex 0.2.0 → 0.3.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 (437) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +95 -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 +262 -0
  40. data/docs/development.md +179 -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 +1581 -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/ja/bison-import.md +51 -0
  56. data/docs/ja/stable-api.md +53 -0
  57. data/docs/lexer-construction-profile.md +109 -0
  58. data/docs/lexer-migration.md +5 -0
  59. data/docs/maturity.md +128 -0
  60. data/docs/project-site-strategy.md +54 -0
  61. data/docs/racc-migration-evidence.md +45 -0
  62. data/docs/racc-migration.md +11 -0
  63. data/docs/release-readiness.md +126 -68
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +144 -34
  67. data/docs/status.md +43 -0
  68. data/docs/syntax-sessions.md +183 -0
  69. data/docs/table-artifact.md +125 -0
  70. data/docs/test-interactions.md +219 -0
  71. data/docs/verification-report.md +137 -0
  72. data/docs/verifier-trust-boundary.md +199 -0
  73. data/docs/workloads.md +132 -0
  74. data/lib/ibex/analysis/digraph.rb +128 -0
  75. data/lib/ibex/analysis.rb +1 -0
  76. data/lib/ibex/bison_import/importer.rb +516 -0
  77. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  78. data/lib/ibex/bison_import.rb +200 -0
  79. data/lib/ibex/bounded_subprocess.rb +171 -0
  80. data/lib/ibex/cli/ambiguity.rb +14 -5
  81. data/lib/ibex/cli/analysis.rb +134 -0
  82. data/lib/ibex/cli/bison_import.rb +121 -0
  83. data/lib/ibex/cli/config.rb +128 -0
  84. data/lib/ibex/cli/diagnostics.rb +31 -11
  85. data/lib/ibex/cli/documentation.rb +11 -8
  86. data/lib/ibex/cli/equiv.rb +169 -0
  87. data/lib/ibex/cli/error_messages.rb +11 -4
  88. data/lib/ibex/cli/explain.rb +14 -5
  89. data/lib/ibex/cli/fix.rb +203 -0
  90. data/lib/ibex/cli/formatting.rb +11 -10
  91. data/lib/ibex/cli/fuzz.rb +200 -0
  92. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  93. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  94. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  95. data/lib/ibex/cli/grammar_tests.rb +32 -14
  96. data/lib/ibex/cli/ir_tools.rb +5 -61
  97. data/lib/ibex/cli/outputs.rb +60 -33
  98. data/lib/ibex/cli/reduce.rb +202 -0
  99. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  100. data/lib/ibex/cli/samples.rb +49 -23
  101. data/lib/ibex/cli/verify.rb +116 -0
  102. data/lib/ibex/cli/watch.rb +6 -5
  103. data/lib/ibex/cli.rb +357 -56
  104. data/lib/ibex/codegen/action_locations.rb +1 -1
  105. data/lib/ibex/codegen/action_method_source.rb +5 -6
  106. data/lib/ibex/codegen/action_source.rb +3 -2
  107. data/lib/ibex/codegen/ambiguity.rb +5 -4
  108. data/lib/ibex/codegen/explain.rb +123 -55
  109. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  110. data/lib/ibex/codegen/rbs.rb +15 -7
  111. data/lib/ibex/codegen/report.rb +25 -13
  112. data/lib/ibex/codegen/ruby.rb +28 -64
  113. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  114. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  115. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  116. data/lib/ibex/configuration/explanation.rb +421 -0
  117. data/lib/ibex/configuration/inspector.rb +232 -0
  118. data/lib/ibex/configuration.rb +580 -0
  119. data/lib/ibex/coverage/collector.rb +21 -11
  120. data/lib/ibex/coverage/event_stream.rb +13 -7
  121. data/lib/ibex/coverage/report.rb +26 -18
  122. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  123. data/lib/ibex/delta_reducer.rb +99 -0
  124. data/lib/ibex/diff.rb +140 -0
  125. data/lib/ibex/equiv/machine.rb +135 -0
  126. data/lib/ibex/equiv.rb +373 -0
  127. data/lib/ibex/fix.rb +557 -0
  128. data/lib/ibex/frontend/ast.rb +22 -2
  129. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  130. data/lib/ibex/frontend/diagnostic.rb +1 -1
  131. data/lib/ibex/frontend/formatter.rb +72 -26
  132. data/lib/ibex/frontend/generated_parser.rb +147 -117
  133. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  134. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  135. data/lib/ibex/frontend/generation.rb +1 -1
  136. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  137. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  138. data/lib/ibex/frontend/regenerator.rb +1 -0
  139. data/lib/ibex/frontend/resolution.rb +2 -1
  140. data/lib/ibex/frontend/resolver.rb +1 -1
  141. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  142. data/lib/ibex/frontend/source_cursor.rb +2 -2
  143. data/lib/ibex/frontend/source_span.rb +9 -1
  144. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  145. data/lib/ibex/frontend/token_adapter.rb +10 -0
  146. data/lib/ibex/frontend.rb +1 -0
  147. data/lib/ibex/fuzz.rb +219 -0
  148. data/lib/ibex/generation_input.rb +1 -1
  149. data/lib/ibex/generation_manifest.rb +36 -25
  150. data/lib/ibex/generation_transaction.rb +1 -1
  151. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  152. data/lib/ibex/generation_transaction_validation.rb +2 -2
  153. data/lib/ibex/grammar_tests.rb +1 -1
  154. data/lib/ibex/ir/automaton_ir.rb +61 -19
  155. data/lib/ibex/ir/grammar_ir.rb +76 -45
  156. data/lib/ibex/ir/lexer_ir.rb +5 -5
  157. data/lib/ibex/ir/parser_contract.rb +135 -0
  158. data/lib/ibex/ir/serialize.rb +203 -76
  159. data/lib/ibex/ir/validator/automaton.rb +64 -34
  160. data/lib/ibex/ir/validator/base.rb +51 -33
  161. data/lib/ibex/ir/validator/grammar.rb +113 -83
  162. data/lib/ibex/ir/validator/lexer.rb +2 -2
  163. data/lib/ibex/ir/validator.rb +2 -1
  164. data/lib/ibex/ir.rb +16 -3
  165. data/lib/ibex/lalr/build_metrics.rb +50 -2
  166. data/lib/ibex/lalr/builder.rb +191 -56
  167. data/lib/ibex/lalr/conflict_search.rb +15 -4
  168. data/lib/ibex/lalr/counterexample.rb +19 -14
  169. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  170. data/lib/ibex/lalr/goto_follows.rb +229 -0
  171. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  172. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  173. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  174. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  175. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  176. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  177. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  178. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  179. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  180. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  181. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  182. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  183. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  184. data/lib/ibex/lalr.rb +52 -1
  185. data/lib/ibex/location.rb +3 -3
  186. data/lib/ibex/lsp/document_handlers.rb +9 -7
  187. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  188. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  189. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  190. data/lib/ibex/lsp/position_codec.rb +6 -2
  191. data/lib/ibex/lsp/request_handlers.rb +3 -2
  192. data/lib/ibex/lsp/request_support.rb +14 -7
  193. data/lib/ibex/lsp/server.rb +13 -11
  194. data/lib/ibex/lsp/symbol_index.rb +13 -13
  195. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  196. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  197. data/lib/ibex/lsp/transport.rb +13 -3
  198. data/lib/ibex/lsp/workspace.rb +5 -4
  199. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  200. data/lib/ibex/lsp.rb +1 -0
  201. data/lib/ibex/messages/en.yml +28 -0
  202. data/lib/ibex/messages/ja.yml +28 -0
  203. data/lib/ibex/messages.rb +68 -0
  204. data/lib/ibex/metrics.rb +175 -0
  205. data/lib/ibex/normalize/declarations.rb +2 -0
  206. data/lib/ibex/normalize/diagnostics.rb +63 -38
  207. data/lib/ibex/normalize/expander.rb +5 -4
  208. data/lib/ibex/normalize/expression.rb +8 -6
  209. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  210. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  211. data/lib/ibex/normalize/lexer.rb +3 -3
  212. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  213. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  214. data/lib/ibex/normalize/parameters.rb +31 -4
  215. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  216. data/lib/ibex/normalize.rb +10 -20
  217. data/lib/ibex/racc_migration/report.rb +6 -3
  218. data/lib/ibex/rake_task.rb +1 -1
  219. data/lib/ibex/samples.rb +43 -13
  220. data/lib/ibex/table_artifact/builder.rb +266 -0
  221. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  222. data/lib/ibex/table_artifact/document.rb +39 -0
  223. data/lib/ibex/table_artifact/executor.rb +187 -0
  224. data/lib/ibex/table_artifact/serializer.rb +57 -0
  225. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  226. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  227. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  228. data/lib/ibex/table_artifact/validator.rb +253 -0
  229. data/lib/ibex/table_artifact.rb +88 -0
  230. data/lib/ibex/table_simulation/result.rb +6 -2
  231. data/lib/ibex/table_simulation/step.rb +3 -1
  232. data/lib/ibex/tables.rb +14 -0
  233. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  234. data/lib/ibex/verification_report/builder.rb +159 -0
  235. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  236. data/lib/ibex/verification_report/logical_path.rb +68 -0
  237. data/lib/ibex/verification_report/validator.rb +329 -0
  238. data/lib/ibex/verification_report.rb +69 -0
  239. data/lib/ibex/verify/action_correspondence.rb +138 -0
  240. data/lib/ibex/verify/language_witness.rb +295 -0
  241. data/lib/ibex/verify/reference_collection.rb +190 -0
  242. data/lib/ibex/verify/result.rb +73 -0
  243. data/lib/ibex/verify/verifier.rb +598 -0
  244. data/lib/ibex/verify.rb +15 -0
  245. data/lib/ibex/version.rb +1 -1
  246. data/lib/ibex/watch/runner.rb +10 -1
  247. data/lib/ibex/watch/source_snapshot.rb +13 -8
  248. data/lib/ibex.rb +10 -0
  249. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  250. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  251. data/schema/bison-import-v1.schema.json +106 -0
  252. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  253. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  254. data/schema/construction-profile-v1.schema.json +779 -0
  255. data/schema/diff-v1.schema.json +41 -0
  256. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  257. data/schema/equiv-v1.schema.json +64 -0
  258. data/schema/error-ux-review-v1.schema.json +609 -0
  259. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  260. data/schema/error-ux-round2-v1.schema.json +519 -0
  261. data/schema/explain-v1.schema.json +63 -1
  262. data/schema/fix-v1.schema.json +64 -0
  263. data/schema/fix-v2.schema.json +66 -0
  264. data/schema/fix-v3.schema.json +101 -0
  265. data/schema/fuzz-regression-v1.schema.json +79 -0
  266. data/schema/fuzz-v1.schema.json +114 -0
  267. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  268. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  269. data/schema/grammar-ir.schema.json +271 -0
  270. data/schema/ielr-benchmark-v1.schema.json +85 -0
  271. data/schema/lexer-profile-v1.schema.json +491 -0
  272. data/schema/metrics-v1.schema.json +60 -0
  273. data/schema/reduce-v1.schema.json +22 -0
  274. data/schema/reduce-v2.schema.json +63 -0
  275. data/schema/table-artifact-v1.schema.json +377 -0
  276. data/schema/verification-report-v1.schema.json +222 -0
  277. data/schema/verify-v1.schema.json +42 -0
  278. data/sig/ibex/analysis/digraph.rbs +19 -0
  279. data/sig/ibex/bison_import/importer.rbs +140 -0
  280. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  281. data/sig/ibex/bison_import.rbs +95 -0
  282. data/sig/ibex/bounded_subprocess.rbs +76 -0
  283. data/sig/ibex/cli/ambiguity.rbs +6 -0
  284. data/sig/ibex/cli/analysis.rbs +43 -0
  285. data/sig/ibex/cli/bison_import.rbs +32 -0
  286. data/sig/ibex/cli/config.rbs +35 -0
  287. data/sig/ibex/cli/diagnostics.rbs +16 -3
  288. data/sig/ibex/cli/documentation.rbs +5 -1
  289. data/sig/ibex/cli/equiv.rbs +49 -0
  290. data/sig/ibex/cli/error_messages.rbs +6 -0
  291. data/sig/ibex/cli/explain.rbs +6 -0
  292. data/sig/ibex/cli/fix.rbs +53 -0
  293. data/sig/ibex/cli/formatting.rbs +5 -1
  294. data/sig/ibex/cli/fuzz.rbs +47 -0
  295. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  296. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  297. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  298. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  299. data/sig/ibex/cli/ir_tools.rbs +7 -19
  300. data/sig/ibex/cli/outputs.rbs +9 -3
  301. data/sig/ibex/cli/reduce.rbs +60 -0
  302. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  303. data/sig/ibex/cli/samples.rbs +8 -0
  304. data/sig/ibex/cli/verify.rbs +28 -0
  305. data/sig/ibex/cli/watch.rbs +2 -2
  306. data/sig/ibex/cli.rbs +79 -5
  307. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  308. data/sig/ibex/codegen/explain.rbs +45 -25
  309. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  310. data/sig/ibex/codegen/rbs.rbs +12 -10
  311. data/sig/ibex/codegen/report.rbs +12 -12
  312. data/sig/ibex/codegen/ruby.rbs +18 -15
  313. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  314. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  315. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  316. data/sig/ibex/configuration/explanation.rbs +195 -0
  317. data/sig/ibex/configuration/inspector.rbs +53 -0
  318. data/sig/ibex/configuration.rbs +242 -0
  319. data/sig/ibex/coverage/collector.rbs +16 -14
  320. data/sig/ibex/coverage/event_stream.rbs +12 -10
  321. data/sig/ibex/coverage/report.rbs +20 -18
  322. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  323. data/sig/ibex/delta_reducer.rbs +38 -0
  324. data/sig/ibex/diff.rbs +47 -0
  325. data/sig/ibex/equiv/machine.rbs +54 -0
  326. data/sig/ibex/equiv.rbs +129 -0
  327. data/sig/ibex/fix.rbs +138 -0
  328. data/sig/ibex/frontend/ast.rbs +33 -7
  329. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  330. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  331. data/sig/ibex/frontend/formatter.rbs +38 -30
  332. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  333. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  334. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  335. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  336. data/sig/ibex/frontend/resolution.rbs +3 -2
  337. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  338. data/sig/ibex/frontend/source_span.rbs +5 -2
  339. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  340. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  341. data/sig/ibex/fuzz.rbs +71 -0
  342. data/sig/ibex/generation_input.rbs +2 -2
  343. data/sig/ibex/generation_manifest.rbs +35 -32
  344. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  345. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  346. data/sig/ibex/grammar_tests.rbs +2 -2
  347. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  348. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  349. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  350. data/sig/ibex/ir/parser_contract.rbs +69 -0
  351. data/sig/ibex/ir/serialize.rbs +63 -28
  352. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  353. data/sig/ibex/ir/validator/base.rbs +35 -31
  354. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  355. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  356. data/sig/ibex/ir.rbs +9 -3
  357. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  358. data/sig/ibex/lalr/builder.rbs +75 -24
  359. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  360. data/sig/ibex/lalr/counterexample.rbs +17 -14
  361. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  362. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  363. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  364. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  365. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  366. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  367. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  368. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  369. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  370. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  371. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  372. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  373. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  374. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  375. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  376. data/sig/ibex/lalr.rbs +11 -1
  377. data/sig/ibex/location.rbs +6 -6
  378. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  379. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  380. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  381. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  382. data/sig/ibex/lsp/position_codec.rbs +8 -4
  383. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  384. data/sig/ibex/lsp/request_support.rbs +8 -8
  385. data/sig/ibex/lsp/server.rbs +16 -16
  386. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  387. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  388. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  389. data/sig/ibex/lsp/transport.rbs +18 -6
  390. data/sig/ibex/lsp/workspace.rbs +3 -2
  391. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  392. data/sig/ibex/messages.rbs +26 -0
  393. data/sig/ibex/metrics.rbs +50 -0
  394. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  395. data/sig/ibex/normalize/expander.rbs +2 -2
  396. data/sig/ibex/normalize/expression.rbs +10 -8
  397. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  398. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  399. data/sig/ibex/normalize/lexer.rbs +4 -4
  400. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  401. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  402. data/sig/ibex/normalize/parameters.rbs +13 -8
  403. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  404. data/sig/ibex/normalize.rbs +11 -5
  405. data/sig/ibex/racc_migration/report.rbs +8 -6
  406. data/sig/ibex/rake_task.rbs +1 -1
  407. data/sig/ibex/samples.rbs +13 -4
  408. data/sig/ibex/table_artifact/builder.rbs +93 -0
  409. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  410. data/sig/ibex/table_artifact/document.rbs +27 -0
  411. data/sig/ibex/table_artifact/executor.rbs +66 -0
  412. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  413. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  414. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  415. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  416. data/sig/ibex/table_artifact/validator.rbs +66 -0
  417. data/sig/ibex/table_artifact.rbs +32 -0
  418. data/sig/ibex/table_simulation/result.rbs +8 -4
  419. data/sig/ibex/table_simulation/step.rbs +4 -2
  420. data/sig/ibex/tables.rbs +10 -9
  421. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  422. data/sig/ibex/verification_report/builder.rbs +53 -0
  423. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  424. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  425. data/sig/ibex/verification_report/validator.rbs +114 -0
  426. data/sig/ibex/verification_report.rbs +44 -0
  427. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  428. data/sig/ibex/verify/language_witness.rbs +112 -0
  429. data/sig/ibex/verify/reference_collection.rbs +63 -0
  430. data/sig/ibex/verify/result.rbs +52 -0
  431. data/sig/ibex/verify/verifier.rbs +170 -0
  432. data/sig/ibex/verify.rbs +6 -0
  433. data/sig/ibex/watch/runner.rbs +12 -2
  434. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  435. metadata +232 -12
  436. data/lib/ibex/ir/migration.rb +0 -120
  437. data/sig/ibex/ir/migration.rbs +0 -34
@@ -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
 
@@ -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]
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