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
@@ -0,0 +1,31 @@
1
+ # Generated from lib/ibex/lsp/symbol_occurrence.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ type symbol_key = [ :symbol, String ] | [ :parameter, String, Integer, String ] | [ :include, String ]
6
+
7
+ type symbol_data_value = String | Symbol | Integer | bool | nil | Array[String] | Hash[Symbol, symbol_data_value]
8
+
9
+ type symbol_data = Hash[Symbol, symbol_data_value]
10
+
11
+ # A source-backed grammar symbol definition or reference.
12
+ class SymbolOccurrence < Struct[String | Symbol | symbol_key | Frontend::SourceSpan | symbol_data]
13
+ attr_accessor name(): String
14
+
15
+ attr_accessor kind(): Symbol
16
+
17
+ attr_accessor role(): Symbol
18
+
19
+ attr_accessor key(): symbol_key
20
+
21
+ attr_accessor path(): String
22
+
23
+ attr_accessor span(): Frontend::SourceSpan
24
+
25
+ attr_accessor data(): symbol_data
26
+
27
+ def self.new: (?name: String, ?kind: Symbol, ?role: Symbol, ?key: symbol_key, ?path: String, ?span: Frontend::SourceSpan, ?data: symbol_data) -> instance
28
+ | ({ ?name: String, ?kind: Symbol, ?role: Symbol, ?key: symbol_key, ?path: String, ?span: Frontend::SourceSpan, ?data: symbol_data }) -> instance
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,47 @@
1
+ # Generated from lib/ibex/lsp/transport.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Reads and writes bounded LSP JSON-RPC messages over Content-Length framing.
6
+ class Transport
7
+ interface _Input
8
+ def read: (Integer length) -> String?
9
+
10
+ def readpartial: (Integer length) -> String
11
+ end
12
+
13
+ interface _Output
14
+ def write: (String value) -> Object?
15
+
16
+ def flush: () -> Object?
17
+ end
18
+
19
+ HEADER_SEPARATOR: ::String
20
+
21
+ # @rbs (_Input input, _Output output) -> void
22
+ def initialize: (_Input input, _Output output) -> void
23
+
24
+ # @rbs () -> LSP::lsp_object?
25
+ def read_message: () -> LSP::lsp_object?
26
+
27
+ # @rbs (LSP::lsp_object message) -> void
28
+ def write_message: (LSP::lsp_object message) -> void
29
+
30
+ private
31
+
32
+ # @rbs () -> String?
33
+ def read_header: () -> String?
34
+
35
+ # @rbs (String header) -> Integer
36
+ def content_length: (String header) -> Integer
37
+
38
+ # @rbs (Integer length) -> String
39
+ def read_bytes: (Integer length) -> String
40
+
41
+ # IO#read(length) may wait for the entire length on a live pipe. readpartial
42
+ # lets the stdio server process the bytes that are already available.
43
+ # @rbs (Integer length) -> String?
44
+ def read_chunk: (Integer length) -> String?
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,42 @@
1
+ # Generated from lib/ibex/lsp/workspace.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Converts file URIs to canonical paths constrained to initialized workspace roots.
6
+ class Workspace
7
+ attr_reader roots: Array[String]
8
+
9
+ # @rbs (Array[String] root_uris, Frontend::SourceLoader loader) -> void
10
+ def initialize: (Array[String] root_uris, Frontend::SourceLoader loader) -> void
11
+
12
+ # @rbs (String uri, ?allow_missing: bool) -> String
13
+ def path: (String uri, ?allow_missing: bool) -> String
14
+
15
+ # @rbs (String path) -> String
16
+ def uri: (String path) -> String
17
+
18
+ # @rbs (String path) -> String?
19
+ def root_for: (String path) -> String?
20
+
21
+ private
22
+
23
+ # URI is a stdlib boundary whose implementation class varies by scheme.
24
+ # URI parsing returns a scheme-specific URI::Generic subclass.
25
+ # @rbs (String uri) -> URI::Generic
26
+ def parse_file_uri: (String uri) -> URI::Generic
27
+
28
+ # Ruby's URI::File may discard userinfo and port, so validate the raw authority first.
29
+ # @rbs (String uri) -> void
30
+ def validate_raw_authority!: (String uri) -> void
31
+
32
+ # @rbs (String uri) -> String
33
+ def canonical_root: (String uri) -> String
34
+
35
+ # @rbs (String encoded) -> String
36
+ def decode_path: (String encoded) -> String
37
+
38
+ # @rbs (String path, String root) -> bool
39
+ def inside?: (String path, String root) -> bool
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,69 @@
1
+ # Generated from lib/ibex/lsp/workspace_analyzer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Parses workspace sources, discovers safe include closures, and renders diagnostics.
6
+ class WorkspaceAnalyzer
7
+ GLOB_CHARACTERS: Regexp
8
+
9
+ WINDOWS_ABSOLUTE: Regexp
10
+
11
+ type lsp_diagnostic = lsp_object
12
+
13
+ type analyzed_document = { source: String, document: Frontend::SourceDocument?, diagnostics: Array[lsp_diagnostic] }
14
+
15
+ # @rbs (Workspace workspace, Frontend::SourceLoader loader) -> void
16
+ def initialize: (Workspace workspace, Frontend::SourceLoader loader) -> void
17
+
18
+ # @rbs (String path) -> analyzed_document
19
+ def analyze: (String path) -> analyzed_document
20
+
21
+ # @rbs (String root) -> [Array[String], Hash[String, analyzed_document]]
22
+ def closure: (String root) -> [ Array[String], Hash[String, analyzed_document] ]
23
+
24
+ # @rbs (String root) -> [Frontend::Resolution?, Array[lsp_diagnostic]]
25
+ def resolve: (String root) -> [ Frontend::Resolution?, Array[lsp_diagnostic] ]
26
+
27
+ private
28
+
29
+ # @rbs (String path, String source) -> analyzed_document
30
+ def analyze_root: (String path, String source) -> analyzed_document
31
+
32
+ # @rbs (String path, String source) -> analyzed_document
33
+ def analyze_fragment: (String path, String source) -> analyzed_document
34
+
35
+ # @rbs (String source, String path) -> bool
36
+ def fragment_source?: (String source, String path) -> bool
37
+
38
+ # @rbs (Frontend::SourceDocument? document) -> Array[String]
39
+ def dependencies: (Frontend::SourceDocument? document) -> Array[String]
40
+
41
+ # @rbs (Frontend::AST::Include include_node) -> String
42
+ def canonical_include: (Frontend::AST::Include include_node) -> String
43
+
44
+ # @rbs (Frontend::AST::Include include_node) -> bot
45
+ def invalid_include: (Frontend::AST::Include include_node) -> bot
46
+
47
+ # @rbs (String message, String source, String fallback_path) -> lsp_diagnostic
48
+ def diagnostic: (String message, String source, String fallback_path) -> lsp_diagnostic
49
+
50
+ # @rbs (Frontend::Diagnostic diagnostic, String source) -> lsp_diagnostic
51
+ def frontend_diagnostic: (Frontend::Diagnostic diagnostic, String source) -> lsp_diagnostic
52
+
53
+ # @rbs (String message, String fallback_path) -> [String, Integer, Integer, String]
54
+ def diagnostic_parts: (String message, String fallback_path) -> [ String, Integer, Integer, String ]
55
+
56
+ # @rbs (String source, Integer line, Integer column) -> Hash[String, Hash[String, Integer]]
57
+ def diagnostic_range: (String source, Integer line, Integer column) -> Hash[String, Hash[String, Integer]]
58
+
59
+ # @rbs (String path) -> String
60
+ def readable_source: (String path) -> String
61
+
62
+ # @rbs (String message, String fallback) -> String
63
+ def file_for_error: (String message, String fallback) -> String
64
+
65
+ # @rbs (String message, String fallback) -> String
66
+ def source_for_error: (String message, String fallback) -> String
67
+ end
68
+ end
69
+ end
data/sig/ibex/lsp.rbs ADDED
@@ -0,0 +1,7 @@
1
+ # Generated from lib/ibex/lsp.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Language Server Protocol support for grammar workspaces.
5
+ module LSP
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ # Generated from lib/ibex/messages.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Immutable built-in diagnostic translations, separate from user E00xx
5
+ # sentence-keyed parser error catalogs.
6
+ module Messages
7
+ ROOT: String
8
+
9
+ LANGUAGES: Array[String]
10
+
11
+ # @rbs (String? requested) -> String
12
+ def self?.language: (String? requested) -> String
13
+
14
+ # @rbs (String id, ?language: String, **Object? values) -> String
15
+ def self?.translate: (String id, ?language: String, **Object? values) -> String
16
+
17
+ # @rbs (String id) -> bool
18
+ def self?.known?: (String id) -> bool
19
+
20
+ # @rbs (String language) -> Hash[String, String]
21
+ def self?.catalog: (String language) -> Hash[String, String]
22
+
23
+ # @rbs (String language) -> Hash[String, String]
24
+ def self?.load_catalog: (String language) -> Hash[String, String]
25
+ end
26
+ end
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/metrics.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Deterministic structural metrics over normalized Grammar and Automaton IR.
5
+ class Metrics
6
+ type report_value = String | Integer | Float | Array[report_value] | Hash[Symbol, report_value]
7
+
8
+ # @rbs (IR::Automaton automaton) -> void
9
+ def initialize: (IR::Automaton automaton) -> void
10
+
11
+ # @rbs () -> Hash[Symbol, report_value]
12
+ def to_h: () -> Hash[Symbol, report_value]
13
+
14
+ private
15
+
16
+ # @rbs () -> Hash[Symbol, Integer]
17
+ def symbol_metrics: () -> Hash[Symbol, Integer]
18
+
19
+ # @rbs () -> Hash[Symbol, report_value]
20
+ def grammar_metrics: () -> Hash[Symbol, report_value]
21
+
22
+ # @rbs () -> Hash[Symbol, report_value]
23
+ def automaton_metrics: () -> Hash[Symbol, report_value]
24
+
25
+ # @rbs (Array[Integer] values) -> Float
26
+ def average: (Array[Integer] values) -> Float
27
+
28
+ # @rbs () -> Hash[Integer, Array[Integer]]
29
+ def dependency_graph: () -> Hash[Integer, Array[Integer]]
30
+
31
+ # @rbs () -> Hash[Integer, Set[Integer]]
32
+ def reachability: () -> Hash[Integer, Set[Integer]]
33
+
34
+ # @rbs () -> Array[Array[Integer]]
35
+ def recursion_components: () -> Array[Array[Integer]]
36
+
37
+ # @rbs () -> Array[Integer]
38
+ def recursive_nonterminal_ids: () -> Array[Integer]
39
+
40
+ # Longest path after collapsing mutually recursive nonterminals.
41
+ # @rbs () -> Integer
42
+ def recursion_component_depth: () -> Integer
43
+
44
+ # @rbs (Array[Set[Integer]] edges) -> Integer
45
+ def longest_dag_path: (Array[Set[Integer]] edges) -> Integer
46
+
47
+ # @rbs (Integer id) -> String
48
+ def symbol_name: (Integer id) -> String
49
+ end
50
+ end
@@ -11,6 +11,37 @@ module Ibex
11
11
  # @rbs (Frontend::AST::declaration declaration) -> void
12
12
  def read_declaration: (Frontend::AST::declaration declaration) -> void
13
13
 
14
+ # @rbs (Frontend::AST::Start declaration) -> void
15
+ def read_start_declaration: (Frontend::AST::Start declaration) -> void
16
+
17
+ # @rbs (Frontend::AST::symbol_metadata | Frontend::AST::Parameter | Frontend::AST::Printer declaration) -> void
18
+ def read_extended_declaration: (Frontend::AST::symbol_metadata | Frontend::AST::Parameter | Frontend::AST::Printer declaration) -> void
19
+
20
+ # @rbs (Frontend::AST::Printer declaration) -> void
21
+ def read_value_printer: (Frontend::AST::Printer declaration) -> void
22
+
23
+ # @rbs () -> void
24
+ def validate_value_printers: () -> void
25
+
26
+ # @rbs (Frontend::AST::Parameter declaration) -> void
27
+ def read_parser_parameter: (Frontend::AST::Parameter declaration) -> void
28
+
29
+ # @rbs (Frontend::AST::Tokens declaration) -> void
30
+ def read_tokens: (Frontend::AST::Tokens declaration) -> void
31
+
32
+ # @rbs (Frontend::AST::Options declaration) -> void
33
+ def read_options: (Frontend::AST::Options declaration) -> void
34
+
35
+ # @rbs (Frontend::AST::Convert declaration) -> void
36
+ def read_conversions: (Frontend::AST::Convert declaration) -> void
37
+
38
+ # @rbs (Frontend::AST::symbol_metadata declaration) -> void
39
+ def read_symbol_metadata_declaration: (Frontend::AST::symbol_metadata declaration) -> void
40
+
41
+ # @rbs (Frontend::AST::symbol_metadata declaration, Hash[String, String] values,
42
+ # Hash[String, IR::location] locations, String label) -> void
43
+ def read_symbol_metadata: (Frontend::AST::symbol_metadata declaration, Hash[String, String] values, Hash[String, IR::location] locations, String label) -> void
44
+
14
45
  # @rbs (Frontend::AST::Precedence declaration) -> void
15
46
  def read_precedence: (Frontend::AST::Precedence declaration) -> void
16
47
 
@@ -8,23 +8,32 @@ module Ibex
8
8
  # @rbs () -> void
9
9
  def validate_grammar: () -> void
10
10
 
11
+ # @rbs () -> void
12
+ def validate_symbol_metadata: () -> void
13
+
11
14
  # @rbs () -> void
12
15
  def warn_duplicate_productions: () -> void
13
16
 
14
17
  # @rbs () -> void
15
18
  def warn_unreachable_nonterminals: () -> void
16
19
 
17
- # @rbs () -> Set[Integer]
18
- def reachable_symbol_ids: () -> Set[Integer]
20
+ # @rbs () -> Hash[Integer, true]
21
+ def reachable_symbol_ids: () -> Hash[Integer, true]
19
22
 
20
23
  # @rbs () -> void
21
24
  def warn_unused_terminals: () -> void
22
25
 
26
+ # @rbs () -> void
27
+ def warn_unreachable_terminals: () -> void
28
+
29
+ # @rbs () -> void
30
+ def warn_unused_precedence: () -> void
31
+
23
32
  # @rbs () -> void
24
33
  def warn_empty_language: () -> void
25
34
 
26
- # @rbs () -> Set[Integer]
27
- def productive_terminal_ids: () -> Set[Integer]
35
+ # @rbs () -> Hash[Integer, true]
36
+ def productive_terminal_ids: () -> Hash[Integer, true]
28
37
 
29
38
  # @rbs (IR::GrammarSymbol grammar_symbol) -> bool
30
39
  def productive_terminal?: (IR::GrammarSymbol grammar_symbol) -> bool
@@ -11,6 +11,9 @@ module Ibex
11
11
  # @rbs (Frontend::AST::Rule rule, Frontend::AST::Alternative alternative) -> void
12
12
  def normalize_alternative: (Frontend::AST::Rule rule, Frontend::AST::Alternative alternative) -> void
13
13
 
14
+ # @rbs (Frontend::AST::Alternative alternative) -> Array[Frontend::AST::item]
15
+ def normalized_alternative_items: (Frontend::AST::Alternative alternative) -> Array[Frontend::AST::item]
16
+
14
17
  # @rbs (Frontend::AST::item item) -> String
15
18
  def normalize_item: (Frontend::AST::item item) -> String
16
19
 
@@ -20,47 +23,50 @@ module Ibex
20
23
  # @rbs (Frontend::AST::Optional item) -> String
21
24
  def expand_optional: (Frontend::AST::Optional item) -> String
22
25
 
26
+ # @rbs (Frontend::AST::Optional item, String base) -> String
27
+ def build_optional: (Frontend::AST::Optional item, String base) -> String
28
+
23
29
  # @rbs (Frontend::AST::Star item) -> String
24
30
  def expand_star: (Frontend::AST::Star item) -> String
25
31
 
32
+ # @rbs (Frontend::AST::Star item, String base) -> String
33
+ def build_star: (Frontend::AST::Star item, String base) -> String
34
+
26
35
  # @rbs (Frontend::AST::Plus item) -> String
27
36
  def expand_plus: (Frontend::AST::Plus item) -> String
28
37
 
38
+ # @rbs (Frontend::AST::Plus item, String base) -> String
39
+ def build_plus: (Frontend::AST::Plus item, String base) -> String
40
+
29
41
  # @rbs (Frontend::AST::SeparatedList item) -> String
30
42
  def expand_separated_list: (Frontend::AST::SeparatedList item) -> String
31
43
 
44
+ # @rbs (Frontend::AST::SeparatedList item, String base, String separator) -> String
45
+ def build_separated_list: (Frontend::AST::SeparatedList item, String base, String separator) -> String
46
+
32
47
  # @rbs (Frontend::AST::Group item) -> String
33
48
  def expand_group: (Frontend::AST::Group item) -> String
34
49
 
50
+ # @rbs (String helper, Array[String] rhs, Frontend::AST::Group item) -> void
51
+ def add_group_production: (String helper, Array[String] rhs, Frontend::AST::Group item) -> void
52
+
35
53
  # @rbs (Integer length) -> String
36
54
  def group_value_expression: (Integer length) -> String
37
55
 
38
- # @rbs (Frontend::AST::Group group) -> void
39
- def reject_group_named_references: (Frontend::AST::Group group) -> void
40
-
41
- # @rbs (Frontend::AST::item item) -> Frontend::AST::SymbolReference?
42
- def named_reference_in: (Frontend::AST::item item) -> Frontend::AST::SymbolReference?
43
-
44
56
  # @rbs (String kind, Frontend::Location location) -> String
45
57
  def new_helper: (String kind, Frontend::Location location) -> String
46
58
 
47
59
  # @rbs (String expression, Frontend::Location location) -> IR::Action
48
60
  def synthetic_action: (String expression, Frontend::Location location) -> IR::Action
49
61
 
50
- # @rbs (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, untyped]
51
- def synthetic_origin: (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, untyped]
62
+ # @rbs (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, Object?]
63
+ def synthetic_origin: (Symbol kind, Frontend::AST::item item) -> Hash[Symbol, Object?]
52
64
 
53
65
  # @rbs (Frontend::AST::InlineAction? action, Array[IR::named_ref] named_refs) -> IR::Action?
54
66
  def normalize_action: (Frontend::AST::InlineAction? action, Array[IR::named_ref] named_refs) -> IR::Action?
55
67
 
56
- # @rbs (Frontend::AST::item item, Array[IR::named_ref] refs, Integer index) -> void
57
- def add_named_reference: (Frontend::AST::item item, Array[IR::named_ref] refs, Integer index) -> void
58
-
59
- # @rbs (Frontend::AST::item item) -> Frontend::AST::SymbolReference?
60
- def unwrap_reference: (Frontend::AST::item item) -> Frontend::AST::SymbolReference?
61
-
62
68
  # @rbs (String lhs_name, Array[String] rhs_names, IR::Action? action, String? precedence_name,
63
- # Hash[Symbol, untyped] origin) -> void
64
- def add_production: (String lhs_name, Array[String] rhs_names, IR::Action? action, String? precedence_name, Hash[Symbol, untyped] origin) -> void
69
+ # Hash[Symbol, untyped] origin, ?String? documentation, ?IR::node_annotation? node) -> void
70
+ def add_production: (String lhs_name, Array[String] rhs_names, IR::Action? action, String? precedence_name, Hash[Symbol, untyped] origin, ?String? documentation, ?IR::node_annotation? node) -> void
65
71
  end
66
72
  end
@@ -3,19 +3,21 @@
3
3
  module Ibex
4
4
  # Deterministically renders frontend EBNF items for production origin metadata.
5
5
  module NormalizeExpression
6
- private def render_reference: (Frontend::AST::SymbolReference item) -> String
6
+ type pending_item = String | Frontend::AST::item
7
7
 
8
- private def self.render_reference: (Frontend::AST::SymbolReference item) -> String
9
-
10
- private def render_group: (Frontend::AST::Group item) -> String
8
+ # @rbs (Frontend::AST::item item) -> String
9
+ def self.render: (Frontend::AST::item item) -> String
11
10
 
12
- private def self.render_group: (Frontend::AST::Group item) -> String
11
+ # @rbs (Array[pending_item] pending, Frontend::AST::item item) -> void
12
+ private def self.push_render_item: (Array[pending_item] pending, Frontend::AST::item item) -> void
13
13
 
14
- private def render_separated_list: (Frontend::AST::SeparatedList item) -> String
14
+ # @rbs (Array[pending_item] pending, Frontend::AST::ParameterizedReference item) -> void
15
+ private def self.push_render_parameterized_reference: (Array[pending_item] pending, Frontend::AST::ParameterizedReference item) -> void
15
16
 
16
- private def self.render_separated_list: (Frontend::AST::SeparatedList item) -> String
17
+ # @rbs (Array[pending_item] pending, Frontend::AST::Group item) -> void
18
+ private def self.push_render_group: (Array[pending_item] pending, Frontend::AST::Group item) -> void
17
19
 
18
- # @rbs (Frontend::AST::item item) -> String
19
- def self?.render: (Frontend::AST::item item) -> String
20
+ # @rbs (Array[pending_item] pending, Array[Frontend::AST::item] items, String separator) -> void
21
+ private def self.push_render_items: (Array[pending_item] pending, Array[Frontend::AST::item] items, String separator) -> void
20
22
  end
21
23
  end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/ibex/normalize/grammar_builder.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Builds the single current Grammar IR format for every normalized source.
5
+ module NormalizeGrammarBuilder
6
+ private
7
+
8
+ # @rbs (IR::ParserContract? parser_contract) -> IR::Grammar
9
+ def build_grammar: (IR::ParserContract? parser_contract) -> IR::Grammar
10
+ end
11
+ end
@@ -0,0 +1,129 @@
1
+ # Generated from lib/ibex/normalize/inline_expansion.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Deterministically substitutes inline-rule productions before LR construction.
5
+ # rubocop:disable Metrics/ModuleLength -- expansion, action plans, and id remapping share one invariant.
6
+ module NormalizeInlineExpansion
7
+ type inline_reference = [ :physical | :step, Integer ]
8
+
9
+ type inline_step = { kind: :inline | :rule, rule: String?, code: String?, loc: IR::location, named_refs: Array[IR::named_ref], context_length: Integer, inputs: Array[inline_reference], stack_inputs: Array[inline_reference], lookahead: Integer, result_var: bool, result_type: String? }
10
+
11
+ type inline_variant = { rhs: Array[Integer], steps: Array[inline_step], logical_refs: Array[inline_reference], output_ref: inline_reference?, inline_used: bool, inline_rule: String?, precedence_override: Integer?, precedence_contributes: bool, parameter: IR::parameter_expansion? }
12
+
13
+ type inline_frame = { production: IR::Production, symbol_id: Integer?, index: Integer, variant: inline_variant }
14
+
15
+ private
16
+
17
+ # @rbs () -> void
18
+ def expand_inline_rules: () -> void
19
+
20
+ # Explicit heap frames avoid tying grammar depth to the Ruby call stack.
21
+ # The single-definition path reuses its accumulated arrays, so a long
22
+ # acyclic chain remains linear in the size of its final action plan.
23
+ # @rbs (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) ->
24
+ # Array[inline_variant]
25
+ def expand_inline_production: (IR::Production production, Hash[Integer, Array[IR::Production]] definitions) -> Array[inline_variant]
26
+
27
+ # @rbs (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions,
28
+ # Array[Array[inline_frame]] worklist, Array[inline_variant] variants,
29
+ # IR::location? location) -> void
30
+ def drain_inline_expansion_frames: (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[inline_frame]] worklist, Array[inline_variant] variants, IR::location? location) -> void
31
+
32
+ # @rbs (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions,
33
+ # Array[Array[inline_frame]] worklist, Array[inline_variant] variants,
34
+ # IR::location? location) -> bool
35
+ def advance_inline_expansion_frame?: (Array[inline_frame] frames, Hash[Integer, Array[IR::Production]] definitions, Array[Array[inline_frame]] worklist, Array[inline_variant] variants, IR::location? location) -> bool
36
+
37
+ # @rbs (Array[inline_frame] frames, Array[IR::Production] choices, Integer symbol_id,
38
+ # Array[Array[inline_frame]] worklist) -> void
39
+ def schedule_inline_choice_branches: (Array[inline_frame] frames, Array[IR::Production] choices, Integer symbol_id, Array[Array[inline_frame]] worklist) -> void
40
+
41
+ # @rbs (Array[inline_frame] frames, Array[inline_variant] variants,
42
+ # Array[Array[inline_frame]] worklist, IR::location? location) -> bool
43
+ def complete_inline_expansion_frame?: (Array[inline_frame] frames, Array[inline_variant] variants, Array[Array[inline_frame]] worklist, IR::location? location) -> bool
44
+
45
+ # @rbs (IR::Production production, Integer? symbol_id) -> inline_frame
46
+ def inline_expansion_frame: (IR::Production production, Integer? symbol_id) -> inline_frame
47
+
48
+ # @rbs (Array[inline_frame] frames) -> Array[inline_frame]
49
+ def clone_inline_expansion_frames: (Array[inline_frame] frames) -> Array[inline_frame]
50
+
51
+ # @rbs (IR::Production production) -> inline_variant
52
+ def empty_inline_variant: (IR::Production production) -> inline_variant
53
+
54
+ # @rbs (inline_variant variant, Integer symbol_id) -> inline_variant
55
+ def append_inline_symbol: (inline_variant variant, Integer symbol_id) -> inline_variant
56
+
57
+ # @rbs (inline_variant parent, inline_variant child) -> inline_variant
58
+ def combine_inline_variant: (inline_variant parent, inline_variant child) -> inline_variant
59
+
60
+ # @rbs (inline_variant parent, inline_variant child,
61
+ # Integer physical_offset, Integer step_offset) -> Array[inline_step]
62
+ def combined_inline_steps: (inline_variant parent, inline_variant child, Integer physical_offset, Integer step_offset) -> Array[inline_step]
63
+
64
+ # The helper is shared by homogeneous integer and step arrays; callers
65
+ # assert the concrete element type at each use site.
66
+ # @rbs (Array[Object?] left, Array[Object?] right) -> Array[Object?]
67
+ def append_inline_array: (Array[Object?] left, Array[Object?] right) -> Array[Object?]
68
+
69
+ # @rbs (inline_variant parent, inline_variant child) -> Integer?
70
+ def combined_inline_precedence: (inline_variant parent, inline_variant child) -> Integer?
71
+
72
+ # @rbs (inline_variant parent, inline_variant child,
73
+ # Integer physical_offset, Integer step_offset) -> Array[inline_step]
74
+ def remap_inline_steps: (inline_variant parent, inline_variant child, Integer physical_offset, Integer step_offset) -> Array[inline_step]
75
+
76
+ # @rbs (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) ->
77
+ # Array[Symbol | Integer]
78
+ def remap_inline_reference: (Array[Symbol | Integer] reference, Integer physical_offset, Integer step_offset) -> Array[Symbol | Integer]
79
+
80
+ # @rbs (inline_variant variant, IR::Production production) -> inline_variant
81
+ def finish_inline_precedence: (inline_variant variant, IR::Production production) -> inline_variant
82
+
83
+ # @rbs (inline_variant variant, IR::Production production, Integer symbol_id) -> inline_variant
84
+ def finish_inline_choice: (inline_variant variant, IR::Production production, Integer symbol_id) -> inline_variant
85
+
86
+ # @rbs (IR::Production production, Array[inline_reference] inputs, Integer lookahead,
87
+ # :inline | :rule kind, String? rule) -> inline_step
88
+ def inline_action_step: (IR::Production production, Array[inline_reference] inputs, Integer lookahead, :inline | :rule kind, String? rule) -> inline_step
89
+
90
+ # @rbs (IR::Production production, inline_variant variant, Integer id) -> IR::Production
91
+ def composed_inline_production: (IR::Production production, inline_variant variant, Integer id) -> IR::Production
92
+
93
+ # @rbs (IR::Production production, Integer physical_length, Array[inline_step]) -> IR::Action
94
+ def composed_inline_action: (IR::Production production, Integer physical_length, Array[inline_step]) -> IR::Action
95
+
96
+ # @rbs (inline_step step, Integer physical_length) -> IR::action_composition_step
97
+ def composition_plan_step: (inline_step step, Integer physical_length) -> IR::action_composition_step
98
+
99
+ # @rbs (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
100
+ def resolve_inline_reference: (Array[Symbol | Integer] reference, Integer physical_length) -> Integer
101
+
102
+ # @rbs (Integer rhs_length) -> String
103
+ def inline_implicit_code: (Integer rhs_length) -> String
104
+
105
+ # @rbs (IR::location location) -> IR::source_provenance
106
+ def inline_source_provenance: (IR::location location) -> IR::source_provenance
107
+
108
+ # @rbs (IR::Production production, inline_variant variant) -> IR::production_expansion
109
+ def inline_production_expansion: (IR::Production production, inline_variant variant) -> IR::production_expansion
110
+
111
+ # @rbs (IR::Production production, Integer id) -> IR::Production
112
+ def copy_inline_production: (IR::Production production, Integer id) -> IR::Production
113
+
114
+ # @rbs (IR::Production production) -> void
115
+ def charge_inline_expansion!: (IR::Production production) -> void
116
+
117
+ # @rbs (Integer count, IR::location? location) -> void
118
+ def enforce_inline_choice_limit!: (Integer count, IR::location? location) -> void
119
+
120
+ # @rbs (Array[IR::Production] productions) -> void
121
+ def rebuild_inline_symbols: (Array[IR::Production] productions) -> void
122
+
123
+ # @rbs (IR::GrammarSymbol definition, Integer id) -> IR::GrammarSymbol
124
+ def remap_inline_symbol: (IR::GrammarSymbol definition, Integer id) -> IR::GrammarSymbol
125
+
126
+ # @rbs (IR::Production production, Integer id, Hash[Integer, Integer] id_map) -> IR::Production
127
+ def remap_inline_production: (IR::Production production, Integer id, Hash[Integer, Integer] id_map) -> IR::Production
128
+ end
129
+ end
@@ -0,0 +1,40 @@
1
+ # Generated from lib/ibex/normalize/inline_validation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Static validation and collection for rules eliminated by inline expansion.
5
+ module NormalizeInlineValidation
6
+ private
7
+
8
+ # @rbs () -> void
9
+ def gather_inline_rules: () -> void
10
+
11
+ # @rbs () -> void
12
+ def validate_inline_terminal_collisions: () -> void
13
+
14
+ # @rbs () -> void
15
+ def validate_inline_start: () -> void
16
+
17
+ # @rbs () -> void
18
+ def validate_inline_cycles: () -> void
19
+
20
+ # A formal is live for cycle analysis only when substituting its actual can
21
+ # introduce a grammar reference. Calls propagate liveness through their
22
+ # callee's live positions until the finite formal set reaches a fixed point.
23
+ # @rbs () -> Hash[String, Set[Integer]]
24
+ def parameter_formal_liveness: () -> Hash[String, Set[Integer]]
25
+
26
+ # @rbs (Frontend::AST::item item, Array[String] formals,
27
+ # Hash[String, Set[Integer]] liveness, Set[Integer] found) -> void
28
+ def collect_live_formals: (Frontend::AST::item item, Array[String] formals, Hash[String, Set[Integer]] liveness, Set[Integer] found) -> void
29
+
30
+ # Structural AST traversal necessarily branches once for each public item shape.
31
+ # rubocop:disable Metrics/CyclomaticComplexity
32
+ # @rbs (Frontend::AST::item item, Array[String] formals, Set[String] names,
33
+ # Array[[String, Frontend::Location]] edges, Hash[String, Set[Integer]] liveness) -> void
34
+ def collect_inline_edges: (Frontend::AST::item item, Array[String] formals, Set[String] names, Array[[ String, Frontend::Location ]] edges, Hash[String, Set[Integer]] liveness) -> void
35
+
36
+ # @rbs (String name, Hash[String, Array[[String, Frontend::Location]]] graph,
37
+ # Hash[String, Symbol] states) -> void
38
+ def visit_inline_cycle: (String name, Hash[String, Array[[ String, Frontend::Location ]]] graph, Hash[String, Symbol] states) -> void
39
+ end
40
+ end