ibex 0.1.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 (603) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -123
  3. data/docs/architecture.md +477 -31
  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 +106 -0
  12. data/docs/cst.md +237 -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 +306 -0
  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 +26 -0
  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 +114 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +629 -18
  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 +56 -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 +45 -6
  63. data/docs/release-readiness.md +221 -0
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +234 -0
  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/examples/README.md +60 -0
  75. data/examples/calculator.y +44 -0
  76. data/examples/csv.y +32 -0
  77. data/examples/ini.y +70 -0
  78. data/examples/json.y +48 -0
  79. data/examples/tiny_language.y +75 -0
  80. data/lib/ibex/analysis/digraph.rb +128 -0
  81. data/lib/ibex/analysis/sets.rb +5 -4
  82. data/lib/ibex/analysis.rb +1 -0
  83. data/lib/ibex/artifact_set.rb +63 -0
  84. data/lib/ibex/bison_import/importer.rb +516 -0
  85. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  86. data/lib/ibex/bison_import.rb +200 -0
  87. data/lib/ibex/bounded_subprocess.rb +171 -0
  88. data/lib/ibex/cli/ambiguity.rb +75 -0
  89. data/lib/ibex/cli/analysis.rb +134 -0
  90. data/lib/ibex/cli/bison_import.rb +121 -0
  91. data/lib/ibex/cli/config.rb +128 -0
  92. data/lib/ibex/cli/counterexample_options.rb +6 -2
  93. data/lib/ibex/cli/coverage.rb +173 -0
  94. data/lib/ibex/cli/debug.rb +106 -0
  95. data/lib/ibex/cli/diagnostics.rb +136 -0
  96. data/lib/ibex/cli/documentation.rb +70 -0
  97. data/lib/ibex/cli/equiv.rb +169 -0
  98. data/lib/ibex/cli/error_messages.rb +184 -0
  99. data/lib/ibex/cli/explain.rb +85 -0
  100. data/lib/ibex/cli/fix.rb +203 -0
  101. data/lib/ibex/cli/formatting.rb +387 -0
  102. data/lib/ibex/cli/fuzz.rb +200 -0
  103. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  104. data/lib/ibex/cli/generation_artifacts.rb +189 -0
  105. data/lib/ibex/cli/generation_error_messages.rb +39 -0
  106. data/lib/ibex/cli/grammar_tests.rb +140 -0
  107. data/lib/ibex/cli/ir_tools.rb +128 -0
  108. data/lib/ibex/cli/lsp.rb +33 -0
  109. data/lib/ibex/cli/outputs.rb +133 -23
  110. data/lib/ibex/cli/racc_migration.rb +87 -0
  111. data/lib/ibex/cli/reduce.rb +202 -0
  112. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  113. data/lib/ibex/cli/samples.rb +118 -0
  114. data/lib/ibex/cli/verify.rb +116 -0
  115. data/lib/ibex/cli/watch.rb +104 -0
  116. data/lib/ibex/cli.rb +825 -55
  117. data/lib/ibex/codegen/action_locations.rb +103 -0
  118. data/lib/ibex/codegen/action_method_source.rb +209 -0
  119. data/lib/ibex/codegen/action_source.rb +119 -0
  120. data/lib/ibex/codegen/ambiguity.rb +174 -0
  121. data/lib/ibex/codegen/cst_metadata.rb +171 -0
  122. data/lib/ibex/codegen/documentation.rb +170 -0
  123. data/lib/ibex/codegen/explain.rb +380 -0
  124. data/lib/ibex/codegen/generated_action_abi.rb +293 -0
  125. data/lib/ibex/codegen/html.rb +94 -10
  126. data/lib/ibex/codegen/mermaid.rb +43 -0
  127. data/lib/ibex/codegen/railroad.rb +197 -0
  128. data/lib/ibex/codegen/railroad_documentation.rb +59 -0
  129. data/lib/ibex/codegen/rbs.rb +331 -2
  130. data/lib/ibex/codegen/report.rb +67 -15
  131. data/lib/ibex/codegen/ruby.rb +305 -66
  132. data/lib/ibex/codegen/ruby_actions.rb +146 -0
  133. data/lib/ibex/codegen/ruby_ast.rb +121 -0
  134. data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
  135. data/lib/ibex/codegen/ruby_lexer.rb +83 -0
  136. data/lib/ibex/codegen/ruby_syntax.rb +96 -0
  137. data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
  138. data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
  139. data/lib/ibex/codegen/symbol_labels.rb +1 -1
  140. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  141. data/lib/ibex/configuration/explanation.rb +421 -0
  142. data/lib/ibex/configuration/inspector.rb +232 -0
  143. data/lib/ibex/configuration.rb +580 -0
  144. data/lib/ibex/coverage/collector.rb +198 -0
  145. data/lib/ibex/coverage/event_stream.rb +103 -0
  146. data/lib/ibex/coverage/report.rb +267 -0
  147. data/lib/ibex/coverage/runtime_event_validator.rb +169 -0
  148. data/lib/ibex/coverage.rb +13 -0
  149. data/lib/ibex/delta_reducer.rb +99 -0
  150. data/lib/ibex/diff.rb +140 -0
  151. data/lib/ibex/equiv/machine.rb +135 -0
  152. data/lib/ibex/equiv.rb +373 -0
  153. data/lib/ibex/error_messages/parser.rb +159 -0
  154. data/lib/ibex/error_messages/parser_v2.rb +198 -0
  155. data/lib/ibex/error_messages/renderer.rb +65 -0
  156. data/lib/ibex/error_messages/sentence_search.rb +196 -0
  157. data/lib/ibex/error_messages/update.rb +169 -0
  158. data/lib/ibex/error_messages.rb +165 -0
  159. data/lib/ibex/fix.rb +557 -0
  160. data/lib/ibex/frontend/ast.rb +166 -7
  161. data/lib/ibex/frontend/bootstrap_parser.rb +40 -4
  162. data/lib/ibex/frontend/diagnostic.rb +81 -0
  163. data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
  164. data/lib/ibex/frontend/dsl.rb +66 -7
  165. data/lib/ibex/frontend/formatter.rb +453 -0
  166. data/lib/ibex/frontend/generated_parser.rb +644 -190
  167. data/lib/ibex/frontend/generated_parser_base.rb +170 -32
  168. data/lib/ibex/frontend/generated_parser_includes.rb +51 -0
  169. data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
  170. data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
  171. data/lib/ibex/frontend/generation.rb +33 -0
  172. data/lib/ibex/frontend/lexer.rb +162 -10
  173. data/lib/ibex/frontend/lexer_recovery.rb +84 -0
  174. data/lib/ibex/frontend/parser/declarations.rb +262 -11
  175. data/lib/ibex/frontend/parser/parameters.rb +82 -0
  176. data/lib/ibex/frontend/parser/rules.rb +43 -6
  177. data/lib/ibex/frontend/parser.rb +182 -4
  178. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  179. data/lib/ibex/frontend/regenerator.rb +27 -1
  180. data/lib/ibex/frontend/resolution.rb +70 -0
  181. data/lib/ibex/frontend/resolver.rb +217 -0
  182. data/lib/ibex/frontend/rule_documentation.rb +104 -0
  183. data/lib/ibex/frontend/source_cursor.rb +133 -9
  184. data/lib/ibex/frontend/source_document.rb +229 -0
  185. data/lib/ibex/frontend/source_loader.rb +150 -0
  186. data/lib/ibex/frontend/source_span.rb +89 -0
  187. data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
  188. data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
  189. data/lib/ibex/frontend/token_adapter/declaration_state.rb +244 -22
  190. data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
  191. data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
  192. data/lib/ibex/frontend/token_adapter.rb +18 -3
  193. data/lib/ibex/frontend.rb +14 -2
  194. data/lib/ibex/fuzz.rb +219 -0
  195. data/lib/ibex/generation_input.rb +57 -0
  196. data/lib/ibex/generation_manifest.rb +211 -0
  197. data/lib/ibex/generation_transaction.rb +261 -0
  198. data/lib/ibex/generation_transaction_recovery.rb +109 -0
  199. data/lib/ibex/generation_transaction_validation.rb +196 -0
  200. data/lib/ibex/grammar_tests.rb +206 -0
  201. data/lib/ibex/ir/automaton_ir.rb +86 -11
  202. data/lib/ibex/ir/grammar_ir.rb +170 -26
  203. data/lib/ibex/ir/lexer_ir.rb +76 -0
  204. data/lib/ibex/ir/parser_contract.rb +135 -0
  205. data/lib/ibex/ir/serialize.rb +268 -50
  206. data/lib/ibex/ir/validator/automaton.rb +375 -0
  207. data/lib/ibex/ir/validator/base.rb +147 -0
  208. data/lib/ibex/ir/validator/grammar.rb +634 -0
  209. data/lib/ibex/ir/validator/lexer.rb +113 -0
  210. data/lib/ibex/ir/validator.rb +63 -0
  211. data/lib/ibex/ir.rb +71 -5
  212. data/lib/ibex/lalr/build_metrics.rb +71 -0
  213. data/lib/ibex/lalr/builder.rb +514 -52
  214. data/lib/ibex/lalr/conflict.rb +1 -0
  215. data/lib/ibex/lalr/conflict_search.rb +26 -9
  216. data/lib/ibex/lalr/counterexample.rb +38 -18
  217. data/lib/ibex/lalr/direct_lookaheads.rb +289 -0
  218. data/lib/ibex/lalr/goto_follows.rb +229 -0
  219. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  220. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  221. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  222. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  223. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  224. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  225. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  226. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  227. data/lib/ibex/lalr/ielr_partition.rb +166 -0
  228. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  229. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  230. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  231. data/lib/ibex/lalr/on_error_reductions.rb +74 -0
  232. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  233. data/lib/ibex/lalr.rb +59 -1
  234. data/lib/ibex/location.rb +129 -0
  235. data/lib/ibex/lsp/document_handlers.rb +68 -0
  236. data/lib/ibex/lsp/document_store.rb +264 -0
  237. data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
  238. data/lib/ibex/lsp/document_store_validation.rb +61 -0
  239. data/lib/ibex/lsp/initialization_handlers.rb +80 -0
  240. data/lib/ibex/lsp/navigation_handlers.rb +70 -0
  241. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  242. data/lib/ibex/lsp/position_codec.rb +113 -0
  243. data/lib/ibex/lsp/protocol_error.rb +33 -0
  244. data/lib/ibex/lsp/request_handlers.rb +46 -0
  245. data/lib/ibex/lsp/request_support.rb +94 -0
  246. data/lib/ibex/lsp/server.rb +148 -0
  247. data/lib/ibex/lsp/symbol_index.rb +241 -0
  248. data/lib/ibex/lsp/symbol_index_builder.rb +277 -0
  249. data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
  250. data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
  251. data/lib/ibex/lsp/symbol_occurrence.rb +23 -0
  252. data/lib/ibex/lsp/transport.rb +128 -0
  253. data/lib/ibex/lsp/workspace.rb +128 -0
  254. data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
  255. data/lib/ibex/lsp.rb +33 -0
  256. data/lib/ibex/messages/en.yml +28 -0
  257. data/lib/ibex/messages/ja.yml +28 -0
  258. data/lib/ibex/messages.rb +68 -0
  259. data/lib/ibex/metrics.rb +175 -0
  260. data/lib/ibex/normalize/declarations.rb +142 -7
  261. data/lib/ibex/normalize/diagnostics.rb +94 -24
  262. data/lib/ibex/normalize/expander.rb +64 -59
  263. data/lib/ibex/normalize/expression.rb +63 -40
  264. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  265. data/lib/ibex/normalize/inline_expansion.rb +465 -0
  266. data/lib/ibex/normalize/inline_validation.rb +174 -0
  267. data/lib/ibex/normalize/lexer.rb +131 -0
  268. data/lib/ibex/normalize/named_references.rb +60 -0
  269. data/lib/ibex/normalize/nodes.rb +46 -0
  270. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +70 -0
  271. data/lib/ibex/normalize/parameter_lowering.rb +143 -0
  272. data/lib/ibex/normalize/parameter_substitution.rb +125 -0
  273. data/lib/ibex/normalize/parameter_validation.rb +140 -0
  274. data/lib/ibex/normalize/parameters.rb +226 -0
  275. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  276. data/lib/ibex/normalize/recovery_declarations.rb +84 -0
  277. data/lib/ibex/normalize.rb +172 -17
  278. data/lib/ibex/racc_migration/checker.rb +122 -0
  279. data/lib/ibex/racc_migration/harness.rb +177 -0
  280. data/lib/ibex/racc_migration/report.rb +97 -0
  281. data/lib/ibex/racc_migration.rb +12 -0
  282. data/lib/ibex/rake_task.rb +116 -0
  283. data/lib/ibex/samples.rb +216 -0
  284. data/lib/ibex/table_artifact/builder.rb +266 -0
  285. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  286. data/lib/ibex/table_artifact/document.rb +39 -0
  287. data/lib/ibex/table_artifact/executor.rb +187 -0
  288. data/lib/ibex/table_artifact/serializer.rb +57 -0
  289. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  290. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  291. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  292. data/lib/ibex/table_artifact/validator.rb +253 -0
  293. data/lib/ibex/table_artifact.rb +88 -0
  294. data/lib/ibex/table_simulation/result.rb +55 -0
  295. data/lib/ibex/table_simulation/simulator.rb +253 -0
  296. data/lib/ibex/table_simulation/step.rb +62 -0
  297. data/lib/ibex/table_simulation/text.rb +31 -0
  298. data/lib/ibex/table_simulation.rb +13 -0
  299. data/lib/ibex/tables.rb +22 -69
  300. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  301. data/lib/ibex/verification_report/builder.rb +159 -0
  302. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  303. data/lib/ibex/verification_report/logical_path.rb +68 -0
  304. data/lib/ibex/verification_report/validator.rb +329 -0
  305. data/lib/ibex/verification_report.rb +69 -0
  306. data/lib/ibex/verify/action_correspondence.rb +138 -0
  307. data/lib/ibex/verify/language_witness.rb +295 -0
  308. data/lib/ibex/verify/reference_collection.rb +190 -0
  309. data/lib/ibex/verify/result.rb +73 -0
  310. data/lib/ibex/verify/verifier.rb +598 -0
  311. data/lib/ibex/verify.rb +15 -0
  312. data/lib/ibex/version.rb +1 -1
  313. data/lib/ibex/watch/runner.rb +181 -0
  314. data/lib/ibex/watch/source_snapshot.rb +98 -0
  315. data/lib/ibex/watch.rb +11 -0
  316. data/lib/ibex.rb +35 -1
  317. data/schema/automaton-ir-definitions.schema.json +401 -0
  318. data/schema/automaton-ir.schema.json +65 -0
  319. data/schema/benchmark-v1.schema.json +212 -0
  320. data/schema/benchmark-v2.schema.json +61 -0
  321. data/schema/bison-import-v1.schema.json +106 -0
  322. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  323. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  324. data/schema/construction-profile-v1.schema.json +779 -0
  325. data/schema/cst-v1.json +170 -0
  326. data/schema/diff-v1.schema.json +41 -0
  327. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  328. data/schema/equiv-v1.schema.json +64 -0
  329. data/schema/error-ux-review-v1.schema.json +609 -0
  330. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  331. data/schema/error-ux-round2-v1.schema.json +519 -0
  332. data/schema/error-ux-v1.schema.json +258 -0
  333. data/schema/explain-v1.schema.json +495 -0
  334. data/schema/fix-v1.schema.json +64 -0
  335. data/schema/fix-v2.schema.json +66 -0
  336. data/schema/fix-v3.schema.json +101 -0
  337. data/schema/frontend-diagnostics-v1.schema.json +154 -0
  338. data/schema/fuzz-regression-v1.schema.json +79 -0
  339. data/schema/fuzz-v1.schema.json +114 -0
  340. data/schema/generation-manifest-v1.schema.json +115 -0
  341. data/schema/grammar-ir-extensions.schema.json +734 -0
  342. data/schema/grammar-ir-foundation.schema.json +426 -0
  343. data/schema/grammar-ir.schema.json +271 -0
  344. data/schema/ielr-benchmark-v1.schema.json +85 -0
  345. data/schema/lexer-ir-v1.schema.json +215 -0
  346. data/schema/lexer-profile-v1.schema.json +491 -0
  347. data/schema/metrics-v1.schema.json +60 -0
  348. data/schema/migration-check-v1.schema.json +60 -0
  349. data/schema/performance-comparison-v1.schema.json +395 -0
  350. data/schema/public-performance-comparison-v1.schema.json +506 -0
  351. data/schema/public-performance-profile-v1.schema.json +360 -0
  352. data/schema/reduce-v1.schema.json +22 -0
  353. data/schema/reduce-v2.schema.json +63 -0
  354. data/schema/runtime-coverage-v1.schema.json +86 -0
  355. data/schema/runtime-event-v1.schema.json +308 -0
  356. data/schema/table-artifact-v1.schema.json +377 -0
  357. data/schema/table-simulation-v1.schema.json +70 -0
  358. data/schema/verification-report-v1.schema.json +222 -0
  359. data/schema/verify-v1.schema.json +42 -0
  360. data/sig/ibex/analysis/digraph.rbs +19 -0
  361. data/sig/ibex/artifact_set.rbs +37 -0
  362. data/sig/ibex/bison_import/importer.rbs +140 -0
  363. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  364. data/sig/ibex/bison_import.rbs +95 -0
  365. data/sig/ibex/bounded_subprocess.rbs +76 -0
  366. data/sig/ibex/cli/ambiguity.rbs +28 -0
  367. data/sig/ibex/cli/analysis.rbs +43 -0
  368. data/sig/ibex/cli/bison_import.rbs +32 -0
  369. data/sig/ibex/cli/config.rbs +35 -0
  370. data/sig/ibex/cli/counterexample_options.rbs +2 -0
  371. data/sig/ibex/cli/coverage.rbs +53 -0
  372. data/sig/ibex/cli/debug.rbs +28 -0
  373. data/sig/ibex/cli/diagnostics.rbs +51 -0
  374. data/sig/ibex/cli/documentation.rbs +29 -0
  375. data/sig/ibex/cli/equiv.rbs +49 -0
  376. data/sig/ibex/cli/error_messages.rbs +63 -0
  377. data/sig/ibex/cli/explain.rbs +31 -0
  378. data/sig/ibex/cli/fix.rbs +53 -0
  379. data/sig/ibex/cli/formatting.rbs +107 -0
  380. data/sig/ibex/cli/fuzz.rbs +47 -0
  381. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  382. data/sig/ibex/cli/generation_artifacts.rbs +69 -0
  383. data/sig/ibex/cli/generation_error_messages.rbs +19 -0
  384. data/sig/ibex/cli/grammar_tests.rbs +48 -0
  385. data/sig/ibex/cli/ir_tools.rbs +39 -0
  386. data/sig/ibex/cli/lsp.rbs +14 -0
  387. data/sig/ibex/cli/outputs.rbs +26 -3
  388. data/sig/ibex/cli/racc_migration.rbs +30 -0
  389. data/sig/ibex/cli/reduce.rbs +60 -0
  390. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  391. data/sig/ibex/cli/samples.rbs +38 -0
  392. data/sig/ibex/cli/verify.rbs +28 -0
  393. data/sig/ibex/cli/watch.rbs +43 -0
  394. data/sig/ibex/cli.rbs +182 -9
  395. data/sig/ibex/codegen/action_locations.rbs +45 -0
  396. data/sig/ibex/codegen/action_method_source.rbs +65 -0
  397. data/sig/ibex/codegen/action_source.rbs +50 -0
  398. data/sig/ibex/codegen/ambiguity.rbs +60 -0
  399. data/sig/ibex/codegen/cst_metadata.rbs +59 -0
  400. data/sig/ibex/codegen/documentation.rbs +50 -0
  401. data/sig/ibex/codegen/explain.rbs +105 -0
  402. data/sig/ibex/codegen/generated_action_abi.rbs +105 -0
  403. data/sig/ibex/codegen/html.rbs +18 -2
  404. data/sig/ibex/codegen/mermaid.rbs +16 -0
  405. data/sig/ibex/codegen/railroad.rbs +82 -0
  406. data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
  407. data/sig/ibex/codegen/rbs.rbs +86 -4
  408. data/sig/ibex/codegen/report.rbs +16 -8
  409. data/sig/ibex/codegen/ruby.rbs +105 -28
  410. data/sig/ibex/codegen/ruby_actions.rbs +54 -0
  411. data/sig/ibex/codegen/ruby_ast.rbs +34 -0
  412. data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
  413. data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
  414. data/sig/ibex/codegen/ruby_syntax.rbs +27 -0
  415. data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
  416. data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
  417. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  418. data/sig/ibex/configuration/explanation.rbs +195 -0
  419. data/sig/ibex/configuration/inspector.rbs +53 -0
  420. data/sig/ibex/configuration.rbs +242 -0
  421. data/sig/ibex/coverage/collector.rbs +78 -0
  422. data/sig/ibex/coverage/event_stream.rbs +44 -0
  423. data/sig/ibex/coverage/report.rbs +102 -0
  424. data/sig/ibex/coverage/runtime_event_validator.rbs +70 -0
  425. data/sig/ibex/coverage.rbs +7 -0
  426. data/sig/ibex/delta_reducer.rbs +38 -0
  427. data/sig/ibex/diff.rbs +47 -0
  428. data/sig/ibex/equiv/machine.rbs +54 -0
  429. data/sig/ibex/equiv.rbs +129 -0
  430. data/sig/ibex/error_messages/parser.rbs +58 -0
  431. data/sig/ibex/error_messages/parser_v2.rbs +67 -0
  432. data/sig/ibex/error_messages/renderer.rbs +23 -0
  433. data/sig/ibex/error_messages/sentence_search.rbs +80 -0
  434. data/sig/ibex/error_messages/update.rbs +43 -0
  435. data/sig/ibex/error_messages.rbs +85 -0
  436. data/sig/ibex/fix.rbs +138 -0
  437. data/sig/ibex/frontend/ast.rbs +237 -22
  438. data/sig/ibex/frontend/bootstrap_parser.rbs +13 -0
  439. data/sig/ibex/frontend/diagnostic.rbs +53 -0
  440. data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
  441. data/sig/ibex/frontend/dsl.rbs +33 -4
  442. data/sig/ibex/frontend/formatter.rbs +143 -0
  443. data/sig/ibex/frontend/generated_parser.rbs +228 -68
  444. data/sig/ibex/frontend/generated_parser_base.rbs +65 -12
  445. data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
  446. data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
  447. data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
  448. data/sig/ibex/frontend/generation.rbs +6 -0
  449. data/sig/ibex/frontend/lexer.rbs +49 -2
  450. data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
  451. data/sig/ibex/frontend/parser/declarations.rbs +57 -0
  452. data/sig/ibex/frontend/parser/parameters.rbs +28 -0
  453. data/sig/ibex/frontend/parser/rules.rbs +3 -0
  454. data/sig/ibex/frontend/parser.rbs +66 -0
  455. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  456. data/sig/ibex/frontend/regenerator.rbs +11 -0
  457. data/sig/ibex/frontend/resolution.rbs +34 -0
  458. data/sig/ibex/frontend/resolver.rbs +91 -0
  459. data/sig/ibex/frontend/rule_documentation.rbs +42 -0
  460. data/sig/ibex/frontend/source_cursor.rbs +38 -5
  461. data/sig/ibex/frontend/source_document.rbs +119 -0
  462. data/sig/ibex/frontend/source_loader.rbs +66 -0
  463. data/sig/ibex/frontend/source_span.rbs +56 -0
  464. data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
  465. data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
  466. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +83 -3
  467. data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
  468. data/sig/ibex/frontend/token_adapter.rbs +11 -2
  469. data/sig/ibex/frontend.rbs +1 -1
  470. data/sig/ibex/fuzz.rbs +71 -0
  471. data/sig/ibex/generation_input.rbs +37 -0
  472. data/sig/ibex/generation_manifest.rbs +70 -0
  473. data/sig/ibex/generation_transaction.rbs +82 -0
  474. data/sig/ibex/generation_transaction_recovery.rbs +36 -0
  475. data/sig/ibex/generation_transaction_validation.rbs +65 -0
  476. data/sig/ibex/grammar_tests.rbs +93 -0
  477. data/sig/ibex/ir/automaton_ir.rbs +35 -10
  478. data/sig/ibex/ir/grammar_ir.rbs +96 -22
  479. data/sig/ibex/ir/lexer_ir.rbs +57 -0
  480. data/sig/ibex/ir/parser_contract.rbs +69 -0
  481. data/sig/ibex/ir/serialize.rbs +75 -23
  482. data/sig/ibex/ir/validator/automaton.rbs +112 -0
  483. data/sig/ibex/ir/validator/base.rbs +69 -0
  484. data/sig/ibex/ir/validator/grammar.rbs +195 -0
  485. data/sig/ibex/ir/validator/lexer.rbs +37 -0
  486. data/sig/ibex/ir/validator.rbs +16 -0
  487. data/sig/ibex/ir.rbs +45 -5
  488. data/sig/ibex/lalr/build_metrics.rbs +60 -0
  489. data/sig/ibex/lalr/builder.rbs +150 -19
  490. data/sig/ibex/lalr/conflict_search.rbs +12 -5
  491. data/sig/ibex/lalr/counterexample.rbs +20 -14
  492. data/sig/ibex/lalr/direct_lookaheads.rbs +93 -0
  493. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  494. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  495. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  496. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  497. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  498. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  499. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  500. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  501. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  502. data/sig/ibex/lalr/ielr_partition.rbs +71 -0
  503. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  504. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  505. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  506. data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
  507. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  508. data/sig/ibex/lalr.rbs +17 -1
  509. data/sig/ibex/location.rbs +67 -0
  510. data/sig/ibex/lsp/document_handlers.rbs +24 -0
  511. data/sig/ibex/lsp/document_store.rbs +94 -0
  512. data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
  513. data/sig/ibex/lsp/document_store_validation.rbs +26 -0
  514. data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
  515. data/sig/ibex/lsp/navigation_handlers.rbs +33 -0
  516. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  517. data/sig/ibex/lsp/position_codec.rbs +44 -0
  518. data/sig/ibex/lsp/protocol_error.rbs +32 -0
  519. data/sig/ibex/lsp/request_handlers.rbs +26 -0
  520. data/sig/ibex/lsp/request_support.rbs +40 -0
  521. data/sig/ibex/lsp/server.rbs +55 -0
  522. data/sig/ibex/lsp/symbol_index.rbs +77 -0
  523. data/sig/ibex/lsp/symbol_index_builder.rbs +88 -0
  524. data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
  525. data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
  526. data/sig/ibex/lsp/symbol_occurrence.rbs +31 -0
  527. data/sig/ibex/lsp/transport.rbs +47 -0
  528. data/sig/ibex/lsp/workspace.rbs +42 -0
  529. data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
  530. data/sig/ibex/lsp.rbs +7 -0
  531. data/sig/ibex/messages.rbs +26 -0
  532. data/sig/ibex/metrics.rbs +50 -0
  533. data/sig/ibex/normalize/declarations.rbs +31 -0
  534. data/sig/ibex/normalize/diagnostics.rbs +13 -4
  535. data/sig/ibex/normalize/expander.rbs +22 -16
  536. data/sig/ibex/normalize/expression.rbs +11 -9
  537. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  538. data/sig/ibex/normalize/inline_expansion.rbs +129 -0
  539. data/sig/ibex/normalize/inline_validation.rbs +40 -0
  540. data/sig/ibex/normalize/lexer.rbs +37 -0
  541. data/sig/ibex/normalize/named_references.rbs +20 -0
  542. data/sig/ibex/normalize/nodes.rbs +14 -0
  543. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +33 -0
  544. data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
  545. data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
  546. data/sig/ibex/normalize/parameter_validation.rbs +44 -0
  547. data/sig/ibex/normalize/parameters.rbs +51 -0
  548. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  549. data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
  550. data/sig/ibex/normalize.rbs +129 -18
  551. data/sig/ibex/racc_migration/checker.rbs +36 -0
  552. data/sig/ibex/racc_migration/harness.rbs +16 -0
  553. data/sig/ibex/racc_migration/report.rbs +55 -0
  554. data/sig/ibex/racc_migration.rbs +8 -0
  555. data/sig/ibex/rake_task.rbs +51 -0
  556. data/sig/ibex/samples.rbs +60 -0
  557. data/sig/ibex/table_artifact/builder.rbs +93 -0
  558. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  559. data/sig/ibex/table_artifact/document.rbs +27 -0
  560. data/sig/ibex/table_artifact/executor.rbs +66 -0
  561. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  562. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  563. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  564. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  565. data/sig/ibex/table_artifact/validator.rbs +66 -0
  566. data/sig/ibex/table_artifact.rbs +32 -0
  567. data/sig/ibex/table_simulation/result.rbs +36 -0
  568. data/sig/ibex/table_simulation/simulator.rbs +98 -0
  569. data/sig/ibex/table_simulation/step.rbs +42 -0
  570. data/sig/ibex/table_simulation/text.rbs +14 -0
  571. data/sig/ibex/table_simulation.rbs +7 -0
  572. data/sig/ibex/tables.rbs +10 -35
  573. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  574. data/sig/ibex/verification_report/builder.rbs +53 -0
  575. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  576. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  577. data/sig/ibex/verification_report/validator.rbs +114 -0
  578. data/sig/ibex/verification_report.rbs +44 -0
  579. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  580. data/sig/ibex/verify/language_witness.rbs +112 -0
  581. data/sig/ibex/verify/reference_collection.rbs +63 -0
  582. data/sig/ibex/verify/result.rbs +52 -0
  583. data/sig/ibex/verify/verifier.rbs +170 -0
  584. data/sig/ibex/verify.rbs +6 -0
  585. data/sig/ibex/watch/runner.rbs +58 -0
  586. data/sig/ibex/watch/source_snapshot.rbs +46 -0
  587. data/sig/ibex/watch.rbs +7 -0
  588. data/sig/ibex.rbs +2 -0
  589. metadata +524 -19
  590. data/.rubocop.yml +0 -43
  591. data/CHANGELOG.md +0 -30
  592. data/Rakefile +0 -25
  593. data/Steepfile +0 -10
  594. data/docs/compat-notes.md +0 -37
  595. data/docs/lexer-coverage.md +0 -14
  596. data/docs/phase10-extensions.md +0 -27
  597. data/gemfiles/Gemfile +0 -7
  598. data/gemfiles/Gemfile.lock +0 -98
  599. data/lib/ibex/frontend/grammar.y +0 -156
  600. data/lib/ibex/runtime/parser.rb +0 -360
  601. data/lib/ibex/runtime.rb +0 -8
  602. data/sig/ibex/runtime/parser.rbs +0 -167
  603. data/sig/ibex/runtime.rbs +0 -6
@@ -3,48 +3,104 @@
3
3
  module Ibex
4
4
  module Codegen
5
5
  # Generates a standalone Ruby parser class from Automaton IR.
6
+ # rubocop:disable Metrics/ClassLength -- generation stages are split into focused mixins.
6
7
  class Ruby
7
- @executable: String?
8
+ include RubyActions
8
9
 
9
- @superclass: String
10
+ include RubyErrorMessages
10
11
 
11
- @omit_action_call: bool
12
+ include RubyTableMetadata
12
13
 
13
- @debug: bool
14
+ include RubyValuePrinters
14
15
 
15
- @line_convert_all: bool
16
+ include RubyLexer
16
17
 
17
- @line_convert: bool
18
+ include RubyAST
18
19
 
19
- @embedded: bool
20
+ include RubySyntax
20
21
 
21
- @table_format: Symbol
22
+ @automaton: IR::Automaton
22
23
 
23
24
  @grammar: IR::Grammar
24
25
 
25
- @automaton: IR::Automaton
26
+ @table_format: Symbol
27
+
28
+ @embedded: bool
29
+
30
+ @line_convert: bool
31
+
32
+ @line_convert_all: bool
33
+
34
+ @debug: bool
35
+
36
+ @omit_action_call: bool
37
+
38
+ @superclass: String
39
+
40
+ @executable: String?
41
+
42
+ @cst_trivia: Symbol
43
+
44
+ @error_messages: Hash[Integer, String | { id: String, message: String }]
45
+
46
+ @generated_action_abi: GeneratedActionABI::Cache
47
+
48
+ @runtime_require: String?
26
49
 
27
50
  # @rbs (IR::Automaton automaton, ?table: Symbol | String, ?embedded: bool, ?line_convert: bool,
28
51
  # ?line_convert_all: bool, ?debug: bool, ?omit_action_call: bool?, ?superclass: String?,
29
- # ?executable: String?) -> void
30
- def initialize: (IR::Automaton automaton, ?table: Symbol | String, ?embedded: bool, ?line_convert: bool, ?line_convert_all: bool, ?debug: bool, ?omit_action_call: bool?, ?superclass: String?, ?executable: String?) -> void
52
+ # ?executable: String?, ?cst_trivia: Symbol | String, ?runtime_require: String?,
53
+ # ?error_messages: Hash[Integer, String | { id: String, message: String }]) -> void
54
+ def initialize: (IR::Automaton automaton, ?table: Symbol | String, ?embedded: bool, ?line_convert: bool, ?line_convert_all: bool, ?debug: bool, ?omit_action_call: bool?, ?superclass: String?, ?executable: String?, ?cst_trivia: Symbol | String, ?runtime_require: String?, ?error_messages: Hash[Integer, String | { id: String, message: String }]) -> void
31
55
 
32
56
  # @rbs () -> String
33
57
  def generate: () -> String
34
58
 
35
59
  private
36
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
+
37
69
  # @rbs (Array[String] lines) -> void
38
70
  def append_runtime: (Array[String] lines) -> void
39
71
 
40
- # @rbs (String relative_path) -> String
41
- def embedded_source: (String relative_path) -> String
42
-
43
72
  # @rbs (Array[String] lines) -> void
44
73
  def append_tables: (Array[String] lines) -> void
45
74
 
46
- # @rbs (untyped table) -> String
47
- def table_literal: (untyped table) -> String
75
+ # @rbs (Array[String] lines, String indent) -> void
76
+ def append_cst_metadata: (Array[String] lines, String indent) -> void
77
+
78
+ # @rbs (Array[String] lines, String indent, Tables::TableSet table_set) -> void
79
+ def append_parser_tables: (Array[String] lines, String indent, Tables::TableSet table_set) -> void
80
+
81
+ # @rbs (Array[String] lines) -> void
82
+ def append_parameter_initializer: (Array[String] lines) -> void
83
+
84
+ # Custom conversion expressions can return caller-owned mutable or
85
+ # inherently unshareable objects, so only standard token mappings are
86
+ # safe to freeze transitively.
87
+ # @rbs () -> bool
88
+ def shareable_parser_tables?: () -> bool
89
+
90
+ # @rbs () -> CSTMetadata::metadata
91
+ def cst_metadata: () -> CSTMetadata::metadata
92
+
93
+ # @rbs (Object? value) -> String
94
+ def deep_frozen_literal: (Object? value) -> String
95
+
96
+ # @rbs (Object? table) -> String
97
+ def table_literal: (Object? table) -> String
98
+
99
+ # @rbs (Array[untyped] values) -> String
100
+ def packed_integers_literal: (Array[untyped] values) -> String
101
+
102
+ # @rbs (Array[untyped] values) -> String
103
+ def packed_signed_integers_literal: (Array[untyped] values) -> String
48
104
 
49
105
  # @rbs () -> String
50
106
  def token_ids_literal: () -> String
@@ -55,26 +111,47 @@ module Ibex
55
111
  # @rbs () -> String
56
112
  def token_names_literal: () -> String
57
113
 
114
+ # @rbs () -> String
115
+ def symbol_names_literal: () -> String
116
+
58
117
  # @rbs () -> String
59
118
  def productions_literal: () -> String
60
119
 
61
- # @rbs (Array[String] lines) -> void
62
- def append_actions: (Array[String] lines) -> void
120
+ # @rbs () -> String
121
+ def plain_productions_literal: () -> String
122
+
123
+ # @rbs (IR::Production production, bool generated_action) -> String
124
+ def production_action_abi_literal: (IR::Production production, bool generated_action) -> String
125
+
126
+ # @rbs () -> String
127
+ def compact_productions_literal: () -> String
128
+
129
+ # @rbs (IR::Production production) -> Integer
130
+ def compact_production_flags: (IR::Production production) -> Integer
131
+
132
+ # @rbs () -> String
133
+ def compact_production_metadata_literal: () -> String
134
+
135
+ # Reductions that are the sole non-error behavior of a state may run
136
+ # before requesting another lexer token. This enables parser actions to
137
+ # select lexer_state without speculative lookahead.
138
+ # @rbs () -> String
139
+ def eager_reductions_literal: () -> String
63
140
 
64
- # @rbs (Array[String] lines, IR::Production production) -> void
65
- def append_action_constant: (Array[String] lines, IR::Production production) -> void
141
+ # @rbs (IR::AutomatonState state) -> IR::reduce_action?
142
+ def eager_lexer_feedback_reduction: (IR::AutomatonState state) -> IR::reduce_action?
66
143
 
67
- # @rbs (Array[String] lines, IR::Production production) -> void
68
- def append_action_method: (Array[String] lines, IR::Production production) -> void
144
+ # @rbs (IR::Action? action) -> [String, String]
145
+ def production_location_metadata: (IR::Action? action) -> [ String, String ]
69
146
 
70
- # @rbs (Array[String] lines, IR::Action? action) -> void
71
- def append_named_bindings: (Array[String] lines, IR::Action? action) -> void
147
+ # @rbs () -> bool
148
+ def uses_locations?: () -> bool
72
149
 
73
- # @rbs (Array[String] lines, IR::Production production) -> void
74
- def append_semantic_code: (Array[String] lines, IR::Production production) -> void
150
+ # @rbs (IR::Production production, IR::Action action) -> bool
151
+ def action_references_locations?: (IR::Production production, IR::Action action) -> bool
75
152
 
76
- # @rbs (IR::Production production) -> bool
77
- def action_method?: (IR::Production production) -> bool
153
+ # @rbs () -> bool
154
+ def cst?: () -> bool
78
155
 
79
156
  # @rbs (Array[String] lines, String name, ?indent: Integer) -> void
80
157
  def append_user_code: (Array[String] lines, String name, ?indent: Integer) -> void
@@ -0,0 +1,54 @@
1
+ # Generated from lib/ibex/codegen/ruby_actions.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Semantic-action method generation shared by direct and source-mapped
6
+ # Ruby output.
7
+ module RubyActions
8
+ include RubyAST
9
+
10
+ @action_method_source: ActionMethodSource?
11
+
12
+ @omit_action_call: bool
13
+
14
+ @line_convert: bool
15
+
16
+ @grammar: IR::Grammar
17
+
18
+ private
19
+
20
+ # @rbs (Array[String] lines) -> void
21
+ def append_actions: (Array[String] lines) -> void
22
+
23
+ # @rbs (Array[String] lines, IR::Production production) -> void
24
+ def append_composed_action_method: (Array[String] lines, IR::Production production) -> void
25
+
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
+
29
+ # @rbs (IR::Production production, Integer index) -> String
30
+ def composed_fragment_name: (IR::Production production, Integer index) -> String
31
+
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
+
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
+
38
+ # @rbs (Array[String] lines, IR::Production production) -> void
39
+ def append_compiled_action_method: (Array[String] lines, IR::Production production) -> void
40
+
41
+ # @rbs (Array[String] lines, IR::Production production) -> void
42
+ def append_action_method: (Array[String] lines, IR::Production production) -> void
43
+
44
+ # @rbs (IR::Production production) -> bool
45
+ def action_method?: (IR::Production production) -> bool
46
+
47
+ # @rbs (IR::Production production) -> bool
48
+ def composed_action?: (IR::Production production) -> bool
49
+
50
+ # @rbs () -> ActionMethodSource
51
+ def action_method_source: () -> ActionMethodSource
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,34 @@
1
+ # Generated from lib/ibex/codegen/ruby_ast.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Generates typed AST data classes and traversal bases from @node metadata.
6
+ module RubyAST
7
+ private
8
+
9
+ # @rbs (Array[String] lines) -> void
10
+ def append_ast: (Array[String] lines) -> void
11
+
12
+ # @rbs () -> Hash[String, IR::node_annotation]
13
+ def ast_node_definitions: () -> Hash[String, IR::node_annotation]
14
+
15
+ # @rbs (Array[String] lines, Hash[String, IR::node_annotation] definitions) -> void
16
+ def append_visitor: (Array[String] lines, Hash[String, IR::node_annotation] definitions) -> void
17
+
18
+ # @rbs (Array[String] lines) -> void
19
+ def append_visit_children: (Array[String] lines) -> void
20
+
21
+ # @rbs (Array[String] lines, Hash[String, IR::node_annotation] definitions) -> void
22
+ def append_listener: (Array[String] lines, Hash[String, IR::node_annotation] definitions) -> void
23
+
24
+ # @rbs (Array[String] lines, Hash[String, IR::node_annotation] definitions, :enter | :exit kind) -> void
25
+ def append_listener_dispatch: (Array[String] lines, Hash[String, IR::node_annotation] definitions, :enter | :exit kind) -> void
26
+
27
+ # @rbs (IR::Production production) -> String
28
+ def ast_node_action_source: (IR::Production production) -> String
29
+
30
+ # @rbs (String name) -> String
31
+ def ast_method_name: (String name) -> String
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/ibex/codegen/ruby_error_messages.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Serializes immutable example-keyed error records into generated Ruby.
6
+ module RubyErrorMessages
7
+ private
8
+
9
+ # @rbs () -> String
10
+ def error_messages_literal: () -> String
11
+
12
+ # @rbs (String | { id: String, message: String } message) -> String
13
+ def error_message_literal: (String | { id: String, message: String } message) -> String
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ # Generated from lib/ibex/codegen/ruby_lexer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Generated lexer tables and action methods.
6
+ module RubyLexer
7
+ private
8
+
9
+ # @rbs (Array[String] lines) -> void
10
+ def append_lexer: (Array[String] lines) -> void
11
+
12
+ # @rbs (Array[String] lines, IR::Lexer lexer) -> void
13
+ def append_lexer_rules: (Array[String] lines, IR::Lexer lexer) -> void
14
+
15
+ # @rbs (IR::LexerRule rule) -> String
16
+ def lexer_rule_literal: (IR::LexerRule rule) -> String
17
+
18
+ # @rbs (Array[String] lines, IR::Lexer lexer) -> void
19
+ def append_lexer_actions: (Array[String] lines, IR::Lexer lexer) -> void
20
+
21
+ # @rbs (IR::LexerRule rule) -> String
22
+ def lexer_action_source: (IR::LexerRule rule) -> String
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ # Generated from lib/ibex/codegen/ruby_syntax.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Generates typed Red syntax views from @node metadata.
6
+ module RubySyntax
7
+ type syntax_definition = Hash[Symbol, untyped]
8
+
9
+ private
10
+
11
+ # @rbs (Array[String] lines) -> void
12
+ def append_syntax: (Array[String] lines) -> void
13
+
14
+ # @rbs () -> Hash[String, syntax_definition]
15
+ def syntax_node_definitions: () -> Hash[String, syntax_definition]
16
+
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]
19
+
20
+ # @rbs (Array[String] lines, syntax_definition definition) -> void
21
+ def append_syntax_node: (Array[String] lines, syntax_definition definition) -> void
22
+
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
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ # Generated from lib/ibex/codegen/ruby_table_metadata.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Emits immutable identity and size metadata for generated parser tables.
6
+ module RubyTableMetadata
7
+ @automaton: IR::Automaton
8
+
9
+ @grammar: IR::Grammar
10
+
11
+ private
12
+
13
+ # @rbs (Array[String] lines, String indent) -> void
14
+ def append_table_metadata: (Array[String] lines, String indent) -> void
15
+
16
+ # @rbs (Array[String] lines) -> void
17
+ def append_entry_methods: (Array[String] lines) -> void
18
+
19
+ # @rbs () -> String
20
+ def entry_table_fields: () -> String
21
+
22
+ # @rbs () -> String
23
+ def recovery_table_fields: () -> String
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/ibex/codegen/ruby_value_printers.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Codegen
5
+ # Emits declarative value-printer tables and methods for Ruby parsers.
6
+ module RubyValuePrinters
7
+ @grammar: IR::Grammar
8
+
9
+ @line_convert: bool
10
+
11
+ @value_printer_action_method_source: ActionMethodSource?
12
+
13
+ private
14
+
15
+ # @rbs (Array[String] lines, String indent) -> void
16
+ def append_value_printer_table: (Array[String] lines, String indent) -> void
17
+
18
+ # @rbs (Array[String] lines) -> void
19
+ def append_value_printers: (Array[String] lines) -> void
20
+
21
+ # @rbs (Array[String] lines, IR::value_printer printer) -> void
22
+ def append_value_printer: (Array[String] lines, IR::value_printer printer) -> void
23
+
24
+ # @rbs () -> ActionMethodSource
25
+ def value_printer_action_method_source: () -> ActionMethodSource
26
+ end
27
+ end
28
+ 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
@@ -0,0 +1,53 @@
1
+ # Generated from lib/ibex/configuration/inspector.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Configuration
5
+ # Converts parsed source or validated Grammar IR into static configuration facts.
6
+ # rubocop:disable Metrics/ModuleLength -- source and IR adapters share one closed evidence vocabulary.
7
+ module Inspector
8
+ # @rbs (Frontend::Resolution resolution) -> Input
9
+ def self?.from_source: (Frontend::Resolution resolution) -> Input
10
+
11
+ # @rbs (IR::Grammar grammar, path: String) -> Input
12
+ def self?.from_grammar_ir: (IR::Grammar grammar, path: String) -> Input
13
+
14
+ # @rbs (Hash[String, config_value] values, Hash[String, Location] locations,
15
+ # Hash[String, Array[Evidence]] evidence, String name, config_value value,
16
+ # Frontend::Location | Location location) -> void
17
+ def self?.add_source_fact: (Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, String name, config_value value, Frontend::Location | Location location) -> void
18
+
19
+ # @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
20
+ # Hash[String, Array[Evidence]] evidence) -> void
21
+ def self?.add_source_options: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
22
+
23
+ # @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
24
+ # Hash[String, Array[Evidence]] evidence) -> void
25
+ def self?.add_source_parser_contract: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
26
+
27
+ # @rbs (String name) -> bool?
28
+ def self?.option_value: (String name) -> bool?
29
+
30
+ # @rbs (Frontend::Location | Location location) -> Location
31
+ def self?.configuration_location: (Frontend::Location | Location location) -> Location
32
+
33
+ # @rbs (Key key, Array[[bool, Location]] occurrences, bool selected_value) -> Array[Evidence]
34
+ def self?.option_evidence: (Key key, Array[[ bool, Location ]] occurrences, bool selected_value) -> Array[Evidence]
35
+
36
+ # @rbs (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence,
37
+ # Hash[String, Recording] recordings, String name, config_value value) -> void
38
+ def self?.add_ir_fact: (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings, String name, config_value value) -> void
39
+
40
+ # @rbs (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations,
41
+ # Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
42
+ def self?.add_parser_contract: (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
43
+
44
+ # @rbs (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values,
45
+ # Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence,
46
+ # Hash[String, Recording] recordings) -> void
47
+ def self?.add_contract_entry: (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
48
+
49
+ # @rbs (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
50
+ def self?.contract_entries: (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
51
+ end
52
+ end
53
+ end