ibex 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +89 -123
- data/docs/architecture.md +477 -31
- data/docs/bison-import.md +103 -0
- data/docs/comparison-policy.md +127 -0
- data/docs/configuration-model.md +59 -0
- data/docs/configuration-report.md +28 -0
- data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
- data/docs/conflict-explanation-study.md +62 -0
- data/docs/construction-profiling.md +157 -0
- data/docs/cst-migration.md +106 -0
- data/docs/cst.md +237 -0
- data/docs/decisions/0000-template.md +24 -0
- data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
- data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
- data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
- data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
- data/docs/decisions/0005-contained-grammar-composition.md +34 -0
- data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
- data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
- data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
- data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
- data/docs/decisions/0010-committed-runtime-observation.md +34 -0
- data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
- data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
- data/docs/decisions/0013-transactional-generation-publication.md +37 -0
- data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
- data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
- data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
- data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
- data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
- data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
- data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
- data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
- data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
- data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
- data/docs/decisions/0024-direct-ielr-construction.md +42 -0
- data/docs/decisions/README.md +74 -0
- data/docs/declarative-configuration.md +262 -0
- data/docs/development.md +306 -0
- data/docs/direct-ielr-decision.md +120 -0
- data/docs/direct-multi-entry-decision.md +82 -0
- data/docs/editor-setup.md +26 -0
- data/docs/error-ux-review-rubric-v1.md +117 -0
- data/docs/error-ux-reviews/v1/records/README.md +22 -0
- data/docs/error-ux-round2-review-status-v1.json +27 -0
- data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
- data/docs/error-ux-round2-v1.json +1581 -0
- data/docs/error-ux-round2.md +111 -0
- data/docs/error-ux.md +114 -0
- data/docs/getting-started.md +80 -0
- data/docs/grammar-reference.md +629 -18
- data/docs/ielr-design.md +43 -0
- data/docs/ielr.md +92 -0
- data/docs/ja/bison-import.md +51 -0
- data/docs/ja/stable-api.md +53 -0
- data/docs/lexer-construction-profile.md +109 -0
- data/docs/lexer-migration.md +56 -0
- data/docs/maturity.md +128 -0
- data/docs/project-site-strategy.md +54 -0
- data/docs/racc-migration-evidence.md +45 -0
- data/docs/racc-migration.md +45 -6
- data/docs/release-readiness.md +221 -0
- data/docs/repair-semantics.md +123 -0
- data/docs/runtime-abi-evolution.md +307 -0
- data/docs/stability.md +234 -0
- data/docs/status.md +43 -0
- data/docs/syntax-sessions.md +183 -0
- data/docs/table-artifact.md +125 -0
- data/docs/test-interactions.md +219 -0
- data/docs/verification-report.md +137 -0
- data/docs/verifier-trust-boundary.md +199 -0
- data/docs/workloads.md +132 -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/digraph.rb +128 -0
- data/lib/ibex/analysis/sets.rb +5 -4
- data/lib/ibex/analysis.rb +1 -0
- data/lib/ibex/artifact_set.rb +63 -0
- data/lib/ibex/bison_import/importer.rb +516 -0
- data/lib/ibex/bison_import/tokenizer.rb +260 -0
- data/lib/ibex/bison_import.rb +200 -0
- data/lib/ibex/bounded_subprocess.rb +171 -0
- data/lib/ibex/cli/ambiguity.rb +75 -0
- data/lib/ibex/cli/analysis.rb +134 -0
- data/lib/ibex/cli/bison_import.rb +121 -0
- data/lib/ibex/cli/config.rb +128 -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 +136 -0
- data/lib/ibex/cli/documentation.rb +70 -0
- data/lib/ibex/cli/equiv.rb +169 -0
- data/lib/ibex/cli/error_messages.rb +184 -0
- data/lib/ibex/cli/explain.rb +85 -0
- data/lib/ibex/cli/fix.rb +203 -0
- data/lib/ibex/cli/formatting.rb +387 -0
- data/lib/ibex/cli/fuzz.rb +200 -0
- data/lib/ibex/cli/fuzz_regressions.rb +145 -0
- data/lib/ibex/cli/generation_artifacts.rb +189 -0
- data/lib/ibex/cli/generation_error_messages.rb +39 -0
- data/lib/ibex/cli/grammar_tests.rb +140 -0
- data/lib/ibex/cli/ir_tools.rb +128 -0
- data/lib/ibex/cli/lsp.rb +33 -0
- data/lib/ibex/cli/outputs.rb +133 -23
- data/lib/ibex/cli/racc_migration.rb +87 -0
- data/lib/ibex/cli/reduce.rb +202 -0
- data/lib/ibex/cli/reduce_reporting.rb +71 -0
- data/lib/ibex/cli/samples.rb +118 -0
- data/lib/ibex/cli/verify.rb +116 -0
- data/lib/ibex/cli/watch.rb +104 -0
- data/lib/ibex/cli.rb +825 -55
- data/lib/ibex/codegen/action_locations.rb +103 -0
- data/lib/ibex/codegen/action_method_source.rb +209 -0
- data/lib/ibex/codegen/action_source.rb +119 -0
- data/lib/ibex/codegen/ambiguity.rb +174 -0
- data/lib/ibex/codegen/cst_metadata.rb +171 -0
- data/lib/ibex/codegen/documentation.rb +170 -0
- data/lib/ibex/codegen/explain.rb +380 -0
- data/lib/ibex/codegen/generated_action_abi.rb +293 -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 +331 -2
- data/lib/ibex/codegen/report.rb +67 -15
- data/lib/ibex/codegen/ruby.rb +305 -66
- data/lib/ibex/codegen/ruby_actions.rb +146 -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 +96 -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/configuration/analysis_grammar.rb +35 -0
- data/lib/ibex/configuration/explanation.rb +421 -0
- data/lib/ibex/configuration/inspector.rb +232 -0
- data/lib/ibex/configuration.rb +580 -0
- data/lib/ibex/coverage/collector.rb +198 -0
- data/lib/ibex/coverage/event_stream.rb +103 -0
- data/lib/ibex/coverage/report.rb +267 -0
- data/lib/ibex/coverage/runtime_event_validator.rb +169 -0
- data/lib/ibex/coverage.rb +13 -0
- data/lib/ibex/delta_reducer.rb +99 -0
- data/lib/ibex/diff.rb +140 -0
- data/lib/ibex/equiv/machine.rb +135 -0
- data/lib/ibex/equiv.rb +373 -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/fix.rb +557 -0
- data/lib/ibex/frontend/ast.rb +166 -7
- data/lib/ibex/frontend/bootstrap_parser.rb +40 -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 +453 -0
- data/lib/ibex/frontend/generated_parser.rb +644 -190
- data/lib/ibex/frontend/generated_parser_base.rb +170 -32
- data/lib/ibex/frontend/generated_parser_includes.rb +51 -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 +262 -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/parser_configuration_support.rb +56 -0
- data/lib/ibex/frontend/regenerator.rb +27 -1
- data/lib/ibex/frontend/resolution.rb +70 -0
- data/lib/ibex/frontend/resolver.rb +217 -0
- data/lib/ibex/frontend/rule_documentation.rb +104 -0
- data/lib/ibex/frontend/source_cursor.rb +133 -9
- 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 +89 -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 +244 -22
- 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 +18 -3
- data/lib/ibex/frontend.rb +14 -2
- data/lib/ibex/fuzz.rb +219 -0
- data/lib/ibex/generation_input.rb +57 -0
- data/lib/ibex/generation_manifest.rb +211 -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 +86 -11
- data/lib/ibex/ir/grammar_ir.rb +170 -26
- data/lib/ibex/ir/lexer_ir.rb +76 -0
- data/lib/ibex/ir/parser_contract.rb +135 -0
- data/lib/ibex/ir/serialize.rb +268 -50
- data/lib/ibex/ir/validator/automaton.rb +375 -0
- data/lib/ibex/ir/validator/base.rb +147 -0
- data/lib/ibex/ir/validator/grammar.rb +634 -0
- data/lib/ibex/ir/validator/lexer.rb +113 -0
- data/lib/ibex/ir/validator.rb +63 -0
- data/lib/ibex/ir.rb +71 -5
- data/lib/ibex/lalr/build_metrics.rb +71 -0
- data/lib/ibex/lalr/builder.rb +514 -52
- data/lib/ibex/lalr/conflict.rb +1 -0
- data/lib/ibex/lalr/conflict_search.rb +26 -9
- data/lib/ibex/lalr/counterexample.rb +38 -18
- data/lib/ibex/lalr/direct_lookaheads.rb +289 -0
- data/lib/ibex/lalr/goto_follows.rb +229 -0
- data/lib/ibex/lalr/ielr/annotator.rb +214 -0
- data/lib/ibex/lalr/ielr/bits.rb +28 -0
- data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
- data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
- data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
- data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
- data/lib/ibex/lalr/ielr/split_state.rb +20 -0
- data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
- data/lib/ibex/lalr/ielr_partition.rb +166 -0
- data/lib/ibex/lalr/inadequacy_report.rb +50 -0
- data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
- data/lib/ibex/lalr/lr0_collection.rb +121 -0
- data/lib/ibex/lalr/on_error_reductions.rb +74 -0
- data/lib/ibex/lalr/unreachable_states.rb +80 -0
- data/lib/ibex/lalr.rb +59 -1
- data/lib/ibex/location.rb +129 -0
- data/lib/ibex/lsp/document_handlers.rb +68 -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 +80 -0
- data/lib/ibex/lsp/navigation_handlers.rb +70 -0
- data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
- data/lib/ibex/lsp/position_codec.rb +113 -0
- data/lib/ibex/lsp/protocol_error.rb +33 -0
- data/lib/ibex/lsp/request_handlers.rb +46 -0
- data/lib/ibex/lsp/request_support.rb +94 -0
- data/lib/ibex/lsp/server.rb +148 -0
- data/lib/ibex/lsp/symbol_index.rb +241 -0
- data/lib/ibex/lsp/symbol_index_builder.rb +277 -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 +23 -0
- data/lib/ibex/lsp/transport.rb +128 -0
- data/lib/ibex/lsp/workspace.rb +128 -0
- data/lib/ibex/lsp/workspace_analyzer.rb +199 -0
- data/lib/ibex/lsp.rb +33 -0
- data/lib/ibex/messages/en.yml +28 -0
- data/lib/ibex/messages/ja.yml +28 -0
- data/lib/ibex/messages.rb +68 -0
- data/lib/ibex/metrics.rb +175 -0
- data/lib/ibex/normalize/declarations.rb +142 -7
- data/lib/ibex/normalize/diagnostics.rb +94 -24
- data/lib/ibex/normalize/expander.rb +64 -59
- data/lib/ibex/normalize/expression.rb +63 -40
- data/lib/ibex/normalize/grammar_builder.rb +26 -0
- data/lib/ibex/normalize/inline_expansion.rb +465 -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 +70 -0
- data/lib/ibex/normalize/parameter_lowering.rb +143 -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 +226 -0
- data/lib/ibex/normalize/parser_configuration.rb +70 -0
- data/lib/ibex/normalize/recovery_declarations.rb +84 -0
- data/lib/ibex/normalize.rb +172 -17
- 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 +97 -0
- data/lib/ibex/racc_migration.rb +12 -0
- data/lib/ibex/rake_task.rb +116 -0
- data/lib/ibex/samples.rb +216 -0
- data/lib/ibex/table_artifact/builder.rb +266 -0
- data/lib/ibex/table_artifact/cst_projection.rb +70 -0
- data/lib/ibex/table_artifact/document.rb +39 -0
- data/lib/ibex/table_artifact/executor.rb +187 -0
- data/lib/ibex/table_artifact/serializer.rb +57 -0
- data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
- data/lib/ibex/table_artifact/validator/support.rb +86 -0
- data/lib/ibex/table_artifact/validator/tables.rb +238 -0
- data/lib/ibex/table_artifact/validator.rb +253 -0
- data/lib/ibex/table_artifact.rb +88 -0
- data/lib/ibex/table_simulation/result.rb +55 -0
- data/lib/ibex/table_simulation/simulator.rb +253 -0
- data/lib/ibex/table_simulation/step.rb +62 -0
- data/lib/ibex/table_simulation/text.rb +31 -0
- data/lib/ibex/table_simulation.rb +13 -0
- data/lib/ibex/tables.rb +22 -69
- data/lib/ibex/verifiable_generation_bundle.rb +86 -0
- data/lib/ibex/verification_report/builder.rb +159 -0
- data/lib/ibex/verification_report/canonical_ir.rb +123 -0
- data/lib/ibex/verification_report/logical_path.rb +68 -0
- data/lib/ibex/verification_report/validator.rb +329 -0
- data/lib/ibex/verification_report.rb +69 -0
- data/lib/ibex/verify/action_correspondence.rb +138 -0
- data/lib/ibex/verify/language_witness.rb +295 -0
- data/lib/ibex/verify/reference_collection.rb +190 -0
- data/lib/ibex/verify/result.rb +73 -0
- data/lib/ibex/verify/verifier.rb +598 -0
- data/lib/ibex/verify.rb +15 -0
- data/lib/ibex/version.rb +1 -1
- data/lib/ibex/watch/runner.rb +181 -0
- data/lib/ibex/watch/source_snapshot.rb +98 -0
- data/lib/ibex/watch.rb +11 -0
- data/lib/ibex.rb +35 -1
- data/schema/automaton-ir-definitions.schema.json +401 -0
- data/schema/automaton-ir.schema.json +65 -0
- data/schema/benchmark-v1.schema.json +212 -0
- data/schema/benchmark-v2.schema.json +61 -0
- data/schema/bison-import-v1.schema.json +106 -0
- data/schema/conflict-explanation-review-v1.schema.json +196 -0
- data/schema/conflict-explanation-study-v1.schema.json +528 -0
- data/schema/construction-profile-v1.schema.json +779 -0
- data/schema/cst-v1.json +170 -0
- data/schema/diff-v1.schema.json +41 -0
- data/schema/direct-ielr-decision-v1.schema.json +200 -0
- data/schema/equiv-v1.schema.json +64 -0
- data/schema/error-ux-review-v1.schema.json +609 -0
- data/schema/error-ux-round2-review-v1.schema.json +191 -0
- data/schema/error-ux-round2-v1.schema.json +519 -0
- data/schema/error-ux-v1.schema.json +258 -0
- data/schema/explain-v1.schema.json +495 -0
- data/schema/fix-v1.schema.json +64 -0
- data/schema/fix-v2.schema.json +66 -0
- data/schema/fix-v3.schema.json +101 -0
- data/schema/frontend-diagnostics-v1.schema.json +154 -0
- data/schema/fuzz-regression-v1.schema.json +79 -0
- data/schema/fuzz-v1.schema.json +114 -0
- data/schema/generation-manifest-v1.schema.json +115 -0
- data/schema/grammar-ir-extensions.schema.json +734 -0
- data/schema/grammar-ir-foundation.schema.json +426 -0
- data/schema/grammar-ir.schema.json +271 -0
- data/schema/ielr-benchmark-v1.schema.json +85 -0
- data/schema/lexer-ir-v1.schema.json +215 -0
- data/schema/lexer-profile-v1.schema.json +491 -0
- data/schema/metrics-v1.schema.json +60 -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/reduce-v1.schema.json +22 -0
- data/schema/reduce-v2.schema.json +63 -0
- data/schema/runtime-coverage-v1.schema.json +86 -0
- data/schema/runtime-event-v1.schema.json +308 -0
- data/schema/table-artifact-v1.schema.json +377 -0
- data/schema/table-simulation-v1.schema.json +70 -0
- data/schema/verification-report-v1.schema.json +222 -0
- data/schema/verify-v1.schema.json +42 -0
- data/sig/ibex/analysis/digraph.rbs +19 -0
- data/sig/ibex/artifact_set.rbs +37 -0
- data/sig/ibex/bison_import/importer.rbs +140 -0
- data/sig/ibex/bison_import/tokenizer.rbs +91 -0
- data/sig/ibex/bison_import.rbs +95 -0
- data/sig/ibex/bounded_subprocess.rbs +76 -0
- data/sig/ibex/cli/ambiguity.rbs +28 -0
- data/sig/ibex/cli/analysis.rbs +43 -0
- data/sig/ibex/cli/bison_import.rbs +32 -0
- data/sig/ibex/cli/config.rbs +35 -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 +51 -0
- data/sig/ibex/cli/documentation.rbs +29 -0
- data/sig/ibex/cli/equiv.rbs +49 -0
- data/sig/ibex/cli/error_messages.rbs +63 -0
- data/sig/ibex/cli/explain.rbs +31 -0
- data/sig/ibex/cli/fix.rbs +53 -0
- data/sig/ibex/cli/formatting.rbs +107 -0
- data/sig/ibex/cli/fuzz.rbs +47 -0
- data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
- data/sig/ibex/cli/generation_artifacts.rbs +69 -0
- data/sig/ibex/cli/generation_error_messages.rbs +19 -0
- data/sig/ibex/cli/grammar_tests.rbs +48 -0
- data/sig/ibex/cli/ir_tools.rbs +39 -0
- data/sig/ibex/cli/lsp.rbs +14 -0
- data/sig/ibex/cli/outputs.rbs +26 -3
- data/sig/ibex/cli/racc_migration.rbs +30 -0
- data/sig/ibex/cli/reduce.rbs +60 -0
- data/sig/ibex/cli/reduce_reporting.rbs +27 -0
- data/sig/ibex/cli/samples.rbs +38 -0
- data/sig/ibex/cli/verify.rbs +28 -0
- data/sig/ibex/cli/watch.rbs +43 -0
- data/sig/ibex/cli.rbs +182 -9
- 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 +105 -0
- data/sig/ibex/codegen/generated_action_abi.rbs +105 -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 +86 -4
- data/sig/ibex/codegen/report.rbs +16 -8
- data/sig/ibex/codegen/ruby.rbs +105 -28
- 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 +27 -0
- data/sig/ibex/codegen/ruby_table_metadata.rbs +26 -0
- data/sig/ibex/codegen/ruby_value_printers.rbs +28 -0
- data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
- data/sig/ibex/configuration/explanation.rbs +195 -0
- data/sig/ibex/configuration/inspector.rbs +53 -0
- data/sig/ibex/configuration.rbs +242 -0
- data/sig/ibex/coverage/collector.rbs +78 -0
- data/sig/ibex/coverage/event_stream.rbs +44 -0
- data/sig/ibex/coverage/report.rbs +102 -0
- data/sig/ibex/coverage/runtime_event_validator.rbs +70 -0
- data/sig/ibex/coverage.rbs +7 -0
- data/sig/ibex/delta_reducer.rbs +38 -0
- data/sig/ibex/diff.rbs +47 -0
- data/sig/ibex/equiv/machine.rbs +54 -0
- data/sig/ibex/equiv.rbs +129 -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/fix.rbs +138 -0
- data/sig/ibex/frontend/ast.rbs +237 -22
- data/sig/ibex/frontend/bootstrap_parser.rbs +13 -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 +143 -0
- data/sig/ibex/frontend/generated_parser.rbs +228 -68
- data/sig/ibex/frontend/generated_parser_base.rbs +65 -12
- 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 +57 -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/parser_configuration_support.rbs +27 -0
- data/sig/ibex/frontend/regenerator.rbs +11 -0
- data/sig/ibex/frontend/resolution.rbs +34 -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 +38 -5
- 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 +56 -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 +83 -3
- data/sig/ibex/frontend/token_adapter/rule_state.rbs +20 -0
- data/sig/ibex/frontend/token_adapter.rbs +11 -2
- data/sig/ibex/frontend.rbs +1 -1
- data/sig/ibex/fuzz.rbs +71 -0
- data/sig/ibex/generation_input.rbs +37 -0
- data/sig/ibex/generation_manifest.rbs +70 -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 +35 -10
- data/sig/ibex/ir/grammar_ir.rbs +96 -22
- data/sig/ibex/ir/lexer_ir.rbs +57 -0
- data/sig/ibex/ir/parser_contract.rbs +69 -0
- data/sig/ibex/ir/serialize.rbs +75 -23
- data/sig/ibex/ir/validator/automaton.rbs +112 -0
- data/sig/ibex/ir/validator/base.rbs +69 -0
- data/sig/ibex/ir/validator/grammar.rbs +195 -0
- data/sig/ibex/ir/validator/lexer.rbs +37 -0
- data/sig/ibex/ir/validator.rbs +16 -0
- data/sig/ibex/ir.rbs +45 -5
- data/sig/ibex/lalr/build_metrics.rbs +60 -0
- data/sig/ibex/lalr/builder.rbs +150 -19
- data/sig/ibex/lalr/conflict_search.rbs +12 -5
- data/sig/ibex/lalr/counterexample.rbs +20 -14
- data/sig/ibex/lalr/direct_lookaheads.rbs +93 -0
- data/sig/ibex/lalr/goto_follows.rbs +89 -0
- data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
- data/sig/ibex/lalr/ielr/bits.rbs +14 -0
- data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
- data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
- data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
- data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
- data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
- data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
- data/sig/ibex/lalr/ielr_partition.rbs +71 -0
- data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
- data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
- data/sig/ibex/lalr/lr0_collection.rbs +50 -0
- data/sig/ibex/lalr/on_error_reductions.rbs +22 -0
- data/sig/ibex/lalr/unreachable_states.rbs +25 -0
- data/sig/ibex/lalr.rbs +17 -1
- 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 +33 -0
- data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
- data/sig/ibex/lsp/position_codec.rbs +44 -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 +77 -0
- data/sig/ibex/lsp/symbol_index_builder.rbs +88 -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 +31 -0
- data/sig/ibex/lsp/transport.rbs +47 -0
- data/sig/ibex/lsp/workspace.rbs +42 -0
- data/sig/ibex/lsp/workspace_analyzer.rbs +69 -0
- data/sig/ibex/lsp.rbs +7 -0
- data/sig/ibex/messages.rbs +26 -0
- data/sig/ibex/metrics.rbs +50 -0
- data/sig/ibex/normalize/declarations.rbs +31 -0
- data/sig/ibex/normalize/diagnostics.rbs +13 -4
- data/sig/ibex/normalize/expander.rbs +22 -16
- data/sig/ibex/normalize/expression.rbs +11 -9
- data/sig/ibex/normalize/grammar_builder.rbs +11 -0
- data/sig/ibex/normalize/inline_expansion.rbs +129 -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 +33 -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 +51 -0
- data/sig/ibex/normalize/parser_configuration.rbs +23 -0
- data/sig/ibex/normalize/recovery_declarations.rbs +24 -0
- data/sig/ibex/normalize.rbs +129 -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 +55 -0
- data/sig/ibex/racc_migration.rbs +8 -0
- data/sig/ibex/rake_task.rbs +51 -0
- data/sig/ibex/samples.rbs +60 -0
- data/sig/ibex/table_artifact/builder.rbs +93 -0
- data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
- data/sig/ibex/table_artifact/document.rbs +27 -0
- data/sig/ibex/table_artifact/executor.rbs +66 -0
- data/sig/ibex/table_artifact/serializer.rbs +25 -0
- data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
- data/sig/ibex/table_artifact/validator/support.rbs +46 -0
- data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
- data/sig/ibex/table_artifact/validator.rbs +66 -0
- data/sig/ibex/table_artifact.rbs +32 -0
- data/sig/ibex/table_simulation/result.rbs +36 -0
- data/sig/ibex/table_simulation/simulator.rbs +98 -0
- data/sig/ibex/table_simulation/step.rbs +42 -0
- data/sig/ibex/table_simulation/text.rbs +14 -0
- data/sig/ibex/table_simulation.rbs +7 -0
- data/sig/ibex/tables.rbs +10 -35
- data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
- data/sig/ibex/verification_report/builder.rbs +53 -0
- data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
- data/sig/ibex/verification_report/logical_path.rbs +34 -0
- data/sig/ibex/verification_report/validator.rbs +114 -0
- data/sig/ibex/verification_report.rbs +44 -0
- data/sig/ibex/verify/action_correspondence.rbs +50 -0
- data/sig/ibex/verify/language_witness.rbs +112 -0
- data/sig/ibex/verify/reference_collection.rbs +63 -0
- data/sig/ibex/verify/result.rbs +52 -0
- data/sig/ibex/verify/verifier.rbs +170 -0
- data/sig/ibex/verify.rbs +6 -0
- data/sig/ibex/watch/runner.rbs +58 -0
- data/sig/ibex/watch/source_snapshot.rbs +46 -0
- data/sig/ibex/watch.rbs +7 -0
- data/sig/ibex.rbs +2 -0
- metadata +524 -19
- 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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/generated_parser_includes.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Semantic builders for fragment and include frontend nodes.
|
|
6
|
+
module GeneratedParserIncludes
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# @rbs (Token keyword, Array[AST::declaration] declarations, Array[AST::Rule] rules,
|
|
10
|
+
# AST::user_code user_code) -> AST::Fragment
|
|
11
|
+
def build_fragment: (Token keyword, Array[AST::declaration] declarations, Array[AST::Rule] rules, AST::user_code user_code) -> AST::Fragment
|
|
12
|
+
|
|
13
|
+
# @rbs (Token keyword, Token path) -> AST::Include
|
|
14
|
+
def build_include: (Token keyword, Token path) -> AST::Include
|
|
15
|
+
|
|
16
|
+
# @rbs (Array[AST::declaration] declarations) -> void
|
|
17
|
+
def reject_fragment_root_declarations: (Array[AST::declaration] declarations) -> void
|
|
18
|
+
|
|
19
|
+
# @rbs (AST::declaration declaration) -> String?
|
|
20
|
+
def fragment_root_declaration_name: (AST::declaration declaration) -> String?
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/generated_parser_metadata.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Builds extended symbol metadata declarations for the generated grammar parser.
|
|
6
|
+
module GeneratedParserMetadata
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# @rbs (Token keyword, Token name, Token value) -> AST::DisplayName
|
|
10
|
+
def build_display_name: (Token keyword, Token name, Token value) -> AST::DisplayName
|
|
11
|
+
|
|
12
|
+
# @rbs (Token keyword, Token name, Token value) -> AST::SemanticType
|
|
13
|
+
def build_semantic_type: (Token keyword, Token name, Token value) -> AST::SemanticType
|
|
14
|
+
|
|
15
|
+
# @rbs (singleton(AST::DisplayName) | singleton(AST::SemanticType) node_class,
|
|
16
|
+
# Token keyword, Token name, Token value, String feature) -> (AST::DisplayName | AST::SemanticType)
|
|
17
|
+
def build_symbol_metadata: (singleton(AST::DisplayName) | singleton(AST::SemanticType) node_class, Token keyword, Token name, Token value, String feature) -> (AST::DisplayName | AST::SemanticType)
|
|
18
|
+
|
|
19
|
+
# @rbs (Token token, String feature) -> String
|
|
20
|
+
def decode_metadata_value: (Token token, String feature) -> String
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/generated_parser_parameters.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Parameter-list and parameterized-reference builders for the generated frontend.
|
|
6
|
+
module GeneratedParserParameters
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# @rbs (Token opening, Array[Token] parameters) -> [Token, Array[String]]
|
|
10
|
+
def build_rule_parameters: (Token opening, Array[Token] parameters) -> [ Token, Array[String] ]
|
|
11
|
+
|
|
12
|
+
# @rbs (Token? inline_marker, Token lhs, [Token, Array[String]]? parameter_clause,
|
|
13
|
+
# Array[AST::Alternative] alternatives) -> AST::Rule
|
|
14
|
+
def build_rule: (Token? inline_marker, Token lhs, [ Token, Array[String] ]? parameter_clause, Array[AST::Alternative] alternatives) -> AST::Rule
|
|
15
|
+
|
|
16
|
+
# @rbs (Token callee, Token opening, Array[AST::item] arguments,
|
|
17
|
+
# [Token, Token]? named_reference, Array[Token] suffixes) -> AST::item
|
|
18
|
+
def build_parameterized_reference: (Token callee, Token opening, Array[AST::item] arguments, [ Token, Token ]? named_reference, Array[Token] suffixes) -> AST::item
|
|
19
|
+
|
|
20
|
+
# @rbs (Token left, Token right, String message) -> void
|
|
21
|
+
def require_adjacency!: (Token left, Token right, String message) -> void
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
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,12 @@ module Ibex
|
|
|
19
21
|
# @rbs () -> AST::declaration
|
|
20
22
|
def parse_declaration: () -> AST::declaration
|
|
21
23
|
|
|
24
|
+
# @rbs () -> AST::ParserConfiguration
|
|
25
|
+
def parse_parser_configuration: () -> AST::ParserConfiguration
|
|
26
|
+
|
|
27
|
+
# @rbs () -> AST::Include
|
|
28
|
+
def parse_import: () -> AST::Include
|
|
29
|
+
|
|
22
30
|
# @rbs () -> AST::Tokens
|
|
23
31
|
def parse_tokens: () -> AST::Tokens
|
|
24
32
|
|
|
@@ -34,18 +42,67 @@ module Ibex
|
|
|
34
42
|
# @rbs () -> AST::Expect
|
|
35
43
|
def parse_expect: () -> AST::Expect
|
|
36
44
|
|
|
45
|
+
# @rbs () -> AST::ExpectRR
|
|
46
|
+
def parse_expect_rr: () -> AST::ExpectRR
|
|
47
|
+
|
|
48
|
+
# @rbs () -> AST::Parameter
|
|
49
|
+
def parse_parameter: () -> AST::Parameter
|
|
50
|
+
|
|
51
|
+
# @rbs () -> AST::Printer
|
|
52
|
+
def parse_printer: () -> AST::Printer
|
|
53
|
+
|
|
37
54
|
# @rbs () -> AST::Start
|
|
38
55
|
def parse_start: () -> AST::Start
|
|
39
56
|
|
|
57
|
+
# @rbs () -> AST::Recovery
|
|
58
|
+
def parse_recovery: () -> AST::Recovery
|
|
59
|
+
|
|
60
|
+
# @rbs () -> AST::OnErrorReduce
|
|
61
|
+
def parse_on_error_reduce: () -> AST::OnErrorReduce
|
|
62
|
+
|
|
63
|
+
# @rbs () -> AST::GrammarTest
|
|
64
|
+
def parse_grammar_test: () -> AST::GrammarTest
|
|
65
|
+
|
|
66
|
+
# @rbs () -> AST::Lexer
|
|
67
|
+
def parse_lexer: () -> AST::Lexer
|
|
68
|
+
|
|
69
|
+
# @rbs () -> Array[AST::lexer_entry]
|
|
70
|
+
def parse_lexer_entries: () -> Array[AST::lexer_entry]
|
|
71
|
+
|
|
72
|
+
# @rbs () -> AST::lexer_entry
|
|
73
|
+
def parse_lexer_entry: () -> AST::lexer_entry
|
|
74
|
+
|
|
75
|
+
# @rbs () -> AST::LexerState
|
|
76
|
+
def parse_lexer_state: () -> AST::LexerState
|
|
77
|
+
|
|
78
|
+
# @rbs () -> Token
|
|
79
|
+
def expect_lexer_pattern: () -> Token
|
|
80
|
+
|
|
81
|
+
# @rbs (Symbol kind, Token marker, Token pattern, Token? action) -> AST::LexerRule
|
|
82
|
+
def build_bootstrap_lexer_rule: (Symbol kind, Token marker, Token pattern, Token? action) -> AST::LexerRule
|
|
83
|
+
|
|
40
84
|
# @rbs () -> AST::Convert
|
|
41
85
|
def parse_convert: () -> AST::Convert
|
|
42
86
|
|
|
87
|
+
# @rbs (singleton(AST::DisplayName) | singleton(AST::SemanticType) node_class, String feature) ->
|
|
88
|
+
# (AST::DisplayName | AST::SemanticType)
|
|
89
|
+
def parse_symbol_metadata: (singleton(AST::DisplayName) | singleton(AST::SemanticType) node_class, String feature) -> (AST::DisplayName | AST::SemanticType)
|
|
90
|
+
|
|
91
|
+
# @rbs () -> Token
|
|
92
|
+
def expect_metadata_value: () -> Token
|
|
93
|
+
|
|
43
94
|
# @rbs (Integer line) -> Array[Token]
|
|
44
95
|
def tokens_on_line: (Integer line) -> Array[Token]
|
|
45
96
|
|
|
46
97
|
# @rbs (Array[Token] tokens, Location location) -> String
|
|
47
98
|
def decode_conversion: (Array[Token] tokens, Location location) -> String
|
|
48
99
|
|
|
100
|
+
# @rbs (Token keyword, Token name, Token value, String feature) -> void
|
|
101
|
+
def validate_metadata_line: (Token keyword, Token name, Token value, String feature) -> void
|
|
102
|
+
|
|
103
|
+
# @rbs (Token token, String feature) -> String
|
|
104
|
+
def decode_quoted_literal: (Token token, String feature) -> String
|
|
105
|
+
|
|
49
106
|
# @rbs () -> bool
|
|
50
107
|
def declaration_start?: () -> bool
|
|
51
108
|
|
|
@@ -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
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/parser_configuration_support.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Shares the closed parser-declaration semantics between bootstrap and generated frontends.
|
|
6
|
+
module ParserConfigurationSupport
|
|
7
|
+
private def token_string: (Token) -> String
|
|
8
|
+
|
|
9
|
+
private def fail_at: (Location, String) -> bot
|
|
10
|
+
|
|
11
|
+
private def extended_only!: (Location, String) -> void
|
|
12
|
+
|
|
13
|
+
PARSER_SETTING_VALUES: Hash[String, Array[String]]
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
# @rbs (Token key, Token value) -> AST::ParserSetting
|
|
18
|
+
def build_parser_setting: (Token key, Token value) -> AST::ParserSetting
|
|
19
|
+
|
|
20
|
+
# @rbs (Token keyword, Array[AST::ParserSetting] settings) -> AST::ParserConfiguration
|
|
21
|
+
def build_parser_configuration: (Token keyword, Array[AST::ParserSetting] settings) -> AST::ParserConfiguration
|
|
22
|
+
|
|
23
|
+
# @rbs (Array[AST::declaration] declarations) -> void
|
|
24
|
+
def validate_root_parser_configuration: (Array[AST::declaration] declarations) -> void
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
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,34 @@
|
|
|
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
|
+
# AST payloads are recursively heterogeneous and are only traversed to freeze them.
|
|
27
|
+
# @rbs (Object? value) -> Object?
|
|
28
|
+
def deep_freeze_ast: (Object? value) -> Object?
|
|
29
|
+
|
|
30
|
+
# @rbs (IR::source_provenance entry) -> IR::source_provenance
|
|
31
|
+
def copy_provenance: (IR::source_provenance entry) -> IR::source_provenance
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
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
|