ibex 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +95 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +262 -0
  40. data/docs/development.md +179 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1581 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/ja/bison-import.md +51 -0
  56. data/docs/ja/stable-api.md +53 -0
  57. data/docs/lexer-construction-profile.md +109 -0
  58. data/docs/lexer-migration.md +5 -0
  59. data/docs/maturity.md +128 -0
  60. data/docs/project-site-strategy.md +54 -0
  61. data/docs/racc-migration-evidence.md +45 -0
  62. data/docs/racc-migration.md +11 -0
  63. data/docs/release-readiness.md +126 -68
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +144 -34
  67. data/docs/status.md +43 -0
  68. data/docs/syntax-sessions.md +183 -0
  69. data/docs/table-artifact.md +125 -0
  70. data/docs/test-interactions.md +219 -0
  71. data/docs/verification-report.md +137 -0
  72. data/docs/verifier-trust-boundary.md +199 -0
  73. data/docs/workloads.md +132 -0
  74. data/lib/ibex/analysis/digraph.rb +128 -0
  75. data/lib/ibex/analysis.rb +1 -0
  76. data/lib/ibex/bison_import/importer.rb +516 -0
  77. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  78. data/lib/ibex/bison_import.rb +200 -0
  79. data/lib/ibex/bounded_subprocess.rb +171 -0
  80. data/lib/ibex/cli/ambiguity.rb +14 -5
  81. data/lib/ibex/cli/analysis.rb +134 -0
  82. data/lib/ibex/cli/bison_import.rb +121 -0
  83. data/lib/ibex/cli/config.rb +128 -0
  84. data/lib/ibex/cli/diagnostics.rb +31 -11
  85. data/lib/ibex/cli/documentation.rb +11 -8
  86. data/lib/ibex/cli/equiv.rb +169 -0
  87. data/lib/ibex/cli/error_messages.rb +11 -4
  88. data/lib/ibex/cli/explain.rb +14 -5
  89. data/lib/ibex/cli/fix.rb +203 -0
  90. data/lib/ibex/cli/formatting.rb +11 -10
  91. data/lib/ibex/cli/fuzz.rb +200 -0
  92. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  93. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  94. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  95. data/lib/ibex/cli/grammar_tests.rb +32 -14
  96. data/lib/ibex/cli/ir_tools.rb +5 -61
  97. data/lib/ibex/cli/outputs.rb +60 -33
  98. data/lib/ibex/cli/reduce.rb +202 -0
  99. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  100. data/lib/ibex/cli/samples.rb +49 -23
  101. data/lib/ibex/cli/verify.rb +116 -0
  102. data/lib/ibex/cli/watch.rb +6 -5
  103. data/lib/ibex/cli.rb +357 -56
  104. data/lib/ibex/codegen/action_locations.rb +1 -1
  105. data/lib/ibex/codegen/action_method_source.rb +5 -6
  106. data/lib/ibex/codegen/action_source.rb +3 -2
  107. data/lib/ibex/codegen/ambiguity.rb +5 -4
  108. data/lib/ibex/codegen/explain.rb +123 -55
  109. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  110. data/lib/ibex/codegen/rbs.rb +15 -7
  111. data/lib/ibex/codegen/report.rb +25 -13
  112. data/lib/ibex/codegen/ruby.rb +28 -64
  113. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  114. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  115. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  116. data/lib/ibex/configuration/explanation.rb +421 -0
  117. data/lib/ibex/configuration/inspector.rb +232 -0
  118. data/lib/ibex/configuration.rb +580 -0
  119. data/lib/ibex/coverage/collector.rb +21 -11
  120. data/lib/ibex/coverage/event_stream.rb +13 -7
  121. data/lib/ibex/coverage/report.rb +26 -18
  122. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  123. data/lib/ibex/delta_reducer.rb +99 -0
  124. data/lib/ibex/diff.rb +140 -0
  125. data/lib/ibex/equiv/machine.rb +135 -0
  126. data/lib/ibex/equiv.rb +373 -0
  127. data/lib/ibex/fix.rb +557 -0
  128. data/lib/ibex/frontend/ast.rb +22 -2
  129. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  130. data/lib/ibex/frontend/diagnostic.rb +1 -1
  131. data/lib/ibex/frontend/formatter.rb +72 -26
  132. data/lib/ibex/frontend/generated_parser.rb +147 -117
  133. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  134. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  135. data/lib/ibex/frontend/generation.rb +1 -1
  136. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  137. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  138. data/lib/ibex/frontend/regenerator.rb +1 -0
  139. data/lib/ibex/frontend/resolution.rb +2 -1
  140. data/lib/ibex/frontend/resolver.rb +1 -1
  141. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  142. data/lib/ibex/frontend/source_cursor.rb +2 -2
  143. data/lib/ibex/frontend/source_span.rb +9 -1
  144. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  145. data/lib/ibex/frontend/token_adapter.rb +10 -0
  146. data/lib/ibex/frontend.rb +1 -0
  147. data/lib/ibex/fuzz.rb +219 -0
  148. data/lib/ibex/generation_input.rb +1 -1
  149. data/lib/ibex/generation_manifest.rb +36 -25
  150. data/lib/ibex/generation_transaction.rb +1 -1
  151. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  152. data/lib/ibex/generation_transaction_validation.rb +2 -2
  153. data/lib/ibex/grammar_tests.rb +1 -1
  154. data/lib/ibex/ir/automaton_ir.rb +61 -19
  155. data/lib/ibex/ir/grammar_ir.rb +76 -45
  156. data/lib/ibex/ir/lexer_ir.rb +5 -5
  157. data/lib/ibex/ir/parser_contract.rb +135 -0
  158. data/lib/ibex/ir/serialize.rb +203 -76
  159. data/lib/ibex/ir/validator/automaton.rb +64 -34
  160. data/lib/ibex/ir/validator/base.rb +51 -33
  161. data/lib/ibex/ir/validator/grammar.rb +113 -83
  162. data/lib/ibex/ir/validator/lexer.rb +2 -2
  163. data/lib/ibex/ir/validator.rb +2 -1
  164. data/lib/ibex/ir.rb +16 -3
  165. data/lib/ibex/lalr/build_metrics.rb +50 -2
  166. data/lib/ibex/lalr/builder.rb +191 -56
  167. data/lib/ibex/lalr/conflict_search.rb +15 -4
  168. data/lib/ibex/lalr/counterexample.rb +19 -14
  169. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  170. data/lib/ibex/lalr/goto_follows.rb +229 -0
  171. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  172. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  173. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  174. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  175. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  176. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  177. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  178. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  179. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  180. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  181. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  182. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  183. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  184. data/lib/ibex/lalr.rb +52 -1
  185. data/lib/ibex/location.rb +3 -3
  186. data/lib/ibex/lsp/document_handlers.rb +9 -7
  187. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  188. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  189. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  190. data/lib/ibex/lsp/position_codec.rb +6 -2
  191. data/lib/ibex/lsp/request_handlers.rb +3 -2
  192. data/lib/ibex/lsp/request_support.rb +14 -7
  193. data/lib/ibex/lsp/server.rb +13 -11
  194. data/lib/ibex/lsp/symbol_index.rb +13 -13
  195. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  196. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  197. data/lib/ibex/lsp/transport.rb +13 -3
  198. data/lib/ibex/lsp/workspace.rb +5 -4
  199. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  200. data/lib/ibex/lsp.rb +1 -0
  201. data/lib/ibex/messages/en.yml +28 -0
  202. data/lib/ibex/messages/ja.yml +28 -0
  203. data/lib/ibex/messages.rb +68 -0
  204. data/lib/ibex/metrics.rb +175 -0
  205. data/lib/ibex/normalize/declarations.rb +2 -0
  206. data/lib/ibex/normalize/diagnostics.rb +63 -38
  207. data/lib/ibex/normalize/expander.rb +5 -4
  208. data/lib/ibex/normalize/expression.rb +8 -6
  209. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  210. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  211. data/lib/ibex/normalize/lexer.rb +3 -3
  212. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  213. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  214. data/lib/ibex/normalize/parameters.rb +31 -4
  215. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  216. data/lib/ibex/normalize.rb +10 -20
  217. data/lib/ibex/racc_migration/report.rb +6 -3
  218. data/lib/ibex/rake_task.rb +1 -1
  219. data/lib/ibex/samples.rb +43 -13
  220. data/lib/ibex/table_artifact/builder.rb +266 -0
  221. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  222. data/lib/ibex/table_artifact/document.rb +39 -0
  223. data/lib/ibex/table_artifact/executor.rb +187 -0
  224. data/lib/ibex/table_artifact/serializer.rb +57 -0
  225. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  226. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  227. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  228. data/lib/ibex/table_artifact/validator.rb +253 -0
  229. data/lib/ibex/table_artifact.rb +88 -0
  230. data/lib/ibex/table_simulation/result.rb +6 -2
  231. data/lib/ibex/table_simulation/step.rb +3 -1
  232. data/lib/ibex/tables.rb +14 -0
  233. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  234. data/lib/ibex/verification_report/builder.rb +159 -0
  235. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  236. data/lib/ibex/verification_report/logical_path.rb +68 -0
  237. data/lib/ibex/verification_report/validator.rb +329 -0
  238. data/lib/ibex/verification_report.rb +69 -0
  239. data/lib/ibex/verify/action_correspondence.rb +138 -0
  240. data/lib/ibex/verify/language_witness.rb +295 -0
  241. data/lib/ibex/verify/reference_collection.rb +190 -0
  242. data/lib/ibex/verify/result.rb +73 -0
  243. data/lib/ibex/verify/verifier.rb +598 -0
  244. data/lib/ibex/verify.rb +15 -0
  245. data/lib/ibex/version.rb +1 -1
  246. data/lib/ibex/watch/runner.rb +10 -1
  247. data/lib/ibex/watch/source_snapshot.rb +13 -8
  248. data/lib/ibex.rb +10 -0
  249. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  250. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  251. data/schema/bison-import-v1.schema.json +106 -0
  252. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  253. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  254. data/schema/construction-profile-v1.schema.json +779 -0
  255. data/schema/diff-v1.schema.json +41 -0
  256. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  257. data/schema/equiv-v1.schema.json +64 -0
  258. data/schema/error-ux-review-v1.schema.json +609 -0
  259. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  260. data/schema/error-ux-round2-v1.schema.json +519 -0
  261. data/schema/explain-v1.schema.json +63 -1
  262. data/schema/fix-v1.schema.json +64 -0
  263. data/schema/fix-v2.schema.json +66 -0
  264. data/schema/fix-v3.schema.json +101 -0
  265. data/schema/fuzz-regression-v1.schema.json +79 -0
  266. data/schema/fuzz-v1.schema.json +114 -0
  267. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  268. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  269. data/schema/grammar-ir.schema.json +271 -0
  270. data/schema/ielr-benchmark-v1.schema.json +85 -0
  271. data/schema/lexer-profile-v1.schema.json +491 -0
  272. data/schema/metrics-v1.schema.json +60 -0
  273. data/schema/reduce-v1.schema.json +22 -0
  274. data/schema/reduce-v2.schema.json +63 -0
  275. data/schema/table-artifact-v1.schema.json +377 -0
  276. data/schema/verification-report-v1.schema.json +222 -0
  277. data/schema/verify-v1.schema.json +42 -0
  278. data/sig/ibex/analysis/digraph.rbs +19 -0
  279. data/sig/ibex/bison_import/importer.rbs +140 -0
  280. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  281. data/sig/ibex/bison_import.rbs +95 -0
  282. data/sig/ibex/bounded_subprocess.rbs +76 -0
  283. data/sig/ibex/cli/ambiguity.rbs +6 -0
  284. data/sig/ibex/cli/analysis.rbs +43 -0
  285. data/sig/ibex/cli/bison_import.rbs +32 -0
  286. data/sig/ibex/cli/config.rbs +35 -0
  287. data/sig/ibex/cli/diagnostics.rbs +16 -3
  288. data/sig/ibex/cli/documentation.rbs +5 -1
  289. data/sig/ibex/cli/equiv.rbs +49 -0
  290. data/sig/ibex/cli/error_messages.rbs +6 -0
  291. data/sig/ibex/cli/explain.rbs +6 -0
  292. data/sig/ibex/cli/fix.rbs +53 -0
  293. data/sig/ibex/cli/formatting.rbs +5 -1
  294. data/sig/ibex/cli/fuzz.rbs +47 -0
  295. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  296. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  297. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  298. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  299. data/sig/ibex/cli/ir_tools.rbs +7 -19
  300. data/sig/ibex/cli/outputs.rbs +9 -3
  301. data/sig/ibex/cli/reduce.rbs +60 -0
  302. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  303. data/sig/ibex/cli/samples.rbs +8 -0
  304. data/sig/ibex/cli/verify.rbs +28 -0
  305. data/sig/ibex/cli/watch.rbs +2 -2
  306. data/sig/ibex/cli.rbs +79 -5
  307. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  308. data/sig/ibex/codegen/explain.rbs +45 -25
  309. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  310. data/sig/ibex/codegen/rbs.rbs +12 -10
  311. data/sig/ibex/codegen/report.rbs +12 -12
  312. data/sig/ibex/codegen/ruby.rbs +18 -15
  313. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  314. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  315. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  316. data/sig/ibex/configuration/explanation.rbs +195 -0
  317. data/sig/ibex/configuration/inspector.rbs +53 -0
  318. data/sig/ibex/configuration.rbs +242 -0
  319. data/sig/ibex/coverage/collector.rbs +16 -14
  320. data/sig/ibex/coverage/event_stream.rbs +12 -10
  321. data/sig/ibex/coverage/report.rbs +20 -18
  322. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  323. data/sig/ibex/delta_reducer.rbs +38 -0
  324. data/sig/ibex/diff.rbs +47 -0
  325. data/sig/ibex/equiv/machine.rbs +54 -0
  326. data/sig/ibex/equiv.rbs +129 -0
  327. data/sig/ibex/fix.rbs +138 -0
  328. data/sig/ibex/frontend/ast.rbs +33 -7
  329. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  330. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  331. data/sig/ibex/frontend/formatter.rbs +38 -30
  332. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  333. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  334. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  335. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  336. data/sig/ibex/frontend/resolution.rbs +3 -2
  337. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  338. data/sig/ibex/frontend/source_span.rbs +5 -2
  339. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  340. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  341. data/sig/ibex/fuzz.rbs +71 -0
  342. data/sig/ibex/generation_input.rbs +2 -2
  343. data/sig/ibex/generation_manifest.rbs +35 -32
  344. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  345. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  346. data/sig/ibex/grammar_tests.rbs +2 -2
  347. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  348. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  349. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  350. data/sig/ibex/ir/parser_contract.rbs +69 -0
  351. data/sig/ibex/ir/serialize.rbs +63 -28
  352. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  353. data/sig/ibex/ir/validator/base.rbs +35 -31
  354. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  355. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  356. data/sig/ibex/ir.rbs +9 -3
  357. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  358. data/sig/ibex/lalr/builder.rbs +75 -24
  359. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  360. data/sig/ibex/lalr/counterexample.rbs +17 -14
  361. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  362. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  363. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  364. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  365. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  366. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  367. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  368. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  369. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  370. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  371. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  372. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  373. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  374. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  375. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  376. data/sig/ibex/lalr.rbs +11 -1
  377. data/sig/ibex/location.rbs +6 -6
  378. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  379. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  380. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  381. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  382. data/sig/ibex/lsp/position_codec.rbs +8 -4
  383. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  384. data/sig/ibex/lsp/request_support.rbs +8 -8
  385. data/sig/ibex/lsp/server.rbs +16 -16
  386. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  387. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  388. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  389. data/sig/ibex/lsp/transport.rbs +18 -6
  390. data/sig/ibex/lsp/workspace.rbs +3 -2
  391. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  392. data/sig/ibex/messages.rbs +26 -0
  393. data/sig/ibex/metrics.rbs +50 -0
  394. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  395. data/sig/ibex/normalize/expander.rbs +2 -2
  396. data/sig/ibex/normalize/expression.rbs +10 -8
  397. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  398. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  399. data/sig/ibex/normalize/lexer.rbs +4 -4
  400. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  401. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  402. data/sig/ibex/normalize/parameters.rbs +13 -8
  403. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  404. data/sig/ibex/normalize.rbs +11 -5
  405. data/sig/ibex/racc_migration/report.rbs +8 -6
  406. data/sig/ibex/rake_task.rbs +1 -1
  407. data/sig/ibex/samples.rbs +13 -4
  408. data/sig/ibex/table_artifact/builder.rbs +93 -0
  409. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  410. data/sig/ibex/table_artifact/document.rbs +27 -0
  411. data/sig/ibex/table_artifact/executor.rbs +66 -0
  412. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  413. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  414. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  415. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  416. data/sig/ibex/table_artifact/validator.rbs +66 -0
  417. data/sig/ibex/table_artifact.rbs +32 -0
  418. data/sig/ibex/table_simulation/result.rbs +8 -4
  419. data/sig/ibex/table_simulation/step.rbs +4 -2
  420. data/sig/ibex/tables.rbs +10 -9
  421. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  422. data/sig/ibex/verification_report/builder.rbs +53 -0
  423. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  424. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  425. data/sig/ibex/verification_report/validator.rbs +114 -0
  426. data/sig/ibex/verification_report.rbs +44 -0
  427. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  428. data/sig/ibex/verify/language_witness.rbs +112 -0
  429. data/sig/ibex/verify/reference_collection.rbs +63 -0
  430. data/sig/ibex/verify/result.rbs +52 -0
  431. data/sig/ibex/verify/verifier.rbs +170 -0
  432. data/sig/ibex/verify.rbs +6 -0
  433. data/sig/ibex/watch/runner.rbs +12 -2
  434. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  435. metadata +232 -12
  436. data/lib/ibex/ir/migration.rb +0 -120
  437. data/sig/ibex/ir/migration.rbs +0 -34
@@ -0,0 +1,53 @@
1
+ # Generated from lib/ibex/configuration/inspector.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Configuration
5
+ # Converts parsed source or validated Grammar IR into static configuration facts.
6
+ # rubocop:disable Metrics/ModuleLength -- source and IR adapters share one closed evidence vocabulary.
7
+ module Inspector
8
+ # @rbs (Frontend::Resolution resolution) -> Input
9
+ def self?.from_source: (Frontend::Resolution resolution) -> Input
10
+
11
+ # @rbs (IR::Grammar grammar, path: String) -> Input
12
+ def self?.from_grammar_ir: (IR::Grammar grammar, path: String) -> Input
13
+
14
+ # @rbs (Hash[String, config_value] values, Hash[String, Location] locations,
15
+ # Hash[String, Array[Evidence]] evidence, String name, config_value value,
16
+ # Frontend::Location | Location location) -> void
17
+ def self?.add_source_fact: (Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, String name, config_value value, Frontend::Location | Location location) -> void
18
+
19
+ # @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
20
+ # Hash[String, Array[Evidence]] evidence) -> void
21
+ def self?.add_source_options: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
22
+
23
+ # @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
24
+ # Hash[String, Array[Evidence]] evidence) -> void
25
+ def self?.add_source_parser_contract: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
26
+
27
+ # @rbs (String name) -> bool?
28
+ def self?.option_value: (String name) -> bool?
29
+
30
+ # @rbs (Frontend::Location | Location location) -> Location
31
+ def self?.configuration_location: (Frontend::Location | Location location) -> Location
32
+
33
+ # @rbs (Key key, Array[[bool, Location]] occurrences, bool selected_value) -> Array[Evidence]
34
+ def self?.option_evidence: (Key key, Array[[ bool, Location ]] occurrences, bool selected_value) -> Array[Evidence]
35
+
36
+ # @rbs (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence,
37
+ # Hash[String, Recording] recordings, String name, config_value value) -> void
38
+ def self?.add_ir_fact: (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings, String name, config_value value) -> void
39
+
40
+ # @rbs (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations,
41
+ # Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
42
+ def self?.add_parser_contract: (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
43
+
44
+ # @rbs (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values,
45
+ # Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence,
46
+ # Hash[String, Recording] recordings) -> void
47
+ def self?.add_contract_entry: (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
48
+
49
+ # @rbs (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
50
+ def self?.contract_entries: (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,242 @@
1
+ # Generated from lib/ibex/configuration.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Typed, provenance-preserving effective configuration.
5
+ module Configuration
6
+ type config_value = Symbol | String | Integer | bool | nil
7
+
8
+ type json_value = String | Integer | bool | nil | Array[json_value] | Hash[String, json_value]
9
+
10
+ OWNER_NAMES: Hash[Symbol, String]
11
+
12
+ POLICIES: Array[Symbol]
13
+
14
+ ORIGIN_KINDS: Array[Symbol]
15
+
16
+ BOOLEAN_VALUES: Array[bool]
17
+
18
+ DECLARED_VALUE_UNSET: Object
19
+
20
+ OWNER_POLICIES: Hash[Symbol, Symbol]
21
+
22
+ # One closed definition of a configuration concept and its value domain.
23
+ class Key
24
+ attr_reader name: String
25
+
26
+ attr_reader type: Symbol
27
+
28
+ attr_reader default: config_value
29
+
30
+ attr_reader owner: Symbol
31
+
32
+ attr_reader policy: Symbol
33
+
34
+ attr_reader allowed_values: Array[config_value]?
35
+
36
+ attr_reader cli_option: Symbol?
37
+
38
+ # @rbs (String name, type: Symbol, default: config_value, owner: Symbol, policy: Symbol,
39
+ # ?allowed_values: Array[config_value]?, ?cli_option: Symbol?) -> void
40
+ def initialize: (String name, type: Symbol, default: config_value, owner: Symbol, policy: Symbol, ?allowed_values: Array[config_value]?, ?cli_option: Symbol?) -> void
41
+
42
+ # Validate and defensively freeze a value from an adapter or declaration.
43
+ # @rbs (config_value value) -> config_value
44
+ def validate: (config_value value) -> config_value
45
+
46
+ # @rbs () -> String
47
+ def owner_name: () -> String
48
+
49
+ private
50
+
51
+ # @rbs (String name, Symbol owner, Symbol policy) -> void
52
+ def validate_identity!: (String name, Symbol owner, Symbol policy) -> void
53
+
54
+ # @rbs (Symbol type, Symbol policy, Symbol? cli_option) -> void
55
+ def validate_shape!: (Symbol type, Symbol policy, Symbol? cli_option) -> void
56
+
57
+ # @rbs (config_value value) -> config_value
58
+ def immutable: (config_value value) -> config_value
59
+
60
+ # @rbs (config_value value) -> bool
61
+ def valid_type?: (config_value value) -> bool
62
+ end
63
+
64
+ # Where a selected configuration value came from.
65
+ class Origin
66
+ attr_reader kind: Symbol
67
+
68
+ attr_reader location: Location?
69
+
70
+ # @rbs (Symbol kind, ?location: Location?) -> void
71
+ def initialize: (Symbol kind, ?location: Location?) -> void
72
+
73
+ # @rbs () -> Hash[String, json_value]
74
+ def to_h: () -> Hash[String, json_value]
75
+
76
+ # @rbs () -> String
77
+ def label: () -> String
78
+
79
+ private
80
+
81
+ # @rbs (Location location) -> Hash[String, json_value]
82
+ def stringify_location: (Location location) -> Hash[String, json_value]
83
+ end
84
+
85
+ # A typed effective value plus the evidence needed to explain it.
86
+ class Value
87
+ attr_reader key: Key
88
+
89
+ attr_reader value: config_value
90
+
91
+ attr_reader origin: Origin
92
+
93
+ attr_reader explicit: bool
94
+
95
+ attr_reader canonical: bool
96
+
97
+ attr_reader declared_value: config_value
98
+
99
+ # @rbs (Key key, config_value value, origin: Origin, explicit: bool, canonical: bool,
100
+ # ?declared_value: config_value | Object) -> void
101
+ def initialize: (Key key, config_value value, origin: Origin, explicit: bool, canonical: bool, ?declared_value: config_value | Object) -> void
102
+
103
+ # @rbs () -> Hash[String, json_value]
104
+ def to_h: () -> Hash[String, json_value]
105
+
106
+ private
107
+
108
+ # @rbs (Key key, Origin origin, bool explicit, bool canonical, config_value | Object declared_value) -> void
109
+ def validate_provenance!: (Key key, Origin origin, bool explicit, bool canonical, config_value | Object declared_value) -> void
110
+
111
+ # @rbs (Key key, Origin origin, bool canonical) -> void
112
+ def validate_canonical_origin!: (Key key, Origin origin, bool canonical) -> void
113
+
114
+ # @rbs (Key key, Origin origin) -> void
115
+ def validate_owner_source!: (Key key, Origin origin) -> void
116
+
117
+ # @rbs (Origin origin, bool explicit) -> void
118
+ def validate_explicitness!: (Origin origin, bool explicit) -> void
119
+
120
+ # @rbs (bool canonical, config_value | Object declared_value) -> void
121
+ def validate_declared_evidence!: (bool canonical, config_value | Object declared_value) -> void
122
+
123
+ # @rbs (config_value value) -> (String | Integer | bool | nil)
124
+ def json_value: (config_value value) -> (String | Integer | bool | nil)
125
+ end
126
+
127
+ # A fixed/minimum request that contradicts the declared contract.
128
+ class Conflict < Ibex::Error
129
+ attr_reader key: Key
130
+
131
+ attr_reader declared: Value
132
+
133
+ attr_reader requested: Value
134
+
135
+ # @rbs (Key key, Value declared, Value requested) -> void
136
+ def initialize: (Key key, Value declared, Value requested) -> void
137
+ end
138
+
139
+ # Closed definitions shared by generation, grammar tests, and analyses.
140
+ module Registry
141
+ DEFINITIONS: Array[Key]
142
+
143
+ BY_NAME: Hash[String, Key]
144
+
145
+ # @rbs (String name) -> Key
146
+ def self.fetch: (String name) -> Key
147
+
148
+ # @rbs () -> Array[Key]
149
+ def self.keys: () -> Array[Key]
150
+ end
151
+
152
+ # Applies fixed/minimum override algebra and exposes deterministic evidence.
153
+ class Resolver
154
+ attr_reader values: Array[Value]
155
+
156
+ # @rbs (?keys: Array[Key], ?grammar: Hash[String, config_value], ?project: Hash[String, config_value],
157
+ # ?cli: Hash[String, config_value], ?analysis_overrides: Hash[String, config_value],
158
+ # ?locations: Hash[Symbol, Hash[String, Location]]) -> void
159
+ def initialize: (?keys: Array[Key], ?grammar: Hash[String, config_value], ?project: Hash[String, config_value], ?cli: Hash[String, config_value], ?analysis_overrides: Hash[String, config_value], ?locations: Hash[Symbol, Hash[String, Location]]) -> void
160
+
161
+ # @rbs (String name) -> Value
162
+ def fetch: (String name) -> Value
163
+
164
+ # @rbs (String name) -> config_value
165
+ def value: (String name) -> config_value
166
+
167
+ # @rbs () -> Hash[String, Array[Hash[String, json_value]]]
168
+ def to_h: () -> Hash[String, Array[Hash[String, json_value]]]
169
+
170
+ # Deterministic JSON independent of caller hash insertion order.
171
+ # @rbs () -> String
172
+ def dump: () -> String
173
+
174
+ private
175
+
176
+ # @rbs (Symbol kind, Hash[String, config_value] entries) -> void
177
+ def validate_source!: (Symbol kind, Hash[String, config_value] entries) -> void
178
+
179
+ # @rbs (Hash[Symbol, Hash[String, Location]] locations,
180
+ # Hash[Symbol, Hash[String, config_value]] sources) -> void
181
+ def validate_locations!: (Hash[Symbol, Hash[String, Location]] locations, Hash[Symbol, Hash[String, config_value]] sources) -> void
182
+
183
+ # @rbs (Key key, Hash[Symbol, Hash[String, config_value]] sources,
184
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
185
+ def resolve_key: (Key key, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
186
+
187
+ # @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
188
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
189
+ def resolve_fixed: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
190
+
191
+ # @rbs (Key key, Value? grammar, Value declared, Array[Value] requested) -> void
192
+ def reject_fixed_conflicts!: (Key key, Value? grammar, Value declared, Array[Value] requested) -> void
193
+
194
+ # @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
195
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
196
+ def resolve_minimum: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
197
+
198
+ # @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
199
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
200
+ def resolve_override: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
201
+
202
+ # @rbs (Key key, Symbol kind, Hash[Symbol, Hash[String, config_value]] sources,
203
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value?
204
+ def source_value: (Key key, Symbol kind, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value?
205
+
206
+ # @rbs (Key key, config_value raw, Symbol kind, Hash[Symbol, Hash[String, Location]] locations,
207
+ # explicit: bool) -> Value
208
+ def value_from: (Key key, config_value raw, Symbol kind, Hash[Symbol, Hash[String, Location]] locations, explicit: bool) -> Value
209
+
210
+ # @rbs (Symbol kind, String name, Hash[Symbol, Hash[String, Location]] locations) -> Origin
211
+ def origin: (Symbol kind, String name, Hash[Symbol, Hash[String, Location]] locations) -> Origin
212
+ end
213
+
214
+ # Converts the existing internal CLI option hash into canonical concepts.
215
+ class CLIAdapter
216
+ # The adapter receives the legacy CLI option map, which also contains
217
+ # operation flags and list values outside the closed configuration domain.
218
+ # It validates and converts only declared configuration options.
219
+ # @rbs (Hash[Symbol, untyped] options, ?explicit_keys: Array[Symbol]) -> void
220
+ def initialize: (Hash[Symbol, untyped] options, ?explicit_keys: Array[Symbol]) -> void
221
+
222
+ # @rbs (?grammar: Hash[String, config_value], ?locations: Hash[String, Location]) -> Resolver
223
+ def resolve: (?grammar: Hash[String, config_value], ?locations: Hash[String, Location]) -> Resolver
224
+
225
+ # Canonical configuration values selected by explicit legacy CLI options.
226
+ # Raw option spellings stop at this adapter boundary.
227
+ # @rbs () -> Hash[String, config_value]
228
+ def configuration_values: () -> Hash[String, config_value]
229
+
230
+ private
231
+
232
+ # @rbs (Symbol name, untyped value) -> config_value
233
+ def convert: (Symbol name, untyped value) -> config_value
234
+
235
+ # @rbs (untyped value) -> config_value
236
+ def convert_entry_isolation: (untyped value) -> config_value
237
+
238
+ # @rbs () -> Symbol
239
+ def convert_line_mapping: () -> Symbol
240
+ end
241
+ end
242
+ end
@@ -4,6 +4,8 @@ module Ibex
4
4
  module Coverage
5
5
  # Strictly turns one or more complete parse sessions into a coverage report.
6
6
  class Collector
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  @expected_sequence: Integer
8
10
 
9
11
  @in_session: bool
@@ -30,23 +32,23 @@ module Ibex
30
32
  # @rbs (String path) -> Report
31
33
  def self.collect_file: (String path) -> Report
32
34
 
33
- # @rbs (Hash[String, untyped] document, source: String, line: Integer) -> void
34
- def consume: (Hash[String, untyped] document, source: String, line: Integer) -> void
35
+ # @rbs (Hash[String, json_value] document, source: String, line: Integer) -> void
36
+ def consume: (Hash[String, json_value] document, source: String, line: Integer) -> void
35
37
 
36
38
  # @rbs (source: String) -> Report
37
39
  def finish: (source: String) -> Report
38
40
 
39
41
  private
40
42
 
41
- # @rbs (Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
42
- def start_session: (Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
43
+ # @rbs (Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
44
+ def start_session: (Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
43
45
 
44
- # @rbs (String event, Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
45
- def consume_session_event: (String event, Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
46
+ # @rbs (String event, Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
47
+ def consume_session_event: (String event, Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
46
48
 
47
- # @rbs (Hash[untyped, untyped] data, String source, Integer line)
49
+ # @rbs (Hash[String, json_value] data, String source, Integer line)
48
50
  # -> [[String, Integer, Integer, Integer], Integer]
49
- def session_metadata: (Hash[untyped, untyped] data, String source, Integer line) -> [ [ String, Integer, Integer, Integer ], Integer ]
51
+ def session_metadata: (Hash[String, json_value] data, String source, Integer line) -> [ [ String, Integer, Integer, Integer ], Integer ]
50
52
 
51
53
  # @rbs ([String, Integer, Integer, Integer] metadata, String source, Integer line) -> void
52
54
  def establish_metadata: ([ String, Integer, Integer, Integer ] metadata, String source, Integer line) -> void
@@ -54,14 +56,14 @@ module Ibex
54
56
  # @rbs (String source, Integer line) -> void
55
57
  def validate_metadata!: (String source, Integer line) -> void
56
58
 
57
- # @rbs (untyped id, String source, Integer line) -> void
58
- def hit_state: (untyped id, String source, Integer line) -> void
59
+ # @rbs (json_value id, String source, Integer line) -> void
60
+ def hit_state: (json_value id, String source, Integer line) -> void
59
61
 
60
- # @rbs (untyped id, String source, Integer line) -> void
61
- def hit_production: (untyped id, String source, Integer line) -> void
62
+ # @rbs (json_value id, String source, Integer line) -> void
63
+ def hit_production: (json_value id, String source, Integer line) -> void
62
64
 
63
- # @rbs (untyped id, Integer total) -> bool
64
- def valid_id?: (untyped id, Integer total) -> bool
65
+ # @rbs (json_value id, Integer total) -> bool
66
+ def valid_id?: (json_value id, Integer total) -> bool
65
67
 
66
68
  # @rbs (Hash[Integer, Integer] hits, Integer id, String kind, String source, Integer line) -> void
67
69
  def increment: (Hash[Integer, Integer] hits, Integer id, String kind, String source, Integer line) -> void
@@ -4,6 +4,8 @@ module Ibex
4
4
  module Coverage
5
5
  # Bounded reader for the public runtime-event JSON Lines protocol.
6
6
  module EventStream
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  interface _CoverageEventInput
8
10
  def gets: (Integer) -> String?
9
11
  end
@@ -16,24 +18,24 @@ module Ibex
16
18
 
17
19
  EVENT_TYPES: Array[String]
18
20
 
19
- # @rbs (String path) { (Hash[String, untyped], Integer) -> void } -> void
20
- def self.each_file: (String path) { (Hash[String, untyped], Integer) -> void } -> void
21
+ # @rbs (String path) { (Hash[String, json_value], Integer) -> void } -> void
22
+ def self.each_file: (String path) { (Hash[String, json_value], Integer) -> void } -> void
21
23
 
22
24
  # @rbs (_CoverageEventInput input, source: String)
23
- # { (Hash[String, untyped], Integer) -> void } -> void
24
- def self.each_io: (_CoverageEventInput input, source: String) { (Hash[String, untyped], Integer) -> void } -> void
25
+ # { (Hash[String, json_value], Integer) -> void } -> void
26
+ def self.each_io: (_CoverageEventInput input, source: String) { (Hash[String, json_value], Integer) -> void } -> void
25
27
 
26
28
  # @rbs (String line, String source, Integer line_number) -> void
27
29
  private def self.reject_oversized_line: (String line, String source, Integer line_number) -> void
28
30
 
29
- # @rbs (String line, String source, Integer line_number) -> Hash[String, untyped]
30
- private def self.parse_line: (String line, String source, Integer line_number) -> Hash[String, untyped]
31
+ # @rbs (String line, String source, Integer line_number) -> Hash[String, json_value]
32
+ private def self.parse_line: (String line, String source, Integer line_number) -> Hash[String, json_value]
31
33
 
32
- # @rbs (Hash[String, untyped] document, String source, Integer line_number) -> void
33
- private def self.validate_envelope: (Hash[String, untyped] document, String source, Integer line_number) -> void
34
+ # @rbs (Hash[String, json_value] document, String source, Integer line_number) -> void
35
+ private def self.validate_envelope: (Hash[String, json_value] document, String source, Integer line_number) -> void
34
36
 
35
- # @rbs (untyped value) -> bool
36
- private def self.positive_integer?: (untyped value) -> bool
37
+ # @rbs (json_value value) -> bool
38
+ private def self.positive_integer?: (json_value value) -> bool
37
39
 
38
40
  # @rbs (String source, Integer line_number, String message) -> bot
39
41
  private def self.raise_invalid: (String source, Integer line_number, String message) -> bot
@@ -4,6 +4,8 @@ module Ibex
4
4
  module Coverage
5
5
  # Versioned, mergeable runtime coverage result.
6
6
  class Report
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  IDENTIFIER: String
8
10
 
9
11
  SCHEMA_VERSION: Integer
@@ -40,31 +42,31 @@ module Ibex
40
42
  # @rbs (grammar_digest: String, table_format_version: Integer, state_count: Integer, production_count: Integer, sessions: Integer, event_count: Integer, state_hits: Hash[Integer, Integer], production_hits: Hash[Integer, Integer]) -> void
41
43
  def initialize: (grammar_digest: String, table_format_version: Integer, state_count: Integer, production_count: Integer, sessions: Integer, event_count: Integer, state_hits: Hash[Integer, Integer], production_hits: Hash[Integer, Integer]) -> void
42
44
 
43
- # @rbs () -> Hash[String, untyped]
44
- def to_h: () -> Hash[String, untyped]
45
+ # @rbs () -> Hash[String, json_value]
46
+ def to_h: () -> Hash[String, json_value]
45
47
 
46
- # @rbs (*untyped) -> String
47
- def to_json: (*untyped) -> String
48
+ # @rbs (*Object) -> String
49
+ def to_json: (*Object) -> String
48
50
 
49
51
  # @rbs (String path) -> Report
50
52
  def self.load_file: (String path) -> Report
51
53
 
52
- # @rbs (untyped value, source: String) -> Report
53
- def self.from_h: (untyped value, source: String) -> Report
54
+ # @rbs (json_value value, source: String) -> Report
55
+ def self.from_h: (json_value value, source: String) -> Report
54
56
 
55
57
  # @rbs (Array[Report] reports) -> Report
56
58
  def self.merge: (Array[Report] reports) -> Report
57
59
 
58
60
  private
59
61
 
60
- # @rbs (untyped input) -> String
61
- def validate_digest: (untyped input) -> String
62
+ # @rbs (json_value input) -> String
63
+ def validate_digest: (json_value input) -> String
62
64
 
63
- # @rbs (untyped input, String name) -> Integer
64
- def positive_integer: (untyped input, String name) -> Integer
65
+ # @rbs (json_value input, String name) -> Integer
66
+ def positive_integer: (json_value input, String name) -> Integer
65
67
 
66
- # @rbs (untyped input, String name, minimum: Integer) -> Integer
67
- def total_integer: (untyped input, String name, minimum: Integer) -> Integer
68
+ # @rbs (json_value input, String name, minimum: Integer) -> Integer
69
+ def total_integer: (json_value input, String name, minimum: Integer) -> Integer
68
70
 
69
71
  # @rbs (Hash[Integer, Integer] input, Integer total, String kind) -> Hash[Integer, Integer]
70
72
  def validate_hits: (Hash[Integer, Integer] input, Integer total, String kind) -> Hash[Integer, Integer]
@@ -75,14 +77,14 @@ module Ibex
75
77
  # @rbs () -> void
76
78
  def validate_event_bounds: () -> void
77
79
 
78
- # @rbs (untyped value, String source, String name) -> Hash[String, untyped]
79
- private def self.string_hash: (untyped value, String source, String name) -> Hash[String, untyped]
80
+ # @rbs (json_value value, String source, String name) -> Hash[String, json_value]
81
+ private def self.string_hash: (json_value value, String source, String name) -> Hash[String, json_value]
80
82
 
81
- # @rbs (untyped value, untyped total, String source, String kind) -> Hash[Integer, Integer]
82
- private def self.parse_hits: (untyped value, untyped total, String source, String kind) -> Hash[Integer, Integer]
83
+ # @rbs (json_value value, json_value total, String source, String kind) -> Hash[Integer, Integer]
84
+ private def self.parse_hits: (json_value value, json_value total, String source, String kind) -> Hash[Integer, Integer]
83
85
 
84
- # @rbs (untyped entry, untyped total, Integer previous, String source, String kind) -> [Integer, Integer]
85
- private def self.parse_hit: (untyped entry, untyped total, Integer previous, String source, String kind) -> [ Integer, Integer ]
86
+ # @rbs (json_value entry, json_value total, Integer previous, String source, String kind) -> [Integer, Integer]
87
+ private def self.parse_hit: (json_value entry, json_value total, Integer previous, String source, String kind) -> [ Integer, Integer ]
86
88
 
87
89
  # @rbs (Report expected, Report actual) -> void
88
90
  private def self.ensure_compatible: (Report expected, Report actual) -> void
@@ -4,65 +4,67 @@ module Ibex
4
4
  module Coverage
5
5
  # Dependency-free structural validation for runtime-event schema version 1.
6
6
  module RuntimeEventValidator
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  TOKEN_KEYS: Array[String]
8
10
 
9
11
  LOCATION_KEYS: Array[String]
10
12
 
11
13
  VALIDATORS: Hash[String, Symbol]
12
14
 
13
- # @rbs (Hash[String, untyped] document) -> bool
14
- def self.valid?: (Hash[String, untyped] document) -> bool
15
+ # @rbs (Hash[String, json_value] document) -> bool
16
+ def self.valid?: (Hash[String, json_value] document) -> bool
15
17
 
16
- # @rbs (Hash[String, untyped] data) -> bool
17
- private def self.valid_start?: (Hash[String, untyped] data) -> bool
18
+ # @rbs (Hash[String, json_value] data) -> bool
19
+ private def self.valid_start?: (Hash[String, json_value] data) -> bool
18
20
 
19
- # @rbs (Hash[String, untyped] data) -> bool
20
- private def self.valid_shift?: (Hash[String, untyped] data) -> bool
21
+ # @rbs (Hash[String, json_value] data) -> bool
22
+ private def self.valid_shift?: (Hash[String, json_value] data) -> bool
21
23
 
22
- # @rbs (Hash[String, untyped] data) -> bool
23
- private def self.valid_reduce?: (Hash[String, untyped] data) -> bool
24
+ # @rbs (Hash[String, json_value] data) -> bool
25
+ private def self.valid_reduce?: (Hash[String, json_value] data) -> bool
24
26
 
25
- # @rbs (Hash[String, untyped] data, reasons: Array[String]) -> bool
26
- private def self.valid_token_event?: (Hash[String, untyped] data, reasons: Array[String]) -> bool
27
+ # @rbs (Hash[String, json_value] data, reasons: Array[String]) -> bool
28
+ private def self.valid_token_event?: (Hash[String, json_value] data, reasons: Array[String]) -> bool
27
29
 
28
- # @rbs (Hash[String, untyped] data) -> bool
29
- private def self.valid_error?: (Hash[String, untyped] data) -> bool
30
+ # @rbs (Hash[String, json_value] data) -> bool
31
+ private def self.valid_error?: (Hash[String, json_value] data) -> bool
30
32
 
31
- # @rbs (Hash[String, untyped] data) -> bool
32
- private def self.valid_discard?: (Hash[String, untyped] data) -> bool
33
+ # @rbs (Hash[String, json_value] data) -> bool
34
+ private def self.valid_discard?: (Hash[String, json_value] data) -> bool
33
35
 
34
- # @rbs (Hash[String, untyped] data) -> bool
35
- private def self.valid_reject?: (Hash[String, untyped] data) -> bool
36
+ # @rbs (Hash[String, json_value] data) -> bool
37
+ private def self.valid_reject?: (Hash[String, json_value] data) -> bool
36
38
 
37
- # @rbs (Hash[String, untyped] data) -> bool
38
- private def self.valid_recover?: (Hash[String, untyped] data) -> bool
39
+ # @rbs (Hash[String, json_value] data) -> bool
40
+ private def self.valid_recover?: (Hash[String, json_value] data) -> bool
39
41
 
40
- # @rbs (Hash[String, untyped] data) -> bool
41
- private def self.valid_accept?: (Hash[String, untyped] data) -> bool
42
+ # @rbs (Hash[String, json_value] data) -> bool
43
+ private def self.valid_accept?: (Hash[String, json_value] data) -> bool
42
44
 
43
- # @rbs (Hash[String, untyped] data) -> bool
44
- private def self.valid_token_fields?: (Hash[String, untyped] data) -> bool
45
+ # @rbs (Hash[String, json_value] data) -> bool
46
+ private def self.valid_token_fields?: (Hash[String, json_value] data) -> bool
45
47
 
46
- # @rbs (untyped value) -> bool
47
- private def self.summary?: (untyped value) -> bool
48
+ # @rbs (json_value value) -> bool
49
+ private def self.summary?: (json_value value) -> bool
48
50
 
49
- # @rbs (untyped value) -> bool
50
- private def self.composite_summary?: (untyped value) -> bool
51
+ # @rbs (json_value value) -> bool
52
+ private def self.composite_summary?: (json_value value) -> bool
51
53
 
52
- # @rbs (untyped value) -> bool
53
- private def self.location?: (untyped value) -> bool
54
+ # @rbs (json_value value) -> bool
55
+ private def self.location?: (json_value value) -> bool
54
56
 
55
- # @rbs (Hash[String, untyped] data, Array[String] keys) -> bool
56
- private def self.exact_keys?: (Hash[String, untyped] data, Array[String] keys) -> bool
57
+ # @rbs (Hash[String, json_value] data, Array[String] keys) -> bool
58
+ private def self.exact_keys?: (Hash[String, json_value] data, Array[String] keys) -> bool
57
59
 
58
- # @rbs (untyped value) -> bool
59
- private def self.integer?: (untyped value) -> bool
60
+ # @rbs (json_value value) -> bool
61
+ private def self.integer?: (json_value value) -> bool
60
62
 
61
- # @rbs (untyped value) -> bool
62
- private def self.optional_integer?: (untyped value) -> bool
63
+ # @rbs (json_value value) -> bool
64
+ private def self.optional_integer?: (json_value value) -> bool
63
65
 
64
- # @rbs (untyped value) -> bool
65
- private def self.optional_string?: (untyped value) -> bool
66
+ # @rbs (json_value value) -> bool
67
+ private def self.optional_string?: (json_value value) -> bool
66
68
  end
67
69
  end
68
70
  end
@@ -0,0 +1,38 @@
1
+ # Generated from lib/ibex/delta_reducer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Deterministic, trial-bounded delta debugging over an ordered sequence.
5
+ class DeltaReducer
6
+ # Immutable outcome of a bounded reduction.
7
+ class Result
8
+ attr_reader items: Array[untyped]
9
+
10
+ attr_reader trials: Integer
11
+
12
+ attr_reader complete: bool
13
+
14
+ attr_reader original_size: Integer
15
+
16
+ # @rbs (items: Array[untyped], trials: Integer, complete: bool, original_size: Integer) -> void
17
+ def initialize: (items: Array[untyped], trials: Integer, complete: bool, original_size: Integer) -> void
18
+ end
19
+
20
+ # @rbs (?max_trials: Integer) -> void
21
+ def initialize: (?max_trials: Integer) -> void
22
+
23
+ # `failure` must return true while the failure of interest is preserved.
24
+ # @rbs [T] (Array[T] items) { (Array[T]) -> bool } -> Result
25
+ def minimize: [T] (Array[T] items) { (Array[T]) -> bool } -> Result
26
+
27
+ private
28
+
29
+ # @rbs (Integer length, Integer count) -> Array[Range[Integer]]
30
+ def partitions: (Integer length, Integer count) -> Array[Range[Integer]]
31
+
32
+ # @rbs (Integer trials) -> Integer
33
+ def checked_trial!: (Integer trials) -> Integer
34
+
35
+ # @rbs (Array[untyped] items, Integer trials, bool complete, Integer original_size) -> Result
36
+ def result: (Array[untyped] items, Integer trials, bool complete, Integer original_size) -> Result
37
+ end
38
+ end