ibex 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +95 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +262 -0
  40. data/docs/development.md +179 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1581 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/ja/bison-import.md +51 -0
  56. data/docs/ja/stable-api.md +53 -0
  57. data/docs/lexer-construction-profile.md +109 -0
  58. data/docs/lexer-migration.md +5 -0
  59. data/docs/maturity.md +128 -0
  60. data/docs/project-site-strategy.md +54 -0
  61. data/docs/racc-migration-evidence.md +45 -0
  62. data/docs/racc-migration.md +11 -0
  63. data/docs/release-readiness.md +126 -68
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +144 -34
  67. data/docs/status.md +43 -0
  68. data/docs/syntax-sessions.md +183 -0
  69. data/docs/table-artifact.md +125 -0
  70. data/docs/test-interactions.md +219 -0
  71. data/docs/verification-report.md +137 -0
  72. data/docs/verifier-trust-boundary.md +199 -0
  73. data/docs/workloads.md +132 -0
  74. data/lib/ibex/analysis/digraph.rb +128 -0
  75. data/lib/ibex/analysis.rb +1 -0
  76. data/lib/ibex/bison_import/importer.rb +516 -0
  77. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  78. data/lib/ibex/bison_import.rb +200 -0
  79. data/lib/ibex/bounded_subprocess.rb +171 -0
  80. data/lib/ibex/cli/ambiguity.rb +14 -5
  81. data/lib/ibex/cli/analysis.rb +134 -0
  82. data/lib/ibex/cli/bison_import.rb +121 -0
  83. data/lib/ibex/cli/config.rb +128 -0
  84. data/lib/ibex/cli/diagnostics.rb +31 -11
  85. data/lib/ibex/cli/documentation.rb +11 -8
  86. data/lib/ibex/cli/equiv.rb +169 -0
  87. data/lib/ibex/cli/error_messages.rb +11 -4
  88. data/lib/ibex/cli/explain.rb +14 -5
  89. data/lib/ibex/cli/fix.rb +203 -0
  90. data/lib/ibex/cli/formatting.rb +11 -10
  91. data/lib/ibex/cli/fuzz.rb +200 -0
  92. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  93. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  94. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  95. data/lib/ibex/cli/grammar_tests.rb +32 -14
  96. data/lib/ibex/cli/ir_tools.rb +5 -61
  97. data/lib/ibex/cli/outputs.rb +60 -33
  98. data/lib/ibex/cli/reduce.rb +202 -0
  99. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  100. data/lib/ibex/cli/samples.rb +49 -23
  101. data/lib/ibex/cli/verify.rb +116 -0
  102. data/lib/ibex/cli/watch.rb +6 -5
  103. data/lib/ibex/cli.rb +357 -56
  104. data/lib/ibex/codegen/action_locations.rb +1 -1
  105. data/lib/ibex/codegen/action_method_source.rb +5 -6
  106. data/lib/ibex/codegen/action_source.rb +3 -2
  107. data/lib/ibex/codegen/ambiguity.rb +5 -4
  108. data/lib/ibex/codegen/explain.rb +123 -55
  109. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  110. data/lib/ibex/codegen/rbs.rb +15 -7
  111. data/lib/ibex/codegen/report.rb +25 -13
  112. data/lib/ibex/codegen/ruby.rb +28 -64
  113. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  114. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  115. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  116. data/lib/ibex/configuration/explanation.rb +421 -0
  117. data/lib/ibex/configuration/inspector.rb +232 -0
  118. data/lib/ibex/configuration.rb +580 -0
  119. data/lib/ibex/coverage/collector.rb +21 -11
  120. data/lib/ibex/coverage/event_stream.rb +13 -7
  121. data/lib/ibex/coverage/report.rb +26 -18
  122. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  123. data/lib/ibex/delta_reducer.rb +99 -0
  124. data/lib/ibex/diff.rb +140 -0
  125. data/lib/ibex/equiv/machine.rb +135 -0
  126. data/lib/ibex/equiv.rb +373 -0
  127. data/lib/ibex/fix.rb +557 -0
  128. data/lib/ibex/frontend/ast.rb +22 -2
  129. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  130. data/lib/ibex/frontend/diagnostic.rb +1 -1
  131. data/lib/ibex/frontend/formatter.rb +72 -26
  132. data/lib/ibex/frontend/generated_parser.rb +147 -117
  133. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  134. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  135. data/lib/ibex/frontend/generation.rb +1 -1
  136. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  137. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  138. data/lib/ibex/frontend/regenerator.rb +1 -0
  139. data/lib/ibex/frontend/resolution.rb +2 -1
  140. data/lib/ibex/frontend/resolver.rb +1 -1
  141. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  142. data/lib/ibex/frontend/source_cursor.rb +2 -2
  143. data/lib/ibex/frontend/source_span.rb +9 -1
  144. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  145. data/lib/ibex/frontend/token_adapter.rb +10 -0
  146. data/lib/ibex/frontend.rb +1 -0
  147. data/lib/ibex/fuzz.rb +219 -0
  148. data/lib/ibex/generation_input.rb +1 -1
  149. data/lib/ibex/generation_manifest.rb +36 -25
  150. data/lib/ibex/generation_transaction.rb +1 -1
  151. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  152. data/lib/ibex/generation_transaction_validation.rb +2 -2
  153. data/lib/ibex/grammar_tests.rb +1 -1
  154. data/lib/ibex/ir/automaton_ir.rb +61 -19
  155. data/lib/ibex/ir/grammar_ir.rb +76 -45
  156. data/lib/ibex/ir/lexer_ir.rb +5 -5
  157. data/lib/ibex/ir/parser_contract.rb +135 -0
  158. data/lib/ibex/ir/serialize.rb +203 -76
  159. data/lib/ibex/ir/validator/automaton.rb +64 -34
  160. data/lib/ibex/ir/validator/base.rb +51 -33
  161. data/lib/ibex/ir/validator/grammar.rb +113 -83
  162. data/lib/ibex/ir/validator/lexer.rb +2 -2
  163. data/lib/ibex/ir/validator.rb +2 -1
  164. data/lib/ibex/ir.rb +16 -3
  165. data/lib/ibex/lalr/build_metrics.rb +50 -2
  166. data/lib/ibex/lalr/builder.rb +191 -56
  167. data/lib/ibex/lalr/conflict_search.rb +15 -4
  168. data/lib/ibex/lalr/counterexample.rb +19 -14
  169. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  170. data/lib/ibex/lalr/goto_follows.rb +229 -0
  171. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  172. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  173. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  174. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  175. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  176. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  177. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  178. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  179. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  180. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  181. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  182. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  183. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  184. data/lib/ibex/lalr.rb +52 -1
  185. data/lib/ibex/location.rb +3 -3
  186. data/lib/ibex/lsp/document_handlers.rb +9 -7
  187. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  188. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  189. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  190. data/lib/ibex/lsp/position_codec.rb +6 -2
  191. data/lib/ibex/lsp/request_handlers.rb +3 -2
  192. data/lib/ibex/lsp/request_support.rb +14 -7
  193. data/lib/ibex/lsp/server.rb +13 -11
  194. data/lib/ibex/lsp/symbol_index.rb +13 -13
  195. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  196. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  197. data/lib/ibex/lsp/transport.rb +13 -3
  198. data/lib/ibex/lsp/workspace.rb +5 -4
  199. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  200. data/lib/ibex/lsp.rb +1 -0
  201. data/lib/ibex/messages/en.yml +28 -0
  202. data/lib/ibex/messages/ja.yml +28 -0
  203. data/lib/ibex/messages.rb +68 -0
  204. data/lib/ibex/metrics.rb +175 -0
  205. data/lib/ibex/normalize/declarations.rb +2 -0
  206. data/lib/ibex/normalize/diagnostics.rb +63 -38
  207. data/lib/ibex/normalize/expander.rb +5 -4
  208. data/lib/ibex/normalize/expression.rb +8 -6
  209. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  210. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  211. data/lib/ibex/normalize/lexer.rb +3 -3
  212. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  213. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  214. data/lib/ibex/normalize/parameters.rb +31 -4
  215. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  216. data/lib/ibex/normalize.rb +10 -20
  217. data/lib/ibex/racc_migration/report.rb +6 -3
  218. data/lib/ibex/rake_task.rb +1 -1
  219. data/lib/ibex/samples.rb +43 -13
  220. data/lib/ibex/table_artifact/builder.rb +266 -0
  221. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  222. data/lib/ibex/table_artifact/document.rb +39 -0
  223. data/lib/ibex/table_artifact/executor.rb +187 -0
  224. data/lib/ibex/table_artifact/serializer.rb +57 -0
  225. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  226. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  227. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  228. data/lib/ibex/table_artifact/validator.rb +253 -0
  229. data/lib/ibex/table_artifact.rb +88 -0
  230. data/lib/ibex/table_simulation/result.rb +6 -2
  231. data/lib/ibex/table_simulation/step.rb +3 -1
  232. data/lib/ibex/tables.rb +14 -0
  233. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  234. data/lib/ibex/verification_report/builder.rb +159 -0
  235. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  236. data/lib/ibex/verification_report/logical_path.rb +68 -0
  237. data/lib/ibex/verification_report/validator.rb +329 -0
  238. data/lib/ibex/verification_report.rb +69 -0
  239. data/lib/ibex/verify/action_correspondence.rb +138 -0
  240. data/lib/ibex/verify/language_witness.rb +295 -0
  241. data/lib/ibex/verify/reference_collection.rb +190 -0
  242. data/lib/ibex/verify/result.rb +73 -0
  243. data/lib/ibex/verify/verifier.rb +598 -0
  244. data/lib/ibex/verify.rb +15 -0
  245. data/lib/ibex/version.rb +1 -1
  246. data/lib/ibex/watch/runner.rb +10 -1
  247. data/lib/ibex/watch/source_snapshot.rb +13 -8
  248. data/lib/ibex.rb +10 -0
  249. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  250. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  251. data/schema/bison-import-v1.schema.json +106 -0
  252. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  253. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  254. data/schema/construction-profile-v1.schema.json +779 -0
  255. data/schema/diff-v1.schema.json +41 -0
  256. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  257. data/schema/equiv-v1.schema.json +64 -0
  258. data/schema/error-ux-review-v1.schema.json +609 -0
  259. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  260. data/schema/error-ux-round2-v1.schema.json +519 -0
  261. data/schema/explain-v1.schema.json +63 -1
  262. data/schema/fix-v1.schema.json +64 -0
  263. data/schema/fix-v2.schema.json +66 -0
  264. data/schema/fix-v3.schema.json +101 -0
  265. data/schema/fuzz-regression-v1.schema.json +79 -0
  266. data/schema/fuzz-v1.schema.json +114 -0
  267. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  268. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  269. data/schema/grammar-ir.schema.json +271 -0
  270. data/schema/ielr-benchmark-v1.schema.json +85 -0
  271. data/schema/lexer-profile-v1.schema.json +491 -0
  272. data/schema/metrics-v1.schema.json +60 -0
  273. data/schema/reduce-v1.schema.json +22 -0
  274. data/schema/reduce-v2.schema.json +63 -0
  275. data/schema/table-artifact-v1.schema.json +377 -0
  276. data/schema/verification-report-v1.schema.json +222 -0
  277. data/schema/verify-v1.schema.json +42 -0
  278. data/sig/ibex/analysis/digraph.rbs +19 -0
  279. data/sig/ibex/bison_import/importer.rbs +140 -0
  280. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  281. data/sig/ibex/bison_import.rbs +95 -0
  282. data/sig/ibex/bounded_subprocess.rbs +76 -0
  283. data/sig/ibex/cli/ambiguity.rbs +6 -0
  284. data/sig/ibex/cli/analysis.rbs +43 -0
  285. data/sig/ibex/cli/bison_import.rbs +32 -0
  286. data/sig/ibex/cli/config.rbs +35 -0
  287. data/sig/ibex/cli/diagnostics.rbs +16 -3
  288. data/sig/ibex/cli/documentation.rbs +5 -1
  289. data/sig/ibex/cli/equiv.rbs +49 -0
  290. data/sig/ibex/cli/error_messages.rbs +6 -0
  291. data/sig/ibex/cli/explain.rbs +6 -0
  292. data/sig/ibex/cli/fix.rbs +53 -0
  293. data/sig/ibex/cli/formatting.rbs +5 -1
  294. data/sig/ibex/cli/fuzz.rbs +47 -0
  295. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  296. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  297. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  298. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  299. data/sig/ibex/cli/ir_tools.rbs +7 -19
  300. data/sig/ibex/cli/outputs.rbs +9 -3
  301. data/sig/ibex/cli/reduce.rbs +60 -0
  302. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  303. data/sig/ibex/cli/samples.rbs +8 -0
  304. data/sig/ibex/cli/verify.rbs +28 -0
  305. data/sig/ibex/cli/watch.rbs +2 -2
  306. data/sig/ibex/cli.rbs +79 -5
  307. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  308. data/sig/ibex/codegen/explain.rbs +45 -25
  309. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  310. data/sig/ibex/codegen/rbs.rbs +12 -10
  311. data/sig/ibex/codegen/report.rbs +12 -12
  312. data/sig/ibex/codegen/ruby.rbs +18 -15
  313. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  314. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  315. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  316. data/sig/ibex/configuration/explanation.rbs +195 -0
  317. data/sig/ibex/configuration/inspector.rbs +53 -0
  318. data/sig/ibex/configuration.rbs +242 -0
  319. data/sig/ibex/coverage/collector.rbs +16 -14
  320. data/sig/ibex/coverage/event_stream.rbs +12 -10
  321. data/sig/ibex/coverage/report.rbs +20 -18
  322. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  323. data/sig/ibex/delta_reducer.rbs +38 -0
  324. data/sig/ibex/diff.rbs +47 -0
  325. data/sig/ibex/equiv/machine.rbs +54 -0
  326. data/sig/ibex/equiv.rbs +129 -0
  327. data/sig/ibex/fix.rbs +138 -0
  328. data/sig/ibex/frontend/ast.rbs +33 -7
  329. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  330. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  331. data/sig/ibex/frontend/formatter.rbs +38 -30
  332. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  333. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  334. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  335. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  336. data/sig/ibex/frontend/resolution.rbs +3 -2
  337. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  338. data/sig/ibex/frontend/source_span.rbs +5 -2
  339. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  340. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  341. data/sig/ibex/fuzz.rbs +71 -0
  342. data/sig/ibex/generation_input.rbs +2 -2
  343. data/sig/ibex/generation_manifest.rbs +35 -32
  344. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  345. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  346. data/sig/ibex/grammar_tests.rbs +2 -2
  347. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  348. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  349. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  350. data/sig/ibex/ir/parser_contract.rbs +69 -0
  351. data/sig/ibex/ir/serialize.rbs +63 -28
  352. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  353. data/sig/ibex/ir/validator/base.rbs +35 -31
  354. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  355. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  356. data/sig/ibex/ir.rbs +9 -3
  357. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  358. data/sig/ibex/lalr/builder.rbs +75 -24
  359. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  360. data/sig/ibex/lalr/counterexample.rbs +17 -14
  361. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  362. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  363. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  364. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  365. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  366. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  367. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  368. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  369. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  370. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  371. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  372. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  373. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  374. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  375. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  376. data/sig/ibex/lalr.rbs +11 -1
  377. data/sig/ibex/location.rbs +6 -6
  378. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  379. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  380. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  381. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  382. data/sig/ibex/lsp/position_codec.rbs +8 -4
  383. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  384. data/sig/ibex/lsp/request_support.rbs +8 -8
  385. data/sig/ibex/lsp/server.rbs +16 -16
  386. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  387. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  388. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  389. data/sig/ibex/lsp/transport.rbs +18 -6
  390. data/sig/ibex/lsp/workspace.rbs +3 -2
  391. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  392. data/sig/ibex/messages.rbs +26 -0
  393. data/sig/ibex/metrics.rbs +50 -0
  394. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  395. data/sig/ibex/normalize/expander.rbs +2 -2
  396. data/sig/ibex/normalize/expression.rbs +10 -8
  397. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  398. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  399. data/sig/ibex/normalize/lexer.rbs +4 -4
  400. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  401. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  402. data/sig/ibex/normalize/parameters.rbs +13 -8
  403. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  404. data/sig/ibex/normalize.rbs +11 -5
  405. data/sig/ibex/racc_migration/report.rbs +8 -6
  406. data/sig/ibex/rake_task.rbs +1 -1
  407. data/sig/ibex/samples.rbs +13 -4
  408. data/sig/ibex/table_artifact/builder.rbs +93 -0
  409. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  410. data/sig/ibex/table_artifact/document.rbs +27 -0
  411. data/sig/ibex/table_artifact/executor.rbs +66 -0
  412. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  413. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  414. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  415. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  416. data/sig/ibex/table_artifact/validator.rbs +66 -0
  417. data/sig/ibex/table_artifact.rbs +32 -0
  418. data/sig/ibex/table_simulation/result.rbs +8 -4
  419. data/sig/ibex/table_simulation/step.rbs +4 -2
  420. data/sig/ibex/tables.rbs +10 -9
  421. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  422. data/sig/ibex/verification_report/builder.rbs +53 -0
  423. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  424. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  425. data/sig/ibex/verification_report/validator.rbs +114 -0
  426. data/sig/ibex/verification_report.rbs +44 -0
  427. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  428. data/sig/ibex/verify/language_witness.rbs +112 -0
  429. data/sig/ibex/verify/reference_collection.rbs +63 -0
  430. data/sig/ibex/verify/result.rbs +52 -0
  431. data/sig/ibex/verify/verifier.rbs +170 -0
  432. data/sig/ibex/verify.rbs +6 -0
  433. data/sig/ibex/watch/runner.rbs +12 -2
  434. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  435. metadata +232 -12
  436. data/lib/ibex/ir/migration.rb +0 -120
  437. data/sig/ibex/ir/migration.rbs +0 -34
@@ -11,8 +11,8 @@ module Ibex
11
11
  # @rbs (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
12
12
  def initialize: (IR::Grammar grammar, ?generated_action_abi: GeneratedActionABI::Cache?) -> void
13
13
 
14
- # @rbs (IR::Production production, Hash[Symbol, untyped] step, Integer index) -> String
15
- def composed_fragment_method_source: (IR::Production production, Hash[Symbol, untyped] step, Integer index) -> String
14
+ # @rbs (IR::Production production, IR::action_composition_step step, Integer index) -> String
15
+ def composed_fragment_method_source: (IR::Production production, IR::action_composition_step step, Integer index) -> String
16
16
 
17
17
  # @rbs (IR::Production production, Integer index) -> String
18
18
  def composed_fragment_name: (IR::Production production, Integer index) -> String
@@ -43,8 +43,8 @@ module Ibex
43
43
  # @rbs (Array[String] lines, production: IR::Production) -> void
44
44
  def append_direct_parameter_values: (Array[String] lines, production: IR::Production) -> void
45
45
 
46
- # @rbs (Hash[Symbol, untyped] step) -> String
47
- def composed_semantic_code: (Hash[Symbol, untyped] step) -> String
46
+ # @rbs (IR::action_composition_step step) -> String
47
+ def composed_semantic_code: (IR::action_composition_step step) -> String
48
48
 
49
49
  # @rbs (String source, Array[IR::named_ref] named_refs) -> void
50
50
  def append_named_values: (String source, Array[IR::named_ref] named_refs) -> void
@@ -4,7 +4,21 @@ module Ibex
4
4
  module Codegen
5
5
  type explain_selection = { state: IR::AutomatonState, conflict: IR::conflict, conflict_index: Integer }
6
6
 
7
- type explain_entry = { state: IR::AutomatonState, conflict: IR::conflict, example: IR::counterexample }
7
+ type explain_entry = { state: IR::AutomatonState, conflict: IR::conflict, example: LALR::search_counterexample }
8
+
9
+ type explain_token = { name: String, display_name: String?, label: String, ?query: String }
10
+
11
+ type explain_alternative = { kind: String, ?state: Integer, ?production: Integer }
12
+
13
+ type explain_search = { status: String, explored: Integer, exhausted: bool, bounds: Hash[Symbol, Integer] }
14
+
15
+ type explain_tree_node = { ?symbol: explain_token, ?token: explain_token, ?production: Integer, ?children: Array[explain_tree] }
16
+
17
+ type explain_tree = untyped
18
+
19
+ type explain_interpretation = Hash[Symbol, untyped]
20
+
21
+ type string_value = String | Integer | Symbol
8
22
 
9
23
  # Renders a selected conflict explanation from Automaton IR and counterexamples.
10
24
  # rubocop:disable Metrics/ClassLength -- inline contracts and two stable output formats stay near selection policy.
@@ -15,8 +29,8 @@ module Ibex
15
29
  # ?max_configurations: Integer) -> void
16
30
  def initialize: (IR::Automaton automaton, ?state: Integer?, ?token: String?, ?max_tokens: Integer, ?max_configurations: Integer) -> void
17
31
 
18
- # @rbs () -> Hash[Symbol, untyped]
19
- def to_h: () -> Hash[Symbol, untyped]
32
+ # @rbs () -> Hash[Symbol, Object?]
33
+ def to_h: () -> Hash[Symbol, Object?]
20
34
 
21
35
  # @rbs () -> String
22
36
  def render_text: () -> String
@@ -35,26 +49,32 @@ module Ibex
35
49
  # @rbs () -> Array[explain_selection]
36
50
  def selected_conflicts: () -> Array[explain_selection]
37
51
 
38
- # @rbs (explain_entry entry) -> Hash[Symbol, untyped]
39
- def conflict_document: (explain_entry entry) -> Hash[Symbol, untyped]
52
+ # @rbs (explain_entry entry) -> Hash[Symbol, Object?]
53
+ def conflict_document: (explain_entry entry) -> Hash[Symbol, Object?]
54
+
55
+ # @rbs (LALR::search_counterexample example) -> String
56
+ def witness_kind: (LALR::search_counterexample example) -> String
57
+
58
+ # @rbs (LALR::search_outcome outcome) -> explain_search
59
+ def search_document: (LALR::search_outcome outcome) -> explain_search
40
60
 
41
- # @rbs (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
42
- def conflict_alternatives: (IR::conflict conflict) -> Array[Hash[Symbol, untyped]]
61
+ # @rbs (IR::conflict conflict) -> Array[explain_alternative]
62
+ def conflict_alternatives: (IR::conflict conflict) -> Array[explain_alternative]
43
63
 
44
- # @rbs (IR::interpretation interpretation) -> Hash[Symbol, untyped]
45
- def interpretation_document: (IR::interpretation interpretation) -> Hash[Symbol, untyped]
64
+ # @rbs (IR::interpretation interpretation) -> explain_interpretation
65
+ def interpretation_document: (IR::interpretation interpretation) -> explain_interpretation
46
66
 
47
- # @rbs (untyped tree) -> untyped
48
- def tree_document: (untyped tree) -> untyped
67
+ # @rbs (explain_tree tree) -> explain_tree
68
+ def tree_document: (explain_tree tree) -> explain_tree
49
69
 
50
- # @rbs (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
51
- def string_values: (Hash[Symbol, untyped] value) -> Hash[Symbol, untyped]
70
+ # @rbs (Hash[Symbol, string_value] value) -> Hash[Symbol, string_value]
71
+ def string_values: (Hash[Symbol, string_value] value) -> Hash[Symbol, string_value]
52
72
 
53
- # @rbs (String name) -> Hash[Symbol, untyped]
54
- def symbol_reference: (String name) -> Hash[Symbol, untyped]
73
+ # @rbs (String name) -> explain_token
74
+ def symbol_reference: (String name) -> explain_token
55
75
 
56
- # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
57
- def token_reference: (IR::GrammarSymbol symbol, ?query: String?) -> Hash[Symbol, untyped]
76
+ # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> explain_token
77
+ def token_reference: (IR::GrammarSymbol symbol, ?query: String?) -> explain_token
58
78
 
59
79
  # @rbs (Array[String] lines, explain_entry entry, Integer number) -> void
60
80
  def append_conflict: (Array[String] lines, explain_entry entry, Integer number) -> void
@@ -63,17 +83,17 @@ module Ibex
63
83
  def append_midrule_origins: (Array[String] lines, IR::conflict conflict) -> void
64
84
 
65
85
  # @rbs (Array[String] lines, IR::AutomatonState state, IR::conflict conflict,
66
- # IR::counterexample example) -> void
67
- def append_witness_steps: (Array[String] lines, IR::AutomatonState state, IR::conflict conflict, IR::counterexample example) -> void
86
+ # LALR::search_counterexample example) -> void
87
+ def append_witness_steps: (Array[String] lines, IR::AutomatonState state, IR::conflict conflict, LALR::search_counterexample example) -> void
68
88
 
69
- # @rbs (Array[String] lines, IR::counterexample example) -> void
70
- def append_interpretations: (Array[String] lines, IR::counterexample example) -> void
89
+ # @rbs (Array[String] lines, LALR::search_counterexample example) -> void
90
+ def append_interpretations: (Array[String] lines, LALR::search_counterexample example) -> void
71
91
 
72
- # @rbs (Hash[Symbol, untyped] alternative) -> String
73
- def alternative_text: (Hash[Symbol, untyped] alternative) -> String
92
+ # @rbs (explain_alternative alternative) -> String
93
+ def alternative_text: (explain_alternative alternative) -> String
74
94
 
75
- # @rbs (Array[String] lines, untyped tree, String prefix, String connector) -> void
76
- def append_tree: (Array[String] lines, untyped tree, String prefix, String connector) -> void
95
+ # @rbs (Array[String] lines, explain_tree tree, String prefix, String connector) -> void
96
+ def append_tree: (Array[String] lines, explain_tree tree, String prefix, String connector) -> void
77
97
 
78
98
  # @rbs (IR::GrammarSymbol symbol, ?query: String?) -> String
79
99
  def token_label: (IR::GrammarSymbol symbol, ?query: String?) -> String
@@ -6,6 +6,10 @@ module Ibex
6
6
  # action's declared inputs.
7
7
  # rubocop:disable Metrics/ModuleLength -- ABI proof and source rewriting must evolve together.
8
8
  module GeneratedActionABI
9
+ type ripper_token = [ [ Integer, Integer ], Symbol, String, Integer ]
10
+
11
+ type sexp_value = Symbol | String | Integer | nil | Array[sexp_value]
12
+
9
13
  LEGACY_PARAMETERS: Array[String]
10
14
 
11
15
  SIMPLE_POSITIONAL_READ: Regexp
@@ -76,26 +80,26 @@ module Ibex
76
80
  # @rbs (String source, Array[String] parameters) -> String?
77
81
  def self?.simple_indexed_positional_action_source: (String source, Array[String] parameters) -> String?
78
82
 
79
- # @rbs (Array[untyped] tokens, Array[String] parameters) -> String?
80
- def self?.rewrite_positional_values: (Array[untyped] tokens, Array[String] parameters) -> String?
83
+ # @rbs (Array[ripper_token] tokens, Array[String] parameters) -> String?
84
+ def self?.rewrite_positional_values: (Array[ripper_token] tokens, Array[String] parameters) -> String?
81
85
 
82
- # @rbs (Array[untyped] tokens, Integer index, Array[String] parameters) -> [String, Integer]?
83
- def self?.positional_value_reference: (Array[untyped] tokens, Integer index, Array[String] parameters) -> [ String, Integer ]?
86
+ # @rbs (Array[ripper_token] tokens, Integer index, Array[String] parameters) -> [String, Integer]?
87
+ def self?.positional_value_reference: (Array[ripper_token] tokens, Integer index, Array[String] parameters) -> [ String, Integer ]?
84
88
 
85
- # @rbs (Array[untyped] tokens, Integer index) -> bool
86
- def self?.receiver_before_value?: (Array[untyped] tokens, Integer index) -> bool
89
+ # @rbs (Array[ripper_token] tokens, Integer index) -> bool
90
+ def self?.receiver_before_value?: (Array[ripper_token] tokens, Integer index) -> bool
87
91
 
88
92
  # @rbs (String source) -> bool
89
93
  def self?.references_legacy_parameter?: (String source) -> bool
90
94
 
91
- # @rbs (untyped node, ?untyped parent, ?Integer? child_index) -> bool
92
- def self?.read_only_value_references?: (untyped node, ?untyped parent, ?Integer? child_index) -> bool
95
+ # @rbs (sexp_value node, ?sexp_value parent, ?Integer? child_index) -> bool
96
+ def self?.read_only_value_references?: (sexp_value node, ?sexp_value parent, ?Integer? child_index) -> bool
93
97
 
94
98
  # @rbs (untyped node) -> bool
95
99
  def self?.value_reference?: (untyped node) -> bool
96
100
 
97
- # @rbs (untyped parent, Integer? child_index) -> bool
98
- def self?.safe_value_reference?: (untyped parent, Integer? child_index) -> bool
101
+ # @rbs (sexp_value? parent, Integer? child_index) -> bool
102
+ def self?.safe_value_reference?: (sexp_value? parent, Integer? child_index) -> bool
99
103
  end
100
104
  end
101
105
  end
@@ -5,6 +5,8 @@ module Ibex
5
5
  # Generates an RBS declaration for the public surface of a generated parser.
6
6
  # rubocop:disable Metrics/ClassLength -- one generator owns the complete parser signature.
7
7
  class RBS
8
+ type syntax_definition = { name: String, kind: Integer, fields: Hash[String, CSTMetadata::field_slot] }
9
+
8
10
  @generated_action_abi: GeneratedActionABI::Cache
9
11
 
10
12
  @omit_action_call: bool
@@ -29,20 +31,20 @@ module Ibex
29
31
  # @rbs (Array[String] lines) -> void
30
32
  def append_syntax_contract: (Array[String] lines) -> void
31
33
 
32
- # @rbs () -> Hash[String, Hash[Symbol, untyped]]
33
- def syntax_node_definitions: () -> Hash[String, Hash[Symbol, untyped]]
34
+ # @rbs () -> Hash[String, syntax_definition]
35
+ def syntax_node_definitions: () -> Hash[String, syntax_definition]
34
36
 
35
- # @rbs (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
36
- def merge_syntax_fields: (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
37
+ # @rbs (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
38
+ def merge_syntax_fields: (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
37
39
 
38
- # @rbs (Array[String] lines, Hash[Symbol, untyped] definition) -> void
39
- def append_syntax_node_contract: (Array[String] lines, Hash[Symbol, untyped] definition) -> void
40
+ # @rbs (Array[String] lines, syntax_definition definition) -> void
41
+ def append_syntax_node_contract: (Array[String] lines, syntax_definition definition) -> void
40
42
 
41
43
  # @rbs (String node_name, Integer index) -> String
42
44
  def syntax_field_type: (String node_name, Integer index) -> String
43
45
 
44
- # @rbs (Array[String] lines, Hash[String, untyped] fields) -> void
45
- def append_repetition_contracts: (Array[String] lines, Hash[String, untyped] fields) -> void
46
+ # @rbs (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
47
+ def append_repetition_contracts: (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
46
48
 
47
49
  # @rbs () -> Hash[String, IR::node_annotation]
48
50
  def ast_node_definitions: () -> Hash[String, IR::node_annotation]
@@ -86,8 +88,8 @@ module Ibex
86
88
  # @rbs (Array[String] lines, IR::Production production) -> void
87
89
  def append_composed_fragment_signatures: (Array[String] lines, IR::Production production) -> void
88
90
 
89
- # @rbs (IR::Production production, Hash[Symbol, untyped] plan, Integer slot, Integer step_index) -> String
90
- def composition_slot_type: (IR::Production production, Hash[Symbol, untyped] plan, Integer slot, Integer step_index) -> String
91
+ # @rbs (IR::Production production, IR::action_composition_plan plan, Integer slot, Integer step_index) -> String
92
+ def composition_slot_type: (IR::Production production, IR::action_composition_plan plan, Integer slot, Integer step_index) -> String
91
93
 
92
94
  # @rbs (IR::Production production) -> bool
93
95
  def action_method?: (IR::Production production) -> bool
@@ -4,17 +4,17 @@ module Ibex
4
4
  module Codegen
5
5
  # Renders a human-readable state and conflict report from Automaton IR.
6
6
  module Report
7
- private def append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[IR::counterexample] examples, Hash[Integer, String] labels) -> void
7
+ private def append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[LALR::search_counterexample] examples, Hash[Integer, String] labels) -> void
8
8
 
9
- private def self.append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[IR::counterexample] examples, Hash[Integer, String] labels) -> void
9
+ private def self.append_state: (Array[String] lines, IR::AutomatonState state, IR::Grammar grammar, Array[LALR::search_counterexample] examples, Hash[Integer, String] labels) -> void
10
10
 
11
- private def append_counterexample: (Array[String] lines, IR::counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
11
+ private def append_counterexample: (Array[String] lines, LALR::search_counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
12
12
 
13
- private def self.append_counterexample: (Array[String] lines, IR::counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
13
+ private def self.append_counterexample: (Array[String] lines, LALR::search_counterexample example, IR::Grammar grammar, Hash[Integer, String] labels) -> void
14
14
 
15
- private def append_tree: (Array[String] lines, untyped tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
15
+ private def append_tree: (Array[String] lines, Object? tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
16
16
 
17
- private def self.append_tree: (Array[String] lines, untyped tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
17
+ private def self.append_tree: (Array[String] lines, Object? tree, String indentation, IR::Grammar grammar, Hash[Integer, String] labels) -> void
18
18
 
19
19
  private def format_item: (IR::AutomatonItem item, IR::Grammar grammar, Hash[Integer, String] labels) -> String
20
20
 
@@ -28,17 +28,17 @@ module Ibex
28
28
 
29
29
  private def self.symbol_name: (Hash[Integer, String] labels, Integer id) -> String
30
30
 
31
- private def tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, untyped value) -> untyped
31
+ private def tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, Object? value) -> Object?
32
32
 
33
- private def self.tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, untyped value) -> untyped
33
+ private def self.tree_label: (IR::Grammar grammar, Hash[Integer, String] labels, Object? value) -> Object?
34
34
 
35
- private def display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, untyped]
35
+ private def display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, Object?]
36
36
 
37
- private def self.display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, untyped]
37
+ private def self.display_conflict: (IR::conflict conflict, IR::Grammar grammar, Hash[Integer, String] labels) -> Hash[Symbol, Object?]
38
38
 
39
- private def format_value: (untyped value) -> String
39
+ private def format_value: (Object? value) -> String
40
40
 
41
- private def self.format_value: (untyped value) -> String
41
+ private def self.format_value: (Object? value) -> String
42
42
 
43
43
  # @rbs (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> String
44
44
  def self?.render: (IR::Automaton automaton, ?max_tokens: Integer, ?max_configurations: Integer) -> String
@@ -19,8 +19,6 @@ module Ibex
19
19
 
20
20
  include RubySyntax
21
21
 
22
- EMBEDDED_RUNTIME_SOURCES: Array[String]
23
-
24
22
  @automaton: IR::Automaton
25
23
 
26
24
  @grammar: IR::Grammar
@@ -60,12 +58,17 @@ module Ibex
60
58
 
61
59
  private
62
60
 
61
+ # @rbs () -> void
62
+ def reject_foreign_actions: () -> void
63
+
64
+ # Kept local so the generic generator does not load the optional Bison
65
+ # importer and its IR validation graph.
66
+ # @rbs () -> String
67
+ def foreign_action_sentinel: () -> String
68
+
63
69
  # @rbs (Array[String] lines) -> void
64
70
  def append_runtime: (Array[String] lines) -> void
65
71
 
66
- # @rbs (String relative_path) -> String
67
- def embedded_source: (String relative_path) -> String
68
-
69
72
  # @rbs (Array[String] lines) -> void
70
73
  def append_tables: (Array[String] lines) -> void
71
74
 
@@ -84,20 +87,20 @@ module Ibex
84
87
  # @rbs () -> bool
85
88
  def shareable_parser_tables?: () -> bool
86
89
 
87
- # @rbs () -> Hash[Symbol, untyped]
88
- def cst_metadata: () -> Hash[Symbol, untyped]
90
+ # @rbs () -> CSTMetadata::metadata
91
+ def cst_metadata: () -> CSTMetadata::metadata
89
92
 
90
- # @rbs (untyped value) -> String
91
- def deep_frozen_literal: (untyped value) -> String
93
+ # @rbs (Object? value) -> String
94
+ def deep_frozen_literal: (Object? value) -> String
92
95
 
93
- # @rbs (untyped table) -> String
94
- def table_literal: (untyped table) -> String
96
+ # @rbs (Object? table) -> String
97
+ def table_literal: (Object? table) -> String
95
98
 
96
- # @rbs (Array[Integer?] values) -> String
97
- def packed_integers_literal: (Array[Integer?] values) -> String
99
+ # @rbs (Array[untyped] values) -> String
100
+ def packed_integers_literal: (Array[untyped] values) -> String
98
101
 
99
- # @rbs (Array[Integer?] values) -> String
100
- def packed_signed_integers_literal: (Array[Integer?] values) -> String
102
+ # @rbs (Array[untyped] values) -> String
103
+ def packed_signed_integers_literal: (Array[untyped] values) -> String
101
104
 
102
105
  # @rbs () -> String
103
106
  def token_ids_literal: () -> String
@@ -23,17 +23,17 @@ module Ibex
23
23
  # @rbs (Array[String] lines, IR::Production production) -> void
24
24
  def append_composed_action_method: (Array[String] lines, IR::Production production) -> void
25
25
 
26
- # @rbs (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
27
- def append_composed_fragment_method: (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
26
+ # @rbs (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
27
+ def append_composed_fragment_method: (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
28
28
 
29
29
  # @rbs (IR::Production production, Integer index) -> String
30
30
  def composed_fragment_name: (IR::Production production, Integer index) -> String
31
31
 
32
- # @rbs (Array[String] lines, IR::Production production, Hash[Symbol, untyped] plan) -> void
33
- def append_composed_orchestrator: (Array[String] lines, IR::Production production, Hash[Symbol, untyped] plan) -> void
32
+ # @rbs (Array[String] lines, IR::Production production, IR::action_composition_plan plan) -> void
33
+ def append_composed_orchestrator: (Array[String] lines, IR::Production production, IR::action_composition_plan plan) -> void
34
34
 
35
- # @rbs (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
36
- def append_composed_step: (Array[String] lines, IR::Production production, Hash[Symbol, untyped] step, Integer index) -> void
35
+ # @rbs (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
36
+ def append_composed_step: (Array[String] lines, IR::Production production, IR::action_composition_step step, Integer index) -> void
37
37
 
38
38
  # @rbs (Array[String] lines, IR::Production production) -> void
39
39
  def append_compiled_action_method: (Array[String] lines, IR::Production production) -> void
@@ -4,22 +4,24 @@ module Ibex
4
4
  module Codegen
5
5
  # Generates typed Red syntax views from @node metadata.
6
6
  module RubySyntax
7
+ type syntax_definition = Hash[Symbol, untyped]
8
+
7
9
  private
8
10
 
9
11
  # @rbs (Array[String] lines) -> void
10
12
  def append_syntax: (Array[String] lines) -> void
11
13
 
12
- # @rbs () -> Hash[String, Hash[Symbol, untyped]]
13
- def syntax_node_definitions: () -> Hash[String, Hash[Symbol, untyped]]
14
+ # @rbs () -> Hash[String, syntax_definition]
15
+ def syntax_node_definitions: () -> Hash[String, syntax_definition]
14
16
 
15
- # @rbs (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
16
- def merge_syntax_fields: (Hash[String, untyped] left, Hash[String, untyped] right) -> Hash[String, untyped]
17
+ # @rbs (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
18
+ def merge_syntax_fields: (Hash[String, CSTMetadata::field_slot] left, Hash[String, CSTMetadata::field_slot] right) -> Hash[String, CSTMetadata::field_slot]
17
19
 
18
- # @rbs (Array[String] lines, Hash[Symbol, untyped] definition) -> void
19
- def append_syntax_node: (Array[String] lines, Hash[Symbol, untyped] definition) -> void
20
+ # @rbs (Array[String] lines, syntax_definition definition) -> void
21
+ def append_syntax_node: (Array[String] lines, syntax_definition definition) -> void
20
22
 
21
- # @rbs (Array[String] lines, Hash[String, untyped] fields) -> void
22
- def append_repetition_accessors: (Array[String] lines, Hash[String, untyped] fields) -> void
23
+ # @rbs (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
24
+ def append_repetition_accessors: (Array[String] lines, Hash[String, CSTMetadata::field_slot] fields) -> void
23
25
  end
24
26
  end
25
27
  end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/ibex/configuration/analysis_grammar.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Configuration
5
+ # Produces an immutable Grammar IR view suitable for an explicitly
6
+ # noncanonical analysis algorithm. The source-owned contract remains the
7
+ # authority; callers must report the override through Configuration::Value.
8
+ module AnalysisGrammar
9
+ # @rbs (IR::Grammar grammar, Symbol algorithm) -> IR::Grammar
10
+ def self?.for_algorithm: (IR::Grammar grammar, Symbol algorithm) -> IR::Grammar
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,195 @@
1
+ # Generated from lib/ibex/configuration/explanation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Configuration
5
+ # One observed configuration source and how it participated in selection.
6
+ class Evidence
7
+ STATUSES: Array[Symbol]
8
+
9
+ SOURCES: Array[Symbol]
10
+
11
+ attr_reader key: Key
12
+
13
+ attr_reader source: Symbol
14
+
15
+ attr_reader value: config_value
16
+
17
+ attr_reader status: Symbol
18
+
19
+ attr_reader location: Location?
20
+
21
+ attr_reader reason: String
22
+
23
+ # @rbs (Key key, source: Symbol, value: config_value, status: Symbol, reason: String,
24
+ # ?location: Location?) -> void
25
+ def initialize: (Key key, source: Symbol, value: config_value, status: Symbol, reason: String, ?location: Location?) -> void
26
+
27
+ # @rbs () -> Hash[String, json_value]
28
+ def to_h: () -> Hash[String, json_value]
29
+
30
+ private
31
+
32
+ # @rbs (config_value value) -> (String | Integer | bool | nil)
33
+ def json_value: (config_value value) -> (String | Integer | bool | nil)
34
+ end
35
+
36
+ # Whether an input can prove the historical source of a selected setting.
37
+ class Recording
38
+ STATES: Array[Symbol]
39
+
40
+ attr_reader state: Symbol
41
+
42
+ attr_reader reason: String
43
+
44
+ # @rbs (Symbol state, String reason) -> void
45
+ def initialize: (Symbol state, String reason) -> void
46
+
47
+ # @rbs () -> Hash[String, String]
48
+ def to_h: () -> Hash[String, String]
49
+ end
50
+
51
+ # Canonical, static input facts used to build a configuration report.
52
+ class Input
53
+ KINDS: Array[Symbol]
54
+
55
+ attr_reader kind: Symbol
56
+
57
+ attr_reader path: String
58
+
59
+ attr_reader files: Array[String]
60
+
61
+ attr_reader schema_version: Integer?
62
+
63
+ attr_reader grammar_values: Hash[String, config_value]
64
+
65
+ attr_reader grammar_locations: Hash[String, Location]
66
+
67
+ attr_reader evidence: Hash[String, Array[Evidence]]
68
+
69
+ attr_reader recordings: Hash[String, Recording]
70
+
71
+ # @rbs (kind: Symbol, path: String, ?files: Array[String], ?schema_version: Integer?,
72
+ # ?grammar_values: Hash[String, config_value], ?grammar_locations: Hash[String, Location],
73
+ # ?evidence: Hash[String, Array[Evidence]], ?recordings: Hash[String, Recording]) -> void
74
+ def initialize: (kind: Symbol, path: String, ?files: Array[String], ?schema_version: Integer?, ?grammar_values: Hash[String, config_value], ?grammar_locations: Hash[String, Location], ?evidence: Hash[String, Array[Evidence]], ?recordings: Hash[String, Recording]) -> void
75
+
76
+ # @rbs () -> Hash[String, json_value]
77
+ def to_h: () -> Hash[String, json_value]
78
+
79
+ private
80
+
81
+ # @rbs (Symbol kind, String path, Array[String] files, Integer? schema_version,
82
+ # Hash[String, config_value] grammar_values, Hash[String, Location] grammar_locations,
83
+ # Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
84
+ def assign_input: (Symbol kind, String path, Array[String] files, Integer? schema_version, Hash[String, config_value] grammar_values, Hash[String, Location] grammar_locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
85
+
86
+ # @rbs (Array[String] files, String path) -> void
87
+ def validate_files!: (Array[String] files, String path) -> void
88
+
89
+ # @rbs (Symbol kind, Integer? schema_version) -> void
90
+ def validate_schema_version!: (Symbol kind, Integer? schema_version) -> void
91
+
92
+ # @rbs (Hash[String, config_value] values, Hash[String, Location] locations,
93
+ # Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
94
+ def validate_entries!: (Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
95
+
96
+ # @rbs (*Hash[Object?, Object?] values) -> void
97
+ def validate_fact_hashes!: (*Hash[Object?, Object?] values) -> void
98
+
99
+ # @rbs (Hash[String, config_value] values, Hash[String, Location] locations) -> void
100
+ def validate_locations!: (Hash[String, config_value] values, Hash[String, Location] locations) -> void
101
+
102
+ # @rbs (Hash[String, Array[Evidence]] evidence) -> void
103
+ def validate_evidence!: (Hash[String, Array[Evidence]] evidence) -> void
104
+
105
+ # @rbs (Hash[String, Recording] recordings) -> void
106
+ def validate_recordings!: (Hash[String, Recording] recordings) -> void
107
+
108
+ # @rbs (Hash[String, config_value] values) -> Hash[String, config_value]
109
+ def immutable_values: (Hash[String, config_value] values) -> Hash[String, config_value]
110
+ end
111
+
112
+ # A fixed-contract mismatch retained as structured report data.
113
+ class ConflictRecord
114
+ attr_reader key: Key
115
+
116
+ attr_reader declared: Value
117
+
118
+ attr_reader requested: Value
119
+
120
+ # @rbs (Conflict conflict) -> void
121
+ def initialize: (Conflict conflict) -> void
122
+
123
+ # @rbs () -> Hash[String, json_value]
124
+ def to_h: () -> Hash[String, json_value]
125
+
126
+ # @rbs () -> String
127
+ def message: () -> String
128
+
129
+ private
130
+
131
+ # @rbs (Value value) -> Hash[String, json_value]
132
+ def selection: (Value value) -> Hash[String, json_value]
133
+ end
134
+
135
+ # The effective value and all accepted or rejected evidence for one key.
136
+ class Explanation
137
+ attr_reader value: Value
138
+
139
+ attr_reader evidence: Array[Evidence]
140
+
141
+ attr_reader recording: Recording
142
+
143
+ # @rbs (Value value, evidence: Array[Evidence], recording: Recording) -> void
144
+ def initialize: (Value value, evidence: Array[Evidence], recording: Recording) -> void
145
+
146
+ # @rbs () -> Hash[String, json_value]
147
+ def to_h: () -> Hash[String, json_value]
148
+ end
149
+
150
+ # Deterministic, static-no-user-code explanation of every registered setting.
151
+ class Report
152
+ attr_reader input: Input
153
+
154
+ attr_reader explanations: Array[Explanation]
155
+
156
+ attr_reader conflicts: Array[ConflictRecord]
157
+
158
+ # @rbs (Input input, ?cli: Hash[String, config_value]) -> void
159
+ def initialize: (Input input, ?cli: Hash[String, config_value]) -> void
160
+
161
+ # @rbs () -> bool
162
+ def success?: () -> bool
163
+
164
+ # @rbs () -> Hash[String, json_value]
165
+ def to_h: () -> Hash[String, json_value]
166
+
167
+ # Deterministic JSON independent of caller hash insertion order.
168
+ # @rbs () -> String
169
+ def dump: () -> String
170
+
171
+ # @rbs () -> String
172
+ def render_text: () -> String
173
+
174
+ private
175
+
176
+ # @rbs (Key key, Hash[String, config_value] cli) -> Value
177
+ def resolve_key: (Key key, Hash[String, config_value] cli) -> Value
178
+
179
+ # @rbs (Value value, Hash[String, config_value] cli, ?conflict: ConflictRecord?) -> Explanation
180
+ def explanation: (Value value, Hash[String, config_value] cli, ?conflict: ConflictRecord?) -> Explanation
181
+
182
+ # @rbs (Key key, config_value raw, conflicting: bool) -> Evidence
183
+ def cli_evidence: (Key key, config_value raw, conflicting: bool) -> Evidence
184
+
185
+ # @rbs (config_value value) -> String
186
+ def display: (config_value value) -> String
187
+
188
+ # @rbs (Location location) -> String
189
+ def location_label: (Location location) -> String
190
+
191
+ # @rbs (Explanation entry) -> Array[String]
192
+ def render_explanation: (Explanation entry) -> Array[String]
193
+ end
194
+ end
195
+ end