ibex 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +247 -104
- data/docs/architecture.md +322 -28
- data/docs/cst-migration.md +107 -0
- data/docs/cst.md +213 -0
- data/docs/development.md +129 -0
- data/docs/editor-setup.md +25 -0
- data/docs/error-ux.md +60 -0
- data/docs/grammar-reference.md +458 -18
- data/docs/lexer-migration.md +51 -0
- data/docs/racc-migration.md +34 -6
- data/docs/release-readiness.md +163 -0
- data/docs/stability.md +124 -0
- data/examples/README.md +60 -0
- data/examples/calculator.y +44 -0
- data/examples/csv.y +32 -0
- data/examples/ini.y +70 -0
- data/examples/json.y +48 -0
- data/examples/tiny_language.y +75 -0
- data/lib/ibex/analysis/sets.rb +5 -4
- data/lib/ibex/artifact_set.rb +63 -0
- data/lib/ibex/cli/ambiguity.rb +66 -0
- data/lib/ibex/cli/counterexample_options.rb +6 -2
- data/lib/ibex/cli/coverage.rb +173 -0
- data/lib/ibex/cli/debug.rb +106 -0
- data/lib/ibex/cli/diagnostics.rb +116 -0
- data/lib/ibex/cli/documentation.rb +67 -0
- data/lib/ibex/cli/error_messages.rb +177 -0
- data/lib/ibex/cli/explain.rb +76 -0
- data/lib/ibex/cli/formatting.rb +386 -0
- data/lib/ibex/cli/generation_artifacts.rb +138 -0
- data/lib/ibex/cli/generation_error_messages.rb +39 -0
- data/lib/ibex/cli/grammar_tests.rb +122 -0
- data/lib/ibex/cli/ir_tools.rb +184 -0
- data/lib/ibex/cli/lsp.rb +33 -0
- data/lib/ibex/cli/outputs.rb +91 -8
- data/lib/ibex/cli/racc_migration.rb +87 -0
- data/lib/ibex/cli/samples.rb +92 -0
- data/lib/ibex/cli/watch.rb +103 -0
- data/lib/ibex/cli.rb +506 -37
- data/lib/ibex/codegen/action_locations.rb +103 -0
- data/lib/ibex/codegen/action_method_source.rb +210 -0
- data/lib/ibex/codegen/action_source.rb +118 -0
- data/lib/ibex/codegen/ambiguity.rb +173 -0
- data/lib/ibex/codegen/cst_metadata.rb +171 -0
- data/lib/ibex/codegen/documentation.rb +170 -0
- data/lib/ibex/codegen/explain.rb +312 -0
- data/lib/ibex/codegen/generated_action_abi.rb +288 -0
- data/lib/ibex/codegen/html.rb +94 -10
- data/lib/ibex/codegen/mermaid.rb +43 -0
- data/lib/ibex/codegen/railroad.rb +197 -0
- data/lib/ibex/codegen/railroad_documentation.rb +59 -0
- data/lib/ibex/codegen/rbs.rb +323 -2
- data/lib/ibex/codegen/report.rb +46 -6
- data/lib/ibex/codegen/ruby.rb +334 -59
- data/lib/ibex/codegen/ruby_actions.rb +143 -0
- data/lib/ibex/codegen/ruby_ast.rb +121 -0
- data/lib/ibex/codegen/ruby_error_messages.rb +28 -0
- data/lib/ibex/codegen/ruby_lexer.rb +83 -0
- data/lib/ibex/codegen/ruby_syntax.rb +90 -0
- data/lib/ibex/codegen/ruby_table_metadata.rb +57 -0
- data/lib/ibex/codegen/ruby_value_printers.rb +56 -0
- data/lib/ibex/codegen/symbol_labels.rb +1 -1
- data/lib/ibex/coverage/collector.rb +188 -0
- data/lib/ibex/coverage/event_stream.rb +97 -0
- data/lib/ibex/coverage/report.rb +259 -0
- data/lib/ibex/coverage/runtime_event_validator.rb +160 -0
- data/lib/ibex/coverage.rb +13 -0
- data/lib/ibex/error_messages/parser.rb +159 -0
- data/lib/ibex/error_messages/parser_v2.rb +198 -0
- data/lib/ibex/error_messages/renderer.rb +65 -0
- data/lib/ibex/error_messages/sentence_search.rb +196 -0
- data/lib/ibex/error_messages/update.rb +169 -0
- data/lib/ibex/error_messages.rb +165 -0
- data/lib/ibex/frontend/ast.rb +145 -6
- data/lib/ibex/frontend/bootstrap_parser.rb +47 -4
- data/lib/ibex/frontend/diagnostic.rb +81 -0
- data/lib/ibex/frontend/diagnostic_recovery.rb +268 -0
- data/lib/ibex/frontend/dsl.rb +66 -7
- data/lib/ibex/frontend/formatter.rb +407 -0
- data/lib/ibex/frontend/generated_parser.rb +614 -190
- data/lib/ibex/frontend/generated_parser_base.rb +164 -30
- data/lib/ibex/frontend/generated_parser_includes.rb +61 -0
- data/lib/ibex/frontend/generated_parser_metadata.rb +61 -0
- data/lib/ibex/frontend/generated_parser_parameters.rb +60 -0
- data/lib/ibex/frontend/generation.rb +33 -0
- data/lib/ibex/frontend/lexer.rb +162 -10
- data/lib/ibex/frontend/lexer_recovery.rb +84 -0
- data/lib/ibex/frontend/parser/declarations.rb +247 -11
- data/lib/ibex/frontend/parser/parameters.rb +82 -0
- data/lib/ibex/frontend/parser/rules.rb +43 -6
- data/lib/ibex/frontend/parser.rb +182 -4
- data/lib/ibex/frontend/regenerator.rb +26 -1
- data/lib/ibex/frontend/resolution.rb +69 -0
- data/lib/ibex/frontend/resolver.rb +217 -0
- data/lib/ibex/frontend/rule_documentation.rb +103 -0
- data/lib/ibex/frontend/source_cursor.rb +132 -8
- data/lib/ibex/frontend/source_document.rb +229 -0
- data/lib/ibex/frontend/source_loader.rb +150 -0
- data/lib/ibex/frontend/source_span.rb +81 -0
- data/lib/ibex/frontend/token_adapter/declaration_document_state.rb +47 -0
- data/lib/ibex/frontend/token_adapter/declaration_lexer_state.rb +83 -0
- data/lib/ibex/frontend/token_adapter/declaration_state.rb +216 -26
- data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +8 -2
- data/lib/ibex/frontend/token_adapter/rule_state.rb +60 -2
- data/lib/ibex/frontend/token_adapter.rb +8 -3
- data/lib/ibex/frontend.rb +13 -2
- data/lib/ibex/generation_input.rb +57 -0
- data/lib/ibex/generation_manifest.rb +200 -0
- data/lib/ibex/generation_transaction.rb +261 -0
- data/lib/ibex/generation_transaction_recovery.rb +109 -0
- data/lib/ibex/generation_transaction_validation.rb +196 -0
- data/lib/ibex/grammar_tests.rb +206 -0
- data/lib/ibex/ir/automaton_ir.rb +38 -5
- data/lib/ibex/ir/grammar_ir.rb +137 -24
- data/lib/ibex/ir/lexer_ir.rb +76 -0
- data/lib/ibex/ir/migration.rb +120 -0
- data/lib/ibex/ir/serialize.rb +110 -19
- data/lib/ibex/ir/validator/automaton.rb +345 -0
- data/lib/ibex/ir/validator/base.rb +129 -0
- data/lib/ibex/ir/validator/grammar.rb +604 -0
- data/lib/ibex/ir/validator/lexer.rb +113 -0
- data/lib/ibex/ir/validator.rb +62 -0
- data/lib/ibex/ir.rb +57 -4
- data/lib/ibex/lalr/build_metrics.rb +23 -0
- data/lib/ibex/lalr/builder.rb +379 -52
- data/lib/ibex/lalr/conflict.rb +1 -0
- data/lib/ibex/lalr/conflict_search.rb +11 -5
- data/lib/ibex/lalr/counterexample.rb +20 -5
- data/lib/ibex/lalr/direct_lookaheads.rb +236 -0
- data/lib/ibex/lalr/ielr_partition.rb +152 -0
- data/lib/ibex/lalr/on_error_reductions.rb +74 -0
- data/lib/ibex/lalr.rb +7 -0
- data/lib/ibex/location.rb +129 -0
- data/lib/ibex/lsp/document_handlers.rb +66 -0
- data/lib/ibex/lsp/document_store.rb +264 -0
- data/lib/ibex/lsp/document_store_diagnostics.rb +44 -0
- data/lib/ibex/lsp/document_store_validation.rb +61 -0
- data/lib/ibex/lsp/initialization_handlers.rb +78 -0
- data/lib/ibex/lsp/navigation_handlers.rb +56 -0
- data/lib/ibex/lsp/position_codec.rb +109 -0
- data/lib/ibex/lsp/protocol_error.rb +33 -0
- data/lib/ibex/lsp/request_handlers.rb +45 -0
- data/lib/ibex/lsp/request_support.rb +87 -0
- data/lib/ibex/lsp/server.rb +146 -0
- data/lib/ibex/lsp/symbol_index.rb +241 -0
- data/lib/ibex/lsp/symbol_index_builder.rb +267 -0
- data/lib/ibex/lsp/symbol_index_precedence_references.rb +44 -0
- data/lib/ibex/lsp/symbol_index_source_queries.rb +61 -0
- data/lib/ibex/lsp/symbol_occurrence.rb +17 -0
- data/lib/ibex/lsp/transport.rb +118 -0
- data/lib/ibex/lsp/workspace.rb +127 -0
- data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
- data/lib/ibex/lsp.rb +32 -0
- data/lib/ibex/normalize/declarations.rb +140 -7
- data/lib/ibex/normalize/diagnostics.rb +50 -5
- data/lib/ibex/normalize/expander.rb +59 -55
- data/lib/ibex/normalize/expression.rb +60 -39
- data/lib/ibex/normalize/inline_expansion.rb +414 -0
- data/lib/ibex/normalize/inline_validation.rb +174 -0
- data/lib/ibex/normalize/lexer.rb +131 -0
- data/lib/ibex/normalize/named_references.rb +60 -0
- data/lib/ibex/normalize/nodes.rb +46 -0
- data/lib/ibex/normalize/parameter_ebnf_lowering.rb +69 -0
- data/lib/ibex/normalize/parameter_lowering.rb +126 -0
- data/lib/ibex/normalize/parameter_substitution.rb +125 -0
- data/lib/ibex/normalize/parameter_validation.rb +140 -0
- data/lib/ibex/normalize/parameters.rb +199 -0
- data/lib/ibex/normalize/recovery_declarations.rb +84 -0
- data/lib/ibex/normalize.rb +179 -14
- data/lib/ibex/racc_migration/checker.rb +122 -0
- data/lib/ibex/racc_migration/harness.rb +177 -0
- data/lib/ibex/racc_migration/report.rb +94 -0
- data/lib/ibex/racc_migration.rb +12 -0
- data/lib/ibex/rake_task.rb +116 -0
- data/lib/ibex/samples.rb +186 -0
- data/lib/ibex/table_simulation/result.rb +51 -0
- data/lib/ibex/table_simulation/simulator.rb +253 -0
- data/lib/ibex/table_simulation/step.rb +60 -0
- data/lib/ibex/table_simulation/text.rb +31 -0
- data/lib/ibex/table_simulation.rb +13 -0
- data/lib/ibex/tables.rb +9 -70
- data/lib/ibex/version.rb +1 -1
- data/lib/ibex/watch/runner.rb +172 -0
- data/lib/ibex/watch/source_snapshot.rb +93 -0
- data/lib/ibex/watch.rb +11 -0
- data/lib/ibex.rb +25 -1
- data/schema/automaton-ir-v1.schema.json +401 -0
- data/schema/automaton-ir-v2.schema.json +58 -0
- data/schema/benchmark-v1.schema.json +212 -0
- data/schema/benchmark-v2.schema.json +61 -0
- data/schema/cst-v1.json +170 -0
- data/schema/error-ux-v1.schema.json +258 -0
- data/schema/explain-v1.schema.json +433 -0
- data/schema/frontend-diagnostics-v1.schema.json +154 -0
- data/schema/generation-manifest-v1.schema.json +115 -0
- data/schema/grammar-ir-v1.schema.json +426 -0
- data/schema/grammar-ir-v2.schema.json +779 -0
- data/schema/lexer-ir-v1.schema.json +215 -0
- data/schema/migration-check-v1.schema.json +60 -0
- data/schema/performance-comparison-v1.schema.json +395 -0
- data/schema/public-performance-comparison-v1.schema.json +506 -0
- data/schema/public-performance-profile-v1.schema.json +360 -0
- data/schema/runtime-coverage-v1.schema.json +86 -0
- data/schema/runtime-event-v1.schema.json +308 -0
- data/schema/table-simulation-v1.schema.json +70 -0
- data/sig/ibex/artifact_set.rbs +37 -0
- data/sig/ibex/cli/ambiguity.rbs +22 -0
- data/sig/ibex/cli/counterexample_options.rbs +2 -0
- data/sig/ibex/cli/coverage.rbs +53 -0
- data/sig/ibex/cli/debug.rbs +28 -0
- data/sig/ibex/cli/diagnostics.rbs +38 -0
- data/sig/ibex/cli/documentation.rbs +25 -0
- data/sig/ibex/cli/error_messages.rbs +57 -0
- data/sig/ibex/cli/explain.rbs +25 -0
- data/sig/ibex/cli/formatting.rbs +103 -0
- data/sig/ibex/cli/generation_artifacts.rbs +50 -0
- data/sig/ibex/cli/generation_error_messages.rbs +19 -0
- data/sig/ibex/cli/grammar_tests.rbs +36 -0
- data/sig/ibex/cli/ir_tools.rbs +51 -0
- data/sig/ibex/cli/lsp.rbs +14 -0
- data/sig/ibex/cli/outputs.rbs +17 -0
- data/sig/ibex/cli/racc_migration.rbs +30 -0
- data/sig/ibex/cli/samples.rbs +30 -0
- data/sig/ibex/cli/watch.rbs +43 -0
- data/sig/ibex/cli.rbs +104 -5
- data/sig/ibex/codegen/action_locations.rbs +45 -0
- data/sig/ibex/codegen/action_method_source.rbs +65 -0
- data/sig/ibex/codegen/action_source.rbs +50 -0
- data/sig/ibex/codegen/ambiguity.rbs +60 -0
- data/sig/ibex/codegen/cst_metadata.rbs +59 -0
- data/sig/ibex/codegen/documentation.rbs +50 -0
- data/sig/ibex/codegen/explain.rbs +85 -0
- data/sig/ibex/codegen/generated_action_abi.rbs +101 -0
- data/sig/ibex/codegen/html.rbs +18 -2
- data/sig/ibex/codegen/mermaid.rbs +16 -0
- data/sig/ibex/codegen/railroad.rbs +82 -0
- data/sig/ibex/codegen/railroad_documentation.rbs +31 -0
- data/sig/ibex/codegen/rbs.rbs +84 -4
- data/sig/ibex/codegen/report.rbs +8 -0
- data/sig/ibex/codegen/ruby.rbs +97 -23
- data/sig/ibex/codegen/ruby_actions.rbs +54 -0
- data/sig/ibex/codegen/ruby_ast.rbs +34 -0
- data/sig/ibex/codegen/ruby_error_messages.rbs +16 -0
- data/sig/ibex/codegen/ruby_lexer.rbs +25 -0
- data/sig/ibex/codegen/ruby_syntax.rbs +25 -0
- data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
- data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
- data/sig/ibex/coverage/collector.rbs +76 -0
- data/sig/ibex/coverage/event_stream.rbs +42 -0
- data/sig/ibex/coverage/report.rbs +100 -0
- data/sig/ibex/coverage/runtime_event_validator.rbs +68 -0
- data/sig/ibex/coverage.rbs +7 -0
- data/sig/ibex/error_messages/parser.rbs +58 -0
- data/sig/ibex/error_messages/parser_v2.rbs +67 -0
- data/sig/ibex/error_messages/renderer.rbs +23 -0
- data/sig/ibex/error_messages/sentence_search.rbs +80 -0
- data/sig/ibex/error_messages/update.rbs +43 -0
- data/sig/ibex/error_messages.rbs +85 -0
- data/sig/ibex/frontend/ast.rbs +208 -19
- data/sig/ibex/frontend/bootstrap_parser.rbs +11 -0
- data/sig/ibex/frontend/diagnostic.rbs +53 -0
- data/sig/ibex/frontend/diagnostic_recovery.rbs +98 -0
- data/sig/ibex/frontend/dsl.rbs +33 -4
- data/sig/ibex/frontend/formatter.rbs +135 -0
- data/sig/ibex/frontend/generated_parser.rbs +218 -68
- data/sig/ibex/frontend/generated_parser_base.rbs +61 -10
- data/sig/ibex/frontend/generated_parser_includes.rbs +23 -0
- data/sig/ibex/frontend/generated_parser_metadata.rbs +23 -0
- data/sig/ibex/frontend/generated_parser_parameters.rbs +24 -0
- data/sig/ibex/frontend/generation.rbs +6 -0
- data/sig/ibex/frontend/lexer.rbs +49 -2
- data/sig/ibex/frontend/lexer_recovery.rbs +25 -0
- data/sig/ibex/frontend/parser/declarations.rbs +54 -0
- data/sig/ibex/frontend/parser/parameters.rbs +28 -0
- data/sig/ibex/frontend/parser/rules.rbs +3 -0
- data/sig/ibex/frontend/parser.rbs +66 -0
- data/sig/ibex/frontend/regenerator.rbs +11 -0
- data/sig/ibex/frontend/resolution.rbs +33 -0
- data/sig/ibex/frontend/resolver.rbs +91 -0
- data/sig/ibex/frontend/rule_documentation.rbs +42 -0
- data/sig/ibex/frontend/source_cursor.rbs +36 -3
- data/sig/ibex/frontend/source_document.rbs +119 -0
- data/sig/ibex/frontend/source_loader.rbs +66 -0
- data/sig/ibex/frontend/source_span.rbs +53 -0
- data/sig/ibex/frontend/token_adapter/declaration_document_state.rbs +21 -0
- data/sig/ibex/frontend/token_adapter/declaration_lexer_state.rbs +27 -0
- data/sig/ibex/frontend/token_adapter/declaration_state.rbs +73 -5
- data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
- data/sig/ibex/frontend/token_adapter.rbs +5 -2
- data/sig/ibex/frontend.rbs +1 -1
- data/sig/ibex/generation_input.rbs +37 -0
- data/sig/ibex/generation_manifest.rbs +67 -0
- data/sig/ibex/generation_transaction.rbs +82 -0
- data/sig/ibex/generation_transaction_recovery.rbs +36 -0
- data/sig/ibex/generation_transaction_validation.rbs +65 -0
- data/sig/ibex/grammar_tests.rbs +93 -0
- data/sig/ibex/ir/automaton_ir.rbs +8 -2
- data/sig/ibex/ir/grammar_ir.rbs +75 -15
- data/sig/ibex/ir/lexer_ir.rbs +57 -0
- data/sig/ibex/ir/migration.rbs +34 -0
- data/sig/ibex/ir/serialize.rbs +23 -6
- data/sig/ibex/ir/validator/automaton.rbs +109 -0
- data/sig/ibex/ir/validator/base.rbs +65 -0
- data/sig/ibex/ir/validator/grammar.rbs +184 -0
- data/sig/ibex/ir/validator/lexer.rbs +37 -0
- data/sig/ibex/ir/validator.rbs +16 -0
- data/sig/ibex/ir.rbs +38 -4
- data/sig/ibex/lalr/build_metrics.rbs +20 -0
- data/sig/ibex/lalr/builder.rbs +95 -15
- data/sig/ibex/lalr/conflict_search.rbs +7 -3
- data/sig/ibex/lalr/counterexample.rbs +5 -2
- data/sig/ibex/lalr/direct_lookaheads.rbs +86 -0
- data/sig/ibex/lalr/ielr_partition.rbs +59 -0
- data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
- data/sig/ibex/lalr.rbs +6 -0
- data/sig/ibex/location.rbs +67 -0
- data/sig/ibex/lsp/document_handlers.rbs +24 -0
- data/sig/ibex/lsp/document_store.rbs +94 -0
- data/sig/ibex/lsp/document_store_diagnostics.rbs +20 -0
- data/sig/ibex/lsp/document_store_validation.rbs +26 -0
- data/sig/ibex/lsp/initialization_handlers.rbs +30 -0
- data/sig/ibex/lsp/navigation_handlers.rbs +30 -0
- data/sig/ibex/lsp/position_codec.rbs +40 -0
- data/sig/ibex/lsp/protocol_error.rbs +32 -0
- data/sig/ibex/lsp/request_handlers.rbs +26 -0
- data/sig/ibex/lsp/request_support.rbs +40 -0
- data/sig/ibex/lsp/server.rbs +55 -0
- data/sig/ibex/lsp/symbol_index.rbs +78 -0
- data/sig/ibex/lsp/symbol_index_builder.rbs +87 -0
- data/sig/ibex/lsp/symbol_index_precedence_references.rbs +18 -0
- data/sig/ibex/lsp/symbol_index_source_queries.rbs +26 -0
- data/sig/ibex/lsp/symbol_occurrence.rbs +25 -0
- data/sig/ibex/lsp/transport.rbs +35 -0
- data/sig/ibex/lsp/workspace.rbs +41 -0
- data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
- data/sig/ibex/lsp.rbs +7 -0
- data/sig/ibex/normalize/declarations.rbs +31 -0
- data/sig/ibex/normalize/diagnostics.rbs +9 -0
- data/sig/ibex/normalize/expander.rbs +20 -14
- data/sig/ibex/normalize/expression.rbs +10 -10
- data/sig/ibex/normalize/inline_expansion.rbs +120 -0
- data/sig/ibex/normalize/inline_validation.rbs +40 -0
- data/sig/ibex/normalize/lexer.rbs +37 -0
- data/sig/ibex/normalize/named_references.rbs +20 -0
- data/sig/ibex/normalize/nodes.rbs +14 -0
- data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +32 -0
- data/sig/ibex/normalize/parameter_lowering.rbs +35 -0
- data/sig/ibex/normalize/parameter_substitution.rbs +42 -0
- data/sig/ibex/normalize/parameter_validation.rbs +44 -0
- data/sig/ibex/normalize/parameters.rbs +46 -0
- data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
- data/sig/ibex/normalize.rbs +123 -18
- data/sig/ibex/racc_migration/checker.rbs +36 -0
- data/sig/ibex/racc_migration/harness.rbs +16 -0
- data/sig/ibex/racc_migration/report.rbs +53 -0
- data/sig/ibex/racc_migration.rbs +8 -0
- data/sig/ibex/rake_task.rbs +51 -0
- data/sig/ibex/samples.rbs +51 -0
- data/sig/ibex/table_simulation/result.rbs +32 -0
- data/sig/ibex/table_simulation/simulator.rbs +98 -0
- data/sig/ibex/table_simulation/step.rbs +40 -0
- data/sig/ibex/table_simulation/text.rbs +14 -0
- data/sig/ibex/table_simulation.rbs +7 -0
- data/sig/ibex/tables.rbs +0 -26
- data/sig/ibex/watch/runner.rbs +48 -0
- data/sig/ibex/watch/source_snapshot.rbs +42 -0
- data/sig/ibex/watch.rbs +7 -0
- data/sig/ibex.rbs +2 -0
- metadata +301 -16
- data/.rubocop.yml +0 -43
- data/CHANGELOG.md +0 -30
- data/Rakefile +0 -25
- data/Steepfile +0 -10
- data/docs/compat-notes.md +0 -37
- data/docs/lexer-coverage.md +0 -14
- data/docs/phase10-extensions.md +0 -27
- data/gemfiles/Gemfile +0 -7
- data/gemfiles/Gemfile.lock +0 -98
- data/lib/ibex/frontend/grammar.y +0 -156
- data/lib/ibex/runtime/parser.rb +0 -360
- data/lib/ibex/runtime.rb +0 -8
- data/sig/ibex/runtime/parser.rbs +0 -167
- data/sig/ibex/runtime.rbs +0 -6
data/sig/ibex/frontend/ast.rbs
CHANGED
|
@@ -2,14 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module Frontend
|
|
5
|
+
# Keeps the public Rule constructor compatible with ASTs built before parameters and inline rules existed.
|
|
6
|
+
module ASTRuleDefaults
|
|
7
|
+
# @rbs (*untyped arguments, **untyped keywords) -> void
|
|
8
|
+
def initialize: (*untyped arguments, **untyped keywords) -> void
|
|
9
|
+
end
|
|
10
|
+
|
|
5
11
|
# Grammar frontend node types.
|
|
12
|
+
# rubocop:disable Metrics/ModuleLength -- the public node vocabulary is intentionally kept together.
|
|
6
13
|
module AST
|
|
7
|
-
type
|
|
14
|
+
type symbol_metadata = DisplayName | SemanticType
|
|
15
|
+
|
|
16
|
+
type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | symbol_metadata
|
|
17
|
+
|
|
18
|
+
type lexer_entry = LexerRule | LexerState
|
|
8
19
|
|
|
9
|
-
type item = SymbolReference | InlineAction | Optional | Star | Plus | Group | SeparatedList
|
|
20
|
+
type item = SymbolReference | ParameterizedReference | InlineAction | Optional | Star | Plus | Group | SeparatedList | Empty
|
|
10
21
|
|
|
11
22
|
type user_code = Hash[String, Array[UserCode]]
|
|
12
23
|
|
|
24
|
+
class Rule < Struct[String | Array[String] | Array[Alternative] | Location | String? | bool]
|
|
25
|
+
attr_accessor lhs: String
|
|
26
|
+
attr_accessor parameters: Array[String]
|
|
27
|
+
attr_accessor alternatives: Array[Alternative]
|
|
28
|
+
attr_accessor loc: Location
|
|
29
|
+
attr_accessor documentation: String?
|
|
30
|
+
attr_accessor inline: bool
|
|
31
|
+
def self.new: (?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool?) -> instance
|
|
32
|
+
| ({ ?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool? }) -> instance
|
|
33
|
+
end
|
|
34
|
+
|
|
13
35
|
# Adds deterministic, recursively serializable hashes to Struct nodes.
|
|
14
36
|
# @rbs module-self Struct[untyped]
|
|
15
37
|
module Node : Struct[untyped]
|
|
@@ -20,7 +42,7 @@ module Ibex
|
|
|
20
42
|
def serialize: (untyped value) -> untyped
|
|
21
43
|
end
|
|
22
44
|
|
|
23
|
-
class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location]
|
|
45
|
+
class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool?]
|
|
24
46
|
attr_accessor class_name(): String
|
|
25
47
|
|
|
26
48
|
attr_accessor superclass(): String?
|
|
@@ -33,17 +55,43 @@ module Ibex
|
|
|
33
55
|
|
|
34
56
|
attr_accessor loc(): Location
|
|
35
57
|
|
|
36
|
-
|
|
37
|
-
|
|
58
|
+
attr_accessor extended(): bool?
|
|
59
|
+
|
|
60
|
+
attr_accessor cst(): bool?
|
|
61
|
+
|
|
62
|
+
def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?) -> instance
|
|
63
|
+
| ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool? }) -> instance
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class Fragment < Struct[Array[declaration] | Array[Rule] | Location]
|
|
67
|
+
attr_accessor declarations(): Array[declaration]
|
|
68
|
+
|
|
69
|
+
attr_accessor rules(): Array[Rule]
|
|
70
|
+
|
|
71
|
+
attr_accessor loc(): Location
|
|
72
|
+
|
|
73
|
+
def self.new: (?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location) -> instance
|
|
74
|
+
| ({ ?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location }) -> instance
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
class Include < Struct[String | Location]
|
|
78
|
+
attr_accessor path(): String
|
|
79
|
+
|
|
80
|
+
attr_accessor loc(): Location
|
|
81
|
+
|
|
82
|
+
def self.new: (?path: String, ?loc: Location) -> instance
|
|
83
|
+
| ({ ?path: String, ?loc: Location }) -> instance
|
|
38
84
|
end
|
|
39
85
|
|
|
40
|
-
class Tokens < Struct[Array[String] | Location]
|
|
86
|
+
class Tokens < Struct[Array[String] | Hash[String, String]? | Location]
|
|
41
87
|
attr_accessor names(): Array[String]
|
|
42
88
|
|
|
89
|
+
attr_accessor aliases(): Hash[String, String]?
|
|
90
|
+
|
|
43
91
|
attr_accessor loc(): Location
|
|
44
92
|
|
|
45
|
-
def self.new: (?names: Array[String], ?loc: Location) -> instance
|
|
46
|
-
| ({ ?names: Array[String], ?loc: Location }) -> instance
|
|
93
|
+
def self.new: (?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location) -> instance
|
|
94
|
+
| ({ ?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location }) -> instance
|
|
47
95
|
end
|
|
48
96
|
|
|
49
97
|
class Precedence < Struct[Symbol | Array[PrecedenceLevel] | Location]
|
|
@@ -86,13 +134,88 @@ module Ibex
|
|
|
86
134
|
| ({ ?conflicts: Integer, ?loc: Location }) -> instance
|
|
87
135
|
end
|
|
88
136
|
|
|
89
|
-
class
|
|
137
|
+
class ExpectRR < Struct[Integer | Location]
|
|
138
|
+
attr_accessor conflicts(): Integer
|
|
139
|
+
|
|
140
|
+
attr_accessor loc(): Location
|
|
141
|
+
|
|
142
|
+
def self.new: (?conflicts: Integer, ?loc: Location) -> instance
|
|
143
|
+
| ({ ?conflicts: Integer, ?loc: Location }) -> instance
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
class Start < Struct[Array[String] | Location]
|
|
147
|
+
attr_accessor names(): Array[String]
|
|
148
|
+
|
|
149
|
+
attr_accessor loc(): Location
|
|
150
|
+
|
|
151
|
+
def self.new: (?names: Array[String], ?loc: Location) -> instance
|
|
152
|
+
| ({ ?names: Array[String], ?loc: Location }) -> instance
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
class Recovery < Struct[Array[String] | Location]
|
|
156
|
+
attr_accessor sync_tokens(): Array[String]
|
|
157
|
+
|
|
158
|
+
attr_accessor loc(): Location
|
|
159
|
+
|
|
160
|
+
def self.new: (?sync_tokens: Array[String], ?loc: Location) -> instance
|
|
161
|
+
| ({ ?sync_tokens: Array[String], ?loc: Location }) -> instance
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
class OnErrorReduce < Struct[Array[String] | Location]
|
|
165
|
+
attr_accessor names(): Array[String]
|
|
166
|
+
|
|
167
|
+
attr_accessor loc(): Location
|
|
168
|
+
|
|
169
|
+
def self.new: (?names: Array[String], ?loc: Location) -> instance
|
|
170
|
+
| ({ ?names: Array[String], ?loc: Location }) -> instance
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
class GrammarTest < Struct[Symbol | String | Location]
|
|
174
|
+
attr_accessor expectation(): Symbol
|
|
175
|
+
|
|
176
|
+
attr_accessor source(): String
|
|
177
|
+
|
|
178
|
+
attr_accessor loc(): Location
|
|
179
|
+
|
|
180
|
+
def self.new: (?expectation: Symbol, ?source: String, ?loc: Location) -> instance
|
|
181
|
+
| ({ ?expectation: Symbol, ?source: String, ?loc: Location }) -> instance
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
class Lexer < Struct[Array[lexer_entry] | Location]
|
|
185
|
+
attr_accessor definitions(): Array[lexer_entry]
|
|
186
|
+
|
|
187
|
+
attr_accessor loc(): Location
|
|
188
|
+
|
|
189
|
+
def self.new: (?definitions: Array[lexer_entry], ?loc: Location) -> instance
|
|
190
|
+
| ({ ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
class LexerRule < Struct[Symbol | String? | String | Location]
|
|
194
|
+
attr_accessor kind(): Symbol
|
|
195
|
+
|
|
196
|
+
attr_accessor token(): String?
|
|
197
|
+
|
|
198
|
+
attr_accessor pattern(): String
|
|
199
|
+
|
|
200
|
+
attr_accessor pattern_kind(): Symbol
|
|
201
|
+
|
|
202
|
+
attr_accessor action(): String?
|
|
203
|
+
|
|
204
|
+
attr_accessor loc(): Location
|
|
205
|
+
|
|
206
|
+
def self.new: (?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location) -> instance
|
|
207
|
+
| ({ ?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location }) -> instance
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
class LexerState < Struct[String | Array[lexer_entry] | Location]
|
|
90
211
|
attr_accessor name(): String
|
|
91
212
|
|
|
213
|
+
attr_accessor definitions(): Array[lexer_entry]
|
|
214
|
+
|
|
92
215
|
attr_accessor loc(): Location
|
|
93
216
|
|
|
94
|
-
def self.new: (?name: String, ?loc: Location) -> instance
|
|
95
|
-
| ({ ?name: String, ?loc: Location }) -> instance
|
|
217
|
+
def self.new: (?name: String, ?definitions: Array[lexer_entry], ?loc: Location) -> instance
|
|
218
|
+
| ({ ?name: String, ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
|
|
96
219
|
end
|
|
97
220
|
|
|
98
221
|
class Convert < Struct[Array[Conversion] | Location]
|
|
@@ -115,28 +238,74 @@ module Ibex
|
|
|
115
238
|
| ({ ?name: String, ?expression: String, ?loc: Location }) -> instance
|
|
116
239
|
end
|
|
117
240
|
|
|
118
|
-
class
|
|
119
|
-
attr_accessor
|
|
241
|
+
class DisplayName < Struct[String | Location]
|
|
242
|
+
attr_accessor name(): String
|
|
243
|
+
|
|
244
|
+
attr_accessor value(): String
|
|
245
|
+
|
|
246
|
+
attr_accessor loc(): Location
|
|
247
|
+
|
|
248
|
+
def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
|
|
249
|
+
| ({ ?name: String, ?value: String, ?loc: Location }) -> instance
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
class SemanticType < Struct[String | Location]
|
|
253
|
+
attr_accessor name(): String
|
|
254
|
+
|
|
255
|
+
attr_accessor value(): String
|
|
256
|
+
|
|
257
|
+
attr_accessor loc(): Location
|
|
258
|
+
|
|
259
|
+
def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
|
|
260
|
+
| ({ ?name: String, ?value: String, ?loc: Location }) -> instance
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
class Parameter < Struct[String | String? | Location]
|
|
264
|
+
attr_accessor name(): String
|
|
265
|
+
|
|
266
|
+
attr_accessor semantic_type(): String?
|
|
267
|
+
|
|
268
|
+
attr_accessor loc(): Location
|
|
269
|
+
|
|
270
|
+
def self.new: (?name: String, ?semantic_type: String?, ?loc: Location) -> instance
|
|
271
|
+
| ({ ?name: String, ?semantic_type: String?, ?loc: Location }) -> instance
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
class Printer < Struct[String | Location]
|
|
275
|
+
attr_accessor name(): String
|
|
120
276
|
|
|
121
|
-
attr_accessor
|
|
277
|
+
attr_accessor code(): String
|
|
122
278
|
|
|
123
279
|
attr_accessor loc(): Location
|
|
124
280
|
|
|
125
|
-
def self.new: (?
|
|
126
|
-
| ({ ?
|
|
281
|
+
def self.new: (?name: String, ?code: String, ?loc: Location) -> instance
|
|
282
|
+
| ({ ?name: String, ?code: String, ?loc: Location }) -> instance
|
|
127
283
|
end
|
|
128
284
|
|
|
129
|
-
class Alternative < Struct[Array[item] | InlineAction? | String? | Location]
|
|
285
|
+
class Alternative < Struct[Array[item] | InlineAction? | String? | NodeAnnotation? | Location]
|
|
130
286
|
attr_accessor items(): Array[item]
|
|
131
287
|
|
|
132
288
|
attr_accessor action(): InlineAction?
|
|
133
289
|
|
|
134
290
|
attr_accessor precedence(): String?
|
|
135
291
|
|
|
292
|
+
attr_accessor node_annotation(): NodeAnnotation?
|
|
293
|
+
|
|
294
|
+
attr_accessor loc(): Location
|
|
295
|
+
|
|
296
|
+
def self.new: (?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location) -> instance
|
|
297
|
+
| ({ ?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location }) -> instance
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
class NodeAnnotation < Struct[String | Array[String] | Location]
|
|
301
|
+
attr_accessor name(): String
|
|
302
|
+
|
|
303
|
+
attr_accessor fields(): Array[String]
|
|
304
|
+
|
|
136
305
|
attr_accessor loc(): Location
|
|
137
306
|
|
|
138
|
-
def self.new: (?
|
|
139
|
-
| ({ ?
|
|
307
|
+
def self.new: (?name: String, ?fields: Array[String], ?loc: Location) -> instance
|
|
308
|
+
| ({ ?name: String, ?fields: Array[String], ?loc: Location }) -> instance
|
|
140
309
|
end
|
|
141
310
|
|
|
142
311
|
class SymbolReference < Struct[String | String? | Location]
|
|
@@ -150,6 +319,19 @@ module Ibex
|
|
|
150
319
|
| ({ ?name: String, ?named_reference: String?, ?loc: Location }) -> instance
|
|
151
320
|
end
|
|
152
321
|
|
|
322
|
+
class ParameterizedReference < Struct[String | Array[item] | String? | Location]
|
|
323
|
+
attr_accessor name(): String
|
|
324
|
+
|
|
325
|
+
attr_accessor arguments(): Array[item]
|
|
326
|
+
|
|
327
|
+
attr_accessor named_reference(): String?
|
|
328
|
+
|
|
329
|
+
attr_accessor loc(): Location
|
|
330
|
+
|
|
331
|
+
def self.new: (?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location) -> instance
|
|
332
|
+
| ({ ?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location }) -> instance
|
|
333
|
+
end
|
|
334
|
+
|
|
153
335
|
class InlineAction < Struct[String | Location]
|
|
154
336
|
attr_accessor code(): String
|
|
155
337
|
|
|
@@ -159,6 +341,13 @@ module Ibex
|
|
|
159
341
|
| ({ ?code: String, ?loc: Location }) -> instance
|
|
160
342
|
end
|
|
161
343
|
|
|
344
|
+
class Empty < Struct[Location]
|
|
345
|
+
attr_accessor loc(): Location
|
|
346
|
+
|
|
347
|
+
def self.new: (?loc: Location) -> instance
|
|
348
|
+
| ({ ?loc: Location }) -> instance
|
|
349
|
+
end
|
|
350
|
+
|
|
162
351
|
class Optional < Struct[item | Location]
|
|
163
352
|
attr_accessor item(): item
|
|
164
353
|
|
|
@@ -8,6 +8,8 @@ module Ibex
|
|
|
8
8
|
|
|
9
9
|
include BootstrapParserRules
|
|
10
10
|
|
|
11
|
+
include BootstrapParserParameters
|
|
12
|
+
|
|
11
13
|
@mode: Symbol
|
|
12
14
|
|
|
13
15
|
@index: Integer
|
|
@@ -20,8 +22,17 @@ module Ibex
|
|
|
20
22
|
# @rbs () -> AST::Root
|
|
21
23
|
def parse: () -> AST::Root
|
|
22
24
|
|
|
25
|
+
# @rbs () -> AST::Fragment
|
|
26
|
+
def parse_fragment: () -> AST::Fragment
|
|
27
|
+
|
|
23
28
|
private
|
|
24
29
|
|
|
30
|
+
# @rbs (Array[AST::declaration] declarations) -> void
|
|
31
|
+
def reject_fragment_root_declarations: (Array[AST::declaration] declarations) -> void
|
|
32
|
+
|
|
33
|
+
# @rbs (AST::declaration declaration) -> String?
|
|
34
|
+
def fragment_root_declaration_name: (AST::declaration declaration) -> String?
|
|
35
|
+
|
|
25
36
|
# @rbs () -> String
|
|
26
37
|
def parse_constant_path: () -> String
|
|
27
38
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/diagnostic.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# An immutable machine-readable frontend error.
|
|
6
|
+
class Diagnostic
|
|
7
|
+
attr_reader code: String
|
|
8
|
+
|
|
9
|
+
attr_reader phase: Symbol
|
|
10
|
+
|
|
11
|
+
attr_reader message: String
|
|
12
|
+
|
|
13
|
+
attr_reader location: Location
|
|
14
|
+
|
|
15
|
+
attr_reader span: SourceSpan?
|
|
16
|
+
|
|
17
|
+
attr_reader expected: Array[String]
|
|
18
|
+
|
|
19
|
+
attr_reader received: String?
|
|
20
|
+
|
|
21
|
+
# @rbs (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?,
|
|
22
|
+
# ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
|
|
23
|
+
def initialize: (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?, ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
|
|
24
|
+
|
|
25
|
+
# @rbs () -> String
|
|
26
|
+
def severity: () -> String
|
|
27
|
+
|
|
28
|
+
# @rbs () -> String
|
|
29
|
+
def to_s: () -> String
|
|
30
|
+
|
|
31
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
32
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Immutable output from a diagnostic parse.
|
|
36
|
+
class ParseResult
|
|
37
|
+
attr_reader diagnostics: Array[Diagnostic]
|
|
38
|
+
|
|
39
|
+
attr_reader ast: AST::Root?
|
|
40
|
+
|
|
41
|
+
attr_reader document: SourceDocument?
|
|
42
|
+
|
|
43
|
+
# @rbs (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
|
|
44
|
+
def initialize: (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
|
|
45
|
+
|
|
46
|
+
# @rbs () -> bool
|
|
47
|
+
def success?: () -> bool
|
|
48
|
+
|
|
49
|
+
# @rbs () -> bool
|
|
50
|
+
def partial?: () -> bool
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/diagnostic_recovery.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Re-runs the generated parser after suppressing only conservative source regions.
|
|
6
|
+
class DiagnosticRecovery
|
|
7
|
+
DECLARATION_STARTS: Array[String]
|
|
8
|
+
|
|
9
|
+
@suppressed: Hash[Integer, bool]
|
|
10
|
+
|
|
11
|
+
@max_diagnostics: Integer
|
|
12
|
+
|
|
13
|
+
@mode: Symbol
|
|
14
|
+
|
|
15
|
+
@tokens: Array[Token]
|
|
16
|
+
|
|
17
|
+
# @rbs (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
|
|
18
|
+
def initialize: (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
|
|
19
|
+
|
|
20
|
+
# @rbs () -> [AST::Root | AST::Fragment | nil, Array[Diagnostic]]
|
|
21
|
+
def parse: () -> [ AST::Root | AST::Fragment | nil, Array[Diagnostic] ]
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
# @rbs () -> (AST::Root | AST::Fragment | nil)
|
|
26
|
+
def parse_until_stable: () -> (AST::Root | AST::Fragment | nil)
|
|
27
|
+
|
|
28
|
+
# @rbs () -> Array[Token]
|
|
29
|
+
def working_tokens: () -> Array[Token]
|
|
30
|
+
|
|
31
|
+
# @rbs (Diagnostic diagnostic) -> void
|
|
32
|
+
def append_diagnostic: (Diagnostic diagnostic) -> void
|
|
33
|
+
|
|
34
|
+
# @rbs (Diagnostic diagnostic) -> [String, String, Integer, Integer, String]
|
|
35
|
+
def diagnostic_key: (Diagnostic diagnostic) -> [ String, String, Integer, Integer, String ]
|
|
36
|
+
|
|
37
|
+
# @rbs () -> Array[Diagnostic]
|
|
38
|
+
def sorted_diagnostics: () -> Array[Diagnostic]
|
|
39
|
+
|
|
40
|
+
# @rbs (Diagnostic diagnostic) -> [String, Integer, Integer, String, String]
|
|
41
|
+
def diagnostic_sort_key: (Diagnostic diagnostic) -> [ String, Integer, Integer, String, String ]
|
|
42
|
+
|
|
43
|
+
# @rbs (Token? token, Exception error) -> Range[Integer]?
|
|
44
|
+
def suppression_range: (Token? token, Exception error) -> Range[Integer]?
|
|
45
|
+
|
|
46
|
+
# @rbs (Token? token) -> Integer?
|
|
47
|
+
def token_index: (Token? token) -> Integer?
|
|
48
|
+
|
|
49
|
+
# @rbs (String message) -> Integer?
|
|
50
|
+
def token_index_for_message: (String message) -> Integer?
|
|
51
|
+
|
|
52
|
+
# @rbs () -> Integer?
|
|
53
|
+
def rule_marker_index: () -> Integer?
|
|
54
|
+
|
|
55
|
+
# @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
56
|
+
def declaration_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
57
|
+
|
|
58
|
+
# @rbs (Integer index) -> bool
|
|
59
|
+
def declaration_start?: (Integer index) -> bool
|
|
60
|
+
|
|
61
|
+
# @rbs (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
|
|
62
|
+
def declaration_finish: (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
|
|
63
|
+
|
|
64
|
+
# @rbs (Integer start, Integer fallback, String closer) -> Integer
|
|
65
|
+
def matching_declaration_end: (Integer start, Integer fallback, String closer) -> Integer
|
|
66
|
+
|
|
67
|
+
# @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
68
|
+
def rule_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
69
|
+
|
|
70
|
+
# @rbs (Integer rule_marker) -> Integer
|
|
71
|
+
def grammar_end_index: (Integer rule_marker) -> Integer
|
|
72
|
+
|
|
73
|
+
# @rbs (Integer rule_marker, Integer grammar_end) -> Array[Integer]
|
|
74
|
+
def rule_definition_starts: (Integer rule_marker, Integer grammar_end) -> Array[Integer]
|
|
75
|
+
|
|
76
|
+
# @rbs (Integer index, Integer? lhs_column) -> bool
|
|
77
|
+
def lhs_candidate?: (Integer index, Integer? lhs_column) -> bool
|
|
78
|
+
|
|
79
|
+
# @rbs (Integer failure, Integer start, Integer finish) -> Range[Integer]?
|
|
80
|
+
def alternative_range: (Integer failure, Integer start, Integer finish) -> Range[Integer]?
|
|
81
|
+
|
|
82
|
+
# @rbs (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
|
|
83
|
+
def alternative_slice: (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
|
|
84
|
+
|
|
85
|
+
# @rbs (Integer start, Integer finish) -> Array[Integer]
|
|
86
|
+
def top_level_pipes: (Integer start, Integer finish) -> Array[Integer]
|
|
87
|
+
|
|
88
|
+
# @rbs (Range[Integer] range) -> bool
|
|
89
|
+
def suppress: (Range[Integer] range) -> bool
|
|
90
|
+
|
|
91
|
+
# @rbs (Exception error, Token? token, phase: Symbol) -> Diagnostic
|
|
92
|
+
def diagnostic_from: (Exception error, Token? token, phase: Symbol) -> Diagnostic
|
|
93
|
+
|
|
94
|
+
# @rbs (String message) -> [Array[String], String?]
|
|
95
|
+
def expected_and_received: (String message) -> [ Array[String], String? ]
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
data/sig/ibex/frontend/dsl.rbs
CHANGED
|
@@ -35,12 +35,36 @@ module Ibex
|
|
|
35
35
|
# @rbs (Integer conflicts) -> void
|
|
36
36
|
def expect: (Integer conflicts) -> void
|
|
37
37
|
|
|
38
|
-
# @rbs (Object
|
|
39
|
-
def start: (Object
|
|
38
|
+
# @rbs (*Object names) -> void
|
|
39
|
+
def start: (*Object names) -> void
|
|
40
|
+
|
|
41
|
+
# @rbs (*Object names) -> void
|
|
42
|
+
def recover_sync: (*Object names) -> void
|
|
43
|
+
|
|
44
|
+
# @rbs (*Object names) -> void
|
|
45
|
+
def on_error_reduce: (*Object names) -> void
|
|
46
|
+
|
|
47
|
+
# @rbs (Object source) -> void
|
|
48
|
+
def test_accept: (Object source) -> void
|
|
49
|
+
|
|
50
|
+
# @rbs (Object source) -> void
|
|
51
|
+
def test_reject: (Object source) -> void
|
|
40
52
|
|
|
41
53
|
# @rbs (Object name, Object expression) -> void
|
|
42
54
|
def convert: (Object name, Object expression) -> void
|
|
43
55
|
|
|
56
|
+
# @rbs (Object name, Object value) -> void
|
|
57
|
+
def display: (Object name, Object value) -> void
|
|
58
|
+
|
|
59
|
+
# @rbs (Object name, Object value) -> void
|
|
60
|
+
def type: (Object name, Object value) -> void
|
|
61
|
+
|
|
62
|
+
# @rbs (Object name, ?Object? semantic_type) -> void
|
|
63
|
+
def param: (Object name, ?Object? semantic_type) -> void
|
|
64
|
+
|
|
65
|
+
# @rbs (Object name, Object code) -> void
|
|
66
|
+
def printer: (Object name, Object code) -> void
|
|
67
|
+
|
|
44
68
|
# @rbs (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
|
|
45
69
|
def precedence: (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
|
|
46
70
|
|
|
@@ -79,6 +103,11 @@ module Ibex
|
|
|
79
103
|
|
|
80
104
|
# @rbs () -> Location
|
|
81
105
|
def next_location: () -> Location
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
|
|
109
|
+
# @rbs (Object value, String feature) -> String
|
|
110
|
+
def metadata_value: (Object value, String feature) -> String
|
|
82
111
|
end
|
|
83
112
|
|
|
84
113
|
# Collects ordered associativity levels.
|
|
@@ -116,8 +145,8 @@ module Ibex
|
|
|
116
145
|
# @rbs (Builder grammar, Location default_location) -> void
|
|
117
146
|
def initialize: (Builder grammar, Location default_location) -> void
|
|
118
147
|
|
|
119
|
-
# @rbs (*Object items, ?action: Object?, ?precedence: Object?) -> void
|
|
120
|
-
def alt: (*Object items, ?action: Object?, ?precedence: Object?) -> void
|
|
148
|
+
# @rbs (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
|
|
149
|
+
def alt: (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
|
|
121
150
|
end
|
|
122
151
|
end
|
|
123
152
|
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/formatter.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Deterministically formats grammar trivia and rejects any semantic change.
|
|
6
|
+
# rubocop:disable Metrics/ClassLength -- token layout policy stays together so adjacency rules remain auditable.
|
|
7
|
+
class Formatter
|
|
8
|
+
DECLARATION_STARTS: Array[Symbol]
|
|
9
|
+
|
|
10
|
+
ASSOCIATIONS: Array[Symbol]
|
|
11
|
+
|
|
12
|
+
CALLABLES: Array[Symbol]
|
|
13
|
+
|
|
14
|
+
SUFFIXES: Array[String]
|
|
15
|
+
|
|
16
|
+
CLOSERS: Array[String]
|
|
17
|
+
|
|
18
|
+
ADJACENT_AFTER: Array[String]
|
|
19
|
+
|
|
20
|
+
type formatter_element = { segment: Segment, external: external_token?, role: Symbol?, gap: Array[Segment] }
|
|
21
|
+
|
|
22
|
+
# @rbs (String source, ?file: String, ?mode: Symbol) -> String
|
|
23
|
+
def self.format: (String source, ?file: String, ?mode: Symbol) -> String
|
|
24
|
+
|
|
25
|
+
# @rbs (?mode: Symbol) -> void
|
|
26
|
+
def initialize: (?mode: Symbol) -> void
|
|
27
|
+
|
|
28
|
+
# @rbs (String source, ?file: String) -> String
|
|
29
|
+
def format: (String source, ?file: String) -> String
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
# @rbs (SourceDocument document) -> String
|
|
34
|
+
def render: (SourceDocument document) -> String
|
|
35
|
+
|
|
36
|
+
# @rbs (SourceDocument document) -> Array[formatter_element]
|
|
37
|
+
def build_elements: (SourceDocument document) -> Array[formatter_element]
|
|
38
|
+
|
|
39
|
+
# @rbs (Array[Token] tokens) -> Hash[Integer, external_token]
|
|
40
|
+
def external_types: (Array[Token] tokens) -> Hash[Integer, external_token]
|
|
41
|
+
|
|
42
|
+
# @rbs (Array[formatter_element] elements) -> void
|
|
43
|
+
def annotate_roles: (Array[formatter_element] elements) -> void
|
|
44
|
+
|
|
45
|
+
# @rbs (Array[formatter_element] elements) -> void
|
|
46
|
+
def annotate_comment_indentation: (Array[formatter_element] elements) -> void
|
|
47
|
+
|
|
48
|
+
# @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
|
|
49
|
+
def token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
|
|
50
|
+
|
|
51
|
+
# @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
|
|
52
|
+
def document_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
|
|
53
|
+
|
|
54
|
+
# @rbs (Hash[Symbol, untyped] state) -> Symbol?
|
|
55
|
+
def section_end_role: (Hash[Symbol, untyped] state) -> Symbol?
|
|
56
|
+
|
|
57
|
+
# @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol?
|
|
58
|
+
def rule_token_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol?
|
|
59
|
+
|
|
60
|
+
# @rbs (external_token external, Hash[Symbol, untyped] state) -> Symbol
|
|
61
|
+
def precedence_role: (external_token external, Hash[Symbol, untyped] state) -> Symbol
|
|
62
|
+
|
|
63
|
+
# @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
64
|
+
def advance_role_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
65
|
+
|
|
66
|
+
# @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
67
|
+
def advance_precedence_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
68
|
+
|
|
69
|
+
# @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
70
|
+
def advance_conversion_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
71
|
+
|
|
72
|
+
# @rbs (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
73
|
+
def advance_rule_state: (external_token external, Symbol? role, Hash[Symbol, untyped] state) -> void
|
|
74
|
+
|
|
75
|
+
# @rbs (formatter_element? previous, formatter_element current) -> String
|
|
76
|
+
def separator: (formatter_element? previous, formatter_element current) -> String
|
|
77
|
+
|
|
78
|
+
# @rbs (formatter_element current, Array[Segment] gap) -> String
|
|
79
|
+
def leading_separator: (formatter_element current, Array[Segment] gap) -> String
|
|
80
|
+
|
|
81
|
+
# @rbs (formatter_element previous, Array[Segment] gap) -> String
|
|
82
|
+
def trailing_separator: (formatter_element previous, Array[Segment] gap) -> String
|
|
83
|
+
|
|
84
|
+
# @rbs (Segment previous, Segment current) -> bool
|
|
85
|
+
def direct_opaque_pair?: (Segment previous, Segment current) -> bool
|
|
86
|
+
|
|
87
|
+
# @rbs (Segment segment) -> bool
|
|
88
|
+
def comment?: (Segment segment) -> bool
|
|
89
|
+
|
|
90
|
+
# @rbs (formatter_element previous, formatter_element current, Array[Segment] gap) -> String
|
|
91
|
+
def comment_separator: (formatter_element previous, formatter_element current, Array[Segment] gap) -> String
|
|
92
|
+
|
|
93
|
+
# @rbs (formatter_element previous, formatter_element current) -> Symbol
|
|
94
|
+
def separator_kind: (formatter_element previous, formatter_element current) -> Symbol
|
|
95
|
+
|
|
96
|
+
# @rbs (external_token? previous_external, external_token? current_external,
|
|
97
|
+
# Symbol? previous_role, Symbol? current_role) -> bool
|
|
98
|
+
def adjacent_tokens?: (external_token? previous_external, external_token? current_external, Symbol? previous_role, Symbol? current_role) -> bool
|
|
99
|
+
|
|
100
|
+
# @rbs (Symbol? previous_role, Symbol? current_role, formatter_element previous,
|
|
101
|
+
# formatter_element current) -> bool
|
|
102
|
+
def line_boundary?: (Symbol? previous_role, Symbol? current_role, formatter_element previous, formatter_element current) -> bool
|
|
103
|
+
|
|
104
|
+
# @rbs (formatter_element element) -> Integer
|
|
105
|
+
def indentation: (formatter_element element) -> Integer
|
|
106
|
+
|
|
107
|
+
# @rbs (Symbol kind, Array[Segment] gap, Integer indentation) -> String
|
|
108
|
+
def render_separator: (Symbol kind, Array[Segment] gap, Integer indentation) -> String
|
|
109
|
+
|
|
110
|
+
# @rbs (Array[Segment] gap) -> bool
|
|
111
|
+
def newline_in?: (Array[Segment] gap) -> bool
|
|
112
|
+
|
|
113
|
+
# @rbs (String text) -> bool
|
|
114
|
+
def text_ends_with_newline?: (String text) -> bool
|
|
115
|
+
|
|
116
|
+
# @rbs (untyped left, untyped right) -> bool
|
|
117
|
+
def same_semantic_projection?: (untyped left, untyped right) -> bool
|
|
118
|
+
|
|
119
|
+
# @rbs (untyped left, untyped right) -> bool
|
|
120
|
+
def comparable_semantic_values?: (untyped left, untyped right) -> bool
|
|
121
|
+
|
|
122
|
+
# @rbs (Hash[untyped, untyped] left, untyped right) -> bool
|
|
123
|
+
def comparable_semantic_hashes?: (Hash[untyped, untyped] left, untyped right) -> bool
|
|
124
|
+
|
|
125
|
+
# @rbs (Array[[untyped, untyped]] pending, untyped left, untyped right) -> void
|
|
126
|
+
def append_semantic_children: (Array[[ untyped, untyped ]] pending, untyped left, untyped right) -> void
|
|
127
|
+
|
|
128
|
+
# @rbs (Struct[untyped] value) -> Array[Symbol]
|
|
129
|
+
def semantic_members: (Struct[untyped] value) -> Array[Symbol]
|
|
130
|
+
|
|
131
|
+
# @rbs (Hash[untyped, untyped] value) -> Array[untyped]
|
|
132
|
+
def semantic_keys: (Hash[untyped, untyped] value) -> Array[untyped]
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|