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
@@ -2,25 +2,49 @@
2
2
 
3
3
  module Ibex
4
4
  module Frontend
5
+ # Keeps the public Rule constructor compatible with ASTs built before parameters and inline rules existed.
6
+ module ASTRuleDefaults
7
+ # @rbs (*untyped arguments, **untyped keywords) -> void
8
+ def initialize: (*untyped arguments, **untyped keywords) -> void
9
+ end
10
+
5
11
  # Grammar frontend node types.
12
+ # rubocop:disable Metrics/ModuleLength -- the public node vocabulary is intentionally kept together.
6
13
  module AST
7
- type declaration = Tokens | Precedence | Options | Expect | Start | Convert
14
+ type symbol_metadata = DisplayName | SemanticType
15
+
16
+ type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | ParserConfiguration | symbol_metadata
8
17
 
9
- type item = SymbolReference | InlineAction | Optional | Star | Plus | Group | SeparatedList
18
+ type lexer_entry = LexerRule | LexerState
19
+
20
+ type item = SymbolReference | ParameterizedReference | InlineAction | Optional | Star | Plus | Group | SeparatedList | Empty
10
21
 
11
22
  type user_code = Hash[String, Array[UserCode]]
12
23
 
24
+ class Rule < Struct[String | Array[String] | Array[Alternative] | Location | String? | bool]
25
+ attr_accessor lhs: String
26
+ attr_accessor parameters: Array[String]
27
+ attr_accessor alternatives: Array[Alternative]
28
+ attr_accessor loc: Location
29
+ attr_accessor documentation: String?
30
+ attr_accessor inline: bool
31
+ def self.new: (?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool?) -> instance
32
+ | ({ ?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool? }) -> instance
33
+ end
34
+
13
35
  # Adds deterministic, recursively serializable hashes to Struct nodes.
14
- # @rbs module-self Struct[untyped]
15
- module Node : Struct[untyped]
16
- def to_h: () -> untyped
36
+ # @rbs module-self Struct[Object?]
37
+ module Node : Struct[Object?]
38
+ # @rbs () -> Hash[Symbol, untyped]
39
+ def to_h: () -> Hash[Symbol, untyped]
17
40
 
18
41
  private
19
42
 
43
+ # @rbs (untyped value) -> untyped
20
44
  def serialize: (untyped value) -> untyped
21
45
  end
22
46
 
23
- class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location]
47
+ class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool? | Location?]
24
48
  attr_accessor class_name(): String
25
49
 
26
50
  attr_accessor superclass(): String?
@@ -33,17 +57,45 @@ module Ibex
33
57
 
34
58
  attr_accessor loc(): Location
35
59
 
36
- def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location) -> instance
37
- | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location }) -> instance
60
+ attr_accessor extended(): bool?
61
+
62
+ attr_accessor cst(): bool?
63
+
64
+ attr_accessor extended_loc(): Location?
65
+
66
+ def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location?) -> instance
67
+ | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location? }) -> instance
68
+ end
69
+
70
+ class Fragment < Struct[Array[declaration] | Array[Rule] | Location]
71
+ attr_accessor declarations(): Array[declaration]
72
+
73
+ attr_accessor rules(): Array[Rule]
74
+
75
+ attr_accessor loc(): Location
76
+
77
+ def self.new: (?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location) -> instance
78
+ | ({ ?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location }) -> instance
38
79
  end
39
80
 
40
- class Tokens < Struct[Array[String] | Location]
81
+ class Include < Struct[String | Location]
82
+ attr_accessor path(): String
83
+
84
+ attr_accessor loc(): Location
85
+
86
+ def self.new: (?path: String, ?loc: Location) -> instance
87
+ | ({ ?path: String, ?loc: Location }) -> instance
88
+ end
89
+
90
+ class Tokens < Struct[Array[String] | Hash[String, String]? | Location]
41
91
  attr_accessor names(): Array[String]
42
92
 
93
+ attr_accessor aliases(): Hash[String, String]?
94
+
43
95
  attr_accessor loc(): Location
44
96
 
45
- def self.new: (?names: Array[String], ?loc: Location) -> instance
46
- | ({ ?names: Array[String], ?loc: Location }) -> instance
97
+ def self.new: (?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location) -> instance
98
+ | ({ ?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location }) -> instance
47
99
  end
48
100
 
49
101
  class Precedence < Struct[Symbol | Array[PrecedenceLevel] | Location]
@@ -86,13 +138,88 @@ module Ibex
86
138
  | ({ ?conflicts: Integer, ?loc: Location }) -> instance
87
139
  end
88
140
 
89
- class Start < Struct[String | Location]
141
+ class ExpectRR < Struct[Integer | Location]
142
+ attr_accessor conflicts(): Integer
143
+
144
+ attr_accessor loc(): Location
145
+
146
+ def self.new: (?conflicts: Integer, ?loc: Location) -> instance
147
+ | ({ ?conflicts: Integer, ?loc: Location }) -> instance
148
+ end
149
+
150
+ class Start < Struct[Array[String] | Location]
151
+ attr_accessor names(): Array[String]
152
+
153
+ attr_accessor loc(): Location
154
+
155
+ def self.new: (?names: Array[String], ?loc: Location) -> instance
156
+ | ({ ?names: Array[String], ?loc: Location }) -> instance
157
+ end
158
+
159
+ class Recovery < Struct[Array[String] | Location]
160
+ attr_accessor sync_tokens(): Array[String]
161
+
162
+ attr_accessor loc(): Location
163
+
164
+ def self.new: (?sync_tokens: Array[String], ?loc: Location) -> instance
165
+ | ({ ?sync_tokens: Array[String], ?loc: Location }) -> instance
166
+ end
167
+
168
+ class OnErrorReduce < Struct[Array[String] | Location]
169
+ attr_accessor names(): Array[String]
170
+
171
+ attr_accessor loc(): Location
172
+
173
+ def self.new: (?names: Array[String], ?loc: Location) -> instance
174
+ | ({ ?names: Array[String], ?loc: Location }) -> instance
175
+ end
176
+
177
+ class GrammarTest < Struct[Symbol | String | Location]
178
+ attr_accessor expectation(): Symbol
179
+
180
+ attr_accessor source(): String
181
+
182
+ attr_accessor loc(): Location
183
+
184
+ def self.new: (?expectation: Symbol, ?source: String, ?loc: Location) -> instance
185
+ | ({ ?expectation: Symbol, ?source: String, ?loc: Location }) -> instance
186
+ end
187
+
188
+ class Lexer < Struct[Array[lexer_entry] | Location]
189
+ attr_accessor definitions(): Array[lexer_entry]
190
+
191
+ attr_accessor loc(): Location
192
+
193
+ def self.new: (?definitions: Array[lexer_entry], ?loc: Location) -> instance
194
+ | ({ ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
195
+ end
196
+
197
+ class LexerRule < Struct[Symbol | String? | String | Location]
198
+ attr_accessor kind(): Symbol
199
+
200
+ attr_accessor token(): String?
201
+
202
+ attr_accessor pattern(): String
203
+
204
+ attr_accessor pattern_kind(): Symbol
205
+
206
+ attr_accessor action(): String?
207
+
208
+ attr_accessor loc(): Location
209
+
210
+ def self.new: (?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location) -> instance
211
+ | ({ ?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location }) -> instance
212
+ end
213
+
214
+ class LexerState < Struct[String | Array[lexer_entry] | Location]
90
215
  attr_accessor name(): String
91
216
 
217
+ attr_accessor definitions(): Array[lexer_entry]
218
+
92
219
  attr_accessor loc(): Location
93
220
 
94
- def self.new: (?name: String, ?loc: Location) -> instance
95
- | ({ ?name: String, ?loc: Location }) -> instance
221
+ def self.new: (?name: String, ?definitions: Array[lexer_entry], ?loc: Location) -> instance
222
+ | ({ ?name: String, ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
96
223
  end
97
224
 
98
225
  class Convert < Struct[Array[Conversion] | Location]
@@ -115,28 +242,96 @@ module Ibex
115
242
  | ({ ?name: String, ?expression: String, ?loc: Location }) -> instance
116
243
  end
117
244
 
118
- class Rule < Struct[String | Array[Alternative] | Location]
119
- attr_accessor lhs(): String
245
+ class DisplayName < Struct[String | Location]
246
+ attr_accessor name(): String
247
+
248
+ attr_accessor value(): String
249
+
250
+ attr_accessor loc(): Location
251
+
252
+ def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
253
+ | ({ ?name: String, ?value: String, ?loc: Location }) -> instance
254
+ end
255
+
256
+ class SemanticType < Struct[String | Location]
257
+ attr_accessor name(): String
258
+
259
+ attr_accessor value(): String
260
+
261
+ attr_accessor loc(): Location
262
+
263
+ def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
264
+ | ({ ?name: String, ?value: String, ?loc: Location }) -> instance
265
+ end
266
+
267
+ class Parameter < Struct[String | String? | Location]
268
+ attr_accessor name(): String
269
+
270
+ attr_accessor semantic_type(): String?
271
+
272
+ attr_accessor loc(): Location
273
+
274
+ def self.new: (?name: String, ?semantic_type: String?, ?loc: Location) -> instance
275
+ | ({ ?name: String, ?semantic_type: String?, ?loc: Location }) -> instance
276
+ end
277
+
278
+ class Printer < Struct[String | Location]
279
+ attr_accessor name(): String
280
+
281
+ attr_accessor code(): String
282
+
283
+ attr_accessor loc(): Location
284
+
285
+ def self.new: (?name: String, ?code: String, ?loc: Location) -> instance
286
+ | ({ ?name: String, ?code: String, ?loc: Location }) -> instance
287
+ end
288
+
289
+ class ParserConfiguration < Struct[Array[ParserSetting] | Location]
290
+ attr_accessor settings(): Array[ParserSetting]
291
+
292
+ attr_accessor loc(): Location
120
293
 
121
- attr_accessor alternatives(): Array[Alternative]
294
+ def self.new: (?settings: Array[ParserSetting], ?loc: Location) -> instance
295
+ | ({ ?settings: Array[ParserSetting], ?loc: Location }) -> instance
296
+ end
297
+
298
+ class ParserSetting < Struct[Symbol | Location]
299
+ attr_accessor key(): Symbol
300
+
301
+ attr_accessor value(): Symbol
122
302
 
123
303
  attr_accessor loc(): Location
124
304
 
125
- def self.new: (?lhs: String, ?alternatives: Array[Alternative], ?loc: Location) -> instance
126
- | ({ ?lhs: String, ?alternatives: Array[Alternative], ?loc: Location }) -> instance
305
+ def self.new: (?key: Symbol, ?value: Symbol, ?loc: Location) -> instance
306
+ | ({ ?key: Symbol, ?value: Symbol, ?loc: Location }) -> instance
127
307
  end
128
308
 
129
- class Alternative < Struct[Array[item] | InlineAction? | String? | Location]
309
+ ROOT_ONLY_DECLARATION_NAMES: Hash[Class, String]
310
+
311
+ class Alternative < Struct[Array[item] | InlineAction? | String? | NodeAnnotation? | Location]
130
312
  attr_accessor items(): Array[item]
131
313
 
132
314
  attr_accessor action(): InlineAction?
133
315
 
134
316
  attr_accessor precedence(): String?
135
317
 
318
+ attr_accessor node_annotation(): NodeAnnotation?
319
+
136
320
  attr_accessor loc(): Location
137
321
 
138
- def self.new: (?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?loc: Location) -> instance
139
- | ({ ?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?loc: Location }) -> instance
322
+ def self.new: (?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location) -> instance
323
+ | ({ ?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location }) -> instance
324
+ end
325
+
326
+ class NodeAnnotation < Struct[String | Array[String] | Location]
327
+ attr_accessor name(): String
328
+
329
+ attr_accessor fields(): Array[String]
330
+
331
+ attr_accessor loc(): Location
332
+
333
+ def self.new: (?name: String, ?fields: Array[String], ?loc: Location) -> instance
334
+ | ({ ?name: String, ?fields: Array[String], ?loc: Location }) -> instance
140
335
  end
141
336
 
142
337
  class SymbolReference < Struct[String | String? | Location]
@@ -150,6 +345,19 @@ module Ibex
150
345
  | ({ ?name: String, ?named_reference: String?, ?loc: Location }) -> instance
151
346
  end
152
347
 
348
+ class ParameterizedReference < Struct[String | Array[item] | String? | Location]
349
+ attr_accessor name(): String
350
+
351
+ attr_accessor arguments(): Array[item]
352
+
353
+ attr_accessor named_reference(): String?
354
+
355
+ attr_accessor loc(): Location
356
+
357
+ def self.new: (?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location) -> instance
358
+ | ({ ?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location }) -> instance
359
+ end
360
+
153
361
  class InlineAction < Struct[String | Location]
154
362
  attr_accessor code(): String
155
363
 
@@ -159,6 +367,13 @@ module Ibex
159
367
  | ({ ?code: String, ?loc: Location }) -> instance
160
368
  end
161
369
 
370
+ class Empty < Struct[Location]
371
+ attr_accessor loc(): Location
372
+
373
+ def self.new: (?loc: Location) -> instance
374
+ | ({ ?loc: Location }) -> instance
375
+ end
376
+
162
377
  class Optional < Struct[item | Location]
163
378
  attr_accessor item(): item
164
379
 
@@ -8,6 +8,10 @@ module Ibex
8
8
 
9
9
  include BootstrapParserRules
10
10
 
11
+ include BootstrapParserParameters
12
+
13
+ include ParserConfigurationSupport
14
+
11
15
  @mode: Symbol
12
16
 
13
17
  @index: Integer
@@ -20,8 +24,17 @@ module Ibex
20
24
  # @rbs () -> AST::Root
21
25
  def parse: () -> AST::Root
22
26
 
27
+ # @rbs () -> AST::Fragment
28
+ def parse_fragment: () -> AST::Fragment
29
+
23
30
  private
24
31
 
32
+ # @rbs (Array[AST::declaration] declarations) -> void
33
+ def reject_fragment_root_declarations: (Array[AST::declaration] declarations) -> void
34
+
35
+ # @rbs (AST::declaration declaration) -> String?
36
+ def fragment_root_declaration_name: (AST::declaration declaration) -> String?
37
+
25
38
  # @rbs () -> String
26
39
  def parse_constant_path: () -> String
27
40
 
@@ -0,0 +1,53 @@
1
+ # Generated from lib/ibex/frontend/diagnostic.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # An immutable machine-readable frontend error.
6
+ class Diagnostic
7
+ attr_reader code: String
8
+
9
+ attr_reader phase: Symbol
10
+
11
+ attr_reader message: String
12
+
13
+ attr_reader location: Location
14
+
15
+ attr_reader span: SourceSpan?
16
+
17
+ attr_reader expected: Array[String]
18
+
19
+ attr_reader received: String?
20
+
21
+ # @rbs (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?,
22
+ # ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
23
+ def initialize: (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?, ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
24
+
25
+ # @rbs () -> String
26
+ def severity: () -> String
27
+
28
+ # @rbs () -> String
29
+ def to_s: () -> String
30
+
31
+ # @rbs () -> Hash[Symbol, Object?]
32
+ def to_h: () -> Hash[Symbol, Object?]
33
+ end
34
+
35
+ # Immutable output from a diagnostic parse.
36
+ class ParseResult
37
+ attr_reader diagnostics: Array[Diagnostic]
38
+
39
+ attr_reader ast: AST::Root?
40
+
41
+ attr_reader document: SourceDocument?
42
+
43
+ # @rbs (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
44
+ def initialize: (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
45
+
46
+ # @rbs () -> bool
47
+ def success?: () -> bool
48
+
49
+ # @rbs () -> bool
50
+ def partial?: () -> bool
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,98 @@
1
+ # Generated from lib/ibex/frontend/diagnostic_recovery.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Re-runs the generated parser after suppressing only conservative source regions.
6
+ class DiagnosticRecovery
7
+ DECLARATION_STARTS: Array[String]
8
+
9
+ @suppressed: Hash[Integer, bool]
10
+
11
+ @max_diagnostics: Integer
12
+
13
+ @mode: Symbol
14
+
15
+ @tokens: Array[Token]
16
+
17
+ # @rbs (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
18
+ def initialize: (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
19
+
20
+ # @rbs () -> [AST::Root | AST::Fragment | nil, Array[Diagnostic]]
21
+ def parse: () -> [ AST::Root | AST::Fragment | nil, Array[Diagnostic] ]
22
+
23
+ private
24
+
25
+ # @rbs () -> (AST::Root | AST::Fragment | nil)
26
+ def parse_until_stable: () -> (AST::Root | AST::Fragment | nil)
27
+
28
+ # @rbs () -> Array[Token]
29
+ def working_tokens: () -> Array[Token]
30
+
31
+ # @rbs (Diagnostic diagnostic) -> void
32
+ def append_diagnostic: (Diagnostic diagnostic) -> void
33
+
34
+ # @rbs (Diagnostic diagnostic) -> [String, String, Integer, Integer, String]
35
+ def diagnostic_key: (Diagnostic diagnostic) -> [ String, String, Integer, Integer, String ]
36
+
37
+ # @rbs () -> Array[Diagnostic]
38
+ def sorted_diagnostics: () -> Array[Diagnostic]
39
+
40
+ # @rbs (Diagnostic diagnostic) -> [String, Integer, Integer, String, String]
41
+ def diagnostic_sort_key: (Diagnostic diagnostic) -> [ String, Integer, Integer, String, String ]
42
+
43
+ # @rbs (Token? token, Exception error) -> Range[Integer]?
44
+ def suppression_range: (Token? token, Exception error) -> Range[Integer]?
45
+
46
+ # @rbs (Token? token) -> Integer?
47
+ def token_index: (Token? token) -> Integer?
48
+
49
+ # @rbs (String message) -> Integer?
50
+ def token_index_for_message: (String message) -> Integer?
51
+
52
+ # @rbs () -> Integer?
53
+ def rule_marker_index: () -> Integer?
54
+
55
+ # @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
56
+ def declaration_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
57
+
58
+ # @rbs (Integer index) -> bool
59
+ def declaration_start?: (Integer index) -> bool
60
+
61
+ # @rbs (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
62
+ def declaration_finish: (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
63
+
64
+ # @rbs (Integer start, Integer fallback, String closer) -> Integer
65
+ def matching_declaration_end: (Integer start, Integer fallback, String closer) -> Integer
66
+
67
+ # @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
68
+ def rule_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
69
+
70
+ # @rbs (Integer rule_marker) -> Integer
71
+ def grammar_end_index: (Integer rule_marker) -> Integer
72
+
73
+ # @rbs (Integer rule_marker, Integer grammar_end) -> Array[Integer]
74
+ def rule_definition_starts: (Integer rule_marker, Integer grammar_end) -> Array[Integer]
75
+
76
+ # @rbs (Integer index, Integer? lhs_column) -> bool
77
+ def lhs_candidate?: (Integer index, Integer? lhs_column) -> bool
78
+
79
+ # @rbs (Integer failure, Integer start, Integer finish) -> Range[Integer]?
80
+ def alternative_range: (Integer failure, Integer start, Integer finish) -> Range[Integer]?
81
+
82
+ # @rbs (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
83
+ def alternative_slice: (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
84
+
85
+ # @rbs (Integer start, Integer finish) -> Array[Integer]
86
+ def top_level_pipes: (Integer start, Integer finish) -> Array[Integer]
87
+
88
+ # @rbs (Range[Integer] range) -> bool
89
+ def suppress: (Range[Integer] range) -> bool
90
+
91
+ # @rbs (Exception error, Token? token, phase: Symbol) -> Diagnostic
92
+ def diagnostic_from: (Exception error, Token? token, phase: Symbol) -> Diagnostic
93
+
94
+ # @rbs (String message) -> [Array[String], String?]
95
+ def expected_and_received: (String message) -> [ Array[String], String? ]
96
+ end
97
+ end
98
+ end
@@ -35,12 +35,36 @@ module Ibex
35
35
  # @rbs (Integer conflicts) -> void
36
36
  def expect: (Integer conflicts) -> void
37
37
 
38
- # @rbs (Object name) -> void
39
- def start: (Object name) -> void
38
+ # @rbs (*Object names) -> void
39
+ def start: (*Object names) -> void
40
+
41
+ # @rbs (*Object names) -> void
42
+ def recover_sync: (*Object names) -> void
43
+
44
+ # @rbs (*Object names) -> void
45
+ def on_error_reduce: (*Object names) -> void
46
+
47
+ # @rbs (Object source) -> void
48
+ def test_accept: (Object source) -> void
49
+
50
+ # @rbs (Object source) -> void
51
+ def test_reject: (Object source) -> void
40
52
 
41
53
  # @rbs (Object name, Object expression) -> void
42
54
  def convert: (Object name, Object expression) -> void
43
55
 
56
+ # @rbs (Object name, Object value) -> void
57
+ def display: (Object name, Object value) -> void
58
+
59
+ # @rbs (Object name, Object value) -> void
60
+ def type: (Object name, Object value) -> void
61
+
62
+ # @rbs (Object name, ?Object? semantic_type) -> void
63
+ def param: (Object name, ?Object? semantic_type) -> void
64
+
65
+ # @rbs (Object name, Object code) -> void
66
+ def printer: (Object name, Object code) -> void
67
+
44
68
  # @rbs (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
45
69
  def precedence: (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
46
70
 
@@ -79,6 +103,11 @@ module Ibex
79
103
 
80
104
  # @rbs () -> Location
81
105
  def next_location: () -> Location
106
+
107
+ private
108
+
109
+ # @rbs (Object value, String feature) -> String
110
+ def metadata_value: (Object value, String feature) -> String
82
111
  end
83
112
 
84
113
  # Collects ordered associativity levels.
@@ -116,8 +145,8 @@ module Ibex
116
145
  # @rbs (Builder grammar, Location default_location) -> void
117
146
  def initialize: (Builder grammar, Location default_location) -> void
118
147
 
119
- # @rbs (*Object items, ?action: Object?, ?precedence: Object?) -> void
120
- def alt: (*Object items, ?action: Object?, ?precedence: Object?) -> void
148
+ # @rbs (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
149
+ def alt: (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
121
150
  end
122
151
  end
123
152
  end