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
@@ -2,7 +2,10 @@
2
2
 
3
3
  module Ibex
4
4
  # Deterministic description of one published parser generation.
5
+ # rubocop:disable Metrics/ModuleLength -- manifest schema validation is kept in one auditable unit.
5
6
  module GenerationManifest
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
6
9
  SCHEMA_VERSION: Integer
7
10
 
8
11
  IDENTIFIER: String
@@ -15,53 +18,53 @@ module Ibex
15
18
 
16
19
  ARTIFACT_KEYS: Array[String]
17
20
 
18
- # @rbs (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, untyped]) -> String
19
- def self?.render: (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, untyped]) -> String
21
+ # @rbs (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, Object?]) -> String
22
+ def self?.render: (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, Object?]) -> String
20
23
 
21
24
  # Validate the manifest shape and, by default, every published artifact digest.
22
- # @rbs (String source, ?verify_artifacts: bool) -> Hash[String, untyped]
23
- def self?.validate: (String source, ?verify_artifacts: bool) -> Hash[String, untyped]
25
+ # @rbs (String source, ?verify_artifacts: bool) -> Hash[String, json_value]
26
+ def self?.validate: (String source, ?verify_artifacts: bool) -> Hash[String, json_value]
24
27
 
25
- # @rbs (String path, ?verify_artifacts: bool) -> Hash[String, untyped]
26
- def self?.validate_file: (String path, ?verify_artifacts: bool) -> Hash[String, untyped]
28
+ # @rbs (String path, ?verify_artifacts: bool) -> Hash[String, json_value]
29
+ def self?.validate_file: (String path, ?verify_artifacts: bool) -> Hash[String, json_value]
27
30
 
28
- # @rbs (Artifact artifact) -> Hash[String, untyped]
29
- def self?.artifact_entry: (Artifact artifact) -> Hash[String, untyped]
31
+ # @rbs (Artifact artifact) -> Hash[String, json_value]
32
+ def self?.artifact_entry: (Artifact artifact) -> Hash[String, json_value]
30
33
 
31
- # @rbs (Array[Hash[String, untyped]] files) -> String
32
- def self?.input_digest: (Array[Hash[String, untyped]] files) -> String
34
+ # @rbs (Array[Hash[String, json_value]] files) -> String
35
+ def self?.input_digest: (Array[Hash[String, json_value]] files) -> String
33
36
 
34
- # @rbs (Hash[String, untyped] value) -> Hash[String, untyped]
35
- def self?.sorted_hash: (Hash[String, untyped] value) -> Hash[String, untyped]
37
+ # @rbs (Hash[String, Object?] value) -> Hash[String, Object?]
38
+ def self?.sorted_hash: (Hash[String, Object?] value) -> Hash[String, Object?]
36
39
 
37
- # @rbs (untyped document) -> void
38
- def self?.validate_document: (untyped document) -> void
40
+ # @rbs (Object? document) -> void
41
+ def self?.validate_document: (Object? document) -> void
39
42
 
40
- # @rbs (Hash[untyped, untyped] document) -> void
41
- def self?.validate_identity: (Hash[untyped, untyped] document) -> void
43
+ # @rbs (Hash[Object?, Object?] document) -> void
44
+ def self?.validate_identity: (Hash[Object?, Object?] document) -> void
42
45
 
43
- # @rbs (untyped input) -> void
44
- def self?.validate_input: (untyped input) -> void
46
+ # @rbs (Object? input) -> void
47
+ def self?.validate_input: (Object? input) -> void
45
48
 
46
- # @rbs (Array[untyped] entries, String label, ?require_kind: bool) -> void
47
- def self?.validate_entries: (Array[untyped] entries, String label, ?require_kind: bool) -> void
49
+ # @rbs (Array[Object?] entries, String label, ?require_kind: bool) -> void
50
+ def self?.validate_entries: (Array[Object?] entries, String label, ?require_kind: bool) -> void
48
51
 
49
- # @rbs (untyped entry, String label, bool require_kind) -> void
50
- def self?.validate_entry: (untyped entry, String label, bool require_kind) -> void
52
+ # @rbs (Object? entry, String label, bool require_kind) -> void
53
+ def self?.validate_entry: (Object? entry, String label, bool require_kind) -> void
51
54
 
52
- # @rbs (untyped path, String label) -> void
53
- def self?.validate_path: (untyped path, String label) -> void
55
+ # @rbs (Object? path, String label) -> void
56
+ def self?.validate_path: (Object? path, String label) -> void
54
57
 
55
- # @rbs (untyped kind, String label) -> void
56
- def self?.validate_kind: (untyped kind, String label) -> void
58
+ # @rbs (Object? kind, String label) -> void
59
+ def self?.validate_kind: (Object? kind, String label) -> void
57
60
 
58
- # @rbs (untyped digest, String label) -> void
59
- def self?.validate_digest: (untyped digest, String label) -> void
61
+ # @rbs (Object? digest, String label) -> void
62
+ def self?.validate_digest: (Object? digest, String label) -> void
60
63
 
61
- # @rbs (Hash[untyped, untyped] value, Array[String] expected, String label) -> void
62
- def self?.exact_keys!: (Hash[untyped, untyped] value, Array[String] expected, String label) -> void
64
+ # @rbs (Hash[Object?, Object?] value, Array[String] expected, String label) -> void
65
+ def self?.exact_keys!: (Hash[Object?, Object?] value, Array[String] expected, String label) -> void
63
66
 
64
- # @rbs (Array[untyped] entries) -> void
65
- def self?.verify_entries: (Array[untyped] entries) -> void
67
+ # @rbs (Array[Object?] entries) -> void
68
+ def self?.verify_entries: (Array[Object?] entries) -> void
66
69
  end
67
70
  end
@@ -21,8 +21,8 @@ module Ibex
21
21
  # @rbs () -> Array[String]
22
22
  def rollback: () -> Array[String]
23
23
 
24
- # @rbs (Hash[Symbol, untyped] record) -> void
25
- def rollback_record: (Hash[Symbol, untyped] record) -> void
24
+ # @rbs (Hash[Symbol, Object?] record) -> void
25
+ def rollback_record: (Hash[Symbol, Object?] record) -> void
26
26
 
27
27
  # @rbs (preserve_backups: bool) -> Array[String]
28
28
  def cleanup_artifacts: (preserve_backups: bool) -> Array[String]
@@ -56,8 +56,8 @@ module Ibex
56
56
  # @rbs (String phase) -> void
57
57
  def validate_current_targets!: (String phase) -> void
58
58
 
59
- # @rbs (Hash[Symbol, untyped] record, Array[String] sources, String phase) -> void
60
- def validate_current_target!: (Hash[Symbol, untyped] record, Array[String] sources, String phase) -> void
59
+ # @rbs (Hash[Symbol, Object?] record, Array[String] sources, String phase) -> void
60
+ def validate_current_target!: (Hash[Symbol, Object?] record, Array[String] sources, String phase) -> void
61
61
 
62
62
  # @rbs () -> void
63
63
  def validate_locked_targets!: () -> void
@@ -86,8 +86,8 @@ module Ibex
86
86
  # @rbs (String output) -> Array[Result]
87
87
  def decode_results: (String output) -> Array[Result]
88
88
 
89
- # @rbs (IR::grammar_test test, untyped document) -> Result
90
- def build_result: (IR::grammar_test test, untyped document) -> Result
89
+ # @rbs (IR::grammar_test test, Object? document) -> Result
90
+ def build_result: (IR::grammar_test test, Object? document) -> Result
91
91
  end
92
92
  end
93
93
  end
@@ -0,0 +1,58 @@
1
+ # Generated from lib/ibex/impact/action_impact.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # Checks only structured action metadata; action source remains opaque.
6
+ class ActionImpact
7
+ # @rbs @before: IR::Grammar
8
+ # @rbs @after: IR::Grammar
9
+ # @rbs @affected_names: Array[String]?
10
+ attr_reader findings: Array[Hash[Symbol, Object?]]
11
+
12
+ # @rbs (IR::Grammar before, IR::Grammar after, ?affected_names: Array[String]?) -> void
13
+ def initialize: (IR::Grammar before, IR::Grammar after, ?affected_names: Array[String]?) -> void
14
+
15
+ # @rbs () -> Array[Hash[Symbol, Object?]]
16
+ def to_a: () -> Array[Hash[Symbol, Object?]]
17
+
18
+ private
19
+
20
+ # @rbs () -> Array[Hash[Symbol, Object?]]
21
+ def compare: () -> Array[Hash[Symbol, Object?]]
22
+
23
+ # @rbs (String name) -> Array[Hash[Symbol, Object?]]
24
+ def compare_rule: (String name) -> Array[Hash[Symbol, Object?]]
25
+
26
+ # @rbs (Array[IR::Production] before, Array[IR::Production] after) -> Array[[IR::Production, IR::Production]]
27
+ def pair_productions: (Array[IR::Production] before, Array[IR::Production] after) -> Array[[ IR::Production, IR::Production ]]
28
+
29
+ # @rbs (Array[IR::Production] unmatched, Array[IR::Production] after) -> Array[[IR::Production, IR::Production]]
30
+ def pair_exact_productions: (Array[IR::Production] unmatched, Array[IR::Production] after) -> Array[[ IR::Production, IR::Production ]]
31
+
32
+ # @rbs (Array[IR::Production] unmatched, Array[IR::Production] after,
33
+ # Array[[IR::Production, IR::Production]]) -> Array[[IR::Production, IR::Production]]
34
+ def pair_by_location: (Array[IR::Production] unmatched, Array[IR::Production] after, Array[[ IR::Production, IR::Production ]]) -> Array[[ IR::Production, IR::Production ]]
35
+
36
+ # @rbs (IR::Grammar grammar, String name) -> Array[IR::Production]
37
+ def productions_for: (IR::Grammar grammar, String name) -> Array[IR::Production]
38
+
39
+ # @rbs (IR::Grammar grammar, IR::Production production) -> [Array[String], String?]
40
+ def production_signature: (IR::Grammar grammar, IR::Production production) -> [ Array[String], String? ]
41
+
42
+ # @rbs (IR::Production production) -> [Integer, Integer]?
43
+ def action_location_identity: (IR::Production production) -> [ Integer, Integer ]?
44
+
45
+ # @rbs (IR::Production before, IR::Production after) -> Hash[Symbol, Object?]
46
+ def finding_for: (IR::Production before, IR::Production after) -> Hash[Symbol, Object?]
47
+
48
+ # @rbs (IR::Action?, Integer, Integer) -> [String, String]
49
+ def finding_reason: (IR::Action?, Integer, Integer) -> [ String, String ]
50
+
51
+ # @rbs (IR::Action?, Integer) -> bool
52
+ def out_of_range?: (IR::Action?, Integer) -> bool
53
+
54
+ # @rbs (IR::Grammar grammar, IR::Production production) -> String
55
+ def production_name: (IR::Grammar grammar, IR::Production production) -> String
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,37 @@
1
+ # Generated from lib/ibex/impact/automaton_impact.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # Maps propagated grammar symbols to parser states and conflict changes.
6
+ class AutomatonImpact
7
+ # @rbs @automaton: IR::Automaton
8
+ # @rbs @symbol_ids: Array[Integer]
9
+ # @rbs @production_ids: Array[Integer]
10
+ attr_reader affected_states: Array[Integer]
11
+
12
+ attr_reader production_ids: Array[Integer]
13
+
14
+ attr_reader conflict_states: Array[Integer]
15
+
16
+ # @rbs (IR::Automaton automaton, Array[Integer]) -> void
17
+ def initialize: (IR::Automaton automaton, Array[Integer]) -> void
18
+
19
+ # @rbs (Hash[Symbol, Object?] diff) -> Hash[Symbol, Object?]
20
+ def conflict_changes: (Hash[Symbol, Object?] diff) -> Hash[Symbol, Object?]
21
+
22
+ # @rbs () -> Hash[Symbol, Object?]
23
+ def to_h: () -> Hash[Symbol, Object?]
24
+
25
+ private
26
+
27
+ # @rbs () -> Array[Integer]
28
+ def affected_productions: () -> Array[Integer]
29
+
30
+ # @rbs () -> Array[Integer]
31
+ def affected_state_ids: () -> Array[Integer]
32
+
33
+ # @rbs () -> Array[Integer]
34
+ def conflict_state_ids: () -> Array[Integer]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/ibex/impact/coverage_impact.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # Selects separated runtime coverage reports for affected productions.
6
+ class CoverageImpact
7
+ attr_reader status: String
8
+
9
+ attr_reader reports: Array[Hash[Symbol, Object?]]
10
+
11
+ attr_reader warnings: Array[String]
12
+
13
+ # @rbs (IR::Automaton automaton, Array[Integer], Array[[String, Coverage::Report]]) -> void
14
+ def initialize: (IR::Automaton automaton, Array[Integer], Array[[ String, Coverage::Report ]]) -> void
15
+
16
+ # @rbs () -> Hash[Symbol, Object?]
17
+ def to_h: () -> Hash[Symbol, Object?]
18
+
19
+ private
20
+
21
+ # @rbs (Array[[String, Coverage::Report]]) -> Array[Hash[Symbol, Object?]]
22
+ def select_reports: (Array[[ String, Coverage::Report ]]) -> Array[Hash[Symbol, Object?]]
23
+
24
+ # @rbs (Array[[String, Coverage::Report]]) -> String
25
+ def coverage_status: (Array[[ String, Coverage::Report ]]) -> String
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,67 @@
1
+ # Generated from lib/ibex/impact/graph.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # A grammar dependency edge with enough origin information for a witness.
6
+ class Edge
7
+ attr_reader source: Integer
8
+
9
+ attr_reader target: Integer
10
+
11
+ attr_reader kind: Symbol
12
+
13
+ attr_reader production: Integer?
14
+
15
+ attr_reader position: Integer?
16
+
17
+ # @rbs (source: Integer, target: Integer, kind: Symbol, production: Integer?, position: Integer?) -> void
18
+ def initialize: (source: Integer, target: Integer, kind: Symbol, production: Integer?, position: Integer?) -> void
19
+
20
+ # @rbs () -> Array[Integer | Symbol | nil]
21
+ def sort_key: () -> Array[Integer | Symbol | nil]
22
+ end
23
+
24
+ # Combines reference, FIRST, and FOLLOW propagation dependencies.
25
+ class Graph
26
+ EDGE_KINDS: Array[Symbol]
27
+
28
+ KIND_ALIASES: Hash[Symbol, Array[Symbol]]
29
+
30
+ attr_reader grammar: IR::Grammar
31
+
32
+ attr_reader sets: Analysis::Sets
33
+
34
+ # @rbs (IR::Grammar grammar, ?sets: Analysis::Sets) -> void
35
+ def initialize: (IR::Grammar grammar, ?sets: Analysis::Sets) -> void
36
+
37
+ # @rbs (?Symbol kind) -> untyped
38
+ def edges: (?Symbol kind) -> untyped
39
+
40
+ # @rbs (Symbol kind) -> Array[Array[Integer]]
41
+ def adjacency: (Symbol kind) -> Array[Array[Integer]]
42
+
43
+ private
44
+
45
+ # @rbs () -> Hash[Symbol, Array[Edge]]
46
+ def build_edges: () -> Hash[Symbol, Array[Edge]]
47
+
48
+ # @rbs (Hash[Symbol, Array[Edge]], IR::Production) -> void
49
+ def add_production_edges: (Hash[Symbol, Array[Edge]], IR::Production) -> void
50
+
51
+ # @rbs (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
52
+ def add_first_edge: (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
53
+
54
+ # @rbs (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
55
+ def add_follow_edges: (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
56
+
57
+ # @rbs (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
58
+ def add_follow_first_edges: (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
59
+
60
+ # @rbs (Integer source, Integer target, Symbol kind, IR::Production production, Integer position) -> Edge
61
+ def edge: (Integer source, Integer target, Symbol kind, IR::Production production, Integer position) -> Edge
62
+
63
+ # @rbs () -> void
64
+ def freeze_edges: () -> void
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,56 @@
1
+ # Generated from lib/ibex/impact/propagation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # One shortest witness for a symbol reached by dependency propagation.
6
+ class Node
7
+ attr_reader symbol: Integer
8
+
9
+ attr_reader distance: Integer
10
+
11
+ attr_reader witness: Array[Edge]
12
+
13
+ attr_reader kind: Symbol
14
+
15
+ attr_reader component: Array[Integer]
16
+
17
+ # @rbs (symbol: Integer, distance: Integer, witness: Array[Edge], kind: Symbol, component: Array[Integer]) -> void
18
+ def initialize: (symbol: Integer, distance: Integer, witness: Array[Edge], kind: Symbol, component: Array[Integer]) -> void
19
+ end
20
+
21
+ # Performs deterministic forward propagation over a dependency graph.
22
+ class Propagation
23
+ # @rbs @graph: Graph
24
+ # @rbs (Graph graph) -> void
25
+ def initialize: (Graph graph) -> void
26
+
27
+ # @rbs (Array[Integer] seeds, Symbol kind, ?max_depth: Integer?) -> Hash[Integer, Node]
28
+ def propagate: (Array[Integer] seeds, Symbol kind, ?max_depth: Integer?) -> Hash[Integer, Node]
29
+
30
+ alias call propagate
31
+
32
+ private
33
+
34
+ # @rbs (Integer?) -> void
35
+ def validate_depth: (Integer?) -> void
36
+
37
+ # @rbs (Array[Integer]) -> Array[Integer]
38
+ def normalize_seeds: (Array[Integer]) -> Array[Integer]
39
+
40
+ # @rbs (Array[Array[Integer]], Integer) -> Array[Integer]
41
+ def component_index: (Array[Array[Integer]], Integer) -> Array[Integer]
42
+
43
+ # @rbs (Array[Array[Integer]], Array[Integer], Integer) -> Array[Array[Integer]]
44
+ def component_adjacency: (Array[Array[Integer]], Array[Integer], Integer) -> Array[Array[Integer]]
45
+
46
+ # @rbs (Array[Integer], Array[Integer], Array[Array[Integer]], Integer?) -> Hash[Integer, Integer]
47
+ def traverse_components: (Array[Integer], Array[Integer], Array[Array[Integer]], Integer?) -> Hash[Integer, Integer]
48
+
49
+ # @rbs (Array[Integer], Array[Array[Integer]], Symbol) -> Hash[Integer, Array[Edge]]
50
+ def symbol_witnesses: (Array[Integer], Array[Array[Integer]], Symbol) -> Hash[Integer, Array[Edge]]
51
+
52
+ # @rbs (Hash[Integer, Integer], Array[Array[Integer]], Symbol, Hash[Integer, Array[Edge]]) -> Hash[Integer, Node]
53
+ def build_nodes: (Hash[Integer, Integer], Array[Array[Integer]], Symbol, Hash[Integer, Array[Edge]]) -> Hash[Integer, Node]
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,107 @@
1
+ # Generated from lib/ibex/impact/report.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # Builds the deterministic public impact-v1 document.
6
+ class Report
7
+ # @rbs @mode: String
8
+ # @rbs @algorithm: String
9
+ # @rbs @grammar: IR::Grammar
10
+ # @rbs @before: IR::Automaton?
11
+ # @rbs @after: IR::Automaton?
12
+ # @rbs @seeds: Array[Hash[Symbol, Object?]]
13
+ # @rbs @nodes: Hash[Integer, Node]
14
+ # @rbs @symbol_kinds: Hash[Integer, Array[String]]
15
+ # @rbs @set_changes: Hash[String, Hash[Symbol, Object?]]
16
+ # @rbs @metadata_names: Array[String]
17
+ # @rbs @automaton: Hash[Symbol, Object?]
18
+ # @rbs @actions: Array[Hash[Symbol, Object?]]
19
+ # @rbs @coverage: Hash[Symbol, Object?]
20
+ # @rbs @minimum: String
21
+ # @rbs @warnings: Array[String]
22
+ # @rbs (mode: String, algorithm: String, grammar: IR::Grammar, before: IR::Automaton?, after: IR::Automaton?,
23
+ # seeds: Array[Hash[Symbol, Object?]], nodes: Hash[Integer, Node], symbol_kinds: Hash[Integer, Array[String]],
24
+ # set_changes: Hash[String, Hash[Symbol, Object?]], automaton: Hash[Symbol, Object?],
25
+ # actions: Array[Hash[Symbol, Object?]], coverage: Hash[Symbol, Object?], ?metadata_names: Array[String],
26
+ # ?minimum: String,
27
+ # ?warnings: Array[String]) -> void
28
+ # rubocop:disable Metrics/ParameterLists
29
+ def initialize: (mode: String, algorithm: String, grammar: IR::Grammar, before: IR::Automaton?, after: IR::Automaton?, seeds: Array[Hash[Symbol, Object?]], nodes: Hash[Integer, Node], symbol_kinds: Hash[Integer, Array[String]], set_changes: Hash[String, Hash[Symbol, Object?]], automaton: Hash[Symbol, Object?], actions: Array[Hash[Symbol, Object?]], coverage: Hash[Symbol, Object?], ?metadata_names: Array[String], ?minimum: String, ?warnings: Array[String]) -> void
30
+
31
+ # @rbs (?minimum: String) -> Hash[Symbol, Object?]
32
+ def to_h: (?minimum: String) -> Hash[Symbol, Object?]
33
+
34
+ private
35
+
36
+ # @rbs (String minimum) -> Array[Hash[Symbol, Object?]]
37
+ def symbol_documents: (String minimum) -> Array[Hash[Symbol, Object?]]
38
+
39
+ # @rbs (String) -> Hash[Symbol, Object?]?
40
+ def symbol_document: (String) -> Hash[Symbol, Object?]?
41
+
42
+ # @rbs (String) -> bool
43
+ def reportable_symbol?: (String) -> bool
44
+
45
+ # @rbs (String, Integer?) -> Array[String]
46
+ def symbol_kinds_for: (String, Integer?) -> Array[String]
47
+
48
+ # @rbs (String) -> Array[String]
49
+ def change_kinds: (String) -> Array[String]
50
+
51
+ # @rbs (String, Array[String]) -> String
52
+ def document_severity: (String, Array[String]) -> String
53
+
54
+ # @rbs (Node?, String) -> Array[String]
55
+ def component_names: (Node?, String) -> Array[String]
56
+
57
+ # @rbs (String kind) -> String
58
+ def kind_severity: (String kind) -> String
59
+
60
+ # @rbs (String name, String current) -> String
61
+ def action_severity: (String name, String current) -> String
62
+
63
+ # @rbs (Hash[Symbol, Object?] record) -> String
64
+ def severity_of: (Hash[Symbol, Object?] record) -> String
65
+
66
+ # @rbs () -> Hash[Symbol, Array[String]]
67
+ def empty_change: () -> Hash[Symbol, Array[String]]
68
+
69
+ # @rbs (Array[Edge]) -> Array[Hash[Symbol, Object?]]
70
+ def witness_documents: (Array[Edge]) -> Array[Hash[Symbol, Object?]]
71
+
72
+ # @rbs (Integer) -> String
73
+ def symbol_name: (Integer) -> String
74
+
75
+ # @rbs (IR::Production?) -> String?
76
+ def production_shape: (IR::Production?) -> String?
77
+
78
+ # @rbs (Array[Hash[Symbol, Object?]], Array[Hash[Symbol, Object?]],
79
+ # Hash[Symbol, Object?]) -> Hash[Symbol, Integer]
80
+ def totals: (Array[Hash[Symbol, Object?]], Array[Hash[Symbol, Object?]], Hash[Symbol, Object?]) -> Hash[Symbol, Integer]
81
+
82
+ # @rbs (String minimum) -> Array[Hash[Symbol, Object?]]
83
+ def action_documents: (String minimum) -> Array[Hash[Symbol, Object?]]
84
+
85
+ # @rbs (Hash[Symbol, Object?] action) -> String
86
+ def action_production: (Hash[Symbol, Object?] action) -> String
87
+
88
+ # @rbs () -> Hash[Symbol, Object?]
89
+ def coverage_document: () -> Hash[Symbol, Object?]
90
+
91
+ # @rbs (Hash[Symbol, Object?] report) -> String
92
+ def coverage_report_path: (Hash[Symbol, Object?] report) -> String
93
+
94
+ # @rbs () -> Array[String]
95
+ def stable_warnings: () -> Array[String]
96
+
97
+ # @rbs (IR::location?) -> Hash[Symbol, Integer]?
98
+ def stable_location: (IR::location?) -> Hash[Symbol, Integer]?
99
+
100
+ # @rbs (IR::Automaton?) -> String?
101
+ def stable_grammar_digest: (IR::Automaton?) -> String?
102
+
103
+ # @rbs (String) -> String
104
+ def stable_path: (String) -> String
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,36 @@
1
+ # Generated from lib/ibex/impact/seeds.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # Converts command-line symbols and Diff rule ids into analysis seeds.
6
+ class Seeds
7
+ # @rbs @grammar: IR::Grammar
8
+ # @rbs @sets: Analysis::Sets
9
+ # @rbs @records: Array[Hash[Symbol, Object?]]
10
+ # @rbs @ids: Array[Integer]
11
+ attr_reader ids: Array[Integer]
12
+
13
+ attr_reader records: Array[Hash[Symbol, Object?]]
14
+
15
+ # @rbs (IR::Grammar grammar, Array[String] names, ?origin: String) -> void
16
+ def initialize: (IR::Grammar grammar, Array[String] names, ?origin: String) -> void
17
+
18
+ # @rbs (IR::Grammar grammar, Hash[Symbol, Object?] diff, ?origin: String) -> Seeds
19
+ def self.from_diff: (IR::Grammar grammar, Hash[Symbol, Object?] diff, ?origin: String) -> Seeds
20
+
21
+ private
22
+
23
+ # @rbs (Hash[Symbol, Object?] record) -> String
24
+ def seed_symbol: (Hash[Symbol, Object?] record) -> String
25
+
26
+ # @rbs (Hash[Symbol, Object?] record) -> Integer
27
+ def seed_id: (Hash[Symbol, Object?] record) -> Integer
28
+
29
+ # @rbs (String name, String origin) -> Array[Hash[Symbol, Object?]]
30
+ def resolve: (String name, String origin) -> Array[Hash[Symbol, Object?]]
31
+
32
+ # @rbs (Integer) -> bool
33
+ def nullable_boundary?: (Integer) -> bool
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,55 @@
1
+ # Generated from lib/ibex/impact/severity.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ # Stores only conflict identities so a baseline is stable across state ids.
6
+ class Baseline
7
+ # @rbs (String path) -> void
8
+ def initialize: (String path) -> void
9
+
10
+ # @rbs () -> Array[String]
11
+ def conflicts: () -> Array[String]
12
+
13
+ # @rbs (Object?) -> void
14
+ def validate_document: (Object?) -> void
15
+
16
+ # @rbs (Array[String] identities) -> void
17
+ def write: (Array[String] identities) -> void
18
+ end
19
+
20
+ # Severity ranking and CI gate evaluation for impact findings.
21
+ module Severity
22
+ LEVELS: Array[String]
23
+
24
+ FAIL_ON: Array[String]
25
+
26
+ RANK: Hash[String, Integer]
27
+
28
+ GATE_TO_KIND: Hash[String, String]
29
+
30
+ # @rbs (String left, String right) -> String
31
+ def self?.max: (String left, String right) -> String
32
+
33
+ # @rbs (Hash[String, Array[String]], Array[Hash[Symbol, String]]) -> Hash[String, String]
34
+ def self?.symbols: (Hash[String, Array[String]], Array[Hash[Symbol, String]]) -> Hash[String, String]
35
+
36
+ # @rbs (String) -> String
37
+ def self?.level_for_kind: (String) -> String
38
+
39
+ # @rbs (Hash[Symbol, Object?] report, Array[String] gates) -> bool
40
+ def self?.fails?: (Hash[Symbol, Object?] report, Array[String] gates) -> bool
41
+
42
+ # @rbs (Hash[Symbol, Object?], Array[String]) -> bool
43
+ def self?.conflict_gate?: (Hash[Symbol, Object?], Array[String]) -> bool
44
+
45
+ # @rbs (Hash[Symbol, Object?], Array[String]) -> bool
46
+ def self?.unreachable_gate?: (Hash[Symbol, Object?], Array[String]) -> bool
47
+
48
+ # @rbs (Hash[Symbol, Object?], Array[String]) -> bool
49
+ def self?.action_gate?: (Hash[Symbol, Object?], Array[String]) -> bool
50
+
51
+ # @rbs (Array[String] gates) -> Array[String]
52
+ def self?.validate_gates: (Array[String] gates) -> Array[String]
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,6 @@
1
+ # Generated from lib/ibex/impact.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Impact
5
+ end
6
+ end
@@ -13,8 +13,8 @@ module Ibex
13
13
  # @rbs (production: Integer, dot: Integer, lookaheads: Array[Integer]) -> void
14
14
  def initialize: (production: Integer, dot: Integer, lookaheads: Array[Integer]) -> void
15
15
 
16
- # @rbs (Grammar grammar) -> Hash[Symbol, untyped]
17
- def to_h: (Grammar grammar) -> Hash[Symbol, untyped]
16
+ # @rbs (Grammar grammar) -> Hash[Symbol, Object?]
17
+ def to_h: (Grammar grammar) -> Hash[Symbol, Object?]
18
18
  end
19
19
 
20
20
  # A deterministic LALR automaton state.
@@ -38,13 +38,13 @@ module Ibex
38
38
  # ?conflicts: Array[conflict]) -> void
39
39
  def initialize: (id: Integer, items: Array[AutomatonItem], transitions: Hash[Integer, Integer], actions: Hash[Integer, parser_action], gotos: Hash[Integer, Integer], ?default_action: parser_action?, ?conflicts: Array[conflict]) -> void
40
40
 
41
- # @rbs (Grammar grammar) -> Hash[Symbol, untyped]
42
- def to_h: (Grammar grammar) -> Hash[Symbol, untyped]
41
+ # @rbs (Grammar grammar) -> Hash[Symbol, Object?]
42
+ def to_h: (Grammar grammar) -> Hash[Symbol, Object?]
43
43
 
44
44
  private
45
45
 
46
- # @rbs (Hash[Integer, untyped] values, Grammar grammar) -> Hash[String, untyped]
47
- def named_keys: (Hash[Integer, untyped] values, Grammar grammar) -> Hash[String, untyped]
46
+ # @rbs (Hash[Integer, Object?] values, Grammar grammar) -> Hash[String, Object?]
47
+ def named_keys: (Hash[Integer, Object?] values, Grammar grammar) -> Hash[String, Object?]
48
48
  end
49
49
 
50
50
  # Immutable LALR automaton and its source grammar.
@@ -63,13 +63,20 @@ module Ibex
63
63
 
64
64
  attr_reader schema_version: Integer
65
65
 
66
+ attr_reader entry_construction: String
67
+
68
+ # @rbs (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary,
69
+ # ?algorithm: String, ?grammar_digest: String?, ?entry_states: Hash[String, Integer]?,
70
+ # ?entry_construction: String) -> void
71
+ def initialize: (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary, ?algorithm: String, ?grammar_digest: String?, ?entry_states: Hash[String, Integer]?, ?entry_construction: String) -> void
72
+
66
73
  # @rbs (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary,
67
- # ?algorithm: String, ?grammar_digest: String?, ?schema_version: Integer,
68
- # ?entry_states: Hash[String, Integer]?) -> void
69
- def initialize: (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary, ?algorithm: String, ?grammar_digest: String?, ?schema_version: Integer, ?entry_states: Hash[String, Integer]?) -> void
74
+ # algorithm: String, grammar_digest: String?, entry_states: Hash[String, Integer]?,
75
+ # entry_construction: String) -> void
76
+ def initialize_current: (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary, algorithm: String, grammar_digest: String?, entry_states: Hash[String, Integer]?, entry_construction: String) -> void
70
77
 
71
- # @rbs () -> Hash[Symbol, untyped]
72
- def to_h: () -> Hash[Symbol, untyped]
78
+ # @rbs () -> Hash[Symbol, Object?]
79
+ def to_h: () -> Hash[Symbol, Object?]
73
80
 
74
81
  private
75
82
 
@@ -78,6 +85,18 @@ module Ibex
78
85
 
79
86
  # @rbs (Grammar grammar) -> String
80
87
  def digest_for: (Grammar grammar) -> String
88
+
89
+ # @rbs (String value) -> String
90
+ def validate_entry_construction: (String value) -> String
91
+
92
+ # @rbs () -> void
93
+ def validate_parser_contract: () -> void
94
+
95
+ # @rbs (ParserContract contract) -> void
96
+ def validate_parser_algorithm: (ParserContract contract) -> void
97
+
98
+ # @rbs (ParserContract contract) -> void
99
+ def validate_parser_entries: (ParserContract contract) -> void
81
100
  end
82
101
  end
83
102
  end