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
@@ -19,6 +19,8 @@ module Ibex
19
19
 
20
20
  type formatter_element = { segment: Segment, external: external_token?, role: Symbol?, gap: Array[Segment] }
21
21
 
22
+ type formatter_state = { section: :declarations | :rules, precedence_closer: external_token?, conversion: bool, conversion_name: bool, parser: bool, parser_key: bool, depth: Integer, rule_colon: bool }
23
+
22
24
  # @rbs (String source, ?file: String, ?mode: Symbol) -> String
23
25
  def self.format: (String source, ?file: String, ?mode: Symbol) -> String
24
26
 
@@ -45,32 +47,38 @@ module Ibex
45
47
  # @rbs (Array[formatter_element] elements) -> void
46
48
  def annotate_comment_indentation: (Array[formatter_element] elements) -> void
47
49
 
48
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
49
- def token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
50
+ # @rbs (external_token external, formatter_state state) -> Symbol?
51
+ def token_role: (external_token external, formatter_state state) -> Symbol?
52
+
53
+ # @rbs (external_token external, formatter_state state) -> Symbol?
54
+ def document_token_role: (external_token external, formatter_state state) -> Symbol?
55
+
56
+ # @rbs (external_token external, formatter_state state) -> Symbol?
57
+ def nested_declaration_role: (external_token external, formatter_state state) -> Symbol?
50
58
 
51
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
52
- def document_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
59
+ # @rbs (formatter_state state) -> Symbol?
60
+ def section_end_role: (formatter_state state) -> Symbol?
53
61
 
54
- # @rbs (Hash[Symbol, untyped] state) -> Symbol?
55
- def section_end_role: (Hash[Symbol, untyped] state) -> Symbol?
62
+ # @rbs (external_token external, formatter_state state) -> Symbol?
63
+ def rule_token_role: (external_token external, formatter_state state) -> Symbol?
56
64
 
57
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
58
- def rule_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
65
+ # @rbs (external_token external, formatter_state state) -> Symbol
66
+ def precedence_role: (external_token external, formatter_state state) -> Symbol
59
67
 
60
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol
61
- def precedence_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol
68
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
69
+ def advance_role_state: (external_token external, Symbol? role, formatter_state state) -> void
62
70
 
63
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
64
- def advance_role_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
71
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
72
+ def advance_parser_state: (external_token external, Symbol? role, formatter_state state) -> void
65
73
 
66
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
67
- def advance_precedence_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
74
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
75
+ def advance_precedence_state: (external_token external, Symbol? role, formatter_state state) -> void
68
76
 
69
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
70
- def advance_conversion_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
77
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
78
+ def advance_conversion_state: (external_token external, Symbol? role, formatter_state state) -> void
71
79
 
72
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
73
- def advance_rule_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
80
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
81
+ def advance_rule_state: (external_token external, Symbol? role, formatter_state state) -> void
74
82
 
75
83
  # @rbs (formatter_element? previous, formatter_element current) -> String
76
84
  def separator: (formatter_element? previous, formatter_element current) -> String
@@ -113,23 +121,23 @@ module Ibex
113
121
  # @rbs (String text) -> bool
114
122
  def text_ends_with_newline?: (String text) -> bool
115
123
 
116
- # @rbs (untyped left, untyped right) -> bool
117
- def same_semantic_projection?: (untyped left, untyped right) -> bool
124
+ # @rbs (Object? left, Object? right) -> bool
125
+ def same_semantic_projection?: (Object? left, Object? right) -> bool
118
126
 
119
- # @rbs (untyped left, untyped right) -> bool
120
- def comparable_semantic_values?: (untyped left, untyped right) -> bool
127
+ # @rbs (Object? left, Object? right) -> bool
128
+ def comparable_semantic_values?: (Object? left, Object? right) -> bool
121
129
 
122
- # @rbs (Hash[untyped, untyped] left, untyped right) -> bool
123
- def comparable_semantic_hashes?: (Hash[untyped, untyped] left, untyped right) -> bool
130
+ # @rbs (Hash[Object?, Object?] left, Object? right) -> bool
131
+ def comparable_semantic_hashes?: (Hash[Object?, Object?] left, Object? right) -> bool
124
132
 
125
- # @rbs (Array[[untyped, untyped]] pending, untyped left, untyped right) -> void
126
- def append_semantic_children: (Array[[ untyped, untyped ]] pending, untyped left, untyped right) -> void
133
+ # @rbs (Array[[Object?, Object?]] pending, Object? left, Object? right) -> void
134
+ def append_semantic_children: (Array[[ Object?, Object? ]] pending, Object? left, Object? right) -> void
127
135
 
128
- # @rbs (Struct[untyped] value) -> Array[Symbol]
129
- def semantic_members: (Struct[untyped] value) -> Array[Symbol]
136
+ # @rbs (Struct[Object?] value) -> Array[Symbol]
137
+ def semantic_members: (Struct[Object?] value) -> Array[Symbol]
130
138
 
131
- # @rbs (Hash[untyped, untyped] value) -> Array[untyped]
132
- def semantic_keys: (Hash[untyped, untyped] value) -> Array[untyped]
139
+ # @rbs (Hash[Object?, Object?] value) -> Array[Object?]
140
+ def semantic_keys: (Hash[Object?, Object?] value) -> Array[Object?]
133
141
  end
134
142
  end
135
143
  end
@@ -95,31 +95,31 @@ module Ibex
95
95
 
96
96
  private def _ibex_action_31: (untyped v0) -> untyped
97
97
 
98
- private def _ibex_action_32: (untyped v0, untyped v1) -> untyped
98
+ private def _ibex_action_32: (untyped v0) -> untyped
99
99
 
100
100
  private def _ibex_action_33: (untyped v0, untyped v1) -> untyped
101
101
 
102
102
  private def _ibex_action_34: (untyped v0, untyped v1) -> untyped
103
103
 
104
- private def _ibex_action_35: () -> untyped
104
+ private def _ibex_action_35: (untyped v0, untyped v1) -> untyped
105
105
 
106
- private def _ibex_action_36: (untyped v0, untyped v1) -> untyped
106
+ private def _ibex_action_36: () -> untyped
107
107
 
108
- private def _ibex_action_37: (untyped v0) -> untyped
108
+ private def _ibex_action_37: (untyped v0, untyped v1) -> untyped
109
109
 
110
- private def _ibex_action_38: (untyped v0, untyped v1) -> untyped
110
+ private def _ibex_action_38: (untyped v0) -> untyped
111
111
 
112
- private def _ibex_action_39: (untyped v0, untyped v1, untyped v2) -> untyped
112
+ private def _ibex_action_39: (untyped v0, untyped v1) -> untyped
113
113
 
114
114
  private def _ibex_action_40: (untyped v0, untyped v1, untyped v2) -> untyped
115
115
 
116
- private def _ibex_action_41: () -> untyped
116
+ private def _ibex_action_41: (untyped v0, untyped v1, untyped v2) -> untyped
117
117
 
118
- private def _ibex_action_42: (untyped v0, untyped v1) -> untyped
118
+ private def _ibex_action_42: () -> untyped
119
119
 
120
120
  private def _ibex_action_43: (untyped v0, untyped v1) -> untyped
121
121
 
122
- private def _ibex_action_44: (untyped v0) -> untyped
122
+ private def _ibex_action_44: (untyped v0, untyped v1) -> untyped
123
123
 
124
124
  private def _ibex_action_45: (untyped v0) -> untyped
125
125
 
@@ -127,135 +127,135 @@ module Ibex
127
127
 
128
128
  private def _ibex_action_47: (untyped v0) -> untyped
129
129
 
130
- private def _ibex_action_48: (untyped v0, untyped v1) -> untyped
130
+ private def _ibex_action_48: (untyped v0) -> untyped
131
131
 
132
132
  private def _ibex_action_49: (untyped v0, untyped v1) -> untyped
133
133
 
134
134
  private def _ibex_action_50: (untyped v0, untyped v1) -> untyped
135
135
 
136
- private def _ibex_action_51: (untyped v0, untyped v1, untyped v2) -> untyped
136
+ private def _ibex_action_51: (untyped v0, untyped v1) -> untyped
137
137
 
138
- private def _ibex_action_52: (untyped val) -> untyped
138
+ private def _ibex_action_52: (untyped v0, untyped v1, untyped v2) -> untyped
139
139
 
140
- private def _ibex_action_53: (untyped v0, untyped v1, untyped v2) -> untyped
140
+ private def _ibex_action_53: (untyped val) -> untyped
141
141
 
142
142
  private def _ibex_action_54: (untyped v0, untyped v1, untyped v2) -> untyped
143
143
 
144
144
  private def _ibex_action_55: (untyped v0, untyped v1, untyped v2) -> untyped
145
145
 
146
- private def _ibex_action_56: () -> untyped
146
+ private def _ibex_action_56: (untyped v0, untyped v1, untyped v2) -> untyped
147
147
 
148
- private def _ibex_action_57: (untyped v0, untyped v1) -> untyped
148
+ private def _ibex_action_57: () -> untyped
149
149
 
150
- private def _ibex_action_58: (untyped v0) -> untyped
150
+ private def _ibex_action_58: (untyped v0, untyped v1) -> untyped
151
151
 
152
152
  private def _ibex_action_59: (untyped v0) -> untyped
153
153
 
154
- private def _ibex_action_60: (untyped v0, untyped v1, untyped v2) -> untyped
154
+ private def _ibex_action_60: (untyped v0) -> untyped
155
155
 
156
156
  private def _ibex_action_61: (untyped v0, untyped v1, untyped v2) -> untyped
157
157
 
158
158
  private def _ibex_action_62: (untyped v0, untyped v1, untyped v2) -> untyped
159
159
 
160
- private def _ibex_action_63: (untyped v0) -> untyped
160
+ private def _ibex_action_63: (untyped v0, untyped v1, untyped v2) -> untyped
161
161
 
162
162
  private def _ibex_action_64: (untyped v0) -> untyped
163
163
 
164
- private def _ibex_action_65: () -> untyped
164
+ private def _ibex_action_65: (untyped v0) -> untyped
165
165
 
166
- private def _ibex_action_66: (untyped v0) -> untyped
166
+ private def _ibex_action_66: () -> untyped
167
167
 
168
- private def _ibex_action_67: (untyped val) -> untyped
168
+ private def _ibex_action_67: (untyped v0) -> untyped
169
169
 
170
- private def _ibex_action_68: (untyped v0, untyped v1, untyped v2) -> untyped
170
+ private def _ibex_action_68: (untyped val) -> untyped
171
171
 
172
- private def _ibex_action_69: () -> untyped
172
+ private def _ibex_action_69: (untyped v0, untyped v1, untyped v2) -> untyped
173
173
 
174
- private def _ibex_action_70: (untyped v0, untyped v1) -> untyped
174
+ private def _ibex_action_70: () -> untyped
175
175
 
176
176
  private def _ibex_action_71: (untyped v0, untyped v1) -> untyped
177
177
 
178
- private def _ibex_action_72: (untyped v0, untyped v1, untyped v2) -> untyped
178
+ private def _ibex_action_72: (untyped v0, untyped v1) -> untyped
179
179
 
180
180
  private def _ibex_action_73: (untyped v0, untyped v1, untyped v2) -> untyped
181
181
 
182
182
  private def _ibex_action_74: (untyped v0, untyped v1, untyped v2) -> untyped
183
183
 
184
- private def _ibex_action_75: () -> untyped
184
+ private def _ibex_action_75: (untyped v0, untyped v1, untyped v2) -> untyped
185
185
 
186
- private def _ibex_action_76: (untyped v0) -> untyped
186
+ private def _ibex_action_76: () -> untyped
187
187
 
188
- private def _ibex_action_77: (untyped v0, untyped v1, untyped v2) -> untyped
188
+ private def _ibex_action_77: (untyped v0) -> untyped
189
189
 
190
- private def _ibex_action_78: () -> untyped
190
+ private def _ibex_action_78: (untyped v0, untyped v1, untyped v2) -> untyped
191
191
 
192
- private def _ibex_action_79: (untyped v0, untyped v1) -> untyped
192
+ private def _ibex_action_79: (untyped v0, untyped v1, untyped v2) -> untyped
193
193
 
194
194
  private def _ibex_action_80: () -> untyped
195
195
 
196
196
  private def _ibex_action_81: (untyped v0, untyped v1) -> untyped
197
197
 
198
- private def _ibex_action_82: (untyped v0) -> untyped
198
+ private def _ibex_action_82: (untyped v0, untyped v1) -> untyped
199
199
 
200
- private def _ibex_action_83: (untyped v0) -> untyped
200
+ private def _ibex_action_83: () -> untyped
201
201
 
202
- private def _ibex_action_84: (untyped v0) -> untyped
202
+ private def _ibex_action_84: (untyped v0, untyped v1) -> untyped
203
203
 
204
- private def _ibex_action_85: (untyped v0, untyped v1) -> untyped
204
+ private def _ibex_action_85: () -> untyped
205
205
 
206
- private def _ibex_action_86: (untyped val) -> untyped
206
+ private def _ibex_action_86: (untyped v0, untyped v1) -> untyped
207
207
 
208
- private def _ibex_action_87: () -> untyped
208
+ private def _ibex_action_87: (untyped v0) -> untyped
209
209
 
210
210
  private def _ibex_action_88: (untyped v0) -> untyped
211
211
 
212
- private def _ibex_action_89: () -> untyped
212
+ private def _ibex_action_89: (untyped v0) -> untyped
213
213
 
214
- private def _ibex_action_90: (untyped v0, untyped v1, untyped v2) -> untyped
214
+ private def _ibex_action_90: (untyped v0, untyped v1) -> untyped
215
215
 
216
- private def _ibex_action_91: (untyped v0) -> untyped
216
+ private def _ibex_action_91: (untyped val) -> untyped
217
217
 
218
- private def _ibex_action_92: (untyped v0, untyped v1, untyped v2) -> untyped
218
+ private def _ibex_action_92: () -> untyped
219
219
 
220
- private def _ibex_action_95: (untyped v0) -> untyped
220
+ private def _ibex_action_93: (untyped v0) -> untyped
221
221
 
222
- private def _ibex_action_96: (untyped v0, untyped v1, untyped v2) -> untyped
222
+ private def _ibex_action_94: () -> untyped
223
223
 
224
- private def _ibex_action_97: (untyped v0, untyped v1, untyped v2) -> untyped
224
+ private def _ibex_action_95: (untyped v0, untyped v1, untyped v2) -> untyped
225
225
 
226
- private def _ibex_action_98: () -> untyped
226
+ private def _ibex_action_96: (untyped v0) -> untyped
227
227
 
228
- private def _ibex_action_99: (untyped val) -> untyped
228
+ private def _ibex_action_97: (untyped v0, untyped v1, untyped v2) -> untyped
229
229
 
230
- private def _ibex_action_100: () -> untyped
230
+ private def _ibex_action_100: (untyped v0) -> untyped
231
231
 
232
- private def _ibex_action_101: (untyped v0) -> untyped
232
+ private def _ibex_action_101: (untyped v0, untyped v1, untyped v2) -> untyped
233
233
 
234
- private def _ibex_action_102: () -> untyped
234
+ private def _ibex_action_102: (untyped v0, untyped v1, untyped v2) -> untyped
235
235
 
236
- private def _ibex_action_103: (untyped v0, untyped v1) -> untyped
236
+ private def _ibex_action_103: () -> untyped
237
237
 
238
- private def _ibex_action_104: () -> untyped
238
+ private def _ibex_action_104: (untyped val) -> untyped
239
239
 
240
- private def _ibex_action_105: (untyped v0, untyped v1) -> untyped
240
+ private def _ibex_action_105: () -> untyped
241
241
 
242
242
  private def _ibex_action_106: (untyped v0) -> untyped
243
243
 
244
- private def _ibex_action_107: (untyped v0) -> untyped
244
+ private def _ibex_action_107: () -> untyped
245
245
 
246
- private def _ibex_action_108: (untyped v0) -> untyped
246
+ private def _ibex_action_108: (untyped v0, untyped v1) -> untyped
247
247
 
248
- private def _ibex_action_109: (untyped v0) -> untyped
248
+ private def _ibex_action_109: () -> untyped
249
249
 
250
- private def _ibex_action_110: (untyped v0) -> untyped
250
+ private def _ibex_action_110: (untyped v0, untyped v1) -> untyped
251
251
 
252
252
  private def _ibex_action_111: (untyped v0) -> untyped
253
253
 
254
- private def _ibex_action_112: (untyped v0, untyped v1, untyped v2) -> untyped
254
+ private def _ibex_action_112: (untyped v0) -> untyped
255
255
 
256
- private def _ibex_action_113: (untyped val) -> untyped
256
+ private def _ibex_action_113: (untyped v0) -> untyped
257
257
 
258
- private def _ibex_action_114: () -> untyped
258
+ private def _ibex_action_114: (untyped v0) -> untyped
259
259
 
260
260
  private def _ibex_action_115: (untyped v0) -> untyped
261
261
 
@@ -263,51 +263,61 @@ module Ibex
263
263
 
264
264
  private def _ibex_action_117: (untyped v0, untyped v1, untyped v2) -> untyped
265
265
 
266
- private def _ibex_action_118: (untyped v0) -> untyped
266
+ private def _ibex_action_118: (untyped val) -> untyped
267
267
 
268
- private def _ibex_action_119: (untyped v0) -> untyped
268
+ private def _ibex_action_119: () -> untyped
269
269
 
270
270
  private def _ibex_action_120: (untyped v0) -> untyped
271
271
 
272
272
  private def _ibex_action_121: (untyped v0) -> untyped
273
273
 
274
- private def _ibex_action_122: () -> untyped
274
+ private def _ibex_action_122: (untyped v0, untyped v1, untyped v2) -> untyped
275
275
 
276
- private def _ibex_action_123: (untyped v0, untyped v1) -> untyped
276
+ private def _ibex_action_123: (untyped v0) -> untyped
277
277
 
278
- private def _ibex_action_124: () -> untyped
278
+ private def _ibex_action_124: (untyped v0) -> untyped
279
279
 
280
- private def _ibex_action_125: (untyped v0, untyped v1) -> untyped
280
+ private def _ibex_action_125: (untyped v0) -> untyped
281
281
 
282
- private def _ibex_action_126: (untyped v0, untyped v1) -> untyped
282
+ private def _ibex_action_126: (untyped v0) -> untyped
283
283
 
284
- private def _ibex_action_127: (untyped v0, untyped v1) -> untyped
284
+ private def _ibex_action_127: () -> untyped
285
285
 
286
- private def _ibex_action_128: (untyped v0, untyped v1, untyped v2, untyped v3) -> untyped
286
+ private def _ibex_action_128: (untyped v0, untyped v1) -> untyped
287
287
 
288
- private def _ibex_action_129: (untyped v0) -> untyped
288
+ private def _ibex_action_129: () -> untyped
289
289
 
290
- private def _ibex_action_130: (untyped v0, untyped v1, untyped v2) -> untyped
290
+ private def _ibex_action_130: (untyped v0, untyped v1) -> untyped
291
291
 
292
- private def _ibex_action_131: () -> untyped
292
+ private def _ibex_action_131: (untyped v0, untyped v1) -> untyped
293
293
 
294
294
  private def _ibex_action_132: (untyped v0, untyped v1) -> untyped
295
295
 
296
- private def _ibex_action_133: (untyped v0) -> untyped
296
+ private def _ibex_action_133: (untyped v0, untyped v1, untyped v2, untyped v3) -> untyped
297
297
 
298
298
  private def _ibex_action_134: (untyped v0) -> untyped
299
299
 
300
- private def _ibex_action_135: (untyped v0) -> untyped
300
+ private def _ibex_action_135: (untyped v0, untyped v1, untyped v2) -> untyped
301
+
302
+ private def _ibex_action_136: () -> untyped
303
+
304
+ private def _ibex_action_137: (untyped v0, untyped v1) -> untyped
305
+
306
+ private def _ibex_action_138: (untyped v0) -> untyped
307
+
308
+ private def _ibex_action_139: (untyped v0) -> untyped
309
+
310
+ private def _ibex_action_140: (untyped v0) -> untyped
301
311
 
302
- private def _ibex_action_136: (untyped v0) -> untyped
312
+ private def _ibex_action_141: (untyped v0) -> untyped
303
313
 
304
- private def _ibex_action_137: (untyped val) -> untyped
314
+ private def _ibex_action_142: (untyped val) -> untyped
305
315
 
306
- private def _ibex_action_138: (untyped val) -> untyped
316
+ private def _ibex_action_143: (untyped val) -> untyped
307
317
 
308
- private def _ibex_action_139: () -> untyped
318
+ private def _ibex_action_144: () -> untyped
309
319
 
310
- private def _ibex_action_140: (untyped v0, untyped v1) -> untyped
320
+ private def _ibex_action_145: (untyped v0, untyped v1) -> untyped
311
321
  end
312
322
  end
313
323
  end
@@ -11,6 +11,8 @@ module Ibex
11
11
 
12
12
  include GeneratedParserParameters
13
13
 
14
+ include ParserConfigurationSupport
15
+
14
16
  attr_reader diagnostic_token: Token?
15
17
 
16
18
  @mode: Symbol
@@ -26,8 +28,8 @@ module Ibex
26
28
  # @rbs () -> ([external_token, Token] | false)
27
29
  def next_token: () -> ([ external_token, Token ] | false)
28
30
 
29
- # @rbs (Integer? _token_id, Token? value, Array[untyped] _value_stack) -> bot
30
- def on_error: (Integer? _token_id, Token? value, Array[untyped] _value_stack) -> bot
31
+ # @rbs (Integer? _token_id, Token? value, Array[Object?] _value_stack) -> bot
32
+ def on_error: (Integer? _token_id, Token? value, Array[Object?] _value_stack) -> bot
31
33
 
32
34
  private
33
35
 
@@ -21,6 +21,9 @@ module Ibex
21
21
  # @rbs () -> AST::declaration
22
22
  def parse_declaration: () -> AST::declaration
23
23
 
24
+ # @rbs () -> AST::ParserConfiguration
25
+ def parse_parser_configuration: () -> AST::ParserConfiguration
26
+
24
27
  # @rbs () -> AST::Include
25
28
  def parse_import: () -> AST::Include
26
29
 
@@ -0,0 +1,27 @@
1
+ # Generated from lib/ibex/frontend/parser_configuration_support.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Shares the closed parser-declaration semantics between bootstrap and generated frontends.
6
+ module ParserConfigurationSupport
7
+ private def token_string: (Token) -> String
8
+
9
+ private def fail_at: (Location, String) -> bot
10
+
11
+ private def extended_only!: (Location, String) -> void
12
+
13
+ PARSER_SETTING_VALUES: Hash[String, Array[String]]
14
+
15
+ private
16
+
17
+ # @rbs (Token key, Token value) -> AST::ParserSetting
18
+ def build_parser_setting: (Token key, Token value) -> AST::ParserSetting
19
+
20
+ # @rbs (Token keyword, Array[AST::ParserSetting] settings) -> AST::ParserConfiguration
21
+ def build_parser_configuration: (Token keyword, Array[AST::ParserSetting] settings) -> AST::ParserConfiguration
22
+
23
+ # @rbs (Array[AST::declaration] declarations) -> void
24
+ def validate_root_parser_configuration: (Array[AST::declaration] declarations) -> void
25
+ end
26
+ end
27
+ end
@@ -23,8 +23,9 @@ module Ibex
23
23
 
24
24
  private
25
25
 
26
- # @rbs (untyped value) -> untyped
27
- def deep_freeze_ast: (untyped value) -> untyped
26
+ # AST payloads are recursively heterogeneous and are only traversed to freeze them.
27
+ # @rbs (Object? value) -> Object?
28
+ def deep_freeze_ast: (Object? value) -> Object?
28
29
 
29
30
  # @rbs (IR::source_provenance entry) -> IR::source_provenance
30
31
  def copy_provenance: (IR::source_provenance entry) -> IR::source_provenance
@@ -37,8 +37,8 @@ module Ibex
37
37
  end
38
38
 
39
39
  class Token
40
- # @rbs () -> Hash[Symbol, untyped]
41
- def to_h: () -> Hash[Symbol, untyped]
40
+ # @rbs () -> Hash[Symbol, Object?]
41
+ def to_h: () -> Hash[Symbol, Object?]
42
42
  end
43
43
 
44
44
  # Advances through source text while maintaining one-based coordinates.
@@ -6,6 +6,9 @@ module Ibex
6
6
  module SourceEncoding
7
7
  # @rbs (String source, String file) -> String
8
8
  def self.validated_utf8: (String source, String file) -> String
9
+
10
+ # @rbs (String file) -> String
11
+ def self.validated_file: (String file) -> String
9
12
  end
10
13
 
11
14
  # An immutable position in grammar source.
@@ -46,8 +49,8 @@ module Ibex
46
49
  # @rbs () -> bool
47
50
  def empty?: () -> bool
48
51
 
49
- # @rbs () -> Hash[Symbol, untyped]
50
- def to_h: () -> Hash[Symbol, untyped]
52
+ # @rbs () -> Hash[Symbol, Object?]
53
+ def to_h: () -> Hash[Symbol, Object?]
51
54
  end
52
55
  end
53
56
  end
@@ -29,7 +29,7 @@ module Ibex
29
29
 
30
30
  @pragma_location: Location?
31
31
 
32
- @pragmas: Hash[String, bool]
32
+ @pragmas: Hash[String, Location]
33
33
 
34
34
  @fragment: bool?
35
35
 
@@ -50,6 +50,12 @@ module Ibex
50
50
  # @rbs () -> bool
51
51
  def cst_pragma?: () -> bool
52
52
 
53
+ # @rbs () -> Location?
54
+ def extended_pragma_location: () -> Location?
55
+
56
+ # @rbs () -> Location?
57
+ def cst_pragma_location: () -> Location?
58
+
53
59
  # @rbs (Token? token) -> String?
54
60
  def expectation: (Token? token) -> String?
55
61
 
@@ -58,6 +64,12 @@ module Ibex
58
64
  # @rbs (Token token, Array[Token] remaining) -> external_token
59
65
  def classify_identifier: (Token token, Array[Token] remaining) -> external_token
60
66
 
67
+ # @rbs (Token token) -> external_token
68
+ def begin_parser_setting: (Token token) -> external_token
69
+
70
+ # @rbs () -> external_token
71
+ def finish_parser_setting: () -> external_token
72
+
61
73
  # @rbs (Array[Token] remaining) -> external_token
62
74
  def constant_name: (Array[Token] remaining) -> external_token
63
75
 
@@ -43,6 +43,12 @@ module Ibex
43
43
  # @rbs () -> bool
44
44
  def cst_pragma?: () -> bool
45
45
 
46
+ # @rbs () -> Location?
47
+ def extended_pragma_location: () -> Location?
48
+
49
+ # @rbs () -> Location?
50
+ def cst_pragma_location: () -> Location?
51
+
46
52
  # @rbs () -> parser_section
47
53
  def section: () -> parser_section
48
54
 
data/sig/ibex/fuzz.rbs ADDED
@@ -0,0 +1,71 @@
1
+ # Generated from lib/ibex/fuzz.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ type fuzz_outcome = Symbol | [ Symbol, String, String ]
5
+
6
+ type fuzz_mismatch = { tokens: Array[String], kind: Symbol, sentence: Integer, outcomes: Hash[Symbol, fuzz_outcome], bounds: Hash[Symbol, Integer] }
7
+
8
+ type fuzz_budget = { message: String, bounds: Hash[Symbol, Integer], ?tokens: Array[String], ?phase: String }
9
+
10
+ # Bounded grammar-derived differential fuzzing without semantic execution.
11
+ class Fuzz
12
+ ALGORITHMS: Array[Symbol]
13
+
14
+ DEFAULT_MAX_ACTIONS: Integer
15
+
16
+ DEFAULT_MAX_STACK: Integer
17
+
18
+ class Mismatch < Ibex::Error
19
+ attr_reader details: fuzz_mismatch
20
+
21
+ # @rbs (fuzz_mismatch details) -> void
22
+ def initialize: (fuzz_mismatch details) -> void
23
+ end
24
+
25
+ class BudgetExceeded < Ibex::Error
26
+ attr_reader details: fuzz_budget
27
+
28
+ # @rbs (fuzz_budget details) -> void
29
+ def initialize: (fuzz_budget details) -> void
30
+ end
31
+
32
+ # @rbs (IR::Grammar grammar, ?seed: Integer, ?count: Integer, ?max_tokens: Integer,
33
+ # ?max_depth: Integer, ?max_expansions: Integer, ?max_actions: Integer, ?max_stack: Integer,
34
+ # ?coverage_guided: bool, ?path_length: Integer, ?algorithms: Array[Symbol],
35
+ # ?ielr_strategy: Symbol, ?automata: Hash[Symbol, IR::Automaton]?, ?against: (^(Array[String]) -> Symbol)?,
36
+ # ?against_description: Hash[Symbol, Object?]?) -> void
37
+ # rubocop:disable Metrics/ParameterLists
38
+ def initialize: (IR::Grammar grammar, ?seed: Integer, ?count: Integer, ?max_tokens: Integer, ?max_depth: Integer, ?max_expansions: Integer, ?max_actions: Integer, ?max_stack: Integer, ?coverage_guided: bool, ?path_length: Integer, ?algorithms: Array[Symbol], ?ielr_strategy: Symbol, ?automata: Hash[Symbol, IR::Automaton]?, ?against: (^(Array[String]) -> Symbol)?, ?against_description: Hash[Symbol, Object?]?) -> void
39
+
40
+ # @rbs () -> Hash[Symbol, Object?]
41
+ def run: () -> Hash[Symbol, Object?]
42
+
43
+ # Minimize one observed mismatch without changing its kind or outcomes.
44
+ # @rbs (Mismatch mismatch, ?max_trials: Integer) -> DeltaReducer::Result
45
+ def minimize: (Mismatch mismatch, ?max_trials: Integer) -> DeltaReducer::Result
46
+
47
+ private
48
+
49
+ # @rbs () -> Array[Array[String]]
50
+ def generate_sentences: () -> Array[Array[String]]
51
+
52
+ # @rbs (Integer sentence_count, Integer mutation_count) -> untyped
53
+ def successful_report: (Integer sentence_count, Integer mutation_count) -> untyped
54
+
55
+ # @rbs () -> Hash[Symbol, IR::Automaton]
56
+ def build_automata: () -> Hash[Symbol, IR::Automaton]
57
+
58
+ # @rbs (Array[String] tokens, kind: Symbol, sentence: Integer) -> void
59
+ def compare!: (Array[String] tokens, kind: Symbol, sentence: Integer) -> void
60
+
61
+ # @rbs (Array[String] tokens) -> Array[Array[String]]
62
+ def mutations: (Array[String] tokens) -> Array[Array[String]]
63
+
64
+ # @rbs (Array[String] tokens, kind: Symbol, sentence: Integer,
65
+ # outcomes: Hash[Symbol, fuzz_outcome]) -> bool
66
+ def mismatch_reproduced?: (Array[String] tokens, kind: Symbol, sentence: Integer, outcomes: Hash[Symbol, fuzz_outcome]) -> bool
67
+
68
+ # @rbs (Ibex::Error error) -> bool
69
+ def budget_error?: (Ibex::Error error) -> bool
70
+ end
71
+ end
@@ -22,8 +22,8 @@ module Ibex
22
22
  # @rbs (String path) -> void
23
23
  def add_access_path: (String path) -> void
24
24
 
25
- # @rbs () -> Hash[String, untyped]
26
- def to_h: () -> Hash[String, untyped]
25
+ # @rbs () -> Hash[String, String | Integer]
26
+ def to_h: () -> Hash[String, String | Integer]
27
27
 
28
28
  # Detect content changes even when size and timestamps are preserved.
29
29
  # @rbs () -> bool