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/lexer.rbs
CHANGED
|
@@ -3,11 +3,24 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module Frontend
|
|
5
5
|
# Tokenizes a racc-compatible grammar while preserving source locations.
|
|
6
|
+
# rubocop:disable Metrics/ClassLength -- token scanners stay together to preserve cursor invariants.
|
|
6
7
|
class Lexer
|
|
7
8
|
PUNCTUATION: Hash[String, Symbol]
|
|
8
9
|
|
|
9
10
|
USER_CODE: Regexp
|
|
10
11
|
|
|
12
|
+
NODE_DIRECTIVE: Regexp
|
|
13
|
+
|
|
14
|
+
PERCENT_DIRECTIVES: Hash[String, [ Symbol, String ]]
|
|
15
|
+
|
|
16
|
+
@active_token_start: SourcePosition?
|
|
17
|
+
|
|
18
|
+
@eof_token: Token?
|
|
19
|
+
|
|
20
|
+
@emitted_tokens: Array[Token]
|
|
21
|
+
|
|
22
|
+
@segments: Array[Segment]
|
|
23
|
+
|
|
11
24
|
@cursor: SourceCursor
|
|
12
25
|
|
|
13
26
|
# @rbs (String source, ?file: String) -> void
|
|
@@ -16,17 +29,35 @@ module Ibex
|
|
|
16
29
|
# @rbs () -> Array[Token]
|
|
17
30
|
def tokenize: () -> Array[Token]
|
|
18
31
|
|
|
32
|
+
# @rbs () -> SourceDocument
|
|
33
|
+
def tokenize_document: () -> SourceDocument
|
|
34
|
+
|
|
19
35
|
# @rbs () -> Token
|
|
20
36
|
def next_token: () -> Token
|
|
21
37
|
|
|
22
38
|
private
|
|
23
39
|
|
|
40
|
+
# @rbs () -> Token
|
|
41
|
+
def scan_from_cursor: () -> Token
|
|
42
|
+
|
|
24
43
|
# @rbs (String character) -> Token
|
|
25
44
|
def scan_regular_token: (String character) -> Token
|
|
26
45
|
|
|
27
46
|
# @rbs () -> void
|
|
28
47
|
def skip_ignored: () -> void
|
|
29
48
|
|
|
49
|
+
# @rbs () -> void
|
|
50
|
+
def scan_whitespace: () -> void
|
|
51
|
+
|
|
52
|
+
# @rbs () -> bool
|
|
53
|
+
def newline?: () -> bool
|
|
54
|
+
|
|
55
|
+
# @rbs () -> void
|
|
56
|
+
def scan_newline: () -> void
|
|
57
|
+
|
|
58
|
+
# @rbs () -> void
|
|
59
|
+
def scan_line_comment: () -> void
|
|
60
|
+
|
|
30
61
|
# @rbs () -> void
|
|
31
62
|
def skip_block_comment: () -> void
|
|
32
63
|
|
|
@@ -39,6 +70,12 @@ module Ibex
|
|
|
39
70
|
# @rbs () -> Token
|
|
40
71
|
def scan_scope: () -> Token
|
|
41
72
|
|
|
73
|
+
# @rbs () -> Token
|
|
74
|
+
def scan_percent_directive: () -> Token
|
|
75
|
+
|
|
76
|
+
# @rbs () -> Token
|
|
77
|
+
def scan_node_directive: () -> Token
|
|
78
|
+
|
|
42
79
|
# @rbs () -> Token
|
|
43
80
|
def scan_identifier: () -> Token
|
|
44
81
|
|
|
@@ -48,14 +85,24 @@ module Ibex
|
|
|
48
85
|
# @rbs () -> Token
|
|
49
86
|
def scan_literal: () -> Token
|
|
50
87
|
|
|
88
|
+
# @rbs () -> Token
|
|
89
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
90
|
+
def scan_regexp: () -> Token
|
|
91
|
+
|
|
51
92
|
# @rbs () -> Token
|
|
52
93
|
def scan_punctuation: () -> Token
|
|
53
94
|
|
|
54
95
|
# @rbs (Symbol type, Regexp pattern) ?{ (String) -> token_value } -> Token
|
|
55
96
|
def scan_match: (Symbol type, Regexp pattern) ?{ (String) -> token_value } -> Token
|
|
56
97
|
|
|
57
|
-
# @rbs (Symbol type, token_value value, ?Location location) -> Token
|
|
58
|
-
def token: (Symbol type, token_value value, ?Location location) -> Token
|
|
98
|
+
# @rbs (Symbol type, token_value value, ?Location location, ?SourceSpan? span) -> Token
|
|
99
|
+
def token: (Symbol type, token_value value, ?Location location, ?SourceSpan? span) -> Token
|
|
100
|
+
|
|
101
|
+
# @rbs (Token token, SourcePosition start) -> void
|
|
102
|
+
def emit_token: (Token token, SourcePosition start) -> void
|
|
103
|
+
|
|
104
|
+
# @rbs (Symbol kind, SourcePosition start, ?token_type: Symbol?, ?token_index: Integer?) -> void
|
|
105
|
+
def emit_segment: (Symbol kind, SourcePosition start, ?token_type: Symbol?, ?token_index: Integer?) -> void
|
|
59
106
|
end
|
|
60
107
|
end
|
|
61
108
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/lexer_recovery.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
class Lexer
|
|
6
|
+
# Recover lexical failures while retaining every source byte.
|
|
7
|
+
# @rbs (?max_diagnostics: Integer) -> [SourceDocument, Array[Diagnostic]]
|
|
8
|
+
def tokenize_document_recovering: (?max_diagnostics: Integer) -> [ SourceDocument, Array[Diagnostic] ]
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
# @rbs (Exception error, capture: bool) -> Diagnostic?
|
|
13
|
+
def recover_lexical_error: (Exception error, capture: bool) -> Diagnostic?
|
|
14
|
+
|
|
15
|
+
# @rbs (Exception error, SourcePosition fallback) -> [Location, String]
|
|
16
|
+
def lexical_error_details: (Exception error, SourcePosition fallback) -> [ Location, String ]
|
|
17
|
+
|
|
18
|
+
# @rbs (SourcePosition start) -> void
|
|
19
|
+
def emit_invalid_segment: (SourcePosition start) -> void
|
|
20
|
+
|
|
21
|
+
# @rbs (Exception error, SourcePosition start) -> void
|
|
22
|
+
def advance_after_lexical_error: (Exception error, SourcePosition start) -> void
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module Frontend
|
|
5
5
|
# Parses the declaration section of a grammar.
|
|
6
|
+
# rubocop:disable Metrics/ModuleLength, Metrics/CyclomaticComplexity
|
|
7
|
+
# Bootstrap declarations intentionally mirror the generated frontend's complete declaration vocabulary.
|
|
6
8
|
module BootstrapParserDeclarations
|
|
7
9
|
DECLARATIONS: Array[String]
|
|
8
10
|
|
|
@@ -19,6 +21,9 @@ module Ibex
|
|
|
19
21
|
# @rbs () -> AST::declaration
|
|
20
22
|
def parse_declaration: () -> AST::declaration
|
|
21
23
|
|
|
24
|
+
# @rbs () -> AST::Include
|
|
25
|
+
def parse_import: () -> AST::Include
|
|
26
|
+
|
|
22
27
|
# @rbs () -> AST::Tokens
|
|
23
28
|
def parse_tokens: () -> AST::Tokens
|
|
24
29
|
|
|
@@ -34,18 +39,67 @@ module Ibex
|
|
|
34
39
|
# @rbs () -> AST::Expect
|
|
35
40
|
def parse_expect: () -> AST::Expect
|
|
36
41
|
|
|
42
|
+
# @rbs () -> AST::ExpectRR
|
|
43
|
+
def parse_expect_rr: () -> AST::ExpectRR
|
|
44
|
+
|
|
45
|
+
# @rbs () -> AST::Parameter
|
|
46
|
+
def parse_parameter: () -> AST::Parameter
|
|
47
|
+
|
|
48
|
+
# @rbs () -> AST::Printer
|
|
49
|
+
def parse_printer: () -> AST::Printer
|
|
50
|
+
|
|
37
51
|
# @rbs () -> AST::Start
|
|
38
52
|
def parse_start: () -> AST::Start
|
|
39
53
|
|
|
54
|
+
# @rbs () -> AST::Recovery
|
|
55
|
+
def parse_recovery: () -> AST::Recovery
|
|
56
|
+
|
|
57
|
+
# @rbs () -> AST::OnErrorReduce
|
|
58
|
+
def parse_on_error_reduce: () -> AST::OnErrorReduce
|
|
59
|
+
|
|
60
|
+
# @rbs () -> AST::GrammarTest
|
|
61
|
+
def parse_grammar_test: () -> AST::GrammarTest
|
|
62
|
+
|
|
63
|
+
# @rbs () -> AST::Lexer
|
|
64
|
+
def parse_lexer: () -> AST::Lexer
|
|
65
|
+
|
|
66
|
+
# @rbs () -> Array[AST::lexer_entry]
|
|
67
|
+
def parse_lexer_entries: () -> Array[AST::lexer_entry]
|
|
68
|
+
|
|
69
|
+
# @rbs () -> AST::lexer_entry
|
|
70
|
+
def parse_lexer_entry: () -> AST::lexer_entry
|
|
71
|
+
|
|
72
|
+
# @rbs () -> AST::LexerState
|
|
73
|
+
def parse_lexer_state: () -> AST::LexerState
|
|
74
|
+
|
|
75
|
+
# @rbs () -> Token
|
|
76
|
+
def expect_lexer_pattern: () -> Token
|
|
77
|
+
|
|
78
|
+
# @rbs (Symbol kind, Token marker, Token pattern, Token? action) -> AST::LexerRule
|
|
79
|
+
def build_bootstrap_lexer_rule: (Symbol kind, Token marker, Token pattern, Token? action) -> AST::LexerRule
|
|
80
|
+
|
|
40
81
|
# @rbs () -> AST::Convert
|
|
41
82
|
def parse_convert: () -> AST::Convert
|
|
42
83
|
|
|
84
|
+
# @rbs (singleton(AST::DisplayName) | singleton(AST::SemanticType) node_class, String feature) ->
|
|
85
|
+
# (AST::DisplayName | AST::SemanticType)
|
|
86
|
+
def parse_symbol_metadata: (singleton(AST::DisplayName) | singleton(AST::SemanticType) node_class, String feature) -> (AST::DisplayName | AST::SemanticType)
|
|
87
|
+
|
|
88
|
+
# @rbs () -> Token
|
|
89
|
+
def expect_metadata_value: () -> Token
|
|
90
|
+
|
|
43
91
|
# @rbs (Integer line) -> Array[Token]
|
|
44
92
|
def tokens_on_line: (Integer line) -> Array[Token]
|
|
45
93
|
|
|
46
94
|
# @rbs (Array[Token] tokens, Location location) -> String
|
|
47
95
|
def decode_conversion: (Array[Token] tokens, Location location) -> String
|
|
48
96
|
|
|
97
|
+
# @rbs (Token keyword, Token name, Token value, String feature) -> void
|
|
98
|
+
def validate_metadata_line: (Token keyword, Token name, Token value, String feature) -> void
|
|
99
|
+
|
|
100
|
+
# @rbs (Token token, String feature) -> String
|
|
101
|
+
def decode_quoted_literal: (Token token, String feature) -> String
|
|
102
|
+
|
|
49
103
|
# @rbs () -> bool
|
|
50
104
|
def declaration_start?: () -> bool
|
|
51
105
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/parser/parameters.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Parses extended-mode parameter lists and parameterized references during bootstrap.
|
|
6
|
+
module BootstrapParserParameters
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# @rbs (Token lhs) -> Array[String]
|
|
10
|
+
def parse_rule_parameters: (Token lhs) -> Array[String]
|
|
11
|
+
|
|
12
|
+
# @rbs () -> AST::item
|
|
13
|
+
def parse_parameterized_reference: () -> AST::item
|
|
14
|
+
|
|
15
|
+
# @rbs () -> bool
|
|
16
|
+
def parameterized_call?: () -> bool
|
|
17
|
+
|
|
18
|
+
# @rbs () -> bool
|
|
19
|
+
def parameterized_rule_start?: () -> bool
|
|
20
|
+
|
|
21
|
+
# @rbs (Array[Token] tail) -> bool
|
|
22
|
+
def parameter_definition_tail?: (Array[Token] tail) -> bool
|
|
23
|
+
|
|
24
|
+
# @rbs (Token left, Token right) -> bool
|
|
25
|
+
def adjacent_tokens?: (Token left, Token right) -> bool
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -17,6 +17,9 @@ module Ibex
|
|
|
17
17
|
# @rbs (Token lhs) -> AST::Alternative
|
|
18
18
|
def parse_alternative: (Token lhs) -> AST::Alternative
|
|
19
19
|
|
|
20
|
+
# @rbs () -> AST::NodeAnnotation?
|
|
21
|
+
def parse_node_annotation: () -> AST::NodeAnnotation?
|
|
22
|
+
|
|
20
23
|
# @rbs () -> AST::item
|
|
21
24
|
def parse_item: () -> AST::item
|
|
22
25
|
|
|
@@ -4,13 +4,79 @@ module Ibex
|
|
|
4
4
|
module Frontend
|
|
5
5
|
# Public grammar parser backed by Ibex's generated LR frontend.
|
|
6
6
|
class Parser
|
|
7
|
+
DEFAULT_MAX_DIAGNOSTICS: Integer
|
|
8
|
+
|
|
9
|
+
STRICT_LEXICAL_DIAGNOSTIC_LIMIT: Integer
|
|
10
|
+
|
|
7
11
|
attr_reader implementation: GeneratedParser
|
|
8
12
|
|
|
13
|
+
@lexical_diagnostics: Array[Diagnostic]
|
|
14
|
+
|
|
15
|
+
@mode: Symbol
|
|
16
|
+
|
|
17
|
+
@tokens: Array[Token]
|
|
18
|
+
|
|
19
|
+
@source_document_error_message: String?
|
|
20
|
+
|
|
21
|
+
@parse_error_message: String?
|
|
22
|
+
|
|
23
|
+
@parsed_node: AST::Root | AST::Fragment | nil
|
|
24
|
+
|
|
25
|
+
@parsed_document: SourceDocument?
|
|
26
|
+
|
|
27
|
+
@source_document: SourceDocument?
|
|
28
|
+
|
|
9
29
|
# @rbs (String | Array[Token] source, ?file: String, ?mode: Symbol) -> void
|
|
10
30
|
def initialize: (String | Array[Token] source, ?file: String, ?mode: Symbol) -> void
|
|
11
31
|
|
|
12
32
|
# @rbs () -> AST::Root
|
|
13
33
|
def parse: () -> AST::Root
|
|
34
|
+
|
|
35
|
+
# Parse an explicit fragment without resolving its includes.
|
|
36
|
+
# @rbs () -> AST::Fragment
|
|
37
|
+
def parse_fragment: () -> AST::Fragment
|
|
38
|
+
|
|
39
|
+
# Parse the grammar and return its lossless source model.
|
|
40
|
+
# @rbs () -> SourceDocument
|
|
41
|
+
def parse_document: () -> SourceDocument
|
|
42
|
+
|
|
43
|
+
# Parse either a root grammar or an explicit fragment and return its lossless source model.
|
|
44
|
+
# @rbs () -> SourceDocument
|
|
45
|
+
def parse_source_document: () -> SourceDocument
|
|
46
|
+
|
|
47
|
+
# Parse with conservative boundary recovery and collect multiple errors.
|
|
48
|
+
# @rbs (?max_diagnostics: Integer) -> ParseResult
|
|
49
|
+
def parse_with_diagnostics: (?max_diagnostics: Integer) -> ParseResult
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
# @rbs () -> SourceDocument
|
|
54
|
+
def source_document!: () -> SourceDocument
|
|
55
|
+
|
|
56
|
+
# @rbs () -> (AST::Root | AST::Fragment)
|
|
57
|
+
def parse_node: () -> (AST::Root | AST::Fragment)
|
|
58
|
+
|
|
59
|
+
# @rbs (AST::Root | AST::Fragment node) -> (AST::Root | AST::Fragment)
|
|
60
|
+
def enrich_rule_documentation: (AST::Root | AST::Fragment node) -> (AST::Root | AST::Fragment)
|
|
61
|
+
|
|
62
|
+
# @rbs (AST::Root | AST::Fragment | nil node, Array[Diagnostic] diagnostics) ->
|
|
63
|
+
# [AST::Root?, Array[Diagnostic]]
|
|
64
|
+
def root_diagnostic_result: (AST::Root | AST::Fragment | nil node, Array[Diagnostic] diagnostics) -> [ AST::Root?, Array[Diagnostic] ]
|
|
65
|
+
|
|
66
|
+
# @rbs (String source, String file) -> Array[Token]
|
|
67
|
+
def tokenize_source: (String source, String file) -> Array[Token]
|
|
68
|
+
|
|
69
|
+
# @rbs (Integer max_diagnostics) -> Array[Diagnostic]
|
|
70
|
+
def lexical_diagnostics_for: (Integer max_diagnostics) -> Array[Diagnostic]
|
|
71
|
+
|
|
72
|
+
# @rbs (Array[Diagnostic] lexical, Array[Diagnostic] syntax, Integer limit) -> Array[Diagnostic]
|
|
73
|
+
def merge_diagnostics: (Array[Diagnostic] lexical, Array[Diagnostic] syntax, Integer limit) -> Array[Diagnostic]
|
|
74
|
+
|
|
75
|
+
# @rbs (Diagnostic diagnostic) -> [String, String, Integer, Integer, String]
|
|
76
|
+
def diagnostic_key: (Diagnostic diagnostic) -> [ String, String, Integer, Integer, String ]
|
|
77
|
+
|
|
78
|
+
# @rbs (Diagnostic diagnostic) -> [String, Integer, Integer, String, String]
|
|
79
|
+
def diagnostic_sort_key: (Diagnostic diagnostic) -> [ String, Integer, Integer, String, String ]
|
|
14
80
|
end
|
|
15
81
|
end
|
|
16
82
|
end
|
|
@@ -6,11 +6,22 @@ module Ibex
|
|
|
6
6
|
module Regenerator
|
|
7
7
|
GRAMMAR_PATH: String
|
|
8
8
|
|
|
9
|
+
SHADOW_GRAMMAR_PATH: String
|
|
10
|
+
|
|
9
11
|
# @rbs () -> String
|
|
10
12
|
def self?.generate: () -> String
|
|
11
13
|
|
|
14
|
+
# Build the non-published parameterized/inline grammar used to verify
|
|
15
|
+
# that preview composition features can describe the production
|
|
16
|
+
# frontend without changing its observable AST.
|
|
17
|
+
# @rbs () -> String
|
|
18
|
+
def self?.generate_shadow: () -> String
|
|
19
|
+
|
|
12
20
|
# @rbs () -> String
|
|
13
21
|
def self?.relative_grammar_path: () -> String
|
|
22
|
+
|
|
23
|
+
# @rbs () -> String
|
|
24
|
+
def self?.relative_shadow_grammar_path: () -> String
|
|
14
25
|
end
|
|
15
26
|
end
|
|
16
27
|
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/resolution.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Immutable result of resolving one root grammar and its fragment closure.
|
|
6
|
+
class Resolution
|
|
7
|
+
EMPTY_CHAIN: Array[IR::source_provenance]
|
|
8
|
+
|
|
9
|
+
attr_reader root: AST::Root
|
|
10
|
+
|
|
11
|
+
attr_reader root_path: String
|
|
12
|
+
|
|
13
|
+
attr_reader root_directory: String
|
|
14
|
+
|
|
15
|
+
attr_reader files: Array[String]
|
|
16
|
+
|
|
17
|
+
# @rbs (root: AST::Root, root_path: String, root_directory: String, files: Array[String],
|
|
18
|
+
# include_chains: Hash[AST::Rule, Array[IR::source_provenance]]) -> void
|
|
19
|
+
def initialize: (root: AST::Root, root_path: String, root_directory: String, files: Array[String], include_chains: Hash[AST::Rule, Array[IR::source_provenance]]) -> void
|
|
20
|
+
|
|
21
|
+
# @rbs (AST::Rule rule) -> Array[IR::source_provenance]
|
|
22
|
+
def include_chain_for: (AST::Rule rule) -> Array[IR::source_provenance]
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
# @rbs (untyped value) -> untyped
|
|
27
|
+
def deep_freeze_ast: (untyped value) -> untyped
|
|
28
|
+
|
|
29
|
+
# @rbs (IR::source_provenance entry) -> IR::source_provenance
|
|
30
|
+
def copy_provenance: (IR::source_provenance entry) -> IR::source_provenance
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/resolver.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# An actual filesystem read failure while resolving a grammar closure.
|
|
6
|
+
class ResolutionIOError < Ibex::Error
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Loads an explicit root grammar and resolves its extended-mode fragment graph.
|
|
10
|
+
class Resolver
|
|
11
|
+
GLOB_CHARACTERS: Regexp
|
|
12
|
+
|
|
13
|
+
WINDOWS_ABSOLUTE: Regexp
|
|
14
|
+
|
|
15
|
+
@attempted_paths: Array[String]
|
|
16
|
+
|
|
17
|
+
@include_chains: Hash[AST::Rule, Array[IR::source_provenance]]
|
|
18
|
+
|
|
19
|
+
@loaded: Hash[String, bool]
|
|
20
|
+
|
|
21
|
+
@visiting: Array[String]
|
|
22
|
+
|
|
23
|
+
@files: Array[String]
|
|
24
|
+
|
|
25
|
+
@root_directory: String
|
|
26
|
+
|
|
27
|
+
@root_path: String
|
|
28
|
+
|
|
29
|
+
@loader: SourceLoader
|
|
30
|
+
|
|
31
|
+
@mode: Symbol
|
|
32
|
+
|
|
33
|
+
@input_path: String
|
|
34
|
+
|
|
35
|
+
attr_reader attempted_paths: Array[String]
|
|
36
|
+
|
|
37
|
+
# @rbs (String path, ?mode: Symbol, ?loader: SourceLoader) -> void
|
|
38
|
+
def initialize: (String path, ?mode: Symbol, ?loader: SourceLoader) -> void
|
|
39
|
+
|
|
40
|
+
# @rbs () -> Resolution
|
|
41
|
+
def resolve: () -> Resolution
|
|
42
|
+
|
|
43
|
+
# @rbs () -> Array[String]
|
|
44
|
+
def dependencies: () -> Array[String]
|
|
45
|
+
|
|
46
|
+
# Source bytes actually consumed by the parser, in resolution order.
|
|
47
|
+
# @rbs () -> Array[GenerationInput]
|
|
48
|
+
def source_records: () -> Array[GenerationInput]
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
# @rbs () -> void
|
|
53
|
+
def prepare_resolution: () -> void
|
|
54
|
+
|
|
55
|
+
# @rbs () -> String
|
|
56
|
+
def canonical_root: () -> String
|
|
57
|
+
|
|
58
|
+
# @rbs (String path) -> AST::Root
|
|
59
|
+
def parse_root: (String path) -> AST::Root
|
|
60
|
+
|
|
61
|
+
# @rbs (String path) -> AST::Fragment
|
|
62
|
+
def parse_fragment: (String path) -> AST::Fragment
|
|
63
|
+
|
|
64
|
+
# @rbs (AST::Root | AST::Fragment node, Array[IR::source_provenance] chain) ->
|
|
65
|
+
# [Array[AST::declaration], Array[AST::Rule]]
|
|
66
|
+
def expand_node: (AST::Root | AST::Fragment node, Array[IR::source_provenance] chain) -> [ Array[AST::declaration], Array[AST::Rule] ]
|
|
67
|
+
|
|
68
|
+
# @rbs (AST::Include include_node, Array[IR::source_provenance] chain) ->
|
|
69
|
+
# [Array[AST::declaration], Array[AST::Rule]]
|
|
70
|
+
def expand_include: (AST::Include include_node, Array[IR::source_provenance] chain) -> [ Array[AST::declaration], Array[AST::Rule] ]
|
|
71
|
+
|
|
72
|
+
# @rbs (AST::Include include_node) -> String
|
|
73
|
+
def canonical_include: (AST::Include include_node) -> String
|
|
74
|
+
|
|
75
|
+
# @rbs (AST::Include include_node) -> void
|
|
76
|
+
def validate_include_path: (AST::Include include_node) -> void
|
|
77
|
+
|
|
78
|
+
# @rbs (String path) -> bool
|
|
79
|
+
def inside_root?: (String path) -> bool
|
|
80
|
+
|
|
81
|
+
# @rbs (AST::Include include_node, String target) -> void
|
|
82
|
+
def reject_cycle: (AST::Include include_node, String target) -> void
|
|
83
|
+
|
|
84
|
+
# @rbs (String file) -> IR::source_provenance
|
|
85
|
+
def source_provenance: (String file) -> IR::source_provenance
|
|
86
|
+
|
|
87
|
+
# @rbs (AST::Include include_node, String message) -> bot
|
|
88
|
+
def fail_include: (AST::Include include_node, String message) -> bot
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/rule_documentation.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Attaches immediately preceding lossless line-comment blocks to parsed rules.
|
|
6
|
+
class RuleDocumentation
|
|
7
|
+
EMPTY_SEGMENTS: Array[Segment]
|
|
8
|
+
|
|
9
|
+
# @rbs (AST::Root | AST::Fragment node, SourceDocument document) -> (AST::Root | AST::Fragment)
|
|
10
|
+
def self.enrich: (AST::Root | AST::Fragment node, SourceDocument document) -> (AST::Root | AST::Fragment)
|
|
11
|
+
|
|
12
|
+
# @rbs (SourceDocument document) -> void
|
|
13
|
+
def initialize: (SourceDocument document) -> void
|
|
14
|
+
|
|
15
|
+
# @rbs (AST::Root | AST::Fragment node) -> (AST::Root | AST::Fragment)
|
|
16
|
+
def enrich: (AST::Root | AST::Fragment node) -> (AST::Root | AST::Fragment)
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
# @rbs (AST::Rule rule) -> AST::Rule
|
|
21
|
+
def documented_rule: (AST::Rule rule) -> AST::Rule
|
|
22
|
+
|
|
23
|
+
# @rbs (AST::Rule rule) -> Integer
|
|
24
|
+
def documentation_anchor: (AST::Rule rule) -> Integer
|
|
25
|
+
|
|
26
|
+
# @rbs (Integer rule_line) -> String?
|
|
27
|
+
def documentation_before: (Integer rule_line) -> String?
|
|
28
|
+
|
|
29
|
+
# @rbs (Integer line) -> String?
|
|
30
|
+
def documentation_line: (Integer line) -> String?
|
|
31
|
+
|
|
32
|
+
# @rbs (Segment segment, Segment comment) -> bool
|
|
33
|
+
def documentation_line_segment?: (Segment segment, Segment comment) -> bool
|
|
34
|
+
|
|
35
|
+
# @rbs (SourceDocument document) -> Hash[Integer, Array[Segment]]
|
|
36
|
+
def index_segments: (SourceDocument document) -> Hash[Integer, Array[Segment]]
|
|
37
|
+
|
|
38
|
+
# @rbs (Segment segment) -> Array[Integer]
|
|
39
|
+
def covered_lines: (Segment segment) -> Array[Integer]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -23,15 +23,17 @@ module Ibex
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# A grammar token and its source coordinate.
|
|
26
|
-
class Token < Struct[Symbol | token_value | Location]
|
|
26
|
+
class Token < Struct[Symbol | token_value | Location | SourceSpan?]
|
|
27
27
|
attr_accessor type(): Symbol
|
|
28
28
|
|
|
29
29
|
attr_accessor value(): token_value
|
|
30
30
|
|
|
31
31
|
attr_accessor location(): Location
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
attr_accessor span(): SourceSpan?
|
|
34
|
+
|
|
35
|
+
def self.new: (?type: Symbol, ?value: token_value, ?location: Location, ?span: SourceSpan?) -> instance
|
|
36
|
+
| ({ ?type: Symbol, ?value: token_value, ?location: Location, ?span: SourceSpan? }) -> instance
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
class Token
|
|
@@ -47,6 +49,8 @@ module Ibex
|
|
|
47
49
|
|
|
48
50
|
attr_reader index: Integer
|
|
49
51
|
|
|
52
|
+
attr_reader byte_offset: Integer
|
|
53
|
+
|
|
50
54
|
attr_reader line: Integer
|
|
51
55
|
|
|
52
56
|
attr_reader column: Integer
|
|
@@ -66,8 +70,37 @@ module Ibex
|
|
|
66
70
|
# @rbs () -> Location
|
|
67
71
|
def location: () -> Location
|
|
68
72
|
|
|
73
|
+
# @rbs () -> SourcePosition
|
|
74
|
+
def position: () -> SourcePosition
|
|
75
|
+
|
|
76
|
+
# @rbs (SourcePosition start) -> SourceSpan
|
|
77
|
+
def span_from: (SourcePosition start) -> SourceSpan
|
|
78
|
+
|
|
69
79
|
# @rbs (?Integer count) -> void
|
|
70
80
|
def advance: (?Integer count) -> void
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
# @rbs (Integer count) -> void
|
|
85
|
+
def advance_ascii: (Integer count) -> void
|
|
86
|
+
|
|
87
|
+
# @rbs (Integer count) -> void
|
|
88
|
+
def advance_utf8: (Integer count) -> void
|
|
89
|
+
|
|
90
|
+
# @rbs (Integer character_index) -> Integer
|
|
91
|
+
def byte_offset_for_character: (Integer character_index) -> Integer
|
|
92
|
+
|
|
93
|
+
# @rbs (Integer byte_offset, Integer from_index, Integer to_index) -> Integer
|
|
94
|
+
def walk_to_character: (Integer byte_offset, Integer from_index, Integer to_index) -> Integer
|
|
95
|
+
|
|
96
|
+
# @rbs (Integer byte_offset) -> Integer
|
|
97
|
+
def previous_character_byte_offset: (Integer byte_offset) -> Integer
|
|
98
|
+
|
|
99
|
+
# @rbs (Integer byte_offset) -> Integer
|
|
100
|
+
def utf8_character_width: (Integer byte_offset) -> Integer
|
|
101
|
+
|
|
102
|
+
# @rbs (Integer byte) -> bool
|
|
103
|
+
def continuation_byte?: (Integer byte) -> bool
|
|
71
104
|
end
|
|
72
105
|
end
|
|
73
106
|
end
|