ibex 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +100 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +274 -0
  40. data/docs/development.md +196 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1617 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/impact.md +101 -0
  56. data/docs/ja/bison-import.md +51 -0
  57. data/docs/ja/stable-api.md +53 -0
  58. data/docs/lexer-construction-profile.md +109 -0
  59. data/docs/lexer-migration.md +5 -0
  60. data/docs/maturity.md +129 -0
  61. data/docs/project-site-strategy.md +54 -0
  62. data/docs/racc-migration-evidence.md +45 -0
  63. data/docs/racc-migration.md +11 -0
  64. data/docs/release-readiness.md +126 -68
  65. data/docs/repair-semantics.md +123 -0
  66. data/docs/runtime-abi-evolution.md +310 -0
  67. data/docs/stability.md +145 -34
  68. data/docs/status.md +43 -0
  69. data/docs/syntax-sessions.md +183 -0
  70. data/docs/table-artifact.md +125 -0
  71. data/docs/test-interactions.md +219 -0
  72. data/docs/verification-report.md +137 -0
  73. data/docs/verifier-trust-boundary.md +199 -0
  74. data/docs/workloads.md +132 -0
  75. data/lib/ibex/analysis/digraph.rb +128 -0
  76. data/lib/ibex/analysis/sets.rb +14 -0
  77. data/lib/ibex/analysis.rb +1 -0
  78. data/lib/ibex/bison_import/importer.rb +516 -0
  79. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  80. data/lib/ibex/bison_import.rb +200 -0
  81. data/lib/ibex/bounded_subprocess.rb +171 -0
  82. data/lib/ibex/cli/ambiguity.rb +14 -5
  83. data/lib/ibex/cli/analysis.rb +134 -0
  84. data/lib/ibex/cli/bison_import.rb +121 -0
  85. data/lib/ibex/cli/config.rb +128 -0
  86. data/lib/ibex/cli/diagnostics.rb +31 -11
  87. data/lib/ibex/cli/documentation.rb +11 -8
  88. data/lib/ibex/cli/equiv.rb +169 -0
  89. data/lib/ibex/cli/error_messages.rb +11 -4
  90. data/lib/ibex/cli/explain.rb +14 -5
  91. data/lib/ibex/cli/fix.rb +203 -0
  92. data/lib/ibex/cli/formatting.rb +11 -10
  93. data/lib/ibex/cli/fuzz.rb +200 -0
  94. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  95. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  96. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  97. data/lib/ibex/cli/grammar_tests.rb +32 -14
  98. data/lib/ibex/cli/impact.rb +393 -0
  99. data/lib/ibex/cli/ir_tools.rb +5 -61
  100. data/lib/ibex/cli/outputs.rb +60 -33
  101. data/lib/ibex/cli/reduce.rb +202 -0
  102. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  103. data/lib/ibex/cli/samples.rb +49 -23
  104. data/lib/ibex/cli/verify.rb +116 -0
  105. data/lib/ibex/cli/watch.rb +6 -5
  106. data/lib/ibex/cli.rb +362 -56
  107. data/lib/ibex/codegen/action_locations.rb +1 -1
  108. data/lib/ibex/codegen/action_method_source.rb +5 -6
  109. data/lib/ibex/codegen/action_source.rb +3 -2
  110. data/lib/ibex/codegen/ambiguity.rb +5 -4
  111. data/lib/ibex/codegen/explain.rb +123 -55
  112. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  113. data/lib/ibex/codegen/rbs.rb +15 -7
  114. data/lib/ibex/codegen/report.rb +25 -13
  115. data/lib/ibex/codegen/ruby.rb +28 -64
  116. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  117. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  118. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  119. data/lib/ibex/configuration/explanation.rb +421 -0
  120. data/lib/ibex/configuration/inspector.rb +232 -0
  121. data/lib/ibex/configuration.rb +580 -0
  122. data/lib/ibex/coverage/collector.rb +21 -11
  123. data/lib/ibex/coverage/event_stream.rb +13 -7
  124. data/lib/ibex/coverage/report.rb +26 -18
  125. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  126. data/lib/ibex/delta_reducer.rb +99 -0
  127. data/lib/ibex/diff.rb +141 -0
  128. data/lib/ibex/equiv/machine.rb +135 -0
  129. data/lib/ibex/equiv.rb +373 -0
  130. data/lib/ibex/fix.rb +557 -0
  131. data/lib/ibex/frontend/ast.rb +22 -2
  132. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  133. data/lib/ibex/frontend/diagnostic.rb +1 -1
  134. data/lib/ibex/frontend/formatter.rb +72 -26
  135. data/lib/ibex/frontend/generated_parser.rb +147 -117
  136. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  137. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  138. data/lib/ibex/frontend/generation.rb +1 -1
  139. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  140. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  141. data/lib/ibex/frontend/regenerator.rb +1 -0
  142. data/lib/ibex/frontend/resolution.rb +2 -1
  143. data/lib/ibex/frontend/resolver.rb +1 -1
  144. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  145. data/lib/ibex/frontend/source_cursor.rb +2 -2
  146. data/lib/ibex/frontend/source_span.rb +9 -1
  147. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  148. data/lib/ibex/frontend/token_adapter.rb +10 -0
  149. data/lib/ibex/frontend.rb +1 -0
  150. data/lib/ibex/fuzz.rb +219 -0
  151. data/lib/ibex/generation_input.rb +1 -1
  152. data/lib/ibex/generation_manifest.rb +36 -25
  153. data/lib/ibex/generation_transaction.rb +1 -1
  154. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  155. data/lib/ibex/generation_transaction_validation.rb +2 -2
  156. data/lib/ibex/grammar_tests.rb +1 -1
  157. data/lib/ibex/impact/action_impact.rb +148 -0
  158. data/lib/ibex/impact/automaton_impact.rb +57 -0
  159. data/lib/ibex/impact/coverage_impact.rb +53 -0
  160. data/lib/ibex/impact/graph.rb +132 -0
  161. data/lib/ibex/impact/propagation.rb +147 -0
  162. data/lib/ibex/impact/report.rb +273 -0
  163. data/lib/ibex/impact/seeds.rb +69 -0
  164. data/lib/ibex/impact/severity.rb +139 -0
  165. data/lib/ibex/impact.rb +16 -0
  166. data/lib/ibex/ir/automaton_ir.rb +61 -19
  167. data/lib/ibex/ir/grammar_ir.rb +76 -45
  168. data/lib/ibex/ir/lexer_ir.rb +5 -5
  169. data/lib/ibex/ir/parser_contract.rb +135 -0
  170. data/lib/ibex/ir/serialize.rb +203 -76
  171. data/lib/ibex/ir/validator/automaton.rb +64 -34
  172. data/lib/ibex/ir/validator/base.rb +51 -33
  173. data/lib/ibex/ir/validator/grammar.rb +113 -83
  174. data/lib/ibex/ir/validator/lexer.rb +2 -2
  175. data/lib/ibex/ir/validator.rb +2 -1
  176. data/lib/ibex/ir.rb +16 -3
  177. data/lib/ibex/lalr/build_metrics.rb +50 -2
  178. data/lib/ibex/lalr/builder.rb +191 -56
  179. data/lib/ibex/lalr/conflict_search.rb +15 -4
  180. data/lib/ibex/lalr/counterexample.rb +19 -14
  181. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  182. data/lib/ibex/lalr/goto_follows.rb +229 -0
  183. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  184. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  185. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  186. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  187. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  188. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  189. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  190. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  191. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  192. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  193. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  194. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  195. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  196. data/lib/ibex/lalr.rb +52 -1
  197. data/lib/ibex/location.rb +3 -3
  198. data/lib/ibex/lsp/document_handlers.rb +9 -7
  199. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  200. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  201. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  202. data/lib/ibex/lsp/position_codec.rb +6 -2
  203. data/lib/ibex/lsp/request_handlers.rb +3 -2
  204. data/lib/ibex/lsp/request_support.rb +14 -7
  205. data/lib/ibex/lsp/server.rb +13 -11
  206. data/lib/ibex/lsp/symbol_index.rb +13 -13
  207. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  208. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  209. data/lib/ibex/lsp/transport.rb +13 -3
  210. data/lib/ibex/lsp/workspace.rb +5 -4
  211. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  212. data/lib/ibex/lsp.rb +1 -0
  213. data/lib/ibex/messages/en.yml +28 -0
  214. data/lib/ibex/messages/ja.yml +28 -0
  215. data/lib/ibex/messages.rb +68 -0
  216. data/lib/ibex/metrics.rb +175 -0
  217. data/lib/ibex/normalize/declarations.rb +2 -0
  218. data/lib/ibex/normalize/diagnostics.rb +63 -38
  219. data/lib/ibex/normalize/expander.rb +5 -4
  220. data/lib/ibex/normalize/expression.rb +8 -6
  221. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  222. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  223. data/lib/ibex/normalize/lexer.rb +3 -3
  224. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  225. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  226. data/lib/ibex/normalize/parameters.rb +31 -4
  227. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  228. data/lib/ibex/normalize.rb +10 -20
  229. data/lib/ibex/racc_migration/report.rb +6 -3
  230. data/lib/ibex/rake_task.rb +1 -1
  231. data/lib/ibex/samples.rb +43 -13
  232. data/lib/ibex/table_artifact/builder.rb +266 -0
  233. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  234. data/lib/ibex/table_artifact/document.rb +39 -0
  235. data/lib/ibex/table_artifact/executor.rb +187 -0
  236. data/lib/ibex/table_artifact/serializer.rb +57 -0
  237. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  238. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  239. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  240. data/lib/ibex/table_artifact/validator.rb +253 -0
  241. data/lib/ibex/table_artifact.rb +88 -0
  242. data/lib/ibex/table_simulation/result.rb +6 -2
  243. data/lib/ibex/table_simulation/step.rb +3 -1
  244. data/lib/ibex/tables.rb +14 -0
  245. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  246. data/lib/ibex/verification_report/builder.rb +159 -0
  247. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  248. data/lib/ibex/verification_report/logical_path.rb +68 -0
  249. data/lib/ibex/verification_report/validator.rb +329 -0
  250. data/lib/ibex/verification_report.rb +69 -0
  251. data/lib/ibex/verify/action_correspondence.rb +138 -0
  252. data/lib/ibex/verify/language_witness.rb +295 -0
  253. data/lib/ibex/verify/reference_collection.rb +190 -0
  254. data/lib/ibex/verify/result.rb +73 -0
  255. data/lib/ibex/verify/verifier.rb +598 -0
  256. data/lib/ibex/verify.rb +15 -0
  257. data/lib/ibex/version.rb +1 -1
  258. data/lib/ibex/watch/runner.rb +10 -1
  259. data/lib/ibex/watch/source_snapshot.rb +13 -8
  260. data/lib/ibex.rb +11 -0
  261. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  262. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  263. data/schema/bison-import-v1.schema.json +106 -0
  264. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  265. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  266. data/schema/construction-profile-v1.schema.json +779 -0
  267. data/schema/diff-v1.schema.json +41 -0
  268. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  269. data/schema/equiv-v1.schema.json +64 -0
  270. data/schema/error-ux-review-v1.schema.json +609 -0
  271. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  272. data/schema/error-ux-round2-v1.schema.json +519 -0
  273. data/schema/explain-v1.schema.json +63 -1
  274. data/schema/fix-v1.schema.json +64 -0
  275. data/schema/fix-v2.schema.json +66 -0
  276. data/schema/fix-v3.schema.json +101 -0
  277. data/schema/fuzz-regression-v1.schema.json +79 -0
  278. data/schema/fuzz-v1.schema.json +114 -0
  279. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  280. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  281. data/schema/grammar-ir.schema.json +271 -0
  282. data/schema/ielr-benchmark-v1.schema.json +85 -0
  283. data/schema/impact-v1.schema.json +208 -0
  284. data/schema/lexer-profile-v1.schema.json +491 -0
  285. data/schema/metrics-v1.schema.json +60 -0
  286. data/schema/reduce-v1.schema.json +22 -0
  287. data/schema/reduce-v2.schema.json +63 -0
  288. data/schema/table-artifact-v1.schema.json +377 -0
  289. data/schema/verification-report-v1.schema.json +222 -0
  290. data/schema/verify-v1.schema.json +42 -0
  291. data/sig/ibex/analysis/digraph.rbs +19 -0
  292. data/sig/ibex/analysis/sets.rbs +10 -0
  293. data/sig/ibex/bison_import/importer.rbs +140 -0
  294. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  295. data/sig/ibex/bison_import.rbs +95 -0
  296. data/sig/ibex/bounded_subprocess.rbs +76 -0
  297. data/sig/ibex/cli/ambiguity.rbs +6 -0
  298. data/sig/ibex/cli/analysis.rbs +43 -0
  299. data/sig/ibex/cli/bison_import.rbs +32 -0
  300. data/sig/ibex/cli/config.rbs +35 -0
  301. data/sig/ibex/cli/diagnostics.rbs +16 -3
  302. data/sig/ibex/cli/documentation.rbs +5 -1
  303. data/sig/ibex/cli/equiv.rbs +49 -0
  304. data/sig/ibex/cli/error_messages.rbs +6 -0
  305. data/sig/ibex/cli/explain.rbs +6 -0
  306. data/sig/ibex/cli/fix.rbs +53 -0
  307. data/sig/ibex/cli/formatting.rbs +5 -1
  308. data/sig/ibex/cli/fuzz.rbs +47 -0
  309. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  310. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  311. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  312. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  313. data/sig/ibex/cli/impact.rbs +95 -0
  314. data/sig/ibex/cli/ir_tools.rbs +7 -19
  315. data/sig/ibex/cli/outputs.rbs +9 -3
  316. data/sig/ibex/cli/reduce.rbs +60 -0
  317. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  318. data/sig/ibex/cli/samples.rbs +8 -0
  319. data/sig/ibex/cli/verify.rbs +28 -0
  320. data/sig/ibex/cli/watch.rbs +2 -2
  321. data/sig/ibex/cli.rbs +79 -5
  322. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  323. data/sig/ibex/codegen/explain.rbs +45 -25
  324. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  325. data/sig/ibex/codegen/rbs.rbs +12 -10
  326. data/sig/ibex/codegen/report.rbs +12 -12
  327. data/sig/ibex/codegen/ruby.rbs +18 -15
  328. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  329. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  330. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  331. data/sig/ibex/configuration/explanation.rbs +195 -0
  332. data/sig/ibex/configuration/inspector.rbs +53 -0
  333. data/sig/ibex/configuration.rbs +242 -0
  334. data/sig/ibex/coverage/collector.rbs +16 -14
  335. data/sig/ibex/coverage/event_stream.rbs +12 -10
  336. data/sig/ibex/coverage/report.rbs +20 -18
  337. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  338. data/sig/ibex/delta_reducer.rbs +38 -0
  339. data/sig/ibex/diff.rbs +47 -0
  340. data/sig/ibex/equiv/machine.rbs +54 -0
  341. data/sig/ibex/equiv.rbs +129 -0
  342. data/sig/ibex/fix.rbs +138 -0
  343. data/sig/ibex/frontend/ast.rbs +33 -7
  344. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  345. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  346. data/sig/ibex/frontend/formatter.rbs +38 -30
  347. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  348. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  349. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  350. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  351. data/sig/ibex/frontend/resolution.rbs +3 -2
  352. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  353. data/sig/ibex/frontend/source_span.rbs +5 -2
  354. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  355. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  356. data/sig/ibex/fuzz.rbs +71 -0
  357. data/sig/ibex/generation_input.rbs +2 -2
  358. data/sig/ibex/generation_manifest.rbs +35 -32
  359. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  360. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  361. data/sig/ibex/grammar_tests.rbs +2 -2
  362. data/sig/ibex/impact/action_impact.rbs +58 -0
  363. data/sig/ibex/impact/automaton_impact.rbs +37 -0
  364. data/sig/ibex/impact/coverage_impact.rbs +28 -0
  365. data/sig/ibex/impact/graph.rbs +67 -0
  366. data/sig/ibex/impact/propagation.rbs +56 -0
  367. data/sig/ibex/impact/report.rbs +107 -0
  368. data/sig/ibex/impact/seeds.rbs +36 -0
  369. data/sig/ibex/impact/severity.rbs +55 -0
  370. data/sig/ibex/impact.rbs +6 -0
  371. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  372. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  373. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  374. data/sig/ibex/ir/parser_contract.rbs +69 -0
  375. data/sig/ibex/ir/serialize.rbs +63 -28
  376. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  377. data/sig/ibex/ir/validator/base.rbs +35 -31
  378. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  379. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  380. data/sig/ibex/ir.rbs +9 -3
  381. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  382. data/sig/ibex/lalr/builder.rbs +75 -24
  383. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  384. data/sig/ibex/lalr/counterexample.rbs +17 -14
  385. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  386. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  387. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  388. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  389. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  390. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  391. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  392. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  393. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  394. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  395. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  396. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  397. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  398. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  399. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  400. data/sig/ibex/lalr.rbs +11 -1
  401. data/sig/ibex/location.rbs +6 -6
  402. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  403. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  404. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  405. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  406. data/sig/ibex/lsp/position_codec.rbs +8 -4
  407. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  408. data/sig/ibex/lsp/request_support.rbs +8 -8
  409. data/sig/ibex/lsp/server.rbs +16 -16
  410. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  411. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  412. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  413. data/sig/ibex/lsp/transport.rbs +18 -6
  414. data/sig/ibex/lsp/workspace.rbs +3 -2
  415. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  416. data/sig/ibex/messages.rbs +26 -0
  417. data/sig/ibex/metrics.rbs +50 -0
  418. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  419. data/sig/ibex/normalize/expander.rbs +2 -2
  420. data/sig/ibex/normalize/expression.rbs +10 -8
  421. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  422. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  423. data/sig/ibex/normalize/lexer.rbs +4 -4
  424. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  425. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  426. data/sig/ibex/normalize/parameters.rbs +13 -8
  427. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  428. data/sig/ibex/normalize.rbs +11 -5
  429. data/sig/ibex/racc_migration/report.rbs +8 -6
  430. data/sig/ibex/rake_task.rbs +1 -1
  431. data/sig/ibex/samples.rbs +13 -4
  432. data/sig/ibex/table_artifact/builder.rbs +93 -0
  433. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  434. data/sig/ibex/table_artifact/document.rbs +27 -0
  435. data/sig/ibex/table_artifact/executor.rbs +66 -0
  436. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  437. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  438. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  439. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  440. data/sig/ibex/table_artifact/validator.rbs +66 -0
  441. data/sig/ibex/table_artifact.rbs +32 -0
  442. data/sig/ibex/table_simulation/result.rbs +8 -4
  443. data/sig/ibex/table_simulation/step.rbs +4 -2
  444. data/sig/ibex/tables.rbs +10 -9
  445. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  446. data/sig/ibex/verification_report/builder.rbs +53 -0
  447. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  448. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  449. data/sig/ibex/verification_report/validator.rbs +114 -0
  450. data/sig/ibex/verification_report.rbs +44 -0
  451. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  452. data/sig/ibex/verify/language_witness.rbs +112 -0
  453. data/sig/ibex/verify/reference_collection.rbs +63 -0
  454. data/sig/ibex/verify/result.rbs +52 -0
  455. data/sig/ibex/verify/verifier.rbs +170 -0
  456. data/sig/ibex/verify.rbs +6 -0
  457. data/sig/ibex/watch/runner.rbs +12 -2
  458. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  459. metadata +254 -12
  460. data/lib/ibex/ir/migration.rb +0 -120
  461. data/sig/ibex/ir/migration.rbs +0 -34
@@ -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
data/sig/ibex/diff.rbs ADDED
@@ -0,0 +1,47 @@
1
+ # Generated from lib/ibex/diff.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Deterministic grammar and automaton change classification.
5
+ class Diff
6
+ # @rbs (IR::Automaton before, IR::Automaton after) -> void
7
+ def initialize: (IR::Automaton before, IR::Automaton after) -> void
8
+
9
+ # @rbs () -> Hash[Symbol, Object?]
10
+ def to_h: () -> Hash[Symbol, Object?]
11
+
12
+ private
13
+
14
+ # @rbs (Hash[String, Object?] before, Hash[String, Object?] after) -> Hash[Symbol, Object?]
15
+ def classify: (Hash[String, Object?] before, Hash[String, Object?] after) -> Hash[Symbol, Object?]
16
+
17
+ # @rbs (IR::Grammar grammar) -> Hash[String, Object?]
18
+ def symbol_records: (IR::Grammar grammar) -> Hash[String, Object?]
19
+
20
+ # @rbs (IR::Grammar grammar) -> Hash[String, Object?]
21
+ def rule_records: (IR::Grammar grammar) -> Hash[String, Object?]
22
+
23
+ # @rbs (IR::Grammar grammar, IR::Production production) -> Hash[Symbol, Object?]
24
+ def production_record: (IR::Grammar grammar, IR::Production production) -> Hash[Symbol, Object?]
25
+
26
+ # @rbs (IR::Automaton automaton) -> Hash[String, Object?]
27
+ def conflict_records: (IR::Automaton automaton) -> Hash[String, Object?]
28
+
29
+ # @rbs (IR::Grammar grammar, IR::conflict conflict) -> String
30
+ def conflict_identity: (IR::Grammar grammar, IR::conflict conflict) -> String
31
+
32
+ # @rbs (IR::Grammar grammar, Integer id) -> String
33
+ def production_shape: (IR::Grammar grammar, Integer id) -> String
34
+
35
+ # @rbs (IR::Grammar grammar, Integer id) -> String
36
+ def symbol_name: (IR::Grammar grammar, Integer id) -> String
37
+
38
+ # @rbs (IR::Grammar grammar) -> Hash[String, Object?]
39
+ def warning_records: (IR::Grammar grammar) -> Hash[String, Object?]
40
+
41
+ # @rbs () -> Hash[Symbol, Hash[Symbol, Integer]]
42
+ def numeric_metrics: () -> Hash[Symbol, Hash[Symbol, Integer]]
43
+
44
+ # @rbs (Integer before, Integer after) -> Hash[Symbol, Integer]
45
+ def change: (Integer before, Integer after) -> Hash[Symbol, Integer]
46
+ end
47
+ end
@@ -0,0 +1,54 @@
1
+ # Generated from lib/ibex/equiv/machine.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ class Equiv
5
+ # Immutable, semantic-action-free LR state-stack machine.
6
+ class Machine
7
+ class BudgetExceeded < Ibex::Error
8
+ end
9
+
10
+ # One product-search component.
11
+ class Configuration
12
+ attr_reader stack: Array[Integer]
13
+
14
+ attr_reader status: Symbol?
15
+
16
+ attr_reader actions: Integer
17
+
18
+ attr_reader reductions: Array[Integer]
19
+
20
+ # @rbs (stack: Array[Integer], status: Symbol?, actions: Integer, ?reductions: Array[Integer]) -> void
21
+ def initialize: (stack: Array[Integer], status: Symbol?, actions: Integer, ?reductions: Array[Integer]) -> void
22
+ end
23
+
24
+ # @rbs (IR::Automaton automaton, max_actions: Integer, max_stack: Integer) -> void
25
+ def initialize: (IR::Automaton automaton, max_actions: Integer, max_stack: Integer) -> void
26
+
27
+ # @rbs () -> Configuration
28
+ def start: () -> Configuration
29
+
30
+ # @rbs (Array[String] tokens) -> Configuration
31
+ def run: (Array[String] tokens) -> Configuration
32
+
33
+ # @rbs (Configuration configuration, String token) -> Configuration
34
+ def push: (Configuration configuration, String token) -> Configuration
35
+
36
+ # @rbs (Configuration configuration) -> Configuration
37
+ def finish: (Configuration configuration) -> Configuration
38
+
39
+ private
40
+
41
+ # @rbs (Configuration configuration, Integer token_id, eof: bool) -> Configuration
42
+ def consume: (Configuration configuration, Integer token_id, eof: bool) -> Configuration
43
+
44
+ # @rbs (Array[Integer] stack, Integer production_id) -> void
45
+ def apply_reduction!: (Array[Integer] stack, Integer production_id) -> void
46
+
47
+ # @rbs (Integer actions) -> void
48
+ def enforce_action_budget!: (Integer actions) -> void
49
+
50
+ # @rbs (Array[Integer] stack) -> void
51
+ def enforce_stack_budget!: (Array[Integer] stack) -> void
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,129 @@
1
+ # Generated from lib/ibex/equiv.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Bounded language comparison over two immutable parser automata.
5
+ # rubocop:disable Metrics/ClassLength -- the three comparison strategies share one report and budget contract.
6
+ class Equiv
7
+ type tree_node_signature = [ String, Array[String] ]
8
+
9
+ type tree_trace_entry = [ String, Array[String], tree_node_signature? ]
10
+
11
+ type terminal_signature = [ String, [ Symbol, Integer ]? ]
12
+
13
+ type production_signature = [ String, Array[String], String? ]
14
+
15
+ CAVEAT: String
16
+
17
+ DEFAULT_MAX_ACTIONS: Integer
18
+
19
+ DEFAULT_MAX_STACK: Integer
20
+
21
+ class Difference < Ibex::Error
22
+ attr_reader details: Hash[Symbol, Object?]
23
+
24
+ # @rbs (Hash[Symbol, Object?] details) -> void
25
+ def initialize: (Hash[Symbol, Object?] details) -> void
26
+ end
27
+
28
+ class BudgetExceeded < Ibex::Error
29
+ attr_reader details: Hash[Symbol, Object?]
30
+
31
+ # @rbs (Hash[Symbol, Object?] details) -> void
32
+ def initialize: (Hash[Symbol, Object?] details) -> void
33
+ end
34
+
35
+ # @rbs (IR::Automaton left, IR::Automaton right, ?sample_count: Integer, ?seed: Integer,
36
+ # ?max_tokens: Integer, ?max_configurations: Integer, ?max_actions: Integer, ?max_stack: Integer,
37
+ # ?rule_map: Hash[String, String]) -> void
38
+ def initialize: (IR::Automaton left, IR::Automaton right, ?sample_count: Integer, ?seed: Integer, ?max_tokens: Integer, ?max_configurations: Integer, ?max_actions: Integer, ?max_stack: Integer, ?rule_map: Hash[String, String]) -> void
39
+
40
+ # @rbs () -> Hash[Symbol, Object?]
41
+ def run: () -> Hash[Symbol, Object?]
42
+
43
+ private
44
+
45
+ # @rbs () -> Integer
46
+ def compare_samples: () -> Integer
47
+
48
+ # @rbs (IR::Grammar grammar, Integer seed) -> Array[Array[String]]
49
+ def generated_samples: (IR::Grammar grammar, Integer seed) -> Array[Array[String]]
50
+
51
+ # @rbs () -> Integer
52
+ def search_product: () -> Integer
53
+
54
+ # @rbs (Array[String] tokens, method: String) -> void
55
+ def compare_tokens!: (Array[String] tokens, method: String) -> void
56
+
57
+ # @rbs (Machine::Configuration left, Machine::Configuration right, Array[String] tokens) -> void
58
+ def compare_configurations!: (Machine::Configuration left, Machine::Configuration right, Array[String] tokens) -> void
59
+
60
+ # @rbs (Machine::Configuration left, Machine::Configuration right, Array[String] tokens, String method) -> void
61
+ def compare_results!: (Machine::Configuration left, Machine::Configuration right, Array[String] tokens, String method) -> void
62
+
63
+ # @rbs (Array[String] tokens, Symbol? left, Symbol? right, String method) -> bot
64
+ def raise_language_difference: (Array[String] tokens, Symbol? left, Symbol? right, String method) -> bot
65
+
66
+ # @rbs () -> bool
67
+ def structural_identity?: () -> bool
68
+
69
+ # @rbs () -> bool
70
+ def tree_structural_identity?: () -> bool
71
+
72
+ # @rbs (IR::Grammar grammar) -> Array[tree_node_signature]
73
+ def tree_grammar_signature: (IR::Grammar grammar) -> Array[tree_node_signature]
74
+
75
+ # @rbs (IR::node_annotation? node) -> tree_node_signature?
76
+ def node_signature: (IR::node_annotation? node) -> tree_node_signature?
77
+
78
+ # @rbs (IR::Automaton automaton, Machine::Configuration configuration, map_left: bool) -> Array[tree_trace_entry]
79
+ def tree_trace: (IR::Automaton automaton, Machine::Configuration configuration, map_left: bool) -> Array[tree_trace_entry]
80
+
81
+ # @rbs (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
82
+ def grammar_signature: (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
83
+
84
+ # @rbs (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
85
+ def recovery_signature: (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
86
+
87
+ # @rbs (IR::Grammar grammar) -> Array[terminal_signature]
88
+ def terminal_signatures: (IR::Grammar grammar) -> Array[terminal_signature]
89
+
90
+ # @rbs (IR::Grammar grammar, map_left: bool) -> Array[production_signature]
91
+ def production_signatures: (IR::Grammar grammar, map_left: bool) -> Array[production_signature]
92
+
93
+ # @rbs (IR::Grammar grammar, IR::Production production, map_left: bool) -> production_signature
94
+ def production_signature: (IR::Grammar grammar, IR::Production production, map_left: bool) -> production_signature
95
+
96
+ # @rbs (IR::Grammar grammar, Integer id) -> String
97
+ def symbol_name: (IR::Grammar grammar, Integer id) -> String
98
+
99
+ # @rbs (IR::Grammar grammar, String name, map_left: bool) -> String
100
+ def mapped_name: (IR::Grammar grammar, String name, map_left: bool) -> String
101
+
102
+ # @rbs () -> void
103
+ def validate_rule_map!: () -> void
104
+
105
+ # @rbs () -> void
106
+ def verify_inputs!: () -> void
107
+
108
+ # @rbs () -> Array[String]
109
+ def terminal_alphabet: () -> Array[String]
110
+
111
+ # @rbs (Machine::Configuration left, Machine::Configuration right) -> Array[Object?]
112
+ def product_key: (Machine::Configuration left, Machine::Configuration right) -> Array[Object?]
113
+
114
+ # @rbs (Machine::Configuration left, Machine::Configuration right) -> bool
115
+ def both_rejected?: (Machine::Configuration left, Machine::Configuration right) -> bool
116
+
117
+ # @rbs (structural: bool, samples: Integer, configurations: Integer) -> untyped
118
+ def successful_report: (structural: bool, samples: Integer, configurations: Integer) -> untyped
119
+
120
+ # @rbs () -> bool
121
+ def tree_requested?: () -> bool
122
+
123
+ # @rbs () -> Hash[Symbol, Integer]
124
+ def bounds: () -> Hash[Symbol, Integer]
125
+
126
+ # @rbs (Ibex::Error error) -> bool
127
+ def sample_budget_error?: (Ibex::Error error) -> bool
128
+ end
129
+ end
data/sig/ibex/fix.rbs ADDED
@@ -0,0 +1,138 @@
1
+ # Generated from lib/ibex/fix.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Bounded conflict-repair candidate generation and safety evaluation.
5
+ # rubocop:disable Metrics/ClassLength -- candidate generation and its three safety gates share one target identity.
6
+ class Fix
7
+ type candidate = { category: String, description: String, source: String?, algorithm: Symbol }
8
+
9
+ SCHEMA_VERSION: Integer
10
+
11
+ CATEGORIES: Array[String]
12
+
13
+ ADVICE_CATEGORIES: Array[String]
14
+
15
+ ADVICE_STATEMENT: String
16
+
17
+ class BudgetExceeded < Ibex::Error
18
+ attr_reader details: Hash[Symbol, Object?]
19
+
20
+ # @rbs (Hash[Symbol, Object?] details) -> void
21
+ def initialize: (Hash[Symbol, Object?] details) -> void
22
+ end
23
+
24
+ attr_reader sources: Hash[String, String]
25
+
26
+ # @rbs (String source, file: String, grammar: IR::Grammar, automaton: IR::Automaton, algorithm: Symbol,
27
+ # mode: Symbol, ?state: Integer?, ?conflict_index: Integer?, ?max_candidates: Integer, ?max_builds: Integer,
28
+ # ?equiv_max_tokens: Integer, ?equiv_max_configurations: Integer, ?equiv_samples: Integer,
29
+ # ?verify_max_states: Integer, ?verify_max_items: Integer,
30
+ # ?messages: ErrorMessages::Document?, ?message_file: String?) -> void
31
+ # rubocop:disable Metrics/ParameterLists
32
+ def initialize: (String source, file: String, grammar: IR::Grammar, automaton: IR::Automaton, algorithm: Symbol, mode: Symbol, ?state: Integer?, ?conflict_index: Integer?, ?max_candidates: Integer, ?max_builds: Integer, ?equiv_max_tokens: Integer, ?equiv_max_configurations: Integer, ?equiv_samples: Integer, ?verify_max_states: Integer, ?verify_max_items: Integer, ?messages: ErrorMessages::Document?, ?message_file: String?) -> void
33
+
34
+ # @rbs () -> Hash[Symbol, Object?]
35
+ def run: () -> Hash[Symbol, Object?]
36
+
37
+ private
38
+
39
+ # @rbs () -> [IR::AutomatonState, Integer, IR::conflict]
40
+ def select_target: () -> [ IR::AutomatonState, Integer, IR::conflict ]
41
+
42
+ # @rbs (IR::conflict conflict) -> Array[candidate]
43
+ def candidate_space: (IR::conflict conflict) -> Array[candidate]
44
+
45
+ # @rbs (IR::conflict conflict) -> Array[Hash[Symbol, Object?]]
46
+ def advice_space: (IR::conflict conflict) -> Array[Hash[Symbol, Object?]]
47
+
48
+ # @rbs (IR::conflict conflict) -> Array[candidate]
49
+ def precedence_declaration_candidates: (IR::conflict conflict) -> Array[candidate]
50
+
51
+ # @rbs (IR::conflict conflict) -> candidate?
52
+ def precedence_override_candidate: (IR::conflict conflict) -> candidate?
53
+
54
+ # @rbs () -> Array[candidate]
55
+ def algorithm_candidates: () -> Array[candidate]
56
+
57
+ # @rbs (IR::conflict conflict) -> candidate?
58
+ def inline_candidate: (IR::conflict conflict) -> candidate?
59
+
60
+ # @rbs (IR::conflict conflict) -> candidate
61
+ def expectation_candidate: (IR::conflict conflict) -> candidate
62
+
63
+ # @rbs (IR::conflict conflict) -> candidate?
64
+ def recovery_candidate: (IR::conflict conflict) -> candidate?
65
+
66
+ # @rbs (String category, String description, ?source: String?, ?algorithm: Symbol?) -> candidate
67
+ def candidate: (String category, String description, ?source: String?, ?algorithm: Symbol?) -> candidate
68
+
69
+ # @rbs (candidate candidate, IR::conflict target) -> Hash[Symbol, Object?]
70
+ def evaluate_candidate: (candidate candidate, IR::conflict target) -> Hash[Symbol, Object?]
71
+
72
+ # @rbs (IR::Automaton candidate, IR::conflict target) -> Hash[Symbol, String]?
73
+ def conflict_safety_failure: (IR::Automaton candidate, IR::conflict target) -> Hash[Symbol, String]?
74
+
75
+ # @rbs (IR::Automaton candidate) -> Hash[Symbol, String]?
76
+ def verification_safety_failure: (IR::Automaton candidate) -> Hash[Symbol, String]?
77
+
78
+ # @rbs (candidate candidate) -> IR::Automaton
79
+ def build_candidate: (candidate candidate) -> IR::Automaton
80
+
81
+ # @rbs (candidate candidate, Hash[Symbol, Object?] outcome, IR::conflict conflict, Integer number) ->
82
+ # Hash[Symbol, Object?]
83
+ def proposal: (candidate candidate, Hash[Symbol, Object?] outcome, IR::conflict conflict, Integer number) -> Hash[Symbol, Object?]
84
+
85
+ # @rbs (IR::Automaton candidate) -> Hash[Symbol, Object?]
86
+ def message_catalog_impact: (IR::Automaton candidate) -> Hash[Symbol, Object?]
87
+
88
+ # @rbs (candidate candidate, Hash[Symbol, Object?] outcome) -> Hash[Symbol, Object?]
89
+ def rejection: (candidate candidate, Hash[Symbol, Object?] outcome) -> Hash[Symbol, Object?]
90
+
91
+ # @rbs (IR::AutomatonState state, Integer index, IR::conflict conflict, Array[candidate] candidates,
92
+ # Array[Hash[Symbol, Object?]] proposals, Array[Hash[Symbol, Object?]] rejections,
93
+ # Array[Hash[Symbol, Object?]] advice) -> Hash[Symbol, Object?]
94
+ def report_for: (IR::AutomatonState state, Integer index, IR::conflict conflict, Array[candidate] candidates, Array[Hash[Symbol, Object?]] proposals, Array[Hash[Symbol, Object?]] rejections, Array[Hash[Symbol, Object?]] advice) -> Hash[Symbol, Object?]
95
+
96
+ # @rbs (IR::Automaton automaton) -> Array[[IR::AutomatonState, IR::conflict]]
97
+ def active_conflicts: (IR::Automaton automaton) -> Array[[ IR::AutomatonState, IR::conflict ]]
98
+
99
+ # @rbs (IR::conflict conflict) -> bool
100
+ def active_conflict?: (IR::conflict conflict) -> bool
101
+
102
+ # @rbs (IR::Automaton candidate, String target_fingerprint) -> bool
103
+ def increased_other_conflict?: (IR::Automaton candidate, String target_fingerprint) -> bool
104
+
105
+ # @rbs (IR::Automaton automaton) -> Hash[String, Integer]
106
+ def conflict_counts: (IR::Automaton automaton) -> Hash[String, Integer]
107
+
108
+ # @rbs (IR::Grammar grammar, IR::conflict conflict) -> String
109
+ def conflict_fingerprint: (IR::Grammar grammar, IR::conflict conflict) -> String
110
+
111
+ # @rbs (IR::Grammar grammar, Integer id) -> String
112
+ def production_shape: (IR::Grammar grammar, Integer id) -> String
113
+
114
+ # @rbs (IR::Grammar candidate_grammar) -> Hash[String, String]
115
+ def identity_rule_map: (IR::Grammar candidate_grammar) -> Hash[String, String]
116
+
117
+ # @rbs (String insertion) -> String
118
+ def insert_before_rule: (String insertion) -> String
119
+
120
+ # @rbs (String source, String insertion) -> String
121
+ def insert_before_rule_in: (String source, String insertion) -> String
122
+
123
+ # @rbs (Integer line_number, String suffix) -> String
124
+ def append_to_line: (Integer line_number, String suffix) -> String
125
+
126
+ # @rbs (String directive) -> String
127
+ def replace_or_insert_expectation: (String directive) -> String
128
+
129
+ # @rbs (String source, IR::conflict conflict) -> String
130
+ def update_expectation: (String source, IR::conflict conflict) -> String
131
+
132
+ # @rbs (String before, String after) -> String
133
+ def unified_diff: (String before, String after) -> String
134
+
135
+ # @rbs () -> Hash[Symbol, Integer]
136
+ def bounds: () -> Hash[Symbol, Integer]
137
+ end
138
+ end
@@ -13,7 +13,7 @@ module Ibex
13
13
  module AST
14
14
  type symbol_metadata = DisplayName | SemanticType
15
15
 
16
- type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | symbol_metadata
16
+ type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | ParserConfiguration | symbol_metadata
17
17
 
18
18
  type lexer_entry = LexerRule | LexerState
19
19
 
@@ -33,16 +33,18 @@ module Ibex
33
33
  end
34
34
 
35
35
  # Adds deterministic, recursively serializable hashes to Struct nodes.
36
- # @rbs module-self Struct[untyped]
37
- module Node : Struct[untyped]
38
- def to_h: () -> untyped
36
+ # @rbs module-self Struct[Object?]
37
+ module Node : Struct[Object?]
38
+ # @rbs () -> Hash[Symbol, untyped]
39
+ def to_h: () -> Hash[Symbol, untyped]
39
40
 
40
41
  private
41
42
 
43
+ # @rbs (untyped value) -> untyped
42
44
  def serialize: (untyped value) -> untyped
43
45
  end
44
46
 
45
- class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool?]
47
+ class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool? | Location?]
46
48
  attr_accessor class_name(): String
47
49
 
48
50
  attr_accessor superclass(): String?
@@ -59,8 +61,10 @@ module Ibex
59
61
 
60
62
  attr_accessor cst(): bool?
61
63
 
62
- def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?) -> instance
63
- | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool? }) -> instance
64
+ attr_accessor extended_loc(): Location?
65
+
66
+ def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location?) -> instance
67
+ | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location? }) -> instance
64
68
  end
65
69
 
66
70
  class Fragment < Struct[Array[declaration] | Array[Rule] | Location]
@@ -282,6 +286,28 @@ module Ibex
282
286
  | ({ ?name: String, ?code: String, ?loc: Location }) -> instance
283
287
  end
284
288
 
289
+ class ParserConfiguration < Struct[Array[ParserSetting] | Location]
290
+ attr_accessor settings(): Array[ParserSetting]
291
+
292
+ attr_accessor loc(): Location
293
+
294
+ def self.new: (?settings: Array[ParserSetting], ?loc: Location) -> instance
295
+ | ({ ?settings: Array[ParserSetting], ?loc: Location }) -> instance
296
+ end
297
+
298
+ class ParserSetting < Struct[Symbol | Location]
299
+ attr_accessor key(): Symbol
300
+
301
+ attr_accessor value(): Symbol
302
+
303
+ attr_accessor loc(): Location
304
+
305
+ def self.new: (?key: Symbol, ?value: Symbol, ?loc: Location) -> instance
306
+ | ({ ?key: Symbol, ?value: Symbol, ?loc: Location }) -> instance
307
+ end
308
+
309
+ ROOT_ONLY_DECLARATION_NAMES: Hash[Class, String]
310
+
285
311
  class Alternative < Struct[Array[item] | InlineAction? | String? | NodeAnnotation? | Location]
286
312
  attr_accessor items(): Array[item]
287
313
 
@@ -10,6 +10,8 @@ module Ibex
10
10
 
11
11
  include BootstrapParserParameters
12
12
 
13
+ include ParserConfigurationSupport
14
+
13
15
  @mode: Symbol
14
16
 
15
17
  @index: Integer
@@ -28,8 +28,8 @@ module Ibex
28
28
  # @rbs () -> String
29
29
  def to_s: () -> String
30
30
 
31
- # @rbs () -> Hash[Symbol, untyped]
32
- def to_h: () -> Hash[Symbol, untyped]
31
+ # @rbs () -> Hash[Symbol, Object?]
32
+ def to_h: () -> Hash[Symbol, Object?]
33
33
  end
34
34
 
35
35
  # Immutable output from a diagnostic parse.