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
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/lalr/lr0_collection.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Constructs only the LR(0) core collection. Keeping this separate from
6
+ # lookahead propagation makes the direct IELR phases reusable and gives
7
+ # them a stable, canonical-free input representation.
8
+ class LR0Collection
9
+ AUGMENTED_PRODUCTION: Integer
10
+
11
+ @grammar: IR::Grammar
12
+
13
+ @productions_by_lhs: Hash[Integer, Array[IR::Production]]
14
+
15
+ @starts: Array[String]
16
+
17
+ @augmented_rhs: Hash[Integer, Array[Integer]]
18
+
19
+ @production_rhs: Array[Array[Integer]]
20
+
21
+ @item_key_stride: Integer
22
+
23
+ # @rbs (IR::Grammar grammar, ?starts: Array[String]?) -> void
24
+ def initialize: (IR::Grammar grammar, ?starts: Array[String]?) -> void
25
+
26
+ # @rbs () -> [Array[core_set], transitions]
27
+ def build: () -> [ Array[core_set], transitions ]
28
+
29
+ # @rbs (Integer index) -> Integer
30
+ def augmented_production: (Integer index) -> Integer
31
+
32
+ # @rbs (Integer production_id) -> Array[Integer]
33
+ def rhs_for: (Integer production_id) -> Array[Integer]
34
+
35
+ # @rbs (Integer production_id) -> Integer
36
+ def lhs_for: (Integer production_id) -> Integer
37
+
38
+ # @rbs (core_set items) -> Hash[Integer, core_set]
39
+ def shifted_kernels: (core_set items) -> Hash[Integer, core_set]
40
+
41
+ private
42
+
43
+ # @rbs (core_set seed) -> core_set
44
+ def closure: (core_set seed) -> core_set
45
+
46
+ # @rbs (core_set items) -> Array[Integer]
47
+ def item_key: (core_set items) -> Array[Integer]
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,25 @@
1
+ # Generated from lib/ibex/lalr/unreachable_states.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LALR
5
+ # Optional post-resolution compaction. It is intentionally off by
6
+ # default because state numbers are part of diagnostics and golden output.
7
+ module UnreachableStates
8
+ # @rbs (Array[IR::AutomatonState] states, Array[Integer] start_states) ->
9
+ # [Array[IR::AutomatonState], Hash[Integer, Integer]]
10
+ def self?.remove: (Array[IR::AutomatonState] states, Array[Integer] start_states) -> [ Array[IR::AutomatonState], Hash[Integer, Integer] ]
11
+
12
+ # @rbs (Array[IR::AutomatonState], Array[Integer]) -> Array[Integer]
13
+ def self?.reachable_states: (Array[IR::AutomatonState], Array[Integer]) -> Array[Integer]
14
+
15
+ # @rbs (Hash[Integer, Integer], Hash[Integer, Integer]) -> Hash[Integer, Integer]
16
+ def self?.remap_edges: (Hash[Integer, Integer], Hash[Integer, Integer]) -> Hash[Integer, Integer]
17
+
18
+ # @rbs (IR::parser_action?, Hash[Integer, Integer]) -> IR::parser_action?
19
+ def self?.remap_action: (IR::parser_action?, Hash[Integer, Integer]) -> IR::parser_action?
20
+
21
+ # @rbs (IR::conflict, Hash[Integer, Integer]) -> IR::conflict
22
+ def self?.remap_conflict: (IR::conflict, Hash[Integer, Integer]) -> IR::conflict
23
+ end
24
+ end
25
+ end
data/sig/ibex/lalr.rbs CHANGED
@@ -14,16 +14,26 @@ module Ibex
14
14
 
15
15
  type transitions = Array[Hash[Integer, Integer]]
16
16
 
17
+ type build_collection = { construction_states: Integer, canonical_states: Integer?, strategy: Symbol, lr0_states: Integer?, lr0_items: Integer?, canonical_items: Integer?, propagation_edges: Integer?, ielr_initial_partitions: Integer?, ielr_final_partitions: Integer?, ielr_annotations: Integer?, ielr_annotated_states: Integer?, ielr_inadequacies: Integer?, ielr_split_stable_discarded: Integer?, ielr_lalr_states: Integer?, ielr_split_states: Integer?, ielr_unreachable_removed: Integer?, ielr_remergeable_candidates: Integer? }
18
+
19
+ type conflict_fingerprint = [ Symbol, String, Array[Integer] ]
20
+
17
21
  type lookahead_node = [ Integer, Integer, Integer ]
18
22
 
19
23
  type state_partition = Array[Integer]
20
24
 
21
- type derivation_node = Hash[Symbol, untyped]
25
+ type derivation_node = Hash[Symbol, Object?]
22
26
 
23
27
  type search_status = :conflict | :shifted | :accepted
24
28
 
25
29
  type search_entry = [ search_status, ConflictSearch::Configuration ]
26
30
 
27
31
  type search_result = { sentence_ids: Array[Integer], lookahead_index: Integer, interpretations: Array[IR::interpretation] }
32
+
33
+ type search_bounds = { max_tokens: Integer, max_configurations: Integer }
34
+
35
+ type search_outcome = { status: :found | :not_found | :exhausted, result: search_result?, explored: Integer, exhausted: bool, bounds: search_bounds }
36
+
37
+ type search_counterexample = { state: Integer, type: Symbol, symbol_path: Array[String], sentence: Array[String], lookahead_index: Integer, unifying: bool, inconclusive: bool, search: search_outcome, interpretations: Array[IR::interpretation] }
28
38
  end
29
39
  end
@@ -38,16 +38,16 @@ module Ibex
38
38
  # @rbs () -> bool
39
39
  def empty?: () -> bool
40
40
 
41
- # @rbs () -> Hash[Symbol, untyped]
42
- def to_h: () -> Hash[Symbol, untyped]
41
+ # @rbs () -> Hash[Symbol, String | Integer]
42
+ def to_h: () -> Hash[Symbol, String | Integer]
43
43
 
44
44
  private
45
45
 
46
- # @rbs (Symbol name, untyped value) -> Integer
47
- def positive_coordinate: (Symbol name, untyped value) -> Integer
46
+ # @rbs (Symbol name, Object? value) -> Integer
47
+ def positive_coordinate: (Symbol name, Object? value) -> Integer
48
48
 
49
- # @rbs (Symbol name, untyped value) -> Integer?
50
- def optional_offset: (Symbol name, untyped value) -> Integer?
49
+ # @rbs (Symbol name, Object? value) -> Integer?
50
+ def optional_offset: (Symbol name, Object? value) -> Integer?
51
51
 
52
52
  # @rbs () -> void
53
53
  def validate_order!: () -> void
@@ -8,17 +8,17 @@ module Ibex
8
8
 
9
9
  private
10
10
 
11
- # @rbs (untyped raw_params) -> nil
12
- def did_open: (untyped raw_params) -> nil
11
+ # @rbs (lsp_value? raw_params) -> nil
12
+ def did_open: (lsp_value? raw_params) -> nil
13
13
 
14
- # @rbs (untyped raw_params) -> nil
15
- def did_change: (untyped raw_params) -> nil
14
+ # @rbs (lsp_value? raw_params) -> nil
15
+ def did_change: (lsp_value? raw_params) -> nil
16
16
 
17
- # @rbs (untyped raw_params) -> nil
18
- def did_save: (untyped raw_params) -> nil
17
+ # @rbs (lsp_value? raw_params) -> nil
18
+ def did_save: (lsp_value? raw_params) -> nil
19
19
 
20
- # @rbs (untyped raw_params) -> nil
21
- def did_close: (untyped raw_params) -> nil
20
+ # @rbs (lsp_value? raw_params) -> nil
21
+ def did_close: (lsp_value? raw_params) -> nil
22
22
  end
23
23
  end
24
24
  end
@@ -8,23 +8,23 @@ module Ibex
8
8
 
9
9
  private
10
10
 
11
- # @rbs (untyped raw_params) -> Hash[String, untyped]
12
- def initialize_workspace: (untyped raw_params) -> Hash[String, untyped]
11
+ # @rbs (lsp_value? raw_params) -> lsp_object
12
+ def initialize_workspace: (lsp_value? raw_params) -> lsp_object
13
13
 
14
- # @rbs (untyped params) -> nil
15
- def initialized_notification: (untyped params) -> nil
14
+ # @rbs (lsp_value? params) -> nil
15
+ def initialized_notification: (lsp_value? params) -> nil
16
16
 
17
- # @rbs (untyped params) -> nil
18
- def shutdown_request: (untyped params) -> nil
17
+ # @rbs (lsp_value? params) -> nil
18
+ def shutdown_request: (lsp_value? params) -> nil
19
19
 
20
- # @rbs (untyped params) -> nil
21
- def exit_notification: (untyped params) -> nil
20
+ # @rbs (lsp_value? params) -> nil
21
+ def exit_notification: (lsp_value? params) -> nil
22
22
 
23
- # @rbs () -> Hash[String, untyped]
24
- def capabilities: () -> Hash[String, untyped]
23
+ # @rbs () -> lsp_object
24
+ def capabilities: () -> lsp_object
25
25
 
26
- # @rbs (Hash[String, untyped] params) -> Array[String]
27
- def initialization_roots: (Hash[String, untyped] params) -> Array[String]
26
+ # @rbs (lsp_object params) -> Array[String]
27
+ def initialization_roots: (lsp_object params) -> Array[String]
28
28
  end
29
29
  end
30
30
  end
@@ -8,23 +8,26 @@ module Ibex
8
8
 
9
9
  private
10
10
 
11
- # @rbs (untyped raw_params) -> Array[Hash[String, untyped]]
12
- def definition: (untyped raw_params) -> Array[Hash[String, untyped]]
11
+ # @rbs (lsp_object? raw_params) -> Array[lsp_object]
12
+ def definition: (lsp_object? raw_params) -> Array[lsp_object]
13
13
 
14
- # @rbs (untyped raw_params) -> Array[Hash[String, untyped]]
15
- def references: (untyped raw_params) -> Array[Hash[String, untyped]]
14
+ # @rbs (lsp_object? raw_params) -> Array[lsp_object]
15
+ def references: (lsp_object? raw_params) -> Array[lsp_object]
16
16
 
17
- # @rbs (untyped raw_params) -> Hash[String, untyped]?
18
- def prepare_rename: (untyped raw_params) -> Hash[String, untyped]?
17
+ # @rbs (lsp_object? raw_params) -> lsp_object?
18
+ def prepare_rename: (lsp_object? raw_params) -> lsp_object?
19
19
 
20
- # @rbs (untyped raw_params) -> Hash[String, untyped]
21
- def rename: (untyped raw_params) -> Hash[String, untyped]
20
+ # @rbs (lsp_object? raw_params) -> lsp_object
21
+ def rename: (lsp_object? raw_params) -> lsp_object
22
22
 
23
- # @rbs (untyped raw_params) -> Hash[String, untyped]?
24
- def hover: (untyped raw_params) -> Hash[String, untyped]?
23
+ # @rbs (lsp_object? raw_params) -> lsp_object?
24
+ def hover: (lsp_object? raw_params) -> lsp_object?
25
25
 
26
- # @rbs (untyped raw_params) { (SymbolIndex, String, Hash[String, untyped]) -> untyped } -> untyped
27
- def with_index: (untyped raw_params) { (SymbolIndex, String, Hash[String, untyped]) -> untyped } -> untyped
26
+ # @rbs (lsp_object? raw_params) -> lsp_object
27
+ def completion: (lsp_object? raw_params) -> lsp_object
28
+
29
+ # @rbs (lsp_object? raw_params) { (SymbolIndex, String, lsp_object) -> Object? } -> Object?
30
+ def with_index: (lsp_object? raw_params) { (SymbolIndex, String, lsp_object) -> Object? } -> Object?
28
31
  end
29
32
  end
30
33
  end
@@ -0,0 +1,49 @@
1
+ # Generated from lib/ibex/lsp/parser_configuration_assistance.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module LSP
5
+ # Provides static editor assistance for the root parser declaration without evaluating grammar code.
6
+ class ParserConfigurationAssistance
7
+ SETTING_VALUES: Hash[String, Array[String]]
8
+
9
+ SETTING_DOCUMENTATION: Hash[String, String]
10
+
11
+ VALUE_DOCUMENTATION: Hash[String, String]
12
+
13
+ # @rbs (DocumentStore store, String path) -> void
14
+ def initialize: (DocumentStore store, String path) -> void
15
+
16
+ # @rbs (lsp_object position) -> lsp_object
17
+ def completion: (lsp_object position) -> lsp_object
18
+
19
+ # @rbs (lsp_object position) -> lsp_object?
20
+ def hover: (lsp_object position) -> lsp_object?
21
+
22
+ private
23
+
24
+ # @rbs () -> String
25
+ def source!: () -> String
26
+
27
+ # @rbs (String source, Integer offset) -> Integer
28
+ def line_start: (String source, Integer offset) -> Integer
29
+
30
+ # @rbs (String source) -> bool
31
+ def parser_block_open?: (String source) -> bool
32
+
33
+ # @rbs () -> Array[lsp_object]
34
+ def setting_items: () -> Array[lsp_object]
35
+
36
+ # @rbs (String setting) -> Array[lsp_object]
37
+ def value_items: (String setting) -> Array[lsp_object]
38
+
39
+ # @rbs (String label, Integer kind, String documentation) -> lsp_object
40
+ def completion_item: (String label, Integer kind, String documentation) -> lsp_object
41
+
42
+ # @rbs (Array[lsp_object] items) -> lsp_object
43
+ def completion_list: (Array[lsp_object] items) -> lsp_object
44
+
45
+ # @rbs (MatchData match, String line, Integer line_start, Integer offset) -> [String?, Integer, Integer]
46
+ def hovered_token: (MatchData match, String line, Integer line_start, Integer offset) -> [ String?, Integer, Integer ]
47
+ end
48
+ end
49
+ end
@@ -2,6 +2,10 @@
2
2
 
3
3
  module Ibex
4
4
  module LSP
5
+ type lsp_value = String | Integer | Float | bool | nil | Array[lsp_value] | Hash[String, lsp_value]
6
+
7
+ type lsp_object = Hash[String, lsp_value]
8
+
5
9
  # Converts between frontend byte offsets and zero-based LSP UTF-16 positions.
6
10
  class PositionCodec
7
11
  # @rbs (String source) -> void
@@ -10,8 +14,8 @@ module Ibex
10
14
  # @rbs (Integer byte_offset) -> Hash[String, Integer]
11
15
  def position: (Integer byte_offset) -> Hash[String, Integer]
12
16
 
13
- # @rbs (Hash[String, untyped] position) -> Integer
14
- def byte_offset: (Hash[String, untyped] position) -> Integer
17
+ # @rbs (lsp_object position) -> Integer
18
+ def byte_offset: (lsp_object position) -> Integer
15
19
 
16
20
  # @rbs (Frontend::SourceSpan span) -> Hash[String, Hash[String, Integer]]
17
21
  def range: (Frontend::SourceSpan span) -> Hash[String, Hash[String, Integer]]
@@ -30,8 +34,8 @@ module Ibex
30
34
  # @rbs (String text, Integer units) -> Integer
31
35
  def byte_length_at_utf16: (String text, Integer units) -> Integer
32
36
 
33
- # @rbs (Hash[String, untyped] position, String name) -> Integer
34
- def integer_member: (Hash[String, untyped] position, String name) -> Integer
37
+ # @rbs (lsp_object position, String name) -> Integer
38
+ def integer_member: (lsp_object position, String name) -> Integer
35
39
 
36
40
  # @rbs (Integer byte_offset) -> void
37
41
  def validate_byte_offset: (Integer byte_offset) -> void
@@ -16,11 +16,11 @@ module Ibex
16
16
 
17
17
  private
18
18
 
19
- # @rbs (String method, untyped params) -> untyped
20
- def dispatch: (String method, untyped params) -> untyped
19
+ # @rbs (String method, lsp_value? params) -> lsp_value?
20
+ def dispatch: (String method, lsp_value? params) -> lsp_value?
21
21
 
22
- # @rbs (untyped params) -> nil
23
- def cancel_request: (untyped params) -> nil
22
+ # @rbs (lsp_value? params) -> nil
23
+ def cancel_request: (lsp_value? params) -> nil
24
24
  end
25
25
  end
26
26
  end
@@ -12,17 +12,17 @@ module Ibex
12
12
  # @rbs (String uri, Integer version) -> bool
13
13
  def stale_publication?: (String uri, Integer version) -> bool
14
14
 
15
- # @rbs (untyped value) -> Hash[String, untyped]
16
- def params_hash: (untyped value) -> Hash[String, untyped]
15
+ # @rbs (lsp_value? value) -> lsp_object
16
+ def params_hash: (lsp_value? value) -> lsp_object
17
17
 
18
- # @rbs (Hash[String, untyped] value, String name) -> Hash[String, untyped]
19
- def hash_member: (Hash[String, untyped] value, String name) -> Hash[String, untyped]
18
+ # @rbs (lsp_object value, String name) -> lsp_object
19
+ def hash_member: (lsp_object value, String name) -> lsp_object
20
20
 
21
- # @rbs (Hash[String, untyped] value, String name) -> String
22
- def string_member: (Hash[String, untyped] value, String name) -> String
21
+ # @rbs (lsp_object value, String name) -> String
22
+ def string_member: (lsp_object value, String name) -> String
23
23
 
24
- # @rbs (Hash[String, untyped] value, String name) -> Integer
25
- def integer_member: (Hash[String, untyped] value, String name) -> Integer
24
+ # @rbs (lsp_object value, String name) -> Integer
25
+ def integer_member: (lsp_object value, String name) -> Integer
26
26
 
27
27
  # @rbs (Symbol state) -> void
28
28
  def require_state!: (Symbol state) -> void
@@ -10,40 +10,40 @@ module Ibex
10
10
 
11
11
  NOTIFICATION_METHODS: Array[String]
12
12
 
13
- # @rbs (stdin: untyped, stdout: untyped, stderr: untyped) -> void
14
- def initialize: (stdin: untyped, stdout: untyped, stderr: untyped) -> void
13
+ # @rbs (stdin: Transport::_Input, stdout: Transport::_Output, stderr: Object?) -> void
14
+ def initialize: (stdin: Transport::_Input, stdout: Transport::_Output, stderr: Object?) -> void
15
15
 
16
16
  # @rbs () -> Integer
17
17
  def run: () -> Integer
18
18
 
19
19
  private
20
20
 
21
- # @rbs () -> Hash[String, untyped]?
22
- def read_message: () -> Hash[String, untyped]?
21
+ # @rbs () -> lsp_object?
22
+ def read_message: () -> lsp_object?
23
23
 
24
- # @rbs (Hash[String, untyped] message) -> void
25
- def process_message: (Hash[String, untyped] message) -> void
24
+ # @rbs (lsp_object message) -> void
25
+ def process_message: (lsp_object message) -> void
26
26
 
27
- # @rbs (Hash[String, untyped] message) -> (String | Integer)?
28
- def safe_request_id: (Hash[String, untyped] message) -> (String | Integer)?
27
+ # @rbs (lsp_object message) -> (String | Integer)?
28
+ def safe_request_id: (lsp_object message) -> (String | Integer)?
29
29
 
30
- # @rbs (Hash[String, untyped] message) -> bool
31
- def notification_envelope?: (Hash[String, untyped] message) -> bool
30
+ # @rbs (lsp_object message) -> bool
31
+ def notification_envelope?: (lsp_object message) -> bool
32
32
 
33
33
  # @rbs (String method, bool request) -> void
34
34
  def validate_message_kind!: (String method, bool request) -> void
35
35
 
36
- # @rbs (Hash[String, untyped] message) -> (String | Integer)?
37
- def validate_envelope: (Hash[String, untyped] message) -> (String | Integer)?
36
+ # @rbs (lsp_object message) -> (String | Integer)?
37
+ def validate_envelope: (lsp_object message) -> (String | Integer)?
38
38
 
39
- # @rbs (untyped value) -> bool
40
- def valid_request_id?: (untyped value) -> bool
39
+ # @rbs (Object? value) -> bool
40
+ def valid_request_id?: (Object? value) -> bool
41
41
 
42
42
  # @rbs (String method) -> void
43
43
  def validate_lifecycle!: (String method) -> void
44
44
 
45
- # @rbs (String | Integer request_id, untyped result) -> void
46
- def send_result: (String | Integer request_id, untyped result) -> void
45
+ # @rbs (String | Integer request_id, lsp_value result) -> void
46
+ def send_result: (String | Integer request_id, lsp_value result) -> void
47
47
 
48
48
  # @rbs (String | Integer | nil request_id, ProtocolError error) -> void
49
49
  def send_error: (String | Integer | nil request_id, ProtocolError error) -> void
@@ -11,41 +11,40 @@ module Ibex
11
11
  # @rbs (DocumentStore store, String path) -> void
12
12
  def initialize: (DocumentStore store, String path) -> void
13
13
 
14
- # @rbs (String path, Hash[String, untyped] position) -> Array[Hash[String, untyped]]
15
- def definition: (String path, Hash[String, untyped] position) -> Array[Hash[String, untyped]]
14
+ # @rbs (String path, lsp_object position) -> Array[lsp_object]
15
+ def definition: (String path, lsp_object position) -> Array[lsp_object]
16
16
 
17
- # @rbs (String path, Hash[String, untyped] position, ?include_declaration: bool) ->
18
- # Array[Hash[String, untyped]]
19
- def references: (String path, Hash[String, untyped] position, ?include_declaration: bool) -> Array[Hash[String, untyped]]
17
+ # @rbs (String path, lsp_object position, ?include_declaration: bool) -> Array[lsp_object]
18
+ def references: (String path, lsp_object position, ?include_declaration: bool) -> Array[lsp_object]
20
19
 
21
- # @rbs (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
22
- def prepare_rename: (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
20
+ # @rbs (String path, lsp_object position) -> lsp_object?
21
+ def prepare_rename: (String path, lsp_object position) -> lsp_object?
23
22
 
24
- # @rbs (String path, Hash[String, untyped] position, String new_name) -> Hash[String, untyped]
25
- def rename: (String path, Hash[String, untyped] position, String new_name) -> Hash[String, untyped]
23
+ # @rbs (String path, lsp_object position, String new_name) -> lsp_object
24
+ def rename: (String path, lsp_object position, String new_name) -> lsp_object
26
25
 
27
- # @rbs (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
28
- def hover: (String path, Hash[String, untyped] position) -> Hash[String, untyped]?
26
+ # @rbs (String path, lsp_object position) -> lsp_object?
27
+ def hover: (String path, lsp_object position) -> lsp_object?
29
28
 
30
29
  private
31
30
 
32
- # @rbs (String path, Hash[String, untyped] position) -> SymbolOccurrence?
33
- def occurrence_at: (String path, Hash[String, untyped] position) -> SymbolOccurrence?
31
+ # @rbs (String path, lsp_object position) -> SymbolOccurrence?
32
+ def occurrence_at: (String path, lsp_object position) -> SymbolOccurrence?
34
33
 
35
- # @rbs (Array[untyped] key, ?role: Symbol?) -> Array[SymbolOccurrence]
36
- def matching: (Array[untyped] key, ?role: Symbol?) -> Array[SymbolOccurrence]
34
+ # @rbs (symbol_key key, ?role: Symbol?) -> Array[SymbolOccurrence]
35
+ def matching: (symbol_key key, ?role: Symbol?) -> Array[SymbolOccurrence]
37
36
 
38
- # @rbs (SymbolOccurrence occurrence) -> Hash[String, untyped]
39
- def location: (SymbolOccurrence occurrence) -> Hash[String, untyped]
37
+ # @rbs (SymbolOccurrence occurrence) -> lsp_object
38
+ def location: (SymbolOccurrence occurrence) -> lsp_object
40
39
 
41
- # @rbs (SymbolOccurrence occurrence) -> Hash[String, untyped]
42
- def include_target_location: (SymbolOccurrence occurrence) -> Hash[String, untyped]
40
+ # @rbs (SymbolOccurrence occurrence) -> lsp_object
41
+ def include_target_location: (SymbolOccurrence occurrence) -> lsp_object
43
42
 
44
43
  # @rbs (SymbolOccurrence occurrence) -> Hash[String, Hash[String, Integer]]
45
44
  def range: (SymbolOccurrence occurrence) -> Hash[String, Hash[String, Integer]]
46
45
 
47
- # @rbs (String path, Hash[String, untyped] position) -> SymbolOccurrence
48
- def renameable_occurrence: (String path, Hash[String, untyped] position) -> SymbolOccurrence
46
+ # @rbs (String path, lsp_object position) -> SymbolOccurrence
47
+ def renameable_occurrence: (String path, lsp_object position) -> SymbolOccurrence
49
48
 
50
49
  # @rbs (SymbolOccurrence occurrence, String new_name) -> void
51
50
  def validate_new_name: (SymbolOccurrence occurrence, String new_name) -> void
@@ -62,20 +62,21 @@ module Ibex
62
62
  # @rbs (String path, Frontend::Token token, String name) -> void
63
63
  def add_global_reference: (String path, Frontend::Token token, String name) -> void
64
64
 
65
- # @rbs (Symbol kind, String name) -> Hash[Symbol, untyped]
66
- def symbol_data: (Symbol kind, String name) -> Hash[Symbol, untyped]
65
+ # @rbs (Symbol kind, String name) -> symbol_data
66
+ def symbol_data: (Symbol kind, String name) -> symbol_data
67
67
 
68
68
  # @rbs (String path, Array[Frontend::Token] tokens, Array[String] names, Symbol kind, Symbol role) -> void
69
69
  def add_named_tokens: (String path, Array[Frontend::Token] tokens, Array[String] names, Symbol kind, Symbol role) -> void
70
70
 
71
- # @rbs (**untyped attributes) -> void
72
- def add_occurrence: (**untyped attributes) -> void
71
+ # @rbs (name: String, kind: Symbol, role: Symbol, key: symbol_key, path: String,
72
+ # span: Frontend::SourceSpan, data: symbol_data) -> void
73
+ def add_occurrence: (name: String, kind: Symbol, role: Symbol, key: symbol_key, path: String, span: Frontend::SourceSpan, data: symbol_data) -> void
73
74
 
74
- # @rbs (String name) -> Array[untyped]
75
- def global_key: (String name) -> Array[untyped]
75
+ # @rbs (String name) -> symbol_key
76
+ def global_key: (String name) -> symbol_key
76
77
 
77
- # @rbs (String path, Integer rule_id, String name) -> Array[untyped]
78
- def parameter_key: (String path, Integer rule_id, String name) -> Array[untyped]
78
+ # @rbs (String path, Integer rule_id, String name) -> symbol_key
79
+ def parameter_key: (String path, Integer rule_id, String name) -> symbol_key
79
80
 
80
81
  # @rbs (Array[String] parameters) -> String
81
82
  def parameter_signature: (Array[String] parameters) -> String
@@ -2,24 +2,30 @@
2
2
 
3
3
  module Ibex
4
4
  module LSP
5
+ type symbol_key = [ :symbol, String ] | [ :parameter, String, Integer, String ] | [ :include, String ]
6
+
7
+ type symbol_data_value = String | Symbol | Integer | bool | nil | Array[String] | Hash[Symbol, symbol_data_value]
8
+
9
+ type symbol_data = Hash[Symbol, symbol_data_value]
10
+
5
11
  # A source-backed grammar symbol definition or reference.
6
- class SymbolOccurrence < Struct[String | Symbol | Array[untyped] | Frontend::SourceSpan | Hash[Symbol, untyped]]
12
+ class SymbolOccurrence < Struct[String | Symbol | symbol_key | Frontend::SourceSpan | symbol_data]
7
13
  attr_accessor name(): String
8
14
 
9
15
  attr_accessor kind(): Symbol
10
16
 
11
17
  attr_accessor role(): Symbol
12
18
 
13
- attr_accessor key(): Array[untyped]
19
+ attr_accessor key(): symbol_key
14
20
 
15
21
  attr_accessor path(): String
16
22
 
17
23
  attr_accessor span(): Frontend::SourceSpan
18
24
 
19
- attr_accessor data(): Hash[Symbol, untyped]
25
+ attr_accessor data(): symbol_data
20
26
 
21
- def self.new: (?name: String, ?kind: Symbol, ?role: Symbol, ?key: Array[untyped], ?path: String, ?span: Frontend::SourceSpan, ?data: Hash[Symbol, untyped]) -> instance
22
- | ({ ?name: String, ?kind: Symbol, ?role: Symbol, ?key: Array[untyped], ?path: String, ?span: Frontend::SourceSpan, ?data: Hash[Symbol, untyped] }) -> instance
27
+ def self.new: (?name: String, ?kind: Symbol, ?role: Symbol, ?key: symbol_key, ?path: String, ?span: Frontend::SourceSpan, ?data: symbol_data) -> instance
28
+ | ({ ?name: String, ?kind: Symbol, ?role: Symbol, ?key: symbol_key, ?path: String, ?span: Frontend::SourceSpan, ?data: symbol_data }) -> instance
23
29
  end
24
30
  end
25
31
  end
@@ -4,16 +4,28 @@ module Ibex
4
4
  module LSP
5
5
  # Reads and writes bounded LSP JSON-RPC messages over Content-Length framing.
6
6
  class Transport
7
+ interface _Input
8
+ def read: (Integer length) -> String?
9
+
10
+ def readpartial: (Integer length) -> String
11
+ end
12
+
13
+ interface _Output
14
+ def write: (String value) -> Object?
15
+
16
+ def flush: () -> Object?
17
+ end
18
+
7
19
  HEADER_SEPARATOR: ::String
8
20
 
9
- # @rbs (untyped input, untyped output) -> void
10
- def initialize: (untyped input, untyped output) -> void
21
+ # @rbs (_Input input, _Output output) -> void
22
+ def initialize: (_Input input, _Output output) -> void
11
23
 
12
- # @rbs () -> Hash[String, untyped]?
13
- def read_message: () -> Hash[String, untyped]?
24
+ # @rbs () -> LSP::lsp_object?
25
+ def read_message: () -> LSP::lsp_object?
14
26
 
15
- # @rbs (Hash[String, untyped] message) -> void
16
- def write_message: (Hash[String, untyped] message) -> void
27
+ # @rbs (LSP::lsp_object message) -> void
28
+ def write_message: (LSP::lsp_object message) -> void
17
29
 
18
30
  private
19
31
 
@@ -21,8 +21,9 @@ module Ibex
21
21
  private
22
22
 
23
23
  # URI is a stdlib boundary whose implementation class varies by scheme.
24
- # @rbs (String uri) -> untyped
25
- def parse_file_uri: (String uri) -> untyped
24
+ # URI parsing returns a scheme-specific URI::Generic subclass.
25
+ # @rbs (String uri) -> URI::Generic
26
+ def parse_file_uri: (String uri) -> URI::Generic
26
27
 
27
28
  # Ruby's URI::File may discard userinfo and port, so validate the raw authority first.
28
29
  # @rbs (String uri) -> void
@@ -8,7 +8,7 @@ module Ibex
8
8
 
9
9
  WINDOWS_ABSOLUTE: Regexp
10
10
 
11
- type lsp_diagnostic = Hash[String, untyped]
11
+ type lsp_diagnostic = lsp_object
12
12
 
13
13
  type analyzed_document = { source: String, document: Frontend::SourceDocument?, diagnostics: Array[lsp_diagnostic] }
14
14
 
@@ -0,0 +1,26 @@
1
+ # Generated from lib/ibex/messages.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Immutable built-in diagnostic translations, separate from user E00xx
5
+ # sentence-keyed parser error catalogs.
6
+ module Messages
7
+ ROOT: String
8
+
9
+ LANGUAGES: Array[String]
10
+
11
+ # @rbs (String? requested) -> String
12
+ def self?.language: (String? requested) -> String
13
+
14
+ # @rbs (String id, ?language: String, **Object? values) -> String
15
+ def self?.translate: (String id, ?language: String, **Object? values) -> String
16
+
17
+ # @rbs (String id) -> bool
18
+ def self?.known?: (String id) -> bool
19
+
20
+ # @rbs (String language) -> Hash[String, String]
21
+ def self?.catalog: (String language) -> Hash[String, String]
22
+
23
+ # @rbs (String language) -> Hash[String, String]
24
+ def self?.load_catalog: (String language) -> Hash[String, String]
25
+ end
26
+ end