ibex 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +95 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +262 -0
  40. data/docs/development.md +179 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1581 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/ja/bison-import.md +51 -0
  56. data/docs/ja/stable-api.md +53 -0
  57. data/docs/lexer-construction-profile.md +109 -0
  58. data/docs/lexer-migration.md +5 -0
  59. data/docs/maturity.md +128 -0
  60. data/docs/project-site-strategy.md +54 -0
  61. data/docs/racc-migration-evidence.md +45 -0
  62. data/docs/racc-migration.md +11 -0
  63. data/docs/release-readiness.md +126 -68
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +144 -34
  67. data/docs/status.md +43 -0
  68. data/docs/syntax-sessions.md +183 -0
  69. data/docs/table-artifact.md +125 -0
  70. data/docs/test-interactions.md +219 -0
  71. data/docs/verification-report.md +137 -0
  72. data/docs/verifier-trust-boundary.md +199 -0
  73. data/docs/workloads.md +132 -0
  74. data/lib/ibex/analysis/digraph.rb +128 -0
  75. data/lib/ibex/analysis.rb +1 -0
  76. data/lib/ibex/bison_import/importer.rb +516 -0
  77. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  78. data/lib/ibex/bison_import.rb +200 -0
  79. data/lib/ibex/bounded_subprocess.rb +171 -0
  80. data/lib/ibex/cli/ambiguity.rb +14 -5
  81. data/lib/ibex/cli/analysis.rb +134 -0
  82. data/lib/ibex/cli/bison_import.rb +121 -0
  83. data/lib/ibex/cli/config.rb +128 -0
  84. data/lib/ibex/cli/diagnostics.rb +31 -11
  85. data/lib/ibex/cli/documentation.rb +11 -8
  86. data/lib/ibex/cli/equiv.rb +169 -0
  87. data/lib/ibex/cli/error_messages.rb +11 -4
  88. data/lib/ibex/cli/explain.rb +14 -5
  89. data/lib/ibex/cli/fix.rb +203 -0
  90. data/lib/ibex/cli/formatting.rb +11 -10
  91. data/lib/ibex/cli/fuzz.rb +200 -0
  92. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  93. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  94. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  95. data/lib/ibex/cli/grammar_tests.rb +32 -14
  96. data/lib/ibex/cli/ir_tools.rb +5 -61
  97. data/lib/ibex/cli/outputs.rb +60 -33
  98. data/lib/ibex/cli/reduce.rb +202 -0
  99. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  100. data/lib/ibex/cli/samples.rb +49 -23
  101. data/lib/ibex/cli/verify.rb +116 -0
  102. data/lib/ibex/cli/watch.rb +6 -5
  103. data/lib/ibex/cli.rb +357 -56
  104. data/lib/ibex/codegen/action_locations.rb +1 -1
  105. data/lib/ibex/codegen/action_method_source.rb +5 -6
  106. data/lib/ibex/codegen/action_source.rb +3 -2
  107. data/lib/ibex/codegen/ambiguity.rb +5 -4
  108. data/lib/ibex/codegen/explain.rb +123 -55
  109. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  110. data/lib/ibex/codegen/rbs.rb +15 -7
  111. data/lib/ibex/codegen/report.rb +25 -13
  112. data/lib/ibex/codegen/ruby.rb +28 -64
  113. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  114. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  115. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  116. data/lib/ibex/configuration/explanation.rb +421 -0
  117. data/lib/ibex/configuration/inspector.rb +232 -0
  118. data/lib/ibex/configuration.rb +580 -0
  119. data/lib/ibex/coverage/collector.rb +21 -11
  120. data/lib/ibex/coverage/event_stream.rb +13 -7
  121. data/lib/ibex/coverage/report.rb +26 -18
  122. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  123. data/lib/ibex/delta_reducer.rb +99 -0
  124. data/lib/ibex/diff.rb +140 -0
  125. data/lib/ibex/equiv/machine.rb +135 -0
  126. data/lib/ibex/equiv.rb +373 -0
  127. data/lib/ibex/fix.rb +557 -0
  128. data/lib/ibex/frontend/ast.rb +22 -2
  129. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  130. data/lib/ibex/frontend/diagnostic.rb +1 -1
  131. data/lib/ibex/frontend/formatter.rb +72 -26
  132. data/lib/ibex/frontend/generated_parser.rb +147 -117
  133. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  134. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  135. data/lib/ibex/frontend/generation.rb +1 -1
  136. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  137. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  138. data/lib/ibex/frontend/regenerator.rb +1 -0
  139. data/lib/ibex/frontend/resolution.rb +2 -1
  140. data/lib/ibex/frontend/resolver.rb +1 -1
  141. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  142. data/lib/ibex/frontend/source_cursor.rb +2 -2
  143. data/lib/ibex/frontend/source_span.rb +9 -1
  144. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  145. data/lib/ibex/frontend/token_adapter.rb +10 -0
  146. data/lib/ibex/frontend.rb +1 -0
  147. data/lib/ibex/fuzz.rb +219 -0
  148. data/lib/ibex/generation_input.rb +1 -1
  149. data/lib/ibex/generation_manifest.rb +36 -25
  150. data/lib/ibex/generation_transaction.rb +1 -1
  151. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  152. data/lib/ibex/generation_transaction_validation.rb +2 -2
  153. data/lib/ibex/grammar_tests.rb +1 -1
  154. data/lib/ibex/ir/automaton_ir.rb +61 -19
  155. data/lib/ibex/ir/grammar_ir.rb +76 -45
  156. data/lib/ibex/ir/lexer_ir.rb +5 -5
  157. data/lib/ibex/ir/parser_contract.rb +135 -0
  158. data/lib/ibex/ir/serialize.rb +203 -76
  159. data/lib/ibex/ir/validator/automaton.rb +64 -34
  160. data/lib/ibex/ir/validator/base.rb +51 -33
  161. data/lib/ibex/ir/validator/grammar.rb +113 -83
  162. data/lib/ibex/ir/validator/lexer.rb +2 -2
  163. data/lib/ibex/ir/validator.rb +2 -1
  164. data/lib/ibex/ir.rb +16 -3
  165. data/lib/ibex/lalr/build_metrics.rb +50 -2
  166. data/lib/ibex/lalr/builder.rb +191 -56
  167. data/lib/ibex/lalr/conflict_search.rb +15 -4
  168. data/lib/ibex/lalr/counterexample.rb +19 -14
  169. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  170. data/lib/ibex/lalr/goto_follows.rb +229 -0
  171. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  172. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  173. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  174. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  175. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  176. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  177. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  178. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  179. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  180. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  181. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  182. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  183. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  184. data/lib/ibex/lalr.rb +52 -1
  185. data/lib/ibex/location.rb +3 -3
  186. data/lib/ibex/lsp/document_handlers.rb +9 -7
  187. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  188. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  189. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  190. data/lib/ibex/lsp/position_codec.rb +6 -2
  191. data/lib/ibex/lsp/request_handlers.rb +3 -2
  192. data/lib/ibex/lsp/request_support.rb +14 -7
  193. data/lib/ibex/lsp/server.rb +13 -11
  194. data/lib/ibex/lsp/symbol_index.rb +13 -13
  195. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  196. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  197. data/lib/ibex/lsp/transport.rb +13 -3
  198. data/lib/ibex/lsp/workspace.rb +5 -4
  199. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  200. data/lib/ibex/lsp.rb +1 -0
  201. data/lib/ibex/messages/en.yml +28 -0
  202. data/lib/ibex/messages/ja.yml +28 -0
  203. data/lib/ibex/messages.rb +68 -0
  204. data/lib/ibex/metrics.rb +175 -0
  205. data/lib/ibex/normalize/declarations.rb +2 -0
  206. data/lib/ibex/normalize/diagnostics.rb +63 -38
  207. data/lib/ibex/normalize/expander.rb +5 -4
  208. data/lib/ibex/normalize/expression.rb +8 -6
  209. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  210. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  211. data/lib/ibex/normalize/lexer.rb +3 -3
  212. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  213. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  214. data/lib/ibex/normalize/parameters.rb +31 -4
  215. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  216. data/lib/ibex/normalize.rb +10 -20
  217. data/lib/ibex/racc_migration/report.rb +6 -3
  218. data/lib/ibex/rake_task.rb +1 -1
  219. data/lib/ibex/samples.rb +43 -13
  220. data/lib/ibex/table_artifact/builder.rb +266 -0
  221. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  222. data/lib/ibex/table_artifact/document.rb +39 -0
  223. data/lib/ibex/table_artifact/executor.rb +187 -0
  224. data/lib/ibex/table_artifact/serializer.rb +57 -0
  225. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  226. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  227. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  228. data/lib/ibex/table_artifact/validator.rb +253 -0
  229. data/lib/ibex/table_artifact.rb +88 -0
  230. data/lib/ibex/table_simulation/result.rb +6 -2
  231. data/lib/ibex/table_simulation/step.rb +3 -1
  232. data/lib/ibex/tables.rb +14 -0
  233. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  234. data/lib/ibex/verification_report/builder.rb +159 -0
  235. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  236. data/lib/ibex/verification_report/logical_path.rb +68 -0
  237. data/lib/ibex/verification_report/validator.rb +329 -0
  238. data/lib/ibex/verification_report.rb +69 -0
  239. data/lib/ibex/verify/action_correspondence.rb +138 -0
  240. data/lib/ibex/verify/language_witness.rb +295 -0
  241. data/lib/ibex/verify/reference_collection.rb +190 -0
  242. data/lib/ibex/verify/result.rb +73 -0
  243. data/lib/ibex/verify/verifier.rb +598 -0
  244. data/lib/ibex/verify.rb +15 -0
  245. data/lib/ibex/version.rb +1 -1
  246. data/lib/ibex/watch/runner.rb +10 -1
  247. data/lib/ibex/watch/source_snapshot.rb +13 -8
  248. data/lib/ibex.rb +10 -0
  249. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  250. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  251. data/schema/bison-import-v1.schema.json +106 -0
  252. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  253. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  254. data/schema/construction-profile-v1.schema.json +779 -0
  255. data/schema/diff-v1.schema.json +41 -0
  256. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  257. data/schema/equiv-v1.schema.json +64 -0
  258. data/schema/error-ux-review-v1.schema.json +609 -0
  259. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  260. data/schema/error-ux-round2-v1.schema.json +519 -0
  261. data/schema/explain-v1.schema.json +63 -1
  262. data/schema/fix-v1.schema.json +64 -0
  263. data/schema/fix-v2.schema.json +66 -0
  264. data/schema/fix-v3.schema.json +101 -0
  265. data/schema/fuzz-regression-v1.schema.json +79 -0
  266. data/schema/fuzz-v1.schema.json +114 -0
  267. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  268. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  269. data/schema/grammar-ir.schema.json +271 -0
  270. data/schema/ielr-benchmark-v1.schema.json +85 -0
  271. data/schema/lexer-profile-v1.schema.json +491 -0
  272. data/schema/metrics-v1.schema.json +60 -0
  273. data/schema/reduce-v1.schema.json +22 -0
  274. data/schema/reduce-v2.schema.json +63 -0
  275. data/schema/table-artifact-v1.schema.json +377 -0
  276. data/schema/verification-report-v1.schema.json +222 -0
  277. data/schema/verify-v1.schema.json +42 -0
  278. data/sig/ibex/analysis/digraph.rbs +19 -0
  279. data/sig/ibex/bison_import/importer.rbs +140 -0
  280. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  281. data/sig/ibex/bison_import.rbs +95 -0
  282. data/sig/ibex/bounded_subprocess.rbs +76 -0
  283. data/sig/ibex/cli/ambiguity.rbs +6 -0
  284. data/sig/ibex/cli/analysis.rbs +43 -0
  285. data/sig/ibex/cli/bison_import.rbs +32 -0
  286. data/sig/ibex/cli/config.rbs +35 -0
  287. data/sig/ibex/cli/diagnostics.rbs +16 -3
  288. data/sig/ibex/cli/documentation.rbs +5 -1
  289. data/sig/ibex/cli/equiv.rbs +49 -0
  290. data/sig/ibex/cli/error_messages.rbs +6 -0
  291. data/sig/ibex/cli/explain.rbs +6 -0
  292. data/sig/ibex/cli/fix.rbs +53 -0
  293. data/sig/ibex/cli/formatting.rbs +5 -1
  294. data/sig/ibex/cli/fuzz.rbs +47 -0
  295. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  296. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  297. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  298. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  299. data/sig/ibex/cli/ir_tools.rbs +7 -19
  300. data/sig/ibex/cli/outputs.rbs +9 -3
  301. data/sig/ibex/cli/reduce.rbs +60 -0
  302. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  303. data/sig/ibex/cli/samples.rbs +8 -0
  304. data/sig/ibex/cli/verify.rbs +28 -0
  305. data/sig/ibex/cli/watch.rbs +2 -2
  306. data/sig/ibex/cli.rbs +79 -5
  307. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  308. data/sig/ibex/codegen/explain.rbs +45 -25
  309. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  310. data/sig/ibex/codegen/rbs.rbs +12 -10
  311. data/sig/ibex/codegen/report.rbs +12 -12
  312. data/sig/ibex/codegen/ruby.rbs +18 -15
  313. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  314. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  315. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  316. data/sig/ibex/configuration/explanation.rbs +195 -0
  317. data/sig/ibex/configuration/inspector.rbs +53 -0
  318. data/sig/ibex/configuration.rbs +242 -0
  319. data/sig/ibex/coverage/collector.rbs +16 -14
  320. data/sig/ibex/coverage/event_stream.rbs +12 -10
  321. data/sig/ibex/coverage/report.rbs +20 -18
  322. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  323. data/sig/ibex/delta_reducer.rbs +38 -0
  324. data/sig/ibex/diff.rbs +47 -0
  325. data/sig/ibex/equiv/machine.rbs +54 -0
  326. data/sig/ibex/equiv.rbs +129 -0
  327. data/sig/ibex/fix.rbs +138 -0
  328. data/sig/ibex/frontend/ast.rbs +33 -7
  329. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  330. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  331. data/sig/ibex/frontend/formatter.rbs +38 -30
  332. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  333. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  334. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  335. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  336. data/sig/ibex/frontend/resolution.rbs +3 -2
  337. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  338. data/sig/ibex/frontend/source_span.rbs +5 -2
  339. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  340. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  341. data/sig/ibex/fuzz.rbs +71 -0
  342. data/sig/ibex/generation_input.rbs +2 -2
  343. data/sig/ibex/generation_manifest.rbs +35 -32
  344. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  345. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  346. data/sig/ibex/grammar_tests.rbs +2 -2
  347. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  348. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  349. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  350. data/sig/ibex/ir/parser_contract.rbs +69 -0
  351. data/sig/ibex/ir/serialize.rbs +63 -28
  352. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  353. data/sig/ibex/ir/validator/base.rbs +35 -31
  354. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  355. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  356. data/sig/ibex/ir.rbs +9 -3
  357. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  358. data/sig/ibex/lalr/builder.rbs +75 -24
  359. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  360. data/sig/ibex/lalr/counterexample.rbs +17 -14
  361. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  362. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  363. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  364. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  365. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  366. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  367. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  368. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  369. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  370. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  371. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  372. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  373. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  374. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  375. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  376. data/sig/ibex/lalr.rbs +11 -1
  377. data/sig/ibex/location.rbs +6 -6
  378. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  379. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  380. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  381. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  382. data/sig/ibex/lsp/position_codec.rbs +8 -4
  383. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  384. data/sig/ibex/lsp/request_support.rbs +8 -8
  385. data/sig/ibex/lsp/server.rbs +16 -16
  386. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  387. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  388. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  389. data/sig/ibex/lsp/transport.rbs +18 -6
  390. data/sig/ibex/lsp/workspace.rbs +3 -2
  391. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  392. data/sig/ibex/messages.rbs +26 -0
  393. data/sig/ibex/metrics.rbs +50 -0
  394. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  395. data/sig/ibex/normalize/expander.rbs +2 -2
  396. data/sig/ibex/normalize/expression.rbs +10 -8
  397. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  398. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  399. data/sig/ibex/normalize/lexer.rbs +4 -4
  400. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  401. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  402. data/sig/ibex/normalize/parameters.rbs +13 -8
  403. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  404. data/sig/ibex/normalize.rbs +11 -5
  405. data/sig/ibex/racc_migration/report.rbs +8 -6
  406. data/sig/ibex/rake_task.rbs +1 -1
  407. data/sig/ibex/samples.rbs +13 -4
  408. data/sig/ibex/table_artifact/builder.rbs +93 -0
  409. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  410. data/sig/ibex/table_artifact/document.rbs +27 -0
  411. data/sig/ibex/table_artifact/executor.rbs +66 -0
  412. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  413. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  414. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  415. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  416. data/sig/ibex/table_artifact/validator.rbs +66 -0
  417. data/sig/ibex/table_artifact.rbs +32 -0
  418. data/sig/ibex/table_simulation/result.rbs +8 -4
  419. data/sig/ibex/table_simulation/step.rbs +4 -2
  420. data/sig/ibex/tables.rbs +10 -9
  421. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  422. data/sig/ibex/verification_report/builder.rbs +53 -0
  423. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  424. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  425. data/sig/ibex/verification_report/validator.rbs +114 -0
  426. data/sig/ibex/verification_report.rbs +44 -0
  427. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  428. data/sig/ibex/verify/language_witness.rbs +112 -0
  429. data/sig/ibex/verify/reference_collection.rbs +63 -0
  430. data/sig/ibex/verify/result.rbs +52 -0
  431. data/sig/ibex/verify/verifier.rbs +170 -0
  432. data/sig/ibex/verify.rbs +6 -0
  433. data/sig/ibex/watch/runner.rbs +12 -2
  434. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  435. metadata +232 -12
  436. data/lib/ibex/ir/migration.rb +0 -120
  437. data/sig/ibex/ir/migration.rbs +0 -34
data/sig/ibex/diff.rbs ADDED
@@ -0,0 +1,47 @@
1
+ # Generated from lib/ibex/diff.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Deterministic grammar and automaton change classification.
5
+ class Diff
6
+ # @rbs (IR::Automaton before, IR::Automaton after) -> void
7
+ def initialize: (IR::Automaton before, IR::Automaton after) -> void
8
+
9
+ # @rbs () -> Hash[Symbol, Object?]
10
+ def to_h: () -> Hash[Symbol, Object?]
11
+
12
+ private
13
+
14
+ # @rbs (Hash[String, Object?] before, Hash[String, Object?] after) -> Hash[Symbol, Object?]
15
+ def classify: (Hash[String, Object?] before, Hash[String, Object?] after) -> Hash[Symbol, Object?]
16
+
17
+ # @rbs (IR::Grammar grammar) -> Hash[String, Object?]
18
+ def symbol_records: (IR::Grammar grammar) -> Hash[String, Object?]
19
+
20
+ # @rbs (IR::Grammar grammar) -> Hash[String, Object?]
21
+ def rule_records: (IR::Grammar grammar) -> Hash[String, Object?]
22
+
23
+ # @rbs (IR::Grammar grammar, IR::Production production) -> Hash[Symbol, Object?]
24
+ def production_record: (IR::Grammar grammar, IR::Production production) -> Hash[Symbol, Object?]
25
+
26
+ # @rbs (IR::Automaton automaton) -> Hash[String, Object?]
27
+ def conflict_records: (IR::Automaton automaton) -> Hash[String, Object?]
28
+
29
+ # @rbs (IR::Grammar grammar, IR::conflict conflict) -> String
30
+ def conflict_identity: (IR::Grammar grammar, IR::conflict conflict) -> String
31
+
32
+ # @rbs (IR::Grammar grammar, Integer id) -> String
33
+ def production_shape: (IR::Grammar grammar, Integer id) -> String
34
+
35
+ # @rbs (IR::Grammar grammar, Integer id) -> String
36
+ def symbol_name: (IR::Grammar grammar, Integer id) -> String
37
+
38
+ # @rbs (IR::Grammar grammar) -> Hash[String, Object?]
39
+ def warning_records: (IR::Grammar grammar) -> Hash[String, Object?]
40
+
41
+ # @rbs () -> Hash[Symbol, Hash[Symbol, Integer]]
42
+ def numeric_metrics: () -> Hash[Symbol, Hash[Symbol, Integer]]
43
+
44
+ # @rbs (Integer before, Integer after) -> Hash[Symbol, Integer]
45
+ def change: (Integer before, Integer after) -> Hash[Symbol, Integer]
46
+ end
47
+ end
@@ -0,0 +1,54 @@
1
+ # Generated from lib/ibex/equiv/machine.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ class Equiv
5
+ # Immutable, semantic-action-free LR state-stack machine.
6
+ class Machine
7
+ class BudgetExceeded < Ibex::Error
8
+ end
9
+
10
+ # One product-search component.
11
+ class Configuration
12
+ attr_reader stack: Array[Integer]
13
+
14
+ attr_reader status: Symbol?
15
+
16
+ attr_reader actions: Integer
17
+
18
+ attr_reader reductions: Array[Integer]
19
+
20
+ # @rbs (stack: Array[Integer], status: Symbol?, actions: Integer, ?reductions: Array[Integer]) -> void
21
+ def initialize: (stack: Array[Integer], status: Symbol?, actions: Integer, ?reductions: Array[Integer]) -> void
22
+ end
23
+
24
+ # @rbs (IR::Automaton automaton, max_actions: Integer, max_stack: Integer) -> void
25
+ def initialize: (IR::Automaton automaton, max_actions: Integer, max_stack: Integer) -> void
26
+
27
+ # @rbs () -> Configuration
28
+ def start: () -> Configuration
29
+
30
+ # @rbs (Array[String] tokens) -> Configuration
31
+ def run: (Array[String] tokens) -> Configuration
32
+
33
+ # @rbs (Configuration configuration, String token) -> Configuration
34
+ def push: (Configuration configuration, String token) -> Configuration
35
+
36
+ # @rbs (Configuration configuration) -> Configuration
37
+ def finish: (Configuration configuration) -> Configuration
38
+
39
+ private
40
+
41
+ # @rbs (Configuration configuration, Integer token_id, eof: bool) -> Configuration
42
+ def consume: (Configuration configuration, Integer token_id, eof: bool) -> Configuration
43
+
44
+ # @rbs (Array[Integer] stack, Integer production_id) -> void
45
+ def apply_reduction!: (Array[Integer] stack, Integer production_id) -> void
46
+
47
+ # @rbs (Integer actions) -> void
48
+ def enforce_action_budget!: (Integer actions) -> void
49
+
50
+ # @rbs (Array[Integer] stack) -> void
51
+ def enforce_stack_budget!: (Array[Integer] stack) -> void
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,129 @@
1
+ # Generated from lib/ibex/equiv.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Bounded language comparison over two immutable parser automata.
5
+ # rubocop:disable Metrics/ClassLength -- the three comparison strategies share one report and budget contract.
6
+ class Equiv
7
+ type tree_node_signature = [ String, Array[String] ]
8
+
9
+ type tree_trace_entry = [ String, Array[String], tree_node_signature? ]
10
+
11
+ type terminal_signature = [ String, [ Symbol, Integer ]? ]
12
+
13
+ type production_signature = [ String, Array[String], String? ]
14
+
15
+ CAVEAT: String
16
+
17
+ DEFAULT_MAX_ACTIONS: Integer
18
+
19
+ DEFAULT_MAX_STACK: Integer
20
+
21
+ class Difference < Ibex::Error
22
+ attr_reader details: Hash[Symbol, Object?]
23
+
24
+ # @rbs (Hash[Symbol, Object?] details) -> void
25
+ def initialize: (Hash[Symbol, Object?] details) -> void
26
+ end
27
+
28
+ class BudgetExceeded < Ibex::Error
29
+ attr_reader details: Hash[Symbol, Object?]
30
+
31
+ # @rbs (Hash[Symbol, Object?] details) -> void
32
+ def initialize: (Hash[Symbol, Object?] details) -> void
33
+ end
34
+
35
+ # @rbs (IR::Automaton left, IR::Automaton right, ?sample_count: Integer, ?seed: Integer,
36
+ # ?max_tokens: Integer, ?max_configurations: Integer, ?max_actions: Integer, ?max_stack: Integer,
37
+ # ?rule_map: Hash[String, String]) -> void
38
+ def initialize: (IR::Automaton left, IR::Automaton right, ?sample_count: Integer, ?seed: Integer, ?max_tokens: Integer, ?max_configurations: Integer, ?max_actions: Integer, ?max_stack: Integer, ?rule_map: Hash[String, String]) -> void
39
+
40
+ # @rbs () -> Hash[Symbol, Object?]
41
+ def run: () -> Hash[Symbol, Object?]
42
+
43
+ private
44
+
45
+ # @rbs () -> Integer
46
+ def compare_samples: () -> Integer
47
+
48
+ # @rbs (IR::Grammar grammar, Integer seed) -> Array[Array[String]]
49
+ def generated_samples: (IR::Grammar grammar, Integer seed) -> Array[Array[String]]
50
+
51
+ # @rbs () -> Integer
52
+ def search_product: () -> Integer
53
+
54
+ # @rbs (Array[String] tokens, method: String) -> void
55
+ def compare_tokens!: (Array[String] tokens, method: String) -> void
56
+
57
+ # @rbs (Machine::Configuration left, Machine::Configuration right, Array[String] tokens) -> void
58
+ def compare_configurations!: (Machine::Configuration left, Machine::Configuration right, Array[String] tokens) -> void
59
+
60
+ # @rbs (Machine::Configuration left, Machine::Configuration right, Array[String] tokens, String method) -> void
61
+ def compare_results!: (Machine::Configuration left, Machine::Configuration right, Array[String] tokens, String method) -> void
62
+
63
+ # @rbs (Array[String] tokens, Symbol? left, Symbol? right, String method) -> bot
64
+ def raise_language_difference: (Array[String] tokens, Symbol? left, Symbol? right, String method) -> bot
65
+
66
+ # @rbs () -> bool
67
+ def structural_identity?: () -> bool
68
+
69
+ # @rbs () -> bool
70
+ def tree_structural_identity?: () -> bool
71
+
72
+ # @rbs (IR::Grammar grammar) -> Array[tree_node_signature]
73
+ def tree_grammar_signature: (IR::Grammar grammar) -> Array[tree_node_signature]
74
+
75
+ # @rbs (IR::node_annotation? node) -> tree_node_signature?
76
+ def node_signature: (IR::node_annotation? node) -> tree_node_signature?
77
+
78
+ # @rbs (IR::Automaton automaton, Machine::Configuration configuration, map_left: bool) -> Array[tree_trace_entry]
79
+ def tree_trace: (IR::Automaton automaton, Machine::Configuration configuration, map_left: bool) -> Array[tree_trace_entry]
80
+
81
+ # @rbs (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
82
+ def grammar_signature: (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
83
+
84
+ # @rbs (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
85
+ def recovery_signature: (IR::Grammar grammar, map_left: bool) -> Hash[Symbol, Object?]
86
+
87
+ # @rbs (IR::Grammar grammar) -> Array[terminal_signature]
88
+ def terminal_signatures: (IR::Grammar grammar) -> Array[terminal_signature]
89
+
90
+ # @rbs (IR::Grammar grammar, map_left: bool) -> Array[production_signature]
91
+ def production_signatures: (IR::Grammar grammar, map_left: bool) -> Array[production_signature]
92
+
93
+ # @rbs (IR::Grammar grammar, IR::Production production, map_left: bool) -> production_signature
94
+ def production_signature: (IR::Grammar grammar, IR::Production production, map_left: bool) -> production_signature
95
+
96
+ # @rbs (IR::Grammar grammar, Integer id) -> String
97
+ def symbol_name: (IR::Grammar grammar, Integer id) -> String
98
+
99
+ # @rbs (IR::Grammar grammar, String name, map_left: bool) -> String
100
+ def mapped_name: (IR::Grammar grammar, String name, map_left: bool) -> String
101
+
102
+ # @rbs () -> void
103
+ def validate_rule_map!: () -> void
104
+
105
+ # @rbs () -> void
106
+ def verify_inputs!: () -> void
107
+
108
+ # @rbs () -> Array[String]
109
+ def terminal_alphabet: () -> Array[String]
110
+
111
+ # @rbs (Machine::Configuration left, Machine::Configuration right) -> Array[Object?]
112
+ def product_key: (Machine::Configuration left, Machine::Configuration right) -> Array[Object?]
113
+
114
+ # @rbs (Machine::Configuration left, Machine::Configuration right) -> bool
115
+ def both_rejected?: (Machine::Configuration left, Machine::Configuration right) -> bool
116
+
117
+ # @rbs (structural: bool, samples: Integer, configurations: Integer) -> untyped
118
+ def successful_report: (structural: bool, samples: Integer, configurations: Integer) -> untyped
119
+
120
+ # @rbs () -> bool
121
+ def tree_requested?: () -> bool
122
+
123
+ # @rbs () -> Hash[Symbol, Integer]
124
+ def bounds: () -> Hash[Symbol, Integer]
125
+
126
+ # @rbs (Ibex::Error error) -> bool
127
+ def sample_budget_error?: (Ibex::Error error) -> bool
128
+ end
129
+ end
data/sig/ibex/fix.rbs ADDED
@@ -0,0 +1,138 @@
1
+ # Generated from lib/ibex/fix.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Bounded conflict-repair candidate generation and safety evaluation.
5
+ # rubocop:disable Metrics/ClassLength -- candidate generation and its three safety gates share one target identity.
6
+ class Fix
7
+ type candidate = { category: String, description: String, source: String?, algorithm: Symbol }
8
+
9
+ SCHEMA_VERSION: Integer
10
+
11
+ CATEGORIES: Array[String]
12
+
13
+ ADVICE_CATEGORIES: Array[String]
14
+
15
+ ADVICE_STATEMENT: String
16
+
17
+ class BudgetExceeded < Ibex::Error
18
+ attr_reader details: Hash[Symbol, Object?]
19
+
20
+ # @rbs (Hash[Symbol, Object?] details) -> void
21
+ def initialize: (Hash[Symbol, Object?] details) -> void
22
+ end
23
+
24
+ attr_reader sources: Hash[String, String]
25
+
26
+ # @rbs (String source, file: String, grammar: IR::Grammar, automaton: IR::Automaton, algorithm: Symbol,
27
+ # mode: Symbol, ?state: Integer?, ?conflict_index: Integer?, ?max_candidates: Integer, ?max_builds: Integer,
28
+ # ?equiv_max_tokens: Integer, ?equiv_max_configurations: Integer, ?equiv_samples: Integer,
29
+ # ?verify_max_states: Integer, ?verify_max_items: Integer,
30
+ # ?messages: ErrorMessages::Document?, ?message_file: String?) -> void
31
+ # rubocop:disable Metrics/ParameterLists
32
+ def initialize: (String source, file: String, grammar: IR::Grammar, automaton: IR::Automaton, algorithm: Symbol, mode: Symbol, ?state: Integer?, ?conflict_index: Integer?, ?max_candidates: Integer, ?max_builds: Integer, ?equiv_max_tokens: Integer, ?equiv_max_configurations: Integer, ?equiv_samples: Integer, ?verify_max_states: Integer, ?verify_max_items: Integer, ?messages: ErrorMessages::Document?, ?message_file: String?) -> void
33
+
34
+ # @rbs () -> Hash[Symbol, Object?]
35
+ def run: () -> Hash[Symbol, Object?]
36
+
37
+ private
38
+
39
+ # @rbs () -> [IR::AutomatonState, Integer, IR::conflict]
40
+ def select_target: () -> [ IR::AutomatonState, Integer, IR::conflict ]
41
+
42
+ # @rbs (IR::conflict conflict) -> Array[candidate]
43
+ def candidate_space: (IR::conflict conflict) -> Array[candidate]
44
+
45
+ # @rbs (IR::conflict conflict) -> Array[Hash[Symbol, Object?]]
46
+ def advice_space: (IR::conflict conflict) -> Array[Hash[Symbol, Object?]]
47
+
48
+ # @rbs (IR::conflict conflict) -> Array[candidate]
49
+ def precedence_declaration_candidates: (IR::conflict conflict) -> Array[candidate]
50
+
51
+ # @rbs (IR::conflict conflict) -> candidate?
52
+ def precedence_override_candidate: (IR::conflict conflict) -> candidate?
53
+
54
+ # @rbs () -> Array[candidate]
55
+ def algorithm_candidates: () -> Array[candidate]
56
+
57
+ # @rbs (IR::conflict conflict) -> candidate?
58
+ def inline_candidate: (IR::conflict conflict) -> candidate?
59
+
60
+ # @rbs (IR::conflict conflict) -> candidate
61
+ def expectation_candidate: (IR::conflict conflict) -> candidate
62
+
63
+ # @rbs (IR::conflict conflict) -> candidate?
64
+ def recovery_candidate: (IR::conflict conflict) -> candidate?
65
+
66
+ # @rbs (String category, String description, ?source: String?, ?algorithm: Symbol?) -> candidate
67
+ def candidate: (String category, String description, ?source: String?, ?algorithm: Symbol?) -> candidate
68
+
69
+ # @rbs (candidate candidate, IR::conflict target) -> Hash[Symbol, Object?]
70
+ def evaluate_candidate: (candidate candidate, IR::conflict target) -> Hash[Symbol, Object?]
71
+
72
+ # @rbs (IR::Automaton candidate, IR::conflict target) -> Hash[Symbol, String]?
73
+ def conflict_safety_failure: (IR::Automaton candidate, IR::conflict target) -> Hash[Symbol, String]?
74
+
75
+ # @rbs (IR::Automaton candidate) -> Hash[Symbol, String]?
76
+ def verification_safety_failure: (IR::Automaton candidate) -> Hash[Symbol, String]?
77
+
78
+ # @rbs (candidate candidate) -> IR::Automaton
79
+ def build_candidate: (candidate candidate) -> IR::Automaton
80
+
81
+ # @rbs (candidate candidate, Hash[Symbol, Object?] outcome, IR::conflict conflict, Integer number) ->
82
+ # Hash[Symbol, Object?]
83
+ def proposal: (candidate candidate, Hash[Symbol, Object?] outcome, IR::conflict conflict, Integer number) -> Hash[Symbol, Object?]
84
+
85
+ # @rbs (IR::Automaton candidate) -> Hash[Symbol, Object?]
86
+ def message_catalog_impact: (IR::Automaton candidate) -> Hash[Symbol, Object?]
87
+
88
+ # @rbs (candidate candidate, Hash[Symbol, Object?] outcome) -> Hash[Symbol, Object?]
89
+ def rejection: (candidate candidate, Hash[Symbol, Object?] outcome) -> Hash[Symbol, Object?]
90
+
91
+ # @rbs (IR::AutomatonState state, Integer index, IR::conflict conflict, Array[candidate] candidates,
92
+ # Array[Hash[Symbol, Object?]] proposals, Array[Hash[Symbol, Object?]] rejections,
93
+ # Array[Hash[Symbol, Object?]] advice) -> Hash[Symbol, Object?]
94
+ def report_for: (IR::AutomatonState state, Integer index, IR::conflict conflict, Array[candidate] candidates, Array[Hash[Symbol, Object?]] proposals, Array[Hash[Symbol, Object?]] rejections, Array[Hash[Symbol, Object?]] advice) -> Hash[Symbol, Object?]
95
+
96
+ # @rbs (IR::Automaton automaton) -> Array[[IR::AutomatonState, IR::conflict]]
97
+ def active_conflicts: (IR::Automaton automaton) -> Array[[ IR::AutomatonState, IR::conflict ]]
98
+
99
+ # @rbs (IR::conflict conflict) -> bool
100
+ def active_conflict?: (IR::conflict conflict) -> bool
101
+
102
+ # @rbs (IR::Automaton candidate, String target_fingerprint) -> bool
103
+ def increased_other_conflict?: (IR::Automaton candidate, String target_fingerprint) -> bool
104
+
105
+ # @rbs (IR::Automaton automaton) -> Hash[String, Integer]
106
+ def conflict_counts: (IR::Automaton automaton) -> Hash[String, Integer]
107
+
108
+ # @rbs (IR::Grammar grammar, IR::conflict conflict) -> String
109
+ def conflict_fingerprint: (IR::Grammar grammar, IR::conflict conflict) -> String
110
+
111
+ # @rbs (IR::Grammar grammar, Integer id) -> String
112
+ def production_shape: (IR::Grammar grammar, Integer id) -> String
113
+
114
+ # @rbs (IR::Grammar candidate_grammar) -> Hash[String, String]
115
+ def identity_rule_map: (IR::Grammar candidate_grammar) -> Hash[String, String]
116
+
117
+ # @rbs (String insertion) -> String
118
+ def insert_before_rule: (String insertion) -> String
119
+
120
+ # @rbs (String source, String insertion) -> String
121
+ def insert_before_rule_in: (String source, String insertion) -> String
122
+
123
+ # @rbs (Integer line_number, String suffix) -> String
124
+ def append_to_line: (Integer line_number, String suffix) -> String
125
+
126
+ # @rbs (String directive) -> String
127
+ def replace_or_insert_expectation: (String directive) -> String
128
+
129
+ # @rbs (String source, IR::conflict conflict) -> String
130
+ def update_expectation: (String source, IR::conflict conflict) -> String
131
+
132
+ # @rbs (String before, String after) -> String
133
+ def unified_diff: (String before, String after) -> String
134
+
135
+ # @rbs () -> Hash[Symbol, Integer]
136
+ def bounds: () -> Hash[Symbol, Integer]
137
+ end
138
+ end
@@ -13,7 +13,7 @@ module Ibex
13
13
  module AST
14
14
  type symbol_metadata = DisplayName | SemanticType
15
15
 
16
- type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | symbol_metadata
16
+ type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | ParserConfiguration | symbol_metadata
17
17
 
18
18
  type lexer_entry = LexerRule | LexerState
19
19
 
@@ -33,16 +33,18 @@ module Ibex
33
33
  end
34
34
 
35
35
  # Adds deterministic, recursively serializable hashes to Struct nodes.
36
- # @rbs module-self Struct[untyped]
37
- module Node : Struct[untyped]
38
- def to_h: () -> untyped
36
+ # @rbs module-self Struct[Object?]
37
+ module Node : Struct[Object?]
38
+ # @rbs () -> Hash[Symbol, untyped]
39
+ def to_h: () -> Hash[Symbol, untyped]
39
40
 
40
41
  private
41
42
 
43
+ # @rbs (untyped value) -> untyped
42
44
  def serialize: (untyped value) -> untyped
43
45
  end
44
46
 
45
- class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool?]
47
+ class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool? | Location?]
46
48
  attr_accessor class_name(): String
47
49
 
48
50
  attr_accessor superclass(): String?
@@ -59,8 +61,10 @@ module Ibex
59
61
 
60
62
  attr_accessor cst(): bool?
61
63
 
62
- def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?) -> instance
63
- | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool? }) -> instance
64
+ attr_accessor extended_loc(): Location?
65
+
66
+ def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location?) -> instance
67
+ | ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location? }) -> instance
64
68
  end
65
69
 
66
70
  class Fragment < Struct[Array[declaration] | Array[Rule] | Location]
@@ -282,6 +286,28 @@ module Ibex
282
286
  | ({ ?name: String, ?code: String, ?loc: Location }) -> instance
283
287
  end
284
288
 
289
+ class ParserConfiguration < Struct[Array[ParserSetting] | Location]
290
+ attr_accessor settings(): Array[ParserSetting]
291
+
292
+ attr_accessor loc(): Location
293
+
294
+ def self.new: (?settings: Array[ParserSetting], ?loc: Location) -> instance
295
+ | ({ ?settings: Array[ParserSetting], ?loc: Location }) -> instance
296
+ end
297
+
298
+ class ParserSetting < Struct[Symbol | Location]
299
+ attr_accessor key(): Symbol
300
+
301
+ attr_accessor value(): Symbol
302
+
303
+ attr_accessor loc(): Location
304
+
305
+ def self.new: (?key: Symbol, ?value: Symbol, ?loc: Location) -> instance
306
+ | ({ ?key: Symbol, ?value: Symbol, ?loc: Location }) -> instance
307
+ end
308
+
309
+ ROOT_ONLY_DECLARATION_NAMES: Hash[Class, String]
310
+
285
311
  class Alternative < Struct[Array[item] | InlineAction? | String? | NodeAnnotation? | Location]
286
312
  attr_accessor items(): Array[item]
287
313
 
@@ -10,6 +10,8 @@ module Ibex
10
10
 
11
11
  include BootstrapParserParameters
12
12
 
13
+ include ParserConfigurationSupport
14
+
13
15
  @mode: Symbol
14
16
 
15
17
  @index: Integer
@@ -28,8 +28,8 @@ module Ibex
28
28
  # @rbs () -> String
29
29
  def to_s: () -> String
30
30
 
31
- # @rbs () -> Hash[Symbol, untyped]
32
- def to_h: () -> Hash[Symbol, untyped]
31
+ # @rbs () -> Hash[Symbol, Object?]
32
+ def to_h: () -> Hash[Symbol, Object?]
33
33
  end
34
34
 
35
35
  # Immutable output from a diagnostic parse.
@@ -19,6 +19,8 @@ module Ibex
19
19
 
20
20
  type formatter_element = { segment: Segment, external: external_token?, role: Symbol?, gap: Array[Segment] }
21
21
 
22
+ type formatter_state = { section: :declarations | :rules, precedence_closer: external_token?, conversion: bool, conversion_name: bool, parser: bool, parser_key: bool, depth: Integer, rule_colon: bool }
23
+
22
24
  # @rbs (String source, ?file: String, ?mode: Symbol) -> String
23
25
  def self.format: (String source, ?file: String, ?mode: Symbol) -> String
24
26
 
@@ -45,32 +47,38 @@ module Ibex
45
47
  # @rbs (Array[formatter_element] elements) -> void
46
48
  def annotate_comment_indentation: (Array[formatter_element] elements) -> void
47
49
 
48
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
49
- def token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
50
+ # @rbs (external_token external, formatter_state state) -> Symbol?
51
+ def token_role: (external_token external, formatter_state state) -> Symbol?
52
+
53
+ # @rbs (external_token external, formatter_state state) -> Symbol?
54
+ def document_token_role: (external_token external, formatter_state state) -> Symbol?
55
+
56
+ # @rbs (external_token external, formatter_state state) -> Symbol?
57
+ def nested_declaration_role: (external_token external, formatter_state state) -> Symbol?
50
58
 
51
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
52
- def document_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
59
+ # @rbs (formatter_state state) -> Symbol?
60
+ def section_end_role: (formatter_state state) -> Symbol?
53
61
 
54
- # @rbs (Hash[Symbol, untyped] state) -> Symbol?
55
- def section_end_role: (Hash[Symbol, untyped] state) -> Symbol?
62
+ # @rbs (external_token external, formatter_state state) -> Symbol?
63
+ def rule_token_role: (external_token external, formatter_state state) -> Symbol?
56
64
 
57
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
58
- def rule_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
65
+ # @rbs (external_token external, formatter_state state) -> Symbol
66
+ def precedence_role: (external_token external, formatter_state state) -> Symbol
59
67
 
60
- # @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol
61
- def precedence_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol
68
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
69
+ def advance_role_state: (external_token external, Symbol? role, formatter_state state) -> void
62
70
 
63
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
64
- def advance_role_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
71
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
72
+ def advance_parser_state: (external_token external, Symbol? role, formatter_state state) -> void
65
73
 
66
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
67
- def advance_precedence_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
74
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
75
+ def advance_precedence_state: (external_token external, Symbol? role, formatter_state state) -> void
68
76
 
69
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
70
- def advance_conversion_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
77
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
78
+ def advance_conversion_state: (external_token external, Symbol? role, formatter_state state) -> void
71
79
 
72
- # @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
73
- def advance_rule_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
80
+ # @rbs (external_token external, Symbol? role, formatter_state state) -> void
81
+ def advance_rule_state: (external_token external, Symbol? role, formatter_state state) -> void
74
82
 
75
83
  # @rbs (formatter_element? previous, formatter_element current) -> String
76
84
  def separator: (formatter_element? previous, formatter_element current) -> String
@@ -113,23 +121,23 @@ module Ibex
113
121
  # @rbs (String text) -> bool
114
122
  def text_ends_with_newline?: (String text) -> bool
115
123
 
116
- # @rbs (untyped left, untyped right) -> bool
117
- def same_semantic_projection?: (untyped left, untyped right) -> bool
124
+ # @rbs (Object? left, Object? right) -> bool
125
+ def same_semantic_projection?: (Object? left, Object? right) -> bool
118
126
 
119
- # @rbs (untyped left, untyped right) -> bool
120
- def comparable_semantic_values?: (untyped left, untyped right) -> bool
127
+ # @rbs (Object? left, Object? right) -> bool
128
+ def comparable_semantic_values?: (Object? left, Object? right) -> bool
121
129
 
122
- # @rbs (Hash[untyped, untyped] left, untyped right) -> bool
123
- def comparable_semantic_hashes?: (Hash[untyped, untyped] left, untyped right) -> bool
130
+ # @rbs (Hash[Object?, Object?] left, Object? right) -> bool
131
+ def comparable_semantic_hashes?: (Hash[Object?, Object?] left, Object? right) -> bool
124
132
 
125
- # @rbs (Array[[untyped, untyped]] pending, untyped left, untyped right) -> void
126
- def append_semantic_children: (Array[[ untyped, untyped ]] pending, untyped left, untyped right) -> void
133
+ # @rbs (Array[[Object?, Object?]] pending, Object? left, Object? right) -> void
134
+ def append_semantic_children: (Array[[ Object?, Object? ]] pending, Object? left, Object? right) -> void
127
135
 
128
- # @rbs (Struct[untyped] value) -> Array[Symbol]
129
- def semantic_members: (Struct[untyped] value) -> Array[Symbol]
136
+ # @rbs (Struct[Object?] value) -> Array[Symbol]
137
+ def semantic_members: (Struct[Object?] value) -> Array[Symbol]
130
138
 
131
- # @rbs (Hash[untyped, untyped] value) -> Array[untyped]
132
- def semantic_keys: (Hash[untyped, untyped] value) -> Array[untyped]
139
+ # @rbs (Hash[Object?, Object?] value) -> Array[Object?]
140
+ def semantic_keys: (Hash[Object?, Object?] value) -> Array[Object?]
133
141
  end
134
142
  end
135
143
  end