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
@@ -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
@@ -2,7 +2,10 @@
2
2
 
3
3
  module Ibex
4
4
  # Deterministic description of one published parser generation.
5
+ # rubocop:disable Metrics/ModuleLength -- manifest schema validation is kept in one auditable unit.
5
6
  module GenerationManifest
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
6
9
  SCHEMA_VERSION: Integer
7
10
 
8
11
  IDENTIFIER: String
@@ -15,53 +18,53 @@ module Ibex
15
18
 
16
19
  ARTIFACT_KEYS: Array[String]
17
20
 
18
- # @rbs (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, untyped]) -> String
19
- def self?.render: (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, untyped]) -> String
21
+ # @rbs (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, Object?]) -> String
22
+ def self?.render: (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, Object?]) -> String
20
23
 
21
24
  # Validate the manifest shape and, by default, every published artifact digest.
22
- # @rbs (String source, ?verify_artifacts: bool) -> Hash[String, untyped]
23
- def self?.validate: (String source, ?verify_artifacts: bool) -> Hash[String, untyped]
25
+ # @rbs (String source, ?verify_artifacts: bool) -> Hash[String, json_value]
26
+ def self?.validate: (String source, ?verify_artifacts: bool) -> Hash[String, json_value]
24
27
 
25
- # @rbs (String path, ?verify_artifacts: bool) -> Hash[String, untyped]
26
- def self?.validate_file: (String path, ?verify_artifacts: bool) -> Hash[String, untyped]
28
+ # @rbs (String path, ?verify_artifacts: bool) -> Hash[String, json_value]
29
+ def self?.validate_file: (String path, ?verify_artifacts: bool) -> Hash[String, json_value]
27
30
 
28
- # @rbs (Artifact artifact) -> Hash[String, untyped]
29
- def self?.artifact_entry: (Artifact artifact) -> Hash[String, untyped]
31
+ # @rbs (Artifact artifact) -> Hash[String, json_value]
32
+ def self?.artifact_entry: (Artifact artifact) -> Hash[String, json_value]
30
33
 
31
- # @rbs (Array[Hash[String, untyped]] files) -> String
32
- def self?.input_digest: (Array[Hash[String, untyped]] files) -> String
34
+ # @rbs (Array[Hash[String, json_value]] files) -> String
35
+ def self?.input_digest: (Array[Hash[String, json_value]] files) -> String
33
36
 
34
- # @rbs (Hash[String, untyped] value) -> Hash[String, untyped]
35
- def self?.sorted_hash: (Hash[String, untyped] value) -> Hash[String, untyped]
37
+ # @rbs (Hash[String, Object?] value) -> Hash[String, Object?]
38
+ def self?.sorted_hash: (Hash[String, Object?] value) -> Hash[String, Object?]
36
39
 
37
- # @rbs (untyped document) -> void
38
- def self?.validate_document: (untyped document) -> void
40
+ # @rbs (Object? document) -> void
41
+ def self?.validate_document: (Object? document) -> void
39
42
 
40
- # @rbs (Hash[untyped, untyped] document) -> void
41
- def self?.validate_identity: (Hash[untyped, untyped] document) -> void
43
+ # @rbs (Hash[Object?, Object?] document) -> void
44
+ def self?.validate_identity: (Hash[Object?, Object?] document) -> void
42
45
 
43
- # @rbs (untyped input) -> void
44
- def self?.validate_input: (untyped input) -> void
46
+ # @rbs (Object? input) -> void
47
+ def self?.validate_input: (Object? input) -> void
45
48
 
46
- # @rbs (Array[untyped] entries, String label, ?require_kind: bool) -> void
47
- def self?.validate_entries: (Array[untyped] entries, String label, ?require_kind: bool) -> void
49
+ # @rbs (Array[Object?] entries, String label, ?require_kind: bool) -> void
50
+ def self?.validate_entries: (Array[Object?] entries, String label, ?require_kind: bool) -> void
48
51
 
49
- # @rbs (untyped entry, String label, bool require_kind) -> void
50
- def self?.validate_entry: (untyped entry, String label, bool require_kind) -> void
52
+ # @rbs (Object? entry, String label, bool require_kind) -> void
53
+ def self?.validate_entry: (Object? entry, String label, bool require_kind) -> void
51
54
 
52
- # @rbs (untyped path, String label) -> void
53
- def self?.validate_path: (untyped path, String label) -> void
55
+ # @rbs (Object? path, String label) -> void
56
+ def self?.validate_path: (Object? path, String label) -> void
54
57
 
55
- # @rbs (untyped kind, String label) -> void
56
- def self?.validate_kind: (untyped kind, String label) -> void
58
+ # @rbs (Object? kind, String label) -> void
59
+ def self?.validate_kind: (Object? kind, String label) -> void
57
60
 
58
- # @rbs (untyped digest, String label) -> void
59
- def self?.validate_digest: (untyped digest, String label) -> void
61
+ # @rbs (Object? digest, String label) -> void
62
+ def self?.validate_digest: (Object? digest, String label) -> void
60
63
 
61
- # @rbs (Hash[untyped, untyped] value, Array[String] expected, String label) -> void
62
- def self?.exact_keys!: (Hash[untyped, untyped] value, Array[String] expected, String label) -> void
64
+ # @rbs (Hash[Object?, Object?] value, Array[String] expected, String label) -> void
65
+ def self?.exact_keys!: (Hash[Object?, Object?] value, Array[String] expected, String label) -> void
63
66
 
64
- # @rbs (Array[untyped] entries) -> void
65
- def self?.verify_entries: (Array[untyped] entries) -> void
67
+ # @rbs (Array[Object?] entries) -> void
68
+ def self?.verify_entries: (Array[Object?] entries) -> void
66
69
  end
67
70
  end
@@ -21,8 +21,8 @@ module Ibex
21
21
  # @rbs () -> Array[String]
22
22
  def rollback: () -> Array[String]
23
23
 
24
- # @rbs (Hash[Symbol, untyped] record) -> void
25
- def rollback_record: (Hash[Symbol, untyped] record) -> void
24
+ # @rbs (Hash[Symbol, Object?] record) -> void
25
+ def rollback_record: (Hash[Symbol, Object?] record) -> void
26
26
 
27
27
  # @rbs (preserve_backups: bool) -> Array[String]
28
28
  def cleanup_artifacts: (preserve_backups: bool) -> Array[String]