ibex 0.1.0 → 0.2.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 (384) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +247 -104
  3. data/docs/architecture.md +322 -28
  4. data/docs/cst-migration.md +107 -0
  5. data/docs/cst.md +213 -0
  6. data/docs/development.md +129 -0
  7. data/docs/editor-setup.md +25 -0
  8. data/docs/error-ux.md +60 -0
  9. data/docs/grammar-reference.md +458 -18
  10. data/docs/lexer-migration.md +51 -0
  11. data/docs/racc-migration.md +34 -6
  12. data/docs/release-readiness.md +163 -0
  13. data/docs/stability.md +124 -0
  14. data/examples/README.md +60 -0
  15. data/examples/calculator.y +44 -0
  16. data/examples/csv.y +32 -0
  17. data/examples/ini.y +70 -0
  18. data/examples/json.y +48 -0
  19. data/examples/tiny_language.y +75 -0
  20. data/lib/ibex/analysis/sets.rb +5 -4
  21. data/lib/ibex/artifact_set.rb +63 -0
  22. data/lib/ibex/cli/ambiguity.rb +66 -0
  23. data/lib/ibex/cli/counterexample_options.rb +6 -2
  24. data/lib/ibex/cli/coverage.rb +173 -0
  25. data/lib/ibex/cli/debug.rb +106 -0
  26. data/lib/ibex/cli/diagnostics.rb +116 -0
  27. data/lib/ibex/cli/documentation.rb +67 -0
  28. data/lib/ibex/cli/error_messages.rb +177 -0
  29. data/lib/ibex/cli/explain.rb +76 -0
  30. data/lib/ibex/cli/formatting.rb +386 -0
  31. data/lib/ibex/cli/generation_artifacts.rb +138 -0
  32. data/lib/ibex/cli/generation_error_messages.rb +39 -0
  33. data/lib/ibex/cli/grammar_tests.rb +122 -0
  34. data/lib/ibex/cli/ir_tools.rb +184 -0
  35. data/lib/ibex/cli/lsp.rb +33 -0
  36. data/lib/ibex/cli/outputs.rb +91 -8
  37. data/lib/ibex/cli/racc_migration.rb +87 -0
  38. data/lib/ibex/cli/samples.rb +92 -0
  39. data/lib/ibex/cli/watch.rb +103 -0
  40. data/lib/ibex/cli.rb +506 -37
  41. data/lib/ibex/codegen/action_locations.rb +103 -0
  42. data/lib/ibex/codegen/action_method_source.rb +210 -0
  43. data/lib/ibex/codegen/action_source.rb +118 -0
  44. data/lib/ibex/codegen/ambiguity.rb +173 -0
  45. data/lib/ibex/codegen/cst_metadata.rb +171 -0
  46. data/lib/ibex/codegen/documentation.rb +170 -0
  47. data/lib/ibex/codegen/explain.rb +312 -0
  48. data/lib/ibex/codegen/generated_action_abi.rb +288 -0
  49. data/lib/ibex/codegen/html.rb +94 -10
  50. data/lib/ibex/codegen/mermaid.rb +43 -0
  51. data/lib/ibex/codegen/railroad.rb +197 -0
  52. data/lib/ibex/codegen/railroad_documentation.rb +59 -0
  53. data/lib/ibex/codegen/rbs.rb +323 -2
  54. data/lib/ibex/codegen/report.rb +46 -6
  55. data/lib/ibex/codegen/ruby.rb +334 -59
  56. data/lib/ibex/codegen/ruby_actions.rb +143 -0
  57. data/lib/ibex/codegen/ruby_ast.rb +121 -0
  58. data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
  59. data/lib/ibex/codegen/ruby_lexer.rb +83 -0
  60. data/lib/ibex/codegen/ruby_syntax.rb +90 -0
  61. data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
  62. data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
  63. data/lib/ibex/codegen/symbol_labels.rb +1 -1
  64. data/lib/ibex/coverage/collector.rb +188 -0
  65. data/lib/ibex/coverage/event_stream.rb +97 -0
  66. data/lib/ibex/coverage/report.rb +259 -0
  67. data/lib/ibex/coverage/runtime_event_validator.rb +160 -0
  68. data/lib/ibex/coverage.rb +13 -0
  69. data/lib/ibex/error_messages/parser.rb +159 -0
  70. data/lib/ibex/error_messages/parser_v2.rb +198 -0
  71. data/lib/ibex/error_messages/renderer.rb +65 -0
  72. data/lib/ibex/error_messages/sentence_search.rb +196 -0
  73. data/lib/ibex/error_messages/update.rb +169 -0
  74. data/lib/ibex/error_messages.rb +165 -0
  75. data/lib/ibex/frontend/ast.rb +145 -6
  76. data/lib/ibex/frontend/bootstrap_parser.rb +47 -4
  77. data/lib/ibex/frontend/diagnostic.rb +81 -0
  78. data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
  79. data/lib/ibex/frontend/dsl.rb +66 -7
  80. data/lib/ibex/frontend/formatter.rb +407 -0
  81. data/lib/ibex/frontend/generated_parser.rb +614 -190
  82. data/lib/ibex/frontend/generated_parser_base.rb +164 -30
  83. data/lib/ibex/frontend/generated_parser_includes.rb +61 -0
  84. data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
  85. data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
  86. data/lib/ibex/frontend/generation.rb +33 -0
  87. data/lib/ibex/frontend/lexer.rb +162 -10
  88. data/lib/ibex/frontend/lexer_recovery.rb +84 -0
  89. data/lib/ibex/frontend/parser/declarations.rb +247 -11
  90. data/lib/ibex/frontend/parser/parameters.rb +82 -0
  91. data/lib/ibex/frontend/parser/rules.rb +43 -6
  92. data/lib/ibex/frontend/parser.rb +182 -4
  93. data/lib/ibex/frontend/regenerator.rb +26 -1
  94. data/lib/ibex/frontend/resolution.rb +69 -0
  95. data/lib/ibex/frontend/resolver.rb +217 -0
  96. data/lib/ibex/frontend/rule_documentation.rb +103 -0
  97. data/lib/ibex/frontend/source_cursor.rb +132 -8
  98. data/lib/ibex/frontend/source_document.rb +229 -0
  99. data/lib/ibex/frontend/source_loader.rb +150 -0
  100. data/lib/ibex/frontend/source_span.rb +81 -0
  101. data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
  102. data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
  103. data/lib/ibex/frontend/token_adapter/declaration_state.rb +216 -26
  104. data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
  105. data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
  106. data/lib/ibex/frontend/token_adapter.rb +8 -3
  107. data/lib/ibex/frontend.rb +13 -2
  108. data/lib/ibex/generation_input.rb +57 -0
  109. data/lib/ibex/generation_manifest.rb +200 -0
  110. data/lib/ibex/generation_transaction.rb +261 -0
  111. data/lib/ibex/generation_transaction_recovery.rb +109 -0
  112. data/lib/ibex/generation_transaction_validation.rb +196 -0
  113. data/lib/ibex/grammar_tests.rb +206 -0
  114. data/lib/ibex/ir/automaton_ir.rb +38 -5
  115. data/lib/ibex/ir/grammar_ir.rb +137 -24
  116. data/lib/ibex/ir/lexer_ir.rb +76 -0
  117. data/lib/ibex/ir/migration.rb +120 -0
  118. data/lib/ibex/ir/serialize.rb +110 -19
  119. data/lib/ibex/ir/validator/automaton.rb +345 -0
  120. data/lib/ibex/ir/validator/base.rb +129 -0
  121. data/lib/ibex/ir/validator/grammar.rb +604 -0
  122. data/lib/ibex/ir/validator/lexer.rb +113 -0
  123. data/lib/ibex/ir/validator.rb +62 -0
  124. data/lib/ibex/ir.rb +57 -4
  125. data/lib/ibex/lalr/build_metrics.rb +23 -0
  126. data/lib/ibex/lalr/builder.rb +379 -52
  127. data/lib/ibex/lalr/conflict.rb +1 -0
  128. data/lib/ibex/lalr/conflict_search.rb +11 -5
  129. data/lib/ibex/lalr/counterexample.rb +20 -5
  130. data/lib/ibex/lalr/direct_lookaheads.rb +236 -0
  131. data/lib/ibex/lalr/ielr_partition.rb +152 -0
  132. data/lib/ibex/lalr/on_error_reductions.rb +74 -0
  133. data/lib/ibex/lalr.rb +7 -0
  134. data/lib/ibex/location.rb +129 -0
  135. data/lib/ibex/lsp/document_handlers.rb +66 -0
  136. data/lib/ibex/lsp/document_store.rb +264 -0
  137. data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
  138. data/lib/ibex/lsp/document_store_validation.rb +61 -0
  139. data/lib/ibex/lsp/initialization_handlers.rb +78 -0
  140. data/lib/ibex/lsp/navigation_handlers.rb +56 -0
  141. data/lib/ibex/lsp/position_codec.rb +109 -0
  142. data/lib/ibex/lsp/protocol_error.rb +33 -0
  143. data/lib/ibex/lsp/request_handlers.rb +45 -0
  144. data/lib/ibex/lsp/request_support.rb +87 -0
  145. data/lib/ibex/lsp/server.rb +146 -0
  146. data/lib/ibex/lsp/symbol_index.rb +241 -0
  147. data/lib/ibex/lsp/symbol_index_builder.rb +267 -0
  148. data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
  149. data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
  150. data/lib/ibex/lsp/symbol_occurrence.rb +17 -0
  151. data/lib/ibex/lsp/transport.rb +118 -0
  152. data/lib/ibex/lsp/workspace.rb +127 -0
  153. data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
  154. data/lib/ibex/lsp.rb +32 -0
  155. data/lib/ibex/normalize/declarations.rb +140 -7
  156. data/lib/ibex/normalize/diagnostics.rb +50 -5
  157. data/lib/ibex/normalize/expander.rb +59 -55
  158. data/lib/ibex/normalize/expression.rb +60 -39
  159. data/lib/ibex/normalize/inline_expansion.rb +414 -0
  160. data/lib/ibex/normalize/inline_validation.rb +174 -0
  161. data/lib/ibex/normalize/lexer.rb +131 -0
  162. data/lib/ibex/normalize/named_references.rb +60 -0
  163. data/lib/ibex/normalize/nodes.rb +46 -0
  164. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +69 -0
  165. data/lib/ibex/normalize/parameter_lowering.rb +126 -0
  166. data/lib/ibex/normalize/parameter_substitution.rb +125 -0
  167. data/lib/ibex/normalize/parameter_validation.rb +140 -0
  168. data/lib/ibex/normalize/parameters.rb +199 -0
  169. data/lib/ibex/normalize/recovery_declarations.rb +84 -0
  170. data/lib/ibex/normalize.rb +179 -14
  171. data/lib/ibex/racc_migration/checker.rb +122 -0
  172. data/lib/ibex/racc_migration/harness.rb +177 -0
  173. data/lib/ibex/racc_migration/report.rb +94 -0
  174. data/lib/ibex/racc_migration.rb +12 -0
  175. data/lib/ibex/rake_task.rb +116 -0
  176. data/lib/ibex/samples.rb +186 -0
  177. data/lib/ibex/table_simulation/result.rb +51 -0
  178. data/lib/ibex/table_simulation/simulator.rb +253 -0
  179. data/lib/ibex/table_simulation/step.rb +60 -0
  180. data/lib/ibex/table_simulation/text.rb +31 -0
  181. data/lib/ibex/table_simulation.rb +13 -0
  182. data/lib/ibex/tables.rb +9 -70
  183. data/lib/ibex/version.rb +1 -1
  184. data/lib/ibex/watch/runner.rb +172 -0
  185. data/lib/ibex/watch/source_snapshot.rb +93 -0
  186. data/lib/ibex/watch.rb +11 -0
  187. data/lib/ibex.rb +25 -1
  188. data/schema/automaton-ir-v1.schema.json +401 -0
  189. data/schema/automaton-ir-v2.schema.json +58 -0
  190. data/schema/benchmark-v1.schema.json +212 -0
  191. data/schema/benchmark-v2.schema.json +61 -0
  192. data/schema/cst-v1.json +170 -0
  193. data/schema/error-ux-v1.schema.json +258 -0
  194. data/schema/explain-v1.schema.json +433 -0
  195. data/schema/frontend-diagnostics-v1.schema.json +154 -0
  196. data/schema/generation-manifest-v1.schema.json +115 -0
  197. data/schema/grammar-ir-v1.schema.json +426 -0
  198. data/schema/grammar-ir-v2.schema.json +779 -0
  199. data/schema/lexer-ir-v1.schema.json +215 -0
  200. data/schema/migration-check-v1.schema.json +60 -0
  201. data/schema/performance-comparison-v1.schema.json +395 -0
  202. data/schema/public-performance-comparison-v1.schema.json +506 -0
  203. data/schema/public-performance-profile-v1.schema.json +360 -0
  204. data/schema/runtime-coverage-v1.schema.json +86 -0
  205. data/schema/runtime-event-v1.schema.json +308 -0
  206. data/schema/table-simulation-v1.schema.json +70 -0
  207. data/sig/ibex/artifact_set.rbs +37 -0
  208. data/sig/ibex/cli/ambiguity.rbs +22 -0
  209. data/sig/ibex/cli/counterexample_options.rbs +2 -0
  210. data/sig/ibex/cli/coverage.rbs +53 -0
  211. data/sig/ibex/cli/debug.rbs +28 -0
  212. data/sig/ibex/cli/diagnostics.rbs +38 -0
  213. data/sig/ibex/cli/documentation.rbs +25 -0
  214. data/sig/ibex/cli/error_messages.rbs +57 -0
  215. data/sig/ibex/cli/explain.rbs +25 -0
  216. data/sig/ibex/cli/formatting.rbs +103 -0
  217. data/sig/ibex/cli/generation_artifacts.rbs +50 -0
  218. data/sig/ibex/cli/generation_error_messages.rbs +19 -0
  219. data/sig/ibex/cli/grammar_tests.rbs +36 -0
  220. data/sig/ibex/cli/ir_tools.rbs +51 -0
  221. data/sig/ibex/cli/lsp.rbs +14 -0
  222. data/sig/ibex/cli/outputs.rbs +17 -0
  223. data/sig/ibex/cli/racc_migration.rbs +30 -0
  224. data/sig/ibex/cli/samples.rbs +30 -0
  225. data/sig/ibex/cli/watch.rbs +43 -0
  226. data/sig/ibex/cli.rbs +104 -5
  227. data/sig/ibex/codegen/action_locations.rbs +45 -0
  228. data/sig/ibex/codegen/action_method_source.rbs +65 -0
  229. data/sig/ibex/codegen/action_source.rbs +50 -0
  230. data/sig/ibex/codegen/ambiguity.rbs +60 -0
  231. data/sig/ibex/codegen/cst_metadata.rbs +59 -0
  232. data/sig/ibex/codegen/documentation.rbs +50 -0
  233. data/sig/ibex/codegen/explain.rbs +85 -0
  234. data/sig/ibex/codegen/generated_action_abi.rbs +101 -0
  235. data/sig/ibex/codegen/html.rbs +18 -2
  236. data/sig/ibex/codegen/mermaid.rbs +16 -0
  237. data/sig/ibex/codegen/railroad.rbs +82 -0
  238. data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
  239. data/sig/ibex/codegen/rbs.rbs +84 -4
  240. data/sig/ibex/codegen/report.rbs +8 -0
  241. data/sig/ibex/codegen/ruby.rbs +97 -23
  242. data/sig/ibex/codegen/ruby_actions.rbs +54 -0
  243. data/sig/ibex/codegen/ruby_ast.rbs +34 -0
  244. data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
  245. data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
  246. data/sig/ibex/codegen/ruby_syntax.rbs +25 -0
  247. data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
  248. data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
  249. data/sig/ibex/coverage/collector.rbs +76 -0
  250. data/sig/ibex/coverage/event_stream.rbs +42 -0
  251. data/sig/ibex/coverage/report.rbs +100 -0
  252. data/sig/ibex/coverage/runtime_event_validator.rbs +68 -0
  253. data/sig/ibex/coverage.rbs +7 -0
  254. data/sig/ibex/error_messages/parser.rbs +58 -0
  255. data/sig/ibex/error_messages/parser_v2.rbs +67 -0
  256. data/sig/ibex/error_messages/renderer.rbs +23 -0
  257. data/sig/ibex/error_messages/sentence_search.rbs +80 -0
  258. data/sig/ibex/error_messages/update.rbs +43 -0
  259. data/sig/ibex/error_messages.rbs +85 -0
  260. data/sig/ibex/frontend/ast.rbs +208 -19
  261. data/sig/ibex/frontend/bootstrap_parser.rbs +11 -0
  262. data/sig/ibex/frontend/diagnostic.rbs +53 -0
  263. data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
  264. data/sig/ibex/frontend/dsl.rbs +33 -4
  265. data/sig/ibex/frontend/formatter.rbs +135 -0
  266. data/sig/ibex/frontend/generated_parser.rbs +218 -68
  267. data/sig/ibex/frontend/generated_parser_base.rbs +61 -10
  268. data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
  269. data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
  270. data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
  271. data/sig/ibex/frontend/generation.rbs +6 -0
  272. data/sig/ibex/frontend/lexer.rbs +49 -2
  273. data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
  274. data/sig/ibex/frontend/parser/declarations.rbs +54 -0
  275. data/sig/ibex/frontend/parser/parameters.rbs +28 -0
  276. data/sig/ibex/frontend/parser/rules.rbs +3 -0
  277. data/sig/ibex/frontend/parser.rbs +66 -0
  278. data/sig/ibex/frontend/regenerator.rbs +11 -0
  279. data/sig/ibex/frontend/resolution.rbs +33 -0
  280. data/sig/ibex/frontend/resolver.rbs +91 -0
  281. data/sig/ibex/frontend/rule_documentation.rbs +42 -0
  282. data/sig/ibex/frontend/source_cursor.rbs +36 -3
  283. data/sig/ibex/frontend/source_document.rbs +119 -0
  284. data/sig/ibex/frontend/source_loader.rbs +66 -0
  285. data/sig/ibex/frontend/source_span.rbs +53 -0
  286. data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
  287. data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
  288. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +73 -5
  289. data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
  290. data/sig/ibex/frontend/token_adapter.rbs +5 -2
  291. data/sig/ibex/frontend.rbs +1 -1
  292. data/sig/ibex/generation_input.rbs +37 -0
  293. data/sig/ibex/generation_manifest.rbs +67 -0
  294. data/sig/ibex/generation_transaction.rbs +82 -0
  295. data/sig/ibex/generation_transaction_recovery.rbs +36 -0
  296. data/sig/ibex/generation_transaction_validation.rbs +65 -0
  297. data/sig/ibex/grammar_tests.rbs +93 -0
  298. data/sig/ibex/ir/automaton_ir.rbs +8 -2
  299. data/sig/ibex/ir/grammar_ir.rbs +75 -15
  300. data/sig/ibex/ir/lexer_ir.rbs +57 -0
  301. data/sig/ibex/ir/migration.rbs +34 -0
  302. data/sig/ibex/ir/serialize.rbs +23 -6
  303. data/sig/ibex/ir/validator/automaton.rbs +109 -0
  304. data/sig/ibex/ir/validator/base.rbs +65 -0
  305. data/sig/ibex/ir/validator/grammar.rbs +184 -0
  306. data/sig/ibex/ir/validator/lexer.rbs +37 -0
  307. data/sig/ibex/ir/validator.rbs +16 -0
  308. data/sig/ibex/ir.rbs +38 -4
  309. data/sig/ibex/lalr/build_metrics.rbs +20 -0
  310. data/sig/ibex/lalr/builder.rbs +95 -15
  311. data/sig/ibex/lalr/conflict_search.rbs +7 -3
  312. data/sig/ibex/lalr/counterexample.rbs +5 -2
  313. data/sig/ibex/lalr/direct_lookaheads.rbs +86 -0
  314. data/sig/ibex/lalr/ielr_partition.rbs +59 -0
  315. data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
  316. data/sig/ibex/lalr.rbs +6 -0
  317. data/sig/ibex/location.rbs +67 -0
  318. data/sig/ibex/lsp/document_handlers.rbs +24 -0
  319. data/sig/ibex/lsp/document_store.rbs +94 -0
  320. data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
  321. data/sig/ibex/lsp/document_store_validation.rbs +26 -0
  322. data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
  323. data/sig/ibex/lsp/navigation_handlers.rbs +30 -0
  324. data/sig/ibex/lsp/position_codec.rbs +40 -0
  325. data/sig/ibex/lsp/protocol_error.rbs +32 -0
  326. data/sig/ibex/lsp/request_handlers.rbs +26 -0
  327. data/sig/ibex/lsp/request_support.rbs +40 -0
  328. data/sig/ibex/lsp/server.rbs +55 -0
  329. data/sig/ibex/lsp/symbol_index.rbs +78 -0
  330. data/sig/ibex/lsp/symbol_index_builder.rbs +87 -0
  331. data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
  332. data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
  333. data/sig/ibex/lsp/symbol_occurrence.rbs +25 -0
  334. data/sig/ibex/lsp/transport.rbs +35 -0
  335. data/sig/ibex/lsp/workspace.rbs +41 -0
  336. data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
  337. data/sig/ibex/lsp.rbs +7 -0
  338. data/sig/ibex/normalize/declarations.rbs +31 -0
  339. data/sig/ibex/normalize/diagnostics.rbs +9 -0
  340. data/sig/ibex/normalize/expander.rbs +20 -14
  341. data/sig/ibex/normalize/expression.rbs +10 -10
  342. data/sig/ibex/normalize/inline_expansion.rbs +120 -0
  343. data/sig/ibex/normalize/inline_validation.rbs +40 -0
  344. data/sig/ibex/normalize/lexer.rbs +37 -0
  345. data/sig/ibex/normalize/named_references.rbs +20 -0
  346. data/sig/ibex/normalize/nodes.rbs +14 -0
  347. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +32 -0
  348. data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
  349. data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
  350. data/sig/ibex/normalize/parameter_validation.rbs +44 -0
  351. data/sig/ibex/normalize/parameters.rbs +46 -0
  352. data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
  353. data/sig/ibex/normalize.rbs +123 -18
  354. data/sig/ibex/racc_migration/checker.rbs +36 -0
  355. data/sig/ibex/racc_migration/harness.rbs +16 -0
  356. data/sig/ibex/racc_migration/report.rbs +53 -0
  357. data/sig/ibex/racc_migration.rbs +8 -0
  358. data/sig/ibex/rake_task.rbs +51 -0
  359. data/sig/ibex/samples.rbs +51 -0
  360. data/sig/ibex/table_simulation/result.rbs +32 -0
  361. data/sig/ibex/table_simulation/simulator.rbs +98 -0
  362. data/sig/ibex/table_simulation/step.rbs +40 -0
  363. data/sig/ibex/table_simulation/text.rbs +14 -0
  364. data/sig/ibex/table_simulation.rbs +7 -0
  365. data/sig/ibex/tables.rbs +0 -26
  366. data/sig/ibex/watch/runner.rbs +48 -0
  367. data/sig/ibex/watch/source_snapshot.rbs +42 -0
  368. data/sig/ibex/watch.rbs +7 -0
  369. data/sig/ibex.rbs +2 -0
  370. metadata +301 -16
  371. data/.rubocop.yml +0 -43
  372. data/CHANGELOG.md +0 -30
  373. data/Rakefile +0 -25
  374. data/Steepfile +0 -10
  375. data/docs/compat-notes.md +0 -37
  376. data/docs/lexer-coverage.md +0 -14
  377. data/docs/phase10-extensions.md +0 -27
  378. data/gemfiles/Gemfile +0 -7
  379. data/gemfiles/Gemfile.lock +0 -98
  380. data/lib/ibex/frontend/grammar.y +0 -156
  381. data/lib/ibex/runtime/parser.rb +0 -360
  382. data/lib/ibex/runtime.rb +0 -8
  383. data/sig/ibex/runtime/parser.rbs +0 -167
  384. data/sig/ibex/runtime.rbs +0 -6
@@ -0,0 +1,55 @@
1
+ # Generated from lib/ibex/lsp/server.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Coordinates JSON-RPC lifecycle, request responses, and protocol-safe logging.
6
+ class Server
7
+ include RequestHandlers
8
+
9
+ REQUEST_METHODS: Array[String]
10
+
11
+ NOTIFICATION_METHODS: Array[String]
12
+
13
+ # @rbs (stdin: untyped, stdout: untyped, stderr: untyped) -> void
14
+ def initialize: (stdin: untyped, stdout: untyped, stderr: untyped) -> void
15
+
16
+ # @rbs () -> Integer
17
+ def run: () -> Integer
18
+
19
+ private
20
+
21
+ # @rbs () -> Hash[String, untyped]?
22
+ def read_message: () -> Hash[String, untyped]?
23
+
24
+ # @rbs (Hash[String, untyped] message) -> void
25
+ def process_message: (Hash[String, untyped] message) -> void
26
+
27
+ # @rbs (Hash[String, untyped] message) -> (String | Integer)?
28
+ def safe_request_id: (Hash[String, untyped] message) -> (String | Integer)?
29
+
30
+ # @rbs (Hash[String, untyped] message) -> bool
31
+ def notification_envelope?: (Hash[String, untyped] message) -> bool
32
+
33
+ # @rbs (String method, bool request) -> void
34
+ def validate_message_kind!: (String method, bool request) -> void
35
+
36
+ # @rbs (Hash[String, untyped] message) -> (String | Integer)?
37
+ def validate_envelope: (Hash[String, untyped] message) -> (String | Integer)?
38
+
39
+ # @rbs (untyped value) -> bool
40
+ def valid_request_id?: (untyped value) -> bool
41
+
42
+ # @rbs (String method) -> void
43
+ def validate_lifecycle!: (String method) -> void
44
+
45
+ # @rbs (String | Integer request_id, untyped result) -> void
46
+ def send_result: (String | Integer request_id, untyped result) -> void
47
+
48
+ # @rbs (String | Integer | nil request_id, ProtocolError error) -> void
49
+ def send_error: (String | Integer | nil request_id, ProtocolError error) -> void
50
+
51
+ # @rbs (String message) -> void
52
+ def log: (String message) -> void
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,78 @@
1
+ # Generated from lib/ibex/lsp/symbol_index.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Answers source navigation and guarded workspace rename operations.
6
+ class SymbolIndex
7
+ IDENTIFIER: Regexp
8
+
9
+ RESERVED: Array[String]
10
+
11
+ # @rbs (DocumentStore store, String path) -> void
12
+ def initialize: (DocumentStore store, String path) -> void
13
+
14
+ # @rbs (String path, Hash[String, untyped] position) -> Array[Hash[String, untyped]]
15
+ def definition: (String path, Hash[String, untyped] position) -> Array[Hash[String, untyped]]
16
+
17
+ # @rbs (String path, Hash[String, untyped] position, ?include_declaration: bool) ->
18
+ # Array[Hash[String, untyped]]
19
+ def references: (String path, Hash[String, untyped] position, ?include_declaration: bool) -> Array[Hash[String, untyped]]
20
+
21
+ # @rbs (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
22
+ def prepare_rename: (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
23
+
24
+ # @rbs (String path, Hash[String, untyped] position, String new_name) -> Hash[String, untyped]
25
+ def rename: (String path, Hash[String, untyped] position, String new_name) -> Hash[String, untyped]
26
+
27
+ # @rbs (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
28
+ def hover: (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
29
+
30
+ private
31
+
32
+ # @rbs (String path, Hash[String, untyped] position) -> SymbolOccurrence?
33
+ def occurrence_at: (String path, Hash[String, untyped] position) -> SymbolOccurrence?
34
+
35
+ # @rbs (Array[untyped] key, ?role: Symbol?) -> Array[SymbolOccurrence]
36
+ def matching: (Array[untyped] key, ?role: Symbol?) -> Array[SymbolOccurrence]
37
+
38
+ # @rbs (SymbolOccurrence occurrence) -> Hash[String, untyped]
39
+ def location: (SymbolOccurrence occurrence) -> Hash[String, untyped]
40
+
41
+ # @rbs (SymbolOccurrence occurrence) -> Hash[String, untyped]
42
+ def include_target_location: (SymbolOccurrence occurrence) -> Hash[String, untyped]
43
+
44
+ # @rbs (SymbolOccurrence occurrence) -> Hash[String, Hash[String, Integer]]
45
+ def range: (SymbolOccurrence occurrence) -> Hash[String, Hash[String, Integer]]
46
+
47
+ # @rbs (String path, Hash[String, untyped] position) -> SymbolOccurrence
48
+ def renameable_occurrence: (String path, Hash[String, untyped] position) -> SymbolOccurrence
49
+
50
+ # @rbs (SymbolOccurrence occurrence, String new_name) -> void
51
+ def validate_new_name: (SymbolOccurrence occurrence, String new_name) -> void
52
+
53
+ # @rbs (SymbolOccurrence candidate, SymbolOccurrence occurrence) -> bool
54
+ def collision_scope?: (SymbolOccurrence candidate, SymbolOccurrence occurrence) -> bool
55
+
56
+ # @rbs (Array[SymbolOccurrence] entries) -> void
57
+ def validate_nonoverlapping: (Array[SymbolOccurrence] entries) -> void
58
+
59
+ # @rbs (Array[SymbolOccurrence] entries) -> void
60
+ def validate_unshared: (Array[SymbolOccurrence] entries) -> void
61
+
62
+ # @rbs () -> void
63
+ def ensure_fresh!: () -> void
64
+
65
+ # @rbs (Array[SymbolOccurrence] entries, String new_name) -> Hash[String, String]
66
+ def changed_sources: (Array[SymbolOccurrence] entries, String new_name) -> Hash[String, String]
67
+
68
+ # @rbs (SymbolOccurrence occurrence) -> String?
69
+ def hover_value: (SymbolOccurrence occurrence) -> String?
70
+
71
+ # @rbs (SymbolOccurrence occurrence) -> String
72
+ def rule_hover: (SymbolOccurrence occurrence) -> String
73
+
74
+ # @rbs (SymbolOccurrence occurrence) -> String
75
+ def terminal_hover: (SymbolOccurrence occurrence) -> String
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,87 @@
1
+ # Generated from lib/ibex/lsp/symbol_index_builder.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Builds source occurrences and hover metadata from lossless frontend documents.
6
+ class SymbolIndexBuilder
7
+ include SymbolIndexSourceQueries
8
+
9
+ include SymbolIndexPrecedenceReferences
10
+
11
+ # @rbs (DocumentStore store, Array[String] files) -> void
12
+ def initialize: (DocumentStore store, Array[String] files) -> void
13
+
14
+ # @rbs () -> [Array[SymbolOccurrence], Hash[String, Frontend::SourceDocument]]
15
+ def build: () -> [ Array[SymbolOccurrence], Hash[String, Frontend::SourceDocument] ]
16
+
17
+ private
18
+
19
+ # @rbs () -> void
20
+ def collect_documents: () -> void
21
+
22
+ # @rbs (String path, Frontend::SourceDocument document) -> void
23
+ def collect_definitions: (String path, Frontend::SourceDocument document) -> void
24
+
25
+ # @rbs (String path, Frontend::SourceDocument document, Frontend::AST::declaration declaration,
26
+ # Frontend::Location? following) -> void
27
+ def collect_declaration: (String path, Frontend::SourceDocument document, Frontend::AST::declaration declaration, Frontend::Location? following) -> void
28
+
29
+ # @rbs (Frontend::AST::Precedence declaration) -> void
30
+ def collect_precedence: (Frontend::AST::Precedence declaration) -> void
31
+
32
+ # @rbs (String path, Array[Frontend::Token] tokens, Frontend::AST::Include declaration) -> void
33
+ def collect_include: (String path, Array[Frontend::Token] tokens, Frontend::AST::Include declaration) -> void
34
+
35
+ # @rbs (String path, Frontend::SourceDocument document, Frontend::AST::Rule rule) -> void
36
+ def collect_rule_definition: (String path, Frontend::SourceDocument document, Frontend::AST::Rule rule) -> void
37
+
38
+ # @rbs (String path, Frontend::SourceDocument document, Frontend::AST::Rule rule,
39
+ # Frontend::Token lhs_token) -> void
40
+ def collect_parameters: (String path, Frontend::SourceDocument document, Frontend::AST::Rule rule, Frontend::Token lhs_token) -> void
41
+
42
+ # @rbs (String path, Frontend::SourceDocument document) -> void
43
+ def collect_references: (String path, Frontend::SourceDocument document) -> void
44
+
45
+ # @rbs (String path, Frontend::SourceDocument document, Frontend::AST::declaration declaration,
46
+ # Frontend::Location? following) -> void
47
+ def collect_declaration_references: (String path, Frontend::SourceDocument document, Frontend::AST::declaration declaration, Frontend::Location? following) -> void
48
+
49
+ # @rbs (String path, Frontend::SourceDocument document, Frontend::AST::Rule rule,
50
+ # Frontend::Location? following_rule) -> void
51
+ def collect_rule_references: (String path, Frontend::SourceDocument document, Frontend::AST::Rule rule, Frontend::Location? following_rule) -> void
52
+
53
+ # @rbs (String path, Frontend::SourceDocument document, Frontend::AST::item item,
54
+ # Frontend::AST::Rule rule, Integer rule_id) -> void
55
+ def collect_item: (String path, Frontend::SourceDocument document, Frontend::AST::item item, Frontend::AST::Rule rule, Integer rule_id) -> void
56
+
57
+ # @rbs (String path, Frontend::SourceDocument document,
58
+ # Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference item,
59
+ # Frontend::AST::Rule rule, Integer rule_id) -> void
60
+ def collect_named_item: (String path, Frontend::SourceDocument document, Frontend::AST::SymbolReference | Frontend::AST::ParameterizedReference item, Frontend::AST::Rule rule, Integer rule_id) -> void
61
+
62
+ # @rbs (String path, Frontend::Token token, String name) -> void
63
+ def add_global_reference: (String path, Frontend::Token token, String name) -> void
64
+
65
+ # @rbs (Symbol kind, String name) -> Hash[Symbol, untyped]
66
+ def symbol_data: (Symbol kind, String name) -> Hash[Symbol, untyped]
67
+
68
+ # @rbs (String path, Array[Frontend::Token] tokens, Array[String] names, Symbol kind, Symbol role) -> void
69
+ def add_named_tokens: (String path, Array[Frontend::Token] tokens, Array[String] names, Symbol kind, Symbol role) -> void
70
+
71
+ # @rbs (**untyped attributes) -> void
72
+ def add_occurrence: (**untyped attributes) -> void
73
+
74
+ # @rbs (String name) -> Array[untyped]
75
+ def global_key: (String name) -> Array[untyped]
76
+
77
+ # @rbs (String path, Integer rule_id, String name) -> Array[untyped]
78
+ def parameter_key: (String path, Integer rule_id, String name) -> Array[untyped]
79
+
80
+ # @rbs (Array[String] parameters) -> String
81
+ def parameter_signature: (Array[String] parameters) -> String
82
+
83
+ # @rbs (Frontend::AST::Include declaration) -> String?
84
+ def canonical_include_target: (Frontend::AST::Include declaration) -> String?
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/ibex/lsp/symbol_index_precedence_references.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Indexes rule-scoped item and alternative precedence references.
6
+ module SymbolIndexPrecedenceReferences
7
+ private
8
+
9
+ # @rbs (String path, Frontend::SourceDocument document, Frontend::AST::Alternative alternative,
10
+ # Frontend::Location? following, Frontend::AST::Rule rule, Integer rule_id) -> void
11
+ def collect_alternative_precedence: (String path, Frontend::SourceDocument document, Frontend::AST::Alternative alternative, Frontend::Location? following, Frontend::AST::Rule rule, Integer rule_id) -> void
12
+
13
+ # @rbs (String path, Frontend::Token token, String name, Frontend::AST::Rule rule,
14
+ # Integer rule_id) -> void
15
+ def add_rule_reference: (String path, Frontend::Token token, String name, Frontend::AST::Rule rule, Integer rule_id) -> void
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ # Generated from lib/ibex/lsp/symbol_index_source_queries.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Locates lossless frontend tokens used by the symbol index.
6
+ module SymbolIndexSourceQueries
7
+ private
8
+
9
+ # @rbs (Frontend::SourceDocument document, Frontend::Location start,
10
+ # Frontend::Location? finish) -> Array[Frontend::Token]
11
+ def tokens_between: (Frontend::SourceDocument document, Frontend::Location start, Frontend::Location? finish) -> Array[Frontend::Token]
12
+
13
+ # @rbs (Frontend::SourceDocument document, Frontend::Location location, String value) -> Frontend::Token?
14
+ def token_at: (Frontend::SourceDocument document, Frontend::Location location, String value) -> Frontend::Token?
15
+
16
+ # @rbs (Frontend::SourceDocument document, Frontend::Token lhs_token) -> Array[Frontend::Token]
17
+ def parameter_tokens: (Frontend::SourceDocument document, Frontend::Token lhs_token) -> Array[Frontend::Token]
18
+
19
+ # @rbs (Frontend::AST::declaration declaration) -> Array[String]
20
+ def declaration_reference_names: (Frontend::AST::declaration declaration) -> Array[String]
21
+
22
+ # @rbs (Frontend::Location left, Frontend::Location right) -> bool
23
+ def location_before?: (Frontend::Location left, Frontend::Location right) -> bool
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ # Generated from lib/ibex/lsp/symbol_occurrence.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # A source-backed grammar symbol definition or reference.
6
+ class SymbolOccurrence < Struct[String | Symbol | Array[untyped] | Frontend::SourceSpan | Hash[Symbol, untyped]]
7
+ attr_accessor name(): String
8
+
9
+ attr_accessor kind(): Symbol
10
+
11
+ attr_accessor role(): Symbol
12
+
13
+ attr_accessor key(): Array[untyped]
14
+
15
+ attr_accessor path(): String
16
+
17
+ attr_accessor span(): Frontend::SourceSpan
18
+
19
+ attr_accessor data(): Hash[Symbol, untyped]
20
+
21
+ def self.new: (?name: String, ?kind: Symbol, ?role: Symbol, ?key: Array[untyped], ?path: String, ?span: Frontend::SourceSpan, ?data: Hash[Symbol, untyped]) -> instance
22
+ | ({ ?name: String, ?kind: Symbol, ?role: Symbol, ?key: Array[untyped], ?path: String, ?span: Frontend::SourceSpan, ?data: Hash[Symbol, untyped] }) -> instance
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,35 @@
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
+ HEADER_SEPARATOR: ::String
8
+
9
+ # @rbs (untyped input, untyped output) -> void
10
+ def initialize: (untyped input, untyped output) -> void
11
+
12
+ # @rbs () -> Hash[String, untyped]?
13
+ def read_message: () -> Hash[String, untyped]?
14
+
15
+ # @rbs (Hash[String, untyped] message) -> void
16
+ def write_message: (Hash[String, untyped] message) -> void
17
+
18
+ private
19
+
20
+ # @rbs () -> String?
21
+ def read_header: () -> String?
22
+
23
+ # @rbs (String header) -> Integer
24
+ def content_length: (String header) -> Integer
25
+
26
+ # @rbs (Integer length) -> String
27
+ def read_bytes: (Integer length) -> String
28
+
29
+ # IO#read(length) may wait for the entire length on a live pipe. readpartial
30
+ # lets the stdio server process the bytes that are already available.
31
+ # @rbs (Integer length) -> String?
32
+ def read_chunk: (Integer length) -> String?
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,41 @@
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
+ # @rbs (String uri) -> untyped
25
+ def parse_file_uri: (String uri) -> untyped
26
+
27
+ # Ruby's URI::File may discard userinfo and port, so validate the raw authority first.
28
+ # @rbs (String uri) -> void
29
+ def validate_raw_authority!: (String uri) -> void
30
+
31
+ # @rbs (String uri) -> String
32
+ def canonical_root: (String uri) -> String
33
+
34
+ # @rbs (String encoded) -> String
35
+ def decode_path: (String encoded) -> String
36
+
37
+ # @rbs (String path, String root) -> bool
38
+ def inside?: (String path, String root) -> bool
39
+ end
40
+ end
41
+ 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 = Hash[String, untyped]
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
@@ -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,6 +8,9 @@ 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
 
@@ -20,6 +23,12 @@ module Ibex
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
 
@@ -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,27 +23,36 @@ 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
 
@@ -53,14 +65,8 @@ module Ibex
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,19 @@
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
7
-
8
- private def self.render_reference: (Frontend::AST::SymbolReference item) -> String
9
-
10
- private def render_group: (Frontend::AST::Group item) -> String
6
+ # @rbs (Frontend::AST::item item) -> String
7
+ def self.render: (Frontend::AST::item item) -> String
11
8
 
12
- private def self.render_group: (Frontend::AST::Group item) -> String
9
+ # @rbs (Array[untyped] pending, Frontend::AST::item item) -> void
10
+ private def self.push_render_item: (Array[untyped] pending, Frontend::AST::item item) -> void
13
11
 
14
- private def render_separated_list: (Frontend::AST::SeparatedList item) -> String
12
+ # @rbs (Array[untyped] pending, Frontend::AST::ParameterizedReference item) -> void
13
+ private def self.push_render_parameterized_reference: (Array[untyped] pending, Frontend::AST::ParameterizedReference item) -> void
15
14
 
16
- private def self.render_separated_list: (Frontend::AST::SeparatedList item) -> String
15
+ # @rbs (Array[untyped] pending, Frontend::AST::Group item) -> void
16
+ private def self.push_render_group: (Array[untyped] pending, Frontend::AST::Group item) -> void
17
17
 
18
- # @rbs (Frontend::AST::item item) -> String
19
- def self?.render: (Frontend::AST::item item) -> String
18
+ # @rbs (Array[untyped] pending, Array[Frontend::AST::item] items, String separator) -> void
19
+ private def self.push_render_items: (Array[untyped] pending, Array[Frontend::AST::item] items, String separator) -> void
20
20
  end
21
21
  end