ibex 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (603) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -123
  3. data/docs/architecture.md +477 -31
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +106 -0
  12. data/docs/cst.md +237 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +262 -0
  40. data/docs/development.md +306 -0
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +26 -0
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1581 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +114 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +629 -18
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/ja/bison-import.md +51 -0
  56. data/docs/ja/stable-api.md +53 -0
  57. data/docs/lexer-construction-profile.md +109 -0
  58. data/docs/lexer-migration.md +56 -0
  59. data/docs/maturity.md +128 -0
  60. data/docs/project-site-strategy.md +54 -0
  61. data/docs/racc-migration-evidence.md +45 -0
  62. data/docs/racc-migration.md +45 -6
  63. data/docs/release-readiness.md +221 -0
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +234 -0
  67. data/docs/status.md +43 -0
  68. data/docs/syntax-sessions.md +183 -0
  69. data/docs/table-artifact.md +125 -0
  70. data/docs/test-interactions.md +219 -0
  71. data/docs/verification-report.md +137 -0
  72. data/docs/verifier-trust-boundary.md +199 -0
  73. data/docs/workloads.md +132 -0
  74. data/examples/README.md +60 -0
  75. data/examples/calculator.y +44 -0
  76. data/examples/csv.y +32 -0
  77. data/examples/ini.y +70 -0
  78. data/examples/json.y +48 -0
  79. data/examples/tiny_language.y +75 -0
  80. data/lib/ibex/analysis/digraph.rb +128 -0
  81. data/lib/ibex/analysis/sets.rb +5 -4
  82. data/lib/ibex/analysis.rb +1 -0
  83. data/lib/ibex/artifact_set.rb +63 -0
  84. data/lib/ibex/bison_import/importer.rb +516 -0
  85. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  86. data/lib/ibex/bison_import.rb +200 -0
  87. data/lib/ibex/bounded_subprocess.rb +171 -0
  88. data/lib/ibex/cli/ambiguity.rb +75 -0
  89. data/lib/ibex/cli/analysis.rb +134 -0
  90. data/lib/ibex/cli/bison_import.rb +121 -0
  91. data/lib/ibex/cli/config.rb +128 -0
  92. data/lib/ibex/cli/counterexample_options.rb +6 -2
  93. data/lib/ibex/cli/coverage.rb +173 -0
  94. data/lib/ibex/cli/debug.rb +106 -0
  95. data/lib/ibex/cli/diagnostics.rb +136 -0
  96. data/lib/ibex/cli/documentation.rb +70 -0
  97. data/lib/ibex/cli/equiv.rb +169 -0
  98. data/lib/ibex/cli/error_messages.rb +184 -0
  99. data/lib/ibex/cli/explain.rb +85 -0
  100. data/lib/ibex/cli/fix.rb +203 -0
  101. data/lib/ibex/cli/formatting.rb +387 -0
  102. data/lib/ibex/cli/fuzz.rb +200 -0
  103. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  104. data/lib/ibex/cli/generation_artifacts.rb +189 -0
  105. data/lib/ibex/cli/generation_error_messages.rb +39 -0
  106. data/lib/ibex/cli/grammar_tests.rb +140 -0
  107. data/lib/ibex/cli/ir_tools.rb +128 -0
  108. data/lib/ibex/cli/lsp.rb +33 -0
  109. data/lib/ibex/cli/outputs.rb +133 -23
  110. data/lib/ibex/cli/racc_migration.rb +87 -0
  111. data/lib/ibex/cli/reduce.rb +202 -0
  112. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  113. data/lib/ibex/cli/samples.rb +118 -0
  114. data/lib/ibex/cli/verify.rb +116 -0
  115. data/lib/ibex/cli/watch.rb +104 -0
  116. data/lib/ibex/cli.rb +825 -55
  117. data/lib/ibex/codegen/action_locations.rb +103 -0
  118. data/lib/ibex/codegen/action_method_source.rb +209 -0
  119. data/lib/ibex/codegen/action_source.rb +119 -0
  120. data/lib/ibex/codegen/ambiguity.rb +174 -0
  121. data/lib/ibex/codegen/cst_metadata.rb +171 -0
  122. data/lib/ibex/codegen/documentation.rb +170 -0
  123. data/lib/ibex/codegen/explain.rb +380 -0
  124. data/lib/ibex/codegen/generated_action_abi.rb +293 -0
  125. data/lib/ibex/codegen/html.rb +94 -10
  126. data/lib/ibex/codegen/mermaid.rb +43 -0
  127. data/lib/ibex/codegen/railroad.rb +197 -0
  128. data/lib/ibex/codegen/railroad_documentation.rb +59 -0
  129. data/lib/ibex/codegen/rbs.rb +331 -2
  130. data/lib/ibex/codegen/report.rb +67 -15
  131. data/lib/ibex/codegen/ruby.rb +305 -66
  132. data/lib/ibex/codegen/ruby_actions.rb +146 -0
  133. data/lib/ibex/codegen/ruby_ast.rb +121 -0
  134. data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
  135. data/lib/ibex/codegen/ruby_lexer.rb +83 -0
  136. data/lib/ibex/codegen/ruby_syntax.rb +96 -0
  137. data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
  138. data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
  139. data/lib/ibex/codegen/symbol_labels.rb +1 -1
  140. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  141. data/lib/ibex/configuration/explanation.rb +421 -0
  142. data/lib/ibex/configuration/inspector.rb +232 -0
  143. data/lib/ibex/configuration.rb +580 -0
  144. data/lib/ibex/coverage/collector.rb +198 -0
  145. data/lib/ibex/coverage/event_stream.rb +103 -0
  146. data/lib/ibex/coverage/report.rb +267 -0
  147. data/lib/ibex/coverage/runtime_event_validator.rb +169 -0
  148. data/lib/ibex/coverage.rb +13 -0
  149. data/lib/ibex/delta_reducer.rb +99 -0
  150. data/lib/ibex/diff.rb +140 -0
  151. data/lib/ibex/equiv/machine.rb +135 -0
  152. data/lib/ibex/equiv.rb +373 -0
  153. data/lib/ibex/error_messages/parser.rb +159 -0
  154. data/lib/ibex/error_messages/parser_v2.rb +198 -0
  155. data/lib/ibex/error_messages/renderer.rb +65 -0
  156. data/lib/ibex/error_messages/sentence_search.rb +196 -0
  157. data/lib/ibex/error_messages/update.rb +169 -0
  158. data/lib/ibex/error_messages.rb +165 -0
  159. data/lib/ibex/fix.rb +557 -0
  160. data/lib/ibex/frontend/ast.rb +166 -7
  161. data/lib/ibex/frontend/bootstrap_parser.rb +40 -4
  162. data/lib/ibex/frontend/diagnostic.rb +81 -0
  163. data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
  164. data/lib/ibex/frontend/dsl.rb +66 -7
  165. data/lib/ibex/frontend/formatter.rb +453 -0
  166. data/lib/ibex/frontend/generated_parser.rb +644 -190
  167. data/lib/ibex/frontend/generated_parser_base.rb +170 -32
  168. data/lib/ibex/frontend/generated_parser_includes.rb +51 -0
  169. data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
  170. data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
  171. data/lib/ibex/frontend/generation.rb +33 -0
  172. data/lib/ibex/frontend/lexer.rb +162 -10
  173. data/lib/ibex/frontend/lexer_recovery.rb +84 -0
  174. data/lib/ibex/frontend/parser/declarations.rb +262 -11
  175. data/lib/ibex/frontend/parser/parameters.rb +82 -0
  176. data/lib/ibex/frontend/parser/rules.rb +43 -6
  177. data/lib/ibex/frontend/parser.rb +182 -4
  178. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  179. data/lib/ibex/frontend/regenerator.rb +27 -1
  180. data/lib/ibex/frontend/resolution.rb +70 -0
  181. data/lib/ibex/frontend/resolver.rb +217 -0
  182. data/lib/ibex/frontend/rule_documentation.rb +104 -0
  183. data/lib/ibex/frontend/source_cursor.rb +133 -9
  184. data/lib/ibex/frontend/source_document.rb +229 -0
  185. data/lib/ibex/frontend/source_loader.rb +150 -0
  186. data/lib/ibex/frontend/source_span.rb +89 -0
  187. data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
  188. data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
  189. data/lib/ibex/frontend/token_adapter/declaration_state.rb +244 -22
  190. data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
  191. data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
  192. data/lib/ibex/frontend/token_adapter.rb +18 -3
  193. data/lib/ibex/frontend.rb +14 -2
  194. data/lib/ibex/fuzz.rb +219 -0
  195. data/lib/ibex/generation_input.rb +57 -0
  196. data/lib/ibex/generation_manifest.rb +211 -0
  197. data/lib/ibex/generation_transaction.rb +261 -0
  198. data/lib/ibex/generation_transaction_recovery.rb +109 -0
  199. data/lib/ibex/generation_transaction_validation.rb +196 -0
  200. data/lib/ibex/grammar_tests.rb +206 -0
  201. data/lib/ibex/ir/automaton_ir.rb +86 -11
  202. data/lib/ibex/ir/grammar_ir.rb +170 -26
  203. data/lib/ibex/ir/lexer_ir.rb +76 -0
  204. data/lib/ibex/ir/parser_contract.rb +135 -0
  205. data/lib/ibex/ir/serialize.rb +268 -50
  206. data/lib/ibex/ir/validator/automaton.rb +375 -0
  207. data/lib/ibex/ir/validator/base.rb +147 -0
  208. data/lib/ibex/ir/validator/grammar.rb +634 -0
  209. data/lib/ibex/ir/validator/lexer.rb +113 -0
  210. data/lib/ibex/ir/validator.rb +63 -0
  211. data/lib/ibex/ir.rb +71 -5
  212. data/lib/ibex/lalr/build_metrics.rb +71 -0
  213. data/lib/ibex/lalr/builder.rb +514 -52
  214. data/lib/ibex/lalr/conflict.rb +1 -0
  215. data/lib/ibex/lalr/conflict_search.rb +26 -9
  216. data/lib/ibex/lalr/counterexample.rb +38 -18
  217. data/lib/ibex/lalr/direct_lookaheads.rb +289 -0
  218. data/lib/ibex/lalr/goto_follows.rb +229 -0
  219. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  220. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  221. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  222. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  223. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  224. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  225. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  226. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  227. data/lib/ibex/lalr/ielr_partition.rb +166 -0
  228. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  229. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  230. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  231. data/lib/ibex/lalr/on_error_reductions.rb +74 -0
  232. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  233. data/lib/ibex/lalr.rb +59 -1
  234. data/lib/ibex/location.rb +129 -0
  235. data/lib/ibex/lsp/document_handlers.rb +68 -0
  236. data/lib/ibex/lsp/document_store.rb +264 -0
  237. data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
  238. data/lib/ibex/lsp/document_store_validation.rb +61 -0
  239. data/lib/ibex/lsp/initialization_handlers.rb +80 -0
  240. data/lib/ibex/lsp/navigation_handlers.rb +70 -0
  241. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  242. data/lib/ibex/lsp/position_codec.rb +113 -0
  243. data/lib/ibex/lsp/protocol_error.rb +33 -0
  244. data/lib/ibex/lsp/request_handlers.rb +46 -0
  245. data/lib/ibex/lsp/request_support.rb +94 -0
  246. data/lib/ibex/lsp/server.rb +148 -0
  247. data/lib/ibex/lsp/symbol_index.rb +241 -0
  248. data/lib/ibex/lsp/symbol_index_builder.rb +277 -0
  249. data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
  250. data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
  251. data/lib/ibex/lsp/symbol_occurrence.rb +23 -0
  252. data/lib/ibex/lsp/transport.rb +128 -0
  253. data/lib/ibex/lsp/workspace.rb +128 -0
  254. data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
  255. data/lib/ibex/lsp.rb +33 -0
  256. data/lib/ibex/messages/en.yml +28 -0
  257. data/lib/ibex/messages/ja.yml +28 -0
  258. data/lib/ibex/messages.rb +68 -0
  259. data/lib/ibex/metrics.rb +175 -0
  260. data/lib/ibex/normalize/declarations.rb +142 -7
  261. data/lib/ibex/normalize/diagnostics.rb +94 -24
  262. data/lib/ibex/normalize/expander.rb +64 -59
  263. data/lib/ibex/normalize/expression.rb +63 -40
  264. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  265. data/lib/ibex/normalize/inline_expansion.rb +465 -0
  266. data/lib/ibex/normalize/inline_validation.rb +174 -0
  267. data/lib/ibex/normalize/lexer.rb +131 -0
  268. data/lib/ibex/normalize/named_references.rb +60 -0
  269. data/lib/ibex/normalize/nodes.rb +46 -0
  270. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +70 -0
  271. data/lib/ibex/normalize/parameter_lowering.rb +143 -0
  272. data/lib/ibex/normalize/parameter_substitution.rb +125 -0
  273. data/lib/ibex/normalize/parameter_validation.rb +140 -0
  274. data/lib/ibex/normalize/parameters.rb +226 -0
  275. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  276. data/lib/ibex/normalize/recovery_declarations.rb +84 -0
  277. data/lib/ibex/normalize.rb +172 -17
  278. data/lib/ibex/racc_migration/checker.rb +122 -0
  279. data/lib/ibex/racc_migration/harness.rb +177 -0
  280. data/lib/ibex/racc_migration/report.rb +97 -0
  281. data/lib/ibex/racc_migration.rb +12 -0
  282. data/lib/ibex/rake_task.rb +116 -0
  283. data/lib/ibex/samples.rb +216 -0
  284. data/lib/ibex/table_artifact/builder.rb +266 -0
  285. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  286. data/lib/ibex/table_artifact/document.rb +39 -0
  287. data/lib/ibex/table_artifact/executor.rb +187 -0
  288. data/lib/ibex/table_artifact/serializer.rb +57 -0
  289. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  290. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  291. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  292. data/lib/ibex/table_artifact/validator.rb +253 -0
  293. data/lib/ibex/table_artifact.rb +88 -0
  294. data/lib/ibex/table_simulation/result.rb +55 -0
  295. data/lib/ibex/table_simulation/simulator.rb +253 -0
  296. data/lib/ibex/table_simulation/step.rb +62 -0
  297. data/lib/ibex/table_simulation/text.rb +31 -0
  298. data/lib/ibex/table_simulation.rb +13 -0
  299. data/lib/ibex/tables.rb +22 -69
  300. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  301. data/lib/ibex/verification_report/builder.rb +159 -0
  302. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  303. data/lib/ibex/verification_report/logical_path.rb +68 -0
  304. data/lib/ibex/verification_report/validator.rb +329 -0
  305. data/lib/ibex/verification_report.rb +69 -0
  306. data/lib/ibex/verify/action_correspondence.rb +138 -0
  307. data/lib/ibex/verify/language_witness.rb +295 -0
  308. data/lib/ibex/verify/reference_collection.rb +190 -0
  309. data/lib/ibex/verify/result.rb +73 -0
  310. data/lib/ibex/verify/verifier.rb +598 -0
  311. data/lib/ibex/verify.rb +15 -0
  312. data/lib/ibex/version.rb +1 -1
  313. data/lib/ibex/watch/runner.rb +181 -0
  314. data/lib/ibex/watch/source_snapshot.rb +98 -0
  315. data/lib/ibex/watch.rb +11 -0
  316. data/lib/ibex.rb +35 -1
  317. data/schema/automaton-ir-definitions.schema.json +401 -0
  318. data/schema/automaton-ir.schema.json +65 -0
  319. data/schema/benchmark-v1.schema.json +212 -0
  320. data/schema/benchmark-v2.schema.json +61 -0
  321. data/schema/bison-import-v1.schema.json +106 -0
  322. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  323. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  324. data/schema/construction-profile-v1.schema.json +779 -0
  325. data/schema/cst-v1.json +170 -0
  326. data/schema/diff-v1.schema.json +41 -0
  327. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  328. data/schema/equiv-v1.schema.json +64 -0
  329. data/schema/error-ux-review-v1.schema.json +609 -0
  330. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  331. data/schema/error-ux-round2-v1.schema.json +519 -0
  332. data/schema/error-ux-v1.schema.json +258 -0
  333. data/schema/explain-v1.schema.json +495 -0
  334. data/schema/fix-v1.schema.json +64 -0
  335. data/schema/fix-v2.schema.json +66 -0
  336. data/schema/fix-v3.schema.json +101 -0
  337. data/schema/frontend-diagnostics-v1.schema.json +154 -0
  338. data/schema/fuzz-regression-v1.schema.json +79 -0
  339. data/schema/fuzz-v1.schema.json +114 -0
  340. data/schema/generation-manifest-v1.schema.json +115 -0
  341. data/schema/grammar-ir-extensions.schema.json +734 -0
  342. data/schema/grammar-ir-foundation.schema.json +426 -0
  343. data/schema/grammar-ir.schema.json +271 -0
  344. data/schema/ielr-benchmark-v1.schema.json +85 -0
  345. data/schema/lexer-ir-v1.schema.json +215 -0
  346. data/schema/lexer-profile-v1.schema.json +491 -0
  347. data/schema/metrics-v1.schema.json +60 -0
  348. data/schema/migration-check-v1.schema.json +60 -0
  349. data/schema/performance-comparison-v1.schema.json +395 -0
  350. data/schema/public-performance-comparison-v1.schema.json +506 -0
  351. data/schema/public-performance-profile-v1.schema.json +360 -0
  352. data/schema/reduce-v1.schema.json +22 -0
  353. data/schema/reduce-v2.schema.json +63 -0
  354. data/schema/runtime-coverage-v1.schema.json +86 -0
  355. data/schema/runtime-event-v1.schema.json +308 -0
  356. data/schema/table-artifact-v1.schema.json +377 -0
  357. data/schema/table-simulation-v1.schema.json +70 -0
  358. data/schema/verification-report-v1.schema.json +222 -0
  359. data/schema/verify-v1.schema.json +42 -0
  360. data/sig/ibex/analysis/digraph.rbs +19 -0
  361. data/sig/ibex/artifact_set.rbs +37 -0
  362. data/sig/ibex/bison_import/importer.rbs +140 -0
  363. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  364. data/sig/ibex/bison_import.rbs +95 -0
  365. data/sig/ibex/bounded_subprocess.rbs +76 -0
  366. data/sig/ibex/cli/ambiguity.rbs +28 -0
  367. data/sig/ibex/cli/analysis.rbs +43 -0
  368. data/sig/ibex/cli/bison_import.rbs +32 -0
  369. data/sig/ibex/cli/config.rbs +35 -0
  370. data/sig/ibex/cli/counterexample_options.rbs +2 -0
  371. data/sig/ibex/cli/coverage.rbs +53 -0
  372. data/sig/ibex/cli/debug.rbs +28 -0
  373. data/sig/ibex/cli/diagnostics.rbs +51 -0
  374. data/sig/ibex/cli/documentation.rbs +29 -0
  375. data/sig/ibex/cli/equiv.rbs +49 -0
  376. data/sig/ibex/cli/error_messages.rbs +63 -0
  377. data/sig/ibex/cli/explain.rbs +31 -0
  378. data/sig/ibex/cli/fix.rbs +53 -0
  379. data/sig/ibex/cli/formatting.rbs +107 -0
  380. data/sig/ibex/cli/fuzz.rbs +47 -0
  381. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  382. data/sig/ibex/cli/generation_artifacts.rbs +69 -0
  383. data/sig/ibex/cli/generation_error_messages.rbs +19 -0
  384. data/sig/ibex/cli/grammar_tests.rbs +48 -0
  385. data/sig/ibex/cli/ir_tools.rbs +39 -0
  386. data/sig/ibex/cli/lsp.rbs +14 -0
  387. data/sig/ibex/cli/outputs.rbs +26 -3
  388. data/sig/ibex/cli/racc_migration.rbs +30 -0
  389. data/sig/ibex/cli/reduce.rbs +60 -0
  390. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  391. data/sig/ibex/cli/samples.rbs +38 -0
  392. data/sig/ibex/cli/verify.rbs +28 -0
  393. data/sig/ibex/cli/watch.rbs +43 -0
  394. data/sig/ibex/cli.rbs +182 -9
  395. data/sig/ibex/codegen/action_locations.rbs +45 -0
  396. data/sig/ibex/codegen/action_method_source.rbs +65 -0
  397. data/sig/ibex/codegen/action_source.rbs +50 -0
  398. data/sig/ibex/codegen/ambiguity.rbs +60 -0
  399. data/sig/ibex/codegen/cst_metadata.rbs +59 -0
  400. data/sig/ibex/codegen/documentation.rbs +50 -0
  401. data/sig/ibex/codegen/explain.rbs +105 -0
  402. data/sig/ibex/codegen/generated_action_abi.rbs +105 -0
  403. data/sig/ibex/codegen/html.rbs +18 -2
  404. data/sig/ibex/codegen/mermaid.rbs +16 -0
  405. data/sig/ibex/codegen/railroad.rbs +82 -0
  406. data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
  407. data/sig/ibex/codegen/rbs.rbs +86 -4
  408. data/sig/ibex/codegen/report.rbs +16 -8
  409. data/sig/ibex/codegen/ruby.rbs +105 -28
  410. data/sig/ibex/codegen/ruby_actions.rbs +54 -0
  411. data/sig/ibex/codegen/ruby_ast.rbs +34 -0
  412. data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
  413. data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
  414. data/sig/ibex/codegen/ruby_syntax.rbs +27 -0
  415. data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
  416. data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
  417. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  418. data/sig/ibex/configuration/explanation.rbs +195 -0
  419. data/sig/ibex/configuration/inspector.rbs +53 -0
  420. data/sig/ibex/configuration.rbs +242 -0
  421. data/sig/ibex/coverage/collector.rbs +78 -0
  422. data/sig/ibex/coverage/event_stream.rbs +44 -0
  423. data/sig/ibex/coverage/report.rbs +102 -0
  424. data/sig/ibex/coverage/runtime_event_validator.rbs +70 -0
  425. data/sig/ibex/coverage.rbs +7 -0
  426. data/sig/ibex/delta_reducer.rbs +38 -0
  427. data/sig/ibex/diff.rbs +47 -0
  428. data/sig/ibex/equiv/machine.rbs +54 -0
  429. data/sig/ibex/equiv.rbs +129 -0
  430. data/sig/ibex/error_messages/parser.rbs +58 -0
  431. data/sig/ibex/error_messages/parser_v2.rbs +67 -0
  432. data/sig/ibex/error_messages/renderer.rbs +23 -0
  433. data/sig/ibex/error_messages/sentence_search.rbs +80 -0
  434. data/sig/ibex/error_messages/update.rbs +43 -0
  435. data/sig/ibex/error_messages.rbs +85 -0
  436. data/sig/ibex/fix.rbs +138 -0
  437. data/sig/ibex/frontend/ast.rbs +237 -22
  438. data/sig/ibex/frontend/bootstrap_parser.rbs +13 -0
  439. data/sig/ibex/frontend/diagnostic.rbs +53 -0
  440. data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
  441. data/sig/ibex/frontend/dsl.rbs +33 -4
  442. data/sig/ibex/frontend/formatter.rbs +143 -0
  443. data/sig/ibex/frontend/generated_parser.rbs +228 -68
  444. data/sig/ibex/frontend/generated_parser_base.rbs +65 -12
  445. data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
  446. data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
  447. data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
  448. data/sig/ibex/frontend/generation.rbs +6 -0
  449. data/sig/ibex/frontend/lexer.rbs +49 -2
  450. data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
  451. data/sig/ibex/frontend/parser/declarations.rbs +57 -0
  452. data/sig/ibex/frontend/parser/parameters.rbs +28 -0
  453. data/sig/ibex/frontend/parser/rules.rbs +3 -0
  454. data/sig/ibex/frontend/parser.rbs +66 -0
  455. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  456. data/sig/ibex/frontend/regenerator.rbs +11 -0
  457. data/sig/ibex/frontend/resolution.rbs +34 -0
  458. data/sig/ibex/frontend/resolver.rbs +91 -0
  459. data/sig/ibex/frontend/rule_documentation.rbs +42 -0
  460. data/sig/ibex/frontend/source_cursor.rbs +38 -5
  461. data/sig/ibex/frontend/source_document.rbs +119 -0
  462. data/sig/ibex/frontend/source_loader.rbs +66 -0
  463. data/sig/ibex/frontend/source_span.rbs +56 -0
  464. data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
  465. data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
  466. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +83 -3
  467. data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
  468. data/sig/ibex/frontend/token_adapter.rbs +11 -2
  469. data/sig/ibex/frontend.rbs +1 -1
  470. data/sig/ibex/fuzz.rbs +71 -0
  471. data/sig/ibex/generation_input.rbs +37 -0
  472. data/sig/ibex/generation_manifest.rbs +70 -0
  473. data/sig/ibex/generation_transaction.rbs +82 -0
  474. data/sig/ibex/generation_transaction_recovery.rbs +36 -0
  475. data/sig/ibex/generation_transaction_validation.rbs +65 -0
  476. data/sig/ibex/grammar_tests.rbs +93 -0
  477. data/sig/ibex/ir/automaton_ir.rbs +35 -10
  478. data/sig/ibex/ir/grammar_ir.rbs +96 -22
  479. data/sig/ibex/ir/lexer_ir.rbs +57 -0
  480. data/sig/ibex/ir/parser_contract.rbs +69 -0
  481. data/sig/ibex/ir/serialize.rbs +75 -23
  482. data/sig/ibex/ir/validator/automaton.rbs +112 -0
  483. data/sig/ibex/ir/validator/base.rbs +69 -0
  484. data/sig/ibex/ir/validator/grammar.rbs +195 -0
  485. data/sig/ibex/ir/validator/lexer.rbs +37 -0
  486. data/sig/ibex/ir/validator.rbs +16 -0
  487. data/sig/ibex/ir.rbs +45 -5
  488. data/sig/ibex/lalr/build_metrics.rbs +60 -0
  489. data/sig/ibex/lalr/builder.rbs +150 -19
  490. data/sig/ibex/lalr/conflict_search.rbs +12 -5
  491. data/sig/ibex/lalr/counterexample.rbs +20 -14
  492. data/sig/ibex/lalr/direct_lookaheads.rbs +93 -0
  493. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  494. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  495. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  496. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  497. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  498. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  499. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  500. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  501. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  502. data/sig/ibex/lalr/ielr_partition.rbs +71 -0
  503. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  504. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  505. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  506. data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
  507. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  508. data/sig/ibex/lalr.rbs +17 -1
  509. data/sig/ibex/location.rbs +67 -0
  510. data/sig/ibex/lsp/document_handlers.rbs +24 -0
  511. data/sig/ibex/lsp/document_store.rbs +94 -0
  512. data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
  513. data/sig/ibex/lsp/document_store_validation.rbs +26 -0
  514. data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
  515. data/sig/ibex/lsp/navigation_handlers.rbs +33 -0
  516. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  517. data/sig/ibex/lsp/position_codec.rbs +44 -0
  518. data/sig/ibex/lsp/protocol_error.rbs +32 -0
  519. data/sig/ibex/lsp/request_handlers.rbs +26 -0
  520. data/sig/ibex/lsp/request_support.rbs +40 -0
  521. data/sig/ibex/lsp/server.rbs +55 -0
  522. data/sig/ibex/lsp/symbol_index.rbs +77 -0
  523. data/sig/ibex/lsp/symbol_index_builder.rbs +88 -0
  524. data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
  525. data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
  526. data/sig/ibex/lsp/symbol_occurrence.rbs +31 -0
  527. data/sig/ibex/lsp/transport.rbs +47 -0
  528. data/sig/ibex/lsp/workspace.rbs +42 -0
  529. data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
  530. data/sig/ibex/lsp.rbs +7 -0
  531. data/sig/ibex/messages.rbs +26 -0
  532. data/sig/ibex/metrics.rbs +50 -0
  533. data/sig/ibex/normalize/declarations.rbs +31 -0
  534. data/sig/ibex/normalize/diagnostics.rbs +13 -4
  535. data/sig/ibex/normalize/expander.rbs +22 -16
  536. data/sig/ibex/normalize/expression.rbs +11 -9
  537. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  538. data/sig/ibex/normalize/inline_expansion.rbs +129 -0
  539. data/sig/ibex/normalize/inline_validation.rbs +40 -0
  540. data/sig/ibex/normalize/lexer.rbs +37 -0
  541. data/sig/ibex/normalize/named_references.rbs +20 -0
  542. data/sig/ibex/normalize/nodes.rbs +14 -0
  543. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +33 -0
  544. data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
  545. data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
  546. data/sig/ibex/normalize/parameter_validation.rbs +44 -0
  547. data/sig/ibex/normalize/parameters.rbs +51 -0
  548. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  549. data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
  550. data/sig/ibex/normalize.rbs +129 -18
  551. data/sig/ibex/racc_migration/checker.rbs +36 -0
  552. data/sig/ibex/racc_migration/harness.rbs +16 -0
  553. data/sig/ibex/racc_migration/report.rbs +55 -0
  554. data/sig/ibex/racc_migration.rbs +8 -0
  555. data/sig/ibex/rake_task.rbs +51 -0
  556. data/sig/ibex/samples.rbs +60 -0
  557. data/sig/ibex/table_artifact/builder.rbs +93 -0
  558. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  559. data/sig/ibex/table_artifact/document.rbs +27 -0
  560. data/sig/ibex/table_artifact/executor.rbs +66 -0
  561. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  562. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  563. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  564. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  565. data/sig/ibex/table_artifact/validator.rbs +66 -0
  566. data/sig/ibex/table_artifact.rbs +32 -0
  567. data/sig/ibex/table_simulation/result.rbs +36 -0
  568. data/sig/ibex/table_simulation/simulator.rbs +98 -0
  569. data/sig/ibex/table_simulation/step.rbs +42 -0
  570. data/sig/ibex/table_simulation/text.rbs +14 -0
  571. data/sig/ibex/table_simulation.rbs +7 -0
  572. data/sig/ibex/tables.rbs +10 -35
  573. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  574. data/sig/ibex/verification_report/builder.rbs +53 -0
  575. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  576. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  577. data/sig/ibex/verification_report/validator.rbs +114 -0
  578. data/sig/ibex/verification_report.rbs +44 -0
  579. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  580. data/sig/ibex/verify/language_witness.rbs +112 -0
  581. data/sig/ibex/verify/reference_collection.rbs +63 -0
  582. data/sig/ibex/verify/result.rbs +52 -0
  583. data/sig/ibex/verify/verifier.rbs +170 -0
  584. data/sig/ibex/verify.rbs +6 -0
  585. data/sig/ibex/watch/runner.rbs +58 -0
  586. data/sig/ibex/watch/source_snapshot.rbs +46 -0
  587. data/sig/ibex/watch.rbs +7 -0
  588. data/sig/ibex.rbs +2 -0
  589. metadata +524 -19
  590. data/.rubocop.yml +0 -43
  591. data/CHANGELOG.md +0 -30
  592. data/Rakefile +0 -25
  593. data/Steepfile +0 -10
  594. data/docs/compat-notes.md +0 -37
  595. data/docs/lexer-coverage.md +0 -14
  596. data/docs/phase10-extensions.md +0 -27
  597. data/gemfiles/Gemfile +0 -7
  598. data/gemfiles/Gemfile.lock +0 -98
  599. data/lib/ibex/frontend/grammar.y +0 -156
  600. data/lib/ibex/runtime/parser.rb +0 -360
  601. data/lib/ibex/runtime.rb +0 -8
  602. data/sig/ibex/runtime/parser.rbs +0 -167
  603. data/sig/ibex/runtime.rbs +0 -6
@@ -23,20 +23,22 @@ module Ibex
23
23
  end
24
24
 
25
25
  # A grammar token and its source coordinate.
26
- class Token < Struct[Symbol | token_value | Location]
26
+ class Token < Struct[Symbol | token_value | Location | SourceSpan?]
27
27
  attr_accessor type(): Symbol
28
28
 
29
29
  attr_accessor value(): token_value
30
30
 
31
31
  attr_accessor location(): Location
32
32
 
33
- def self.new: (?type: Symbol, ?value: token_value, ?location: Location) -> instance
34
- | ({ ?type: Symbol, ?value: token_value, ?location: Location }) -> instance
33
+ attr_accessor span(): SourceSpan?
34
+
35
+ def self.new: (?type: Symbol, ?value: token_value, ?location: Location, ?span: SourceSpan?) -> instance
36
+ | ({ ?type: Symbol, ?value: token_value, ?location: Location, ?span: SourceSpan? }) -> instance
35
37
  end
36
38
 
37
39
  class Token
38
- # @rbs () -> Hash[Symbol, untyped]
39
- def to_h: () -> Hash[Symbol, untyped]
40
+ # @rbs () -> Hash[Symbol, Object?]
41
+ def to_h: () -> Hash[Symbol, Object?]
40
42
  end
41
43
 
42
44
  # Advances through source text while maintaining one-based coordinates.
@@ -47,6 +49,8 @@ module Ibex
47
49
 
48
50
  attr_reader index: Integer
49
51
 
52
+ attr_reader byte_offset: Integer
53
+
50
54
  attr_reader line: Integer
51
55
 
52
56
  attr_reader column: Integer
@@ -66,8 +70,37 @@ module Ibex
66
70
  # @rbs () -> Location
67
71
  def location: () -> Location
68
72
 
73
+ # @rbs () -> SourcePosition
74
+ def position: () -> SourcePosition
75
+
76
+ # @rbs (SourcePosition start) -> SourceSpan
77
+ def span_from: (SourcePosition start) -> SourceSpan
78
+
69
79
  # @rbs (?Integer count) -> void
70
80
  def advance: (?Integer count) -> void
81
+
82
+ private
83
+
84
+ # @rbs (Integer count) -> void
85
+ def advance_ascii: (Integer count) -> void
86
+
87
+ # @rbs (Integer count) -> void
88
+ def advance_utf8: (Integer count) -> void
89
+
90
+ # @rbs (Integer character_index) -> Integer
91
+ def byte_offset_for_character: (Integer character_index) -> Integer
92
+
93
+ # @rbs (Integer byte_offset, Integer from_index, Integer to_index) -> Integer
94
+ def walk_to_character: (Integer byte_offset, Integer from_index, Integer to_index) -> Integer
95
+
96
+ # @rbs (Integer byte_offset) -> Integer
97
+ def previous_character_byte_offset: (Integer byte_offset) -> Integer
98
+
99
+ # @rbs (Integer byte_offset) -> Integer
100
+ def utf8_character_width: (Integer byte_offset) -> Integer
101
+
102
+ # @rbs (Integer byte) -> bool
103
+ def continuation_byte?: (Integer byte) -> bool
71
104
  end
72
105
  end
73
106
  end
@@ -0,0 +1,119 @@
1
+ # Generated from lib/ibex/frontend/source_document.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # An immutable lexical unit or trivia slice in a concrete syntax tree.
6
+ class Segment
7
+ TRIVIA_KINDS: Array[Symbol]
8
+
9
+ OPAQUE_KINDS: Array[Symbol]
10
+
11
+ attr_reader kind: Symbol
12
+
13
+ attr_reader span: SourceSpan
14
+
15
+ attr_reader text: String
16
+
17
+ attr_reader token_type: Symbol?
18
+
19
+ attr_reader token_index: Integer?
20
+
21
+ # @rbs (kind: Symbol, span: SourceSpan, text: String, ?token_type: Symbol?,
22
+ # ?token_index: Integer?) -> void
23
+ def initialize: (kind: Symbol, span: SourceSpan, text: String, ?token_type: Symbol?, ?token_index: Integer?) -> void
24
+
25
+ # @rbs () -> bool
26
+ def trivia?: () -> bool
27
+
28
+ # @rbs () -> bool
29
+ def opaque?: () -> bool
30
+
31
+ # @rbs () -> bool
32
+ def token?: () -> bool
33
+
34
+ # @rbs () -> String
35
+ def render: () -> String
36
+ end
37
+
38
+ module CST
39
+ # The immutable lexical root of a grammar source document.
40
+ class Document
41
+ include Enumerable[Segment]
42
+
43
+ attr_reader segments: Array[Segment]
44
+
45
+ # @rbs (Array[Segment] segments) -> void
46
+ def initialize: (Array[Segment] segments) -> void
47
+
48
+ def each: () -> Enumerator[Segment, Document]
49
+ | () { (Segment) -> void } -> Document
50
+
51
+ # @rbs () -> String
52
+ def render: () -> String
53
+
54
+ private
55
+
56
+ # @rbs (Array[Segment] segments) -> void
57
+ def validate_contiguous: (Array[Segment] segments) -> void
58
+ end
59
+ end
60
+
61
+ # Lossless grammar source plus its semantic parse and lexical concrete syntax tree.
62
+ class SourceDocument
63
+ attr_reader source: String
64
+
65
+ attr_reader file: String
66
+
67
+ attr_reader tokens: Array[Token]
68
+
69
+ attr_reader cst: CST::Document
70
+
71
+ attr_reader ast: AST::Root | AST::Fragment | nil
72
+
73
+ # @rbs (source: String, file: String, tokens: Array[Token], cst: CST::Document,
74
+ # ?ast: AST::Root | AST::Fragment | nil) -> void
75
+ def initialize: (source: String, file: String, tokens: Array[Token], cst: CST::Document, ?ast: AST::Root | AST::Fragment | nil) -> void
76
+
77
+ # @rbs () -> String
78
+ def render: () -> String
79
+
80
+ # @rbs (SourceSpan span) -> String
81
+ def slice: (SourceSpan span) -> String
82
+
83
+ # @rbs (Integer byte_offset) -> SourcePosition
84
+ def position_at: (Integer byte_offset) -> SourcePosition
85
+
86
+ # @rbs (Integer line, Integer column) -> Integer
87
+ def byte_offset_at: (Integer line, Integer column) -> Integer
88
+
89
+ # @rbs (Integer start_byte, Integer end_byte) -> SourceSpan
90
+ def span: (Integer start_byte, Integer end_byte) -> SourceSpan
91
+
92
+ # @rbs (Segment segment) -> Token?
93
+ def token_for: (Segment segment) -> Token?
94
+
95
+ # @rbs (AST::Root | AST::Fragment ast) -> SourceDocument
96
+ def with_ast: (AST::Root | AST::Fragment ast) -> SourceDocument
97
+
98
+ private
99
+
100
+ # @rbs () -> Array[Integer]
101
+ def build_line_starts: () -> Array[Integer]
102
+
103
+ # @rbs () -> void
104
+ def validate_render: () -> void
105
+
106
+ # @rbs () -> bool
107
+ def full_source_coverage?: () -> bool
108
+
109
+ # @rbs () -> bool
110
+ def segment_slices_match?: () -> bool
111
+
112
+ # @rbs (Integer byte_offset) -> void
113
+ def validate_byte_offset: (Integer byte_offset) -> void
114
+
115
+ # @rbs (SourceSpan span) -> void
116
+ def validate_span: (SourceSpan span) -> void
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,66 @@
1
+ # Generated from lib/ibex/frontend/source_loader.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Resolves canonical grammar paths and reads either open-buffer overlays or disk.
6
+ class SourceLoader
7
+ @access_paths: Hash[String, Array[String]]
8
+
9
+ @record_reads: bool
10
+
11
+ @read_records: Hash[String, GenerationInput]
12
+
13
+ @aliases: Hash[String, String]
14
+
15
+ @overlays: Hash[String, String]
16
+
17
+ # @rbs () -> Array[GenerationInput]
18
+ def read_records: () -> Array[GenerationInput]
19
+
20
+ # Associate the lexical path used by a resolver with its canonical source.
21
+ # @rbs (String canonical, String access_path) -> void
22
+ def record_access: (String canonical, String access_path) -> void
23
+
24
+ # @rbs (?overlays: Hash[String, String], ?record_reads: bool) -> void
25
+ def initialize: (?overlays: Hash[String, String], ?record_reads: bool) -> void
26
+
27
+ # Canonicalize an existing file, or a missing path explicitly allowed by an open overlay.
28
+ # @rbs (String path, ?base: String, ?allow_missing: bool) -> String
29
+ def canonical_path: (String path, ?base: String, ?allow_missing: bool) -> String
30
+
31
+ # @rbs (String path) -> String
32
+ def read: (String path) -> String
33
+
34
+ # @rbs (String path) -> bool
35
+ def file?: (String path) -> bool
36
+
37
+ # @rbs (String path) -> bool
38
+ def overlay?: (String path) -> bool
39
+
40
+ # Install or replace an editor buffer without writing it to disk.
41
+ # @rbs (String path, String source) -> String
42
+ def set_overlay: (String path, String source) -> String
43
+
44
+ # Remove an editor buffer and return its canonical path.
45
+ # @rbs (String path) -> String
46
+ def delete_overlay: (String path) -> String
47
+
48
+ # Read disk while deliberately bypassing an open overlay.
49
+ # @rbs (String path) -> String
50
+ def disk_source: (String path) -> String
51
+
52
+ # @rbs (String path) -> bool
53
+ def disk_file?: (String path) -> bool
54
+
55
+ # Resolve the current disk target without consulting overlay aliases.
56
+ # @rbs (String path) -> String
57
+ def disk_path: (String path) -> String
58
+
59
+ private
60
+
61
+ # Resolve the nearest existing ancestor so symlink escapes remain visible for new files.
62
+ # @rbs (String expanded) -> String
63
+ def canonical_missing_path: (String expanded) -> String
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,56 @@
1
+ # Generated from lib/ibex/frontend/source_span.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Normalizes grammar source without changing its bytes.
6
+ module SourceEncoding
7
+ # @rbs (String source, String file) -> String
8
+ def self.validated_utf8: (String source, String file) -> String
9
+
10
+ # @rbs (String file) -> String
11
+ def self.validated_file: (String file) -> String
12
+ end
13
+
14
+ # An immutable position in grammar source.
15
+ class SourcePosition
16
+ attr_reader byte_offset: Integer
17
+
18
+ attr_reader line: Integer
19
+
20
+ attr_reader column: Integer
21
+
22
+ # @rbs (byte_offset: Integer, line: Integer, column: Integer) -> void
23
+ def initialize: (byte_offset: Integer, line: Integer, column: Integer) -> void
24
+
25
+ # @rbs () -> Hash[Symbol, Integer]
26
+ def to_h: () -> Hash[Symbol, Integer]
27
+ end
28
+
29
+ # An immutable half-open byte span in one grammar source.
30
+ class SourceSpan
31
+ attr_reader file: String
32
+
33
+ attr_reader start: SourcePosition
34
+
35
+ attr_reader finish: SourcePosition
36
+
37
+ # @rbs (file: String, start: SourcePosition, finish: SourcePosition) -> void
38
+ def initialize: (file: String, start: SourcePosition, finish: SourcePosition) -> void
39
+
40
+ # @rbs () -> Integer
41
+ def start_byte: () -> Integer
42
+
43
+ # @rbs () -> Integer
44
+ def end_byte: () -> Integer
45
+
46
+ # @rbs () -> Integer
47
+ def length: () -> Integer
48
+
49
+ # @rbs () -> bool
50
+ def empty?: () -> bool
51
+
52
+ # @rbs () -> Hash[Symbol, Object?]
53
+ def to_h: () -> Hash[Symbol, Object?]
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,21 @@
1
+ # Generated from lib/ibex/frontend/token_adapter/declaration_document_state.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ class TokenAdapter
6
+ # Root/fragment header and include-path transitions for declaration classification.
7
+ module DeclarationDocumentState
8
+ private
9
+
10
+ # @rbs (Token token) -> external_token
11
+ def class_keyword: (Token token) -> external_token
12
+
13
+ # @rbs (external_token type) -> external_token?
14
+ def classify_include: (external_token type) -> external_token?
15
+
16
+ # @rbs (Token token, String value) -> void
17
+ def reject_fragment_pragma: (Token token, String value) -> void
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ # Generated from lib/ibex/frontend/token_adapter/declaration_lexer_state.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ class TokenAdapter
6
+ # Context transitions for the extended root-only lexer declaration.
7
+ module DeclarationLexerState
8
+ private
9
+
10
+ # @rbs () -> bool
11
+ def lexer_declaration_state?: () -> bool
12
+
13
+ # @rbs (Token token) -> external_token
14
+ def classify_lexer_identifier: (Token token) -> external_token
15
+
16
+ # @rbs (Token token) -> external_token
17
+ def begin_lexer_entry: (Token token) -> external_token
18
+
19
+ # @rbs () -> external_token
20
+ def finish_lexer_scope: () -> external_token
21
+
22
+ # @rbs (external_token type) -> external_token?
23
+ def classify_lexer_scalar: (external_token type) -> external_token?
24
+ end
25
+ end
26
+ end
27
+ end
@@ -4,7 +4,13 @@ module Ibex
4
4
  module Frontend
5
5
  class TokenAdapter
6
6
  # Classifies tokens through the class header and declaration section.
7
+ # rubocop:disable Metrics/ClassLength, Metrics/CyclomaticComplexity
8
+ # One state machine owns declaration-boundary classification.
7
9
  class DeclarationState
10
+ include DeclarationDocumentState
11
+
12
+ include DeclarationLexerState
13
+
8
14
  DECLARATIONS: Hash[String, [ external_token, Symbol ]]
9
15
 
10
16
  ASSOCIATIONS: Hash[String, external_token]
@@ -21,8 +27,16 @@ module Ibex
21
27
 
22
28
  attr_reader state: Symbol
23
29
 
24
- # @rbs () -> void
25
- def initialize: () -> void
30
+ @pragma_location: Location?
31
+
32
+ @pragmas: Hash[String, Location]
33
+
34
+ @fragment: bool?
35
+
36
+ @extended_mode: bool
37
+
38
+ # @rbs (?extended: bool) -> void
39
+ def initialize: (?extended: bool) -> void
26
40
 
27
41
  # @rbs (Token token, Array[Token] remaining) -> external_token
28
42
  def classify: (Token token, Array[Token] remaining) -> external_token
@@ -33,6 +47,15 @@ module Ibex
33
47
  # @rbs () -> bool
34
48
  def extended_pragma?: () -> bool
35
49
 
50
+ # @rbs () -> bool
51
+ def cst_pragma?: () -> bool
52
+
53
+ # @rbs () -> Location?
54
+ def extended_pragma_location: () -> Location?
55
+
56
+ # @rbs () -> Location?
57
+ def cst_pragma_location: () -> Location?
58
+
36
59
  # @rbs (Token? token) -> String?
37
60
  def expectation: (Token? token) -> String?
38
61
 
@@ -42,7 +65,10 @@ module Ibex
42
65
  def classify_identifier: (Token token, Array[Token] remaining) -> external_token
43
66
 
44
67
  # @rbs (Token token) -> external_token
45
- def class_keyword: (Token token) -> external_token
68
+ def begin_parser_setting: (Token token) -> external_token
69
+
70
+ # @rbs () -> external_token
71
+ def finish_parser_setting: () -> external_token
46
72
 
47
73
  # @rbs (Array[Token] remaining) -> external_token
48
74
  def constant_name: (Array[Token] remaining) -> external_token
@@ -62,6 +88,9 @@ module Ibex
62
88
  # @rbs (String value) -> bool
63
89
  def declaration_boundary?: (String value) -> bool
64
90
 
91
+ # @rbs () -> bool
92
+ def extended_features?: () -> bool
93
+
65
94
  # @rbs (Token token) -> external_token
66
95
  def precedence_identifier: (Token token) -> external_token
67
96
 
@@ -74,9 +103,60 @@ module Ibex
74
103
  # @rbs (Token token, Array[Token] remaining) -> external_token
75
104
  def classify_scalar: (Token token, Array[Token] remaining) -> external_token
76
105
 
106
+ # @rbs (external_token type) -> external_token?
107
+ def classify_single_symbol: (external_token type) -> external_token?
108
+
109
+ # @rbs (external_token type) -> external_token?
110
+ def continue_first_symbol: (external_token type) -> external_token?
111
+
112
+ # @rbs (Token token, external_token type) -> external_token?
113
+ def classify_token_alias: (Token token, external_token type) -> external_token?
114
+
115
+ # @rbs (external_token type) -> external_token?
116
+ def classify_metadata: (external_token type) -> external_token?
117
+
118
+ # @rbs (external_token type) -> external_token?
119
+ def classify_printer: (external_token type) -> external_token?
120
+
121
+ # @rbs (external_token type) -> external_token?
122
+ def classify_grammar_test: (external_token type) -> external_token?
123
+
124
+ # @rbs (Token token, external_token type, Array[Token] remaining) -> external_token?
125
+ def classify_conversion: (Token token, external_token type, Array[Token] remaining) -> external_token?
126
+
77
127
  # @rbs (external_token type) -> external_token
78
128
  def finish_single_symbol: (external_token type) -> external_token
79
129
 
130
+ # @rbs (external_token type) -> external_token
131
+ def continue_start_symbols: (external_token type) -> external_token
132
+
133
+ # @rbs (external_token type) -> external_token
134
+ def continue_recovery_symbols: (external_token type) -> external_token
135
+
136
+ # @rbs (external_token type) -> external_token
137
+ def continue_on_error_reduce_symbols: (external_token type) -> external_token
138
+
139
+ # @rbs (external_token type) -> external_token
140
+ def begin_metadata_value: (external_token type) -> external_token
141
+
142
+ # @rbs () -> external_token
143
+ def begin_param_type: () -> external_token
144
+
145
+ # @rbs (external_token type) -> external_token
146
+ def begin_printer_action: (external_token type) -> external_token
147
+
148
+ # @rbs (Token token) -> external_token
149
+ def begin_recovery_colon: (Token token) -> external_token
150
+
151
+ # @rbs (Token token) -> external_token
152
+ def begin_test_source: (Token token) -> external_token
153
+
154
+ # @rbs (external_token type) -> external_token
155
+ def finish_param_type: (external_token type) -> external_token
156
+
157
+ # @rbs (external_token type) -> external_token
158
+ def finish_metadata_value: (external_token type) -> external_token
159
+
80
160
  # @rbs (external_token type) -> external_token
81
161
  def finish_conversion: (external_token type) -> external_token
82
162
 
@@ -11,6 +11,8 @@ module Ibex
11
11
 
12
12
  attr_reader state: Symbol
13
13
 
14
+ @node_annotation: bool?
15
+
14
16
  @rule_seen: bool?
15
17
 
16
18
  @lhs_column: Integer?
@@ -35,10 +37,16 @@ module Ibex
35
37
 
36
38
  private
37
39
 
40
+ # @rbs () -> external_token
41
+ def classify_inline: () -> external_token
42
+
38
43
  # @rbs (Token token, Array[Token] remaining, external_token? last_external,
39
44
  # external_token? previous_external) -> external_token
40
45
  def classify_identifier: (Token token, Array[Token] remaining, external_token? last_external, external_token? previous_external) -> external_token
41
46
 
47
+ # @rbs (Token token, Array[Token] remaining) -> external_token
48
+ def classify_rhs_identifier: (Token token, Array[Token] remaining) -> external_token
49
+
42
50
  # @rbs (Token token) -> external_token
43
51
  def rule_lhs: (Token token) -> external_token
44
52
 
@@ -48,6 +56,12 @@ module Ibex
48
56
  # @rbs (Token token, Token following) -> bool
49
57
  def rule_boundary?: (Token token, Token following) -> bool
50
58
 
59
+ # @rbs (Token token, Array[Token] remaining) -> bool
60
+ def parameterized_rule_boundary?: (Token token, Array[Token] remaining) -> bool
61
+
62
+ # @rbs (Array[Token] tail) -> bool
63
+ def parameter_definition_tail?: (Array[Token] tail) -> bool
64
+
51
65
  # @rbs (Token token) -> external_token
52
66
  def start_rule: (Token token) -> external_token
53
67
 
@@ -60,6 +74,12 @@ module Ibex
60
74
  # @rbs (Token token) -> external_token
61
75
  def separated_terminal: (Token token) -> external_token
62
76
 
77
+ # @rbs (Token token, Token following) -> bool
78
+ def parameterized_call?: (Token token, Token following) -> bool
79
+
80
+ # @rbs (Token left, Token right) -> bool
81
+ def adjacent?: (Token left, Token right) -> bool
82
+
63
83
  # @rbs (Token token) -> external_token
64
84
  def classify_punctuation: (Token token) -> external_token
65
85
 
@@ -22,8 +22,8 @@ module Ibex
22
22
 
23
23
  @tokens: Array[Token]
24
24
 
25
- # @rbs (Array[Token] tokens) -> void
26
- def initialize: (Array[Token] tokens) -> void
25
+ # @rbs (Array[Token] tokens, ?extended: bool) -> void
26
+ def initialize: (Array[Token] tokens, ?extended: bool) -> void
27
27
 
28
28
  # @rbs () -> ([external_token, Token] | false)
29
29
  def next_token: () -> ([ external_token, Token ] | false)
@@ -40,6 +40,15 @@ module Ibex
40
40
  # @rbs () -> bool
41
41
  def extended_pragma?: () -> bool
42
42
 
43
+ # @rbs () -> bool
44
+ def cst_pragma?: () -> bool
45
+
46
+ # @rbs () -> Location?
47
+ def extended_pragma_location: () -> Location?
48
+
49
+ # @rbs () -> Location?
50
+ def cst_pragma_location: () -> Location?
51
+
43
52
  # @rbs () -> parser_section
44
53
  def section: () -> parser_section
45
54
 
@@ -10,6 +10,6 @@ module Ibex
10
10
 
11
11
  type parser_section = :declarations | :rules | :user_code
12
12
 
13
- type delimiter_kind = :group | :separated
13
+ type delimiter_kind = :group | :separated | :parameter
14
14
  end
15
15
  end
data/sig/ibex/fuzz.rbs ADDED
@@ -0,0 +1,71 @@
1
+ # Generated from lib/ibex/fuzz.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ type fuzz_outcome = Symbol | [ Symbol, String, String ]
5
+
6
+ type fuzz_mismatch = { tokens: Array[String], kind: Symbol, sentence: Integer, outcomes: Hash[Symbol, fuzz_outcome], bounds: Hash[Symbol, Integer] }
7
+
8
+ type fuzz_budget = { message: String, bounds: Hash[Symbol, Integer], ?tokens: Array[String], ?phase: String }
9
+
10
+ # Bounded grammar-derived differential fuzzing without semantic execution.
11
+ class Fuzz
12
+ ALGORITHMS: Array[Symbol]
13
+
14
+ DEFAULT_MAX_ACTIONS: Integer
15
+
16
+ DEFAULT_MAX_STACK: Integer
17
+
18
+ class Mismatch < Ibex::Error
19
+ attr_reader details: fuzz_mismatch
20
+
21
+ # @rbs (fuzz_mismatch details) -> void
22
+ def initialize: (fuzz_mismatch details) -> void
23
+ end
24
+
25
+ class BudgetExceeded < Ibex::Error
26
+ attr_reader details: fuzz_budget
27
+
28
+ # @rbs (fuzz_budget details) -> void
29
+ def initialize: (fuzz_budget details) -> void
30
+ end
31
+
32
+ # @rbs (IR::Grammar grammar, ?seed: Integer, ?count: Integer, ?max_tokens: Integer,
33
+ # ?max_depth: Integer, ?max_expansions: Integer, ?max_actions: Integer, ?max_stack: Integer,
34
+ # ?coverage_guided: bool, ?path_length: Integer, ?algorithms: Array[Symbol],
35
+ # ?ielr_strategy: Symbol, ?automata: Hash[Symbol, IR::Automaton]?, ?against: (^(Array[String]) -> Symbol)?,
36
+ # ?against_description: Hash[Symbol, Object?]?) -> void
37
+ # rubocop:disable Metrics/ParameterLists
38
+ def initialize: (IR::Grammar grammar, ?seed: Integer, ?count: Integer, ?max_tokens: Integer, ?max_depth: Integer, ?max_expansions: Integer, ?max_actions: Integer, ?max_stack: Integer, ?coverage_guided: bool, ?path_length: Integer, ?algorithms: Array[Symbol], ?ielr_strategy: Symbol, ?automata: Hash[Symbol, IR::Automaton]?, ?against: (^(Array[String]) -> Symbol)?, ?against_description: Hash[Symbol, Object?]?) -> void
39
+
40
+ # @rbs () -> Hash[Symbol, Object?]
41
+ def run: () -> Hash[Symbol, Object?]
42
+
43
+ # Minimize one observed mismatch without changing its kind or outcomes.
44
+ # @rbs (Mismatch mismatch, ?max_trials: Integer) -> DeltaReducer::Result
45
+ def minimize: (Mismatch mismatch, ?max_trials: Integer) -> DeltaReducer::Result
46
+
47
+ private
48
+
49
+ # @rbs () -> Array[Array[String]]
50
+ def generate_sentences: () -> Array[Array[String]]
51
+
52
+ # @rbs (Integer sentence_count, Integer mutation_count) -> untyped
53
+ def successful_report: (Integer sentence_count, Integer mutation_count) -> untyped
54
+
55
+ # @rbs () -> Hash[Symbol, IR::Automaton]
56
+ def build_automata: () -> Hash[Symbol, IR::Automaton]
57
+
58
+ # @rbs (Array[String] tokens, kind: Symbol, sentence: Integer) -> void
59
+ def compare!: (Array[String] tokens, kind: Symbol, sentence: Integer) -> void
60
+
61
+ # @rbs (Array[String] tokens) -> Array[Array[String]]
62
+ def mutations: (Array[String] tokens) -> Array[Array[String]]
63
+
64
+ # @rbs (Array[String] tokens, kind: Symbol, sentence: Integer,
65
+ # outcomes: Hash[Symbol, fuzz_outcome]) -> bool
66
+ def mismatch_reproduced?: (Array[String] tokens, kind: Symbol, sentence: Integer, outcomes: Hash[Symbol, fuzz_outcome]) -> bool
67
+
68
+ # @rbs (Ibex::Error error) -> bool
69
+ def budget_error?: (Ibex::Error error) -> bool
70
+ end
71
+ end