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
data/sig/ibex/frontend/ast.rbs
CHANGED
|
@@ -2,25 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module Frontend
|
|
5
|
+
# Keeps the public Rule constructor compatible with ASTs built before parameters and inline rules existed.
|
|
6
|
+
module ASTRuleDefaults
|
|
7
|
+
# @rbs (*untyped arguments, **untyped keywords) -> void
|
|
8
|
+
def initialize: (*untyped arguments, **untyped keywords) -> void
|
|
9
|
+
end
|
|
10
|
+
|
|
5
11
|
# Grammar frontend node types.
|
|
12
|
+
# rubocop:disable Metrics/ModuleLength -- the public node vocabulary is intentionally kept together.
|
|
6
13
|
module AST
|
|
7
|
-
type
|
|
14
|
+
type symbol_metadata = DisplayName | SemanticType
|
|
15
|
+
|
|
16
|
+
type declaration = Include | Tokens | Precedence | Options | Expect | ExpectRR | Start | Recovery | OnErrorReduce | GrammarTest | Lexer | Convert | Parameter | Printer | ParserConfiguration | symbol_metadata
|
|
8
17
|
|
|
9
|
-
type
|
|
18
|
+
type lexer_entry = LexerRule | LexerState
|
|
19
|
+
|
|
20
|
+
type item = SymbolReference | ParameterizedReference | InlineAction | Optional | Star | Plus | Group | SeparatedList | Empty
|
|
10
21
|
|
|
11
22
|
type user_code = Hash[String, Array[UserCode]]
|
|
12
23
|
|
|
24
|
+
class Rule < Struct[String | Array[String] | Array[Alternative] | Location | String? | bool]
|
|
25
|
+
attr_accessor lhs: String
|
|
26
|
+
attr_accessor parameters: Array[String]
|
|
27
|
+
attr_accessor alternatives: Array[Alternative]
|
|
28
|
+
attr_accessor loc: Location
|
|
29
|
+
attr_accessor documentation: String?
|
|
30
|
+
attr_accessor inline: bool
|
|
31
|
+
def self.new: (?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool?) -> instance
|
|
32
|
+
| ({ ?lhs: String, ?parameters: Array[String]?, ?alternatives: Array[Alternative], ?loc: Location, ?documentation: String?, ?inline: bool? }) -> instance
|
|
33
|
+
end
|
|
34
|
+
|
|
13
35
|
# Adds deterministic, recursively serializable hashes to Struct nodes.
|
|
14
|
-
# @rbs module-self Struct[
|
|
15
|
-
module Node : Struct[
|
|
16
|
-
|
|
36
|
+
# @rbs module-self Struct[Object?]
|
|
37
|
+
module Node : Struct[Object?]
|
|
38
|
+
# @rbs () -> Hash[Symbol, untyped]
|
|
39
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
17
40
|
|
|
18
41
|
private
|
|
19
42
|
|
|
43
|
+
# @rbs (untyped value) -> untyped
|
|
20
44
|
def serialize: (untyped value) -> untyped
|
|
21
45
|
end
|
|
22
46
|
|
|
23
|
-
class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location]
|
|
47
|
+
class Root < Struct[String | String? | Array[declaration] | Array[Rule] | user_code | Location | bool? | Location?]
|
|
24
48
|
attr_accessor class_name(): String
|
|
25
49
|
|
|
26
50
|
attr_accessor superclass(): String?
|
|
@@ -33,17 +57,45 @@ module Ibex
|
|
|
33
57
|
|
|
34
58
|
attr_accessor loc(): Location
|
|
35
59
|
|
|
36
|
-
|
|
37
|
-
|
|
60
|
+
attr_accessor extended(): bool?
|
|
61
|
+
|
|
62
|
+
attr_accessor cst(): bool?
|
|
63
|
+
|
|
64
|
+
attr_accessor extended_loc(): Location?
|
|
65
|
+
|
|
66
|
+
def self.new: (?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location?) -> instance
|
|
67
|
+
| ({ ?class_name: String, ?superclass: String?, ?declarations: Array[declaration], ?rules: Array[Rule], ?user_code: user_code, ?loc: Location, ?extended: bool?, ?cst: bool?, ?extended_loc: Location? }) -> instance
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
class Fragment < Struct[Array[declaration] | Array[Rule] | Location]
|
|
71
|
+
attr_accessor declarations(): Array[declaration]
|
|
72
|
+
|
|
73
|
+
attr_accessor rules(): Array[Rule]
|
|
74
|
+
|
|
75
|
+
attr_accessor loc(): Location
|
|
76
|
+
|
|
77
|
+
def self.new: (?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location) -> instance
|
|
78
|
+
| ({ ?declarations: Array[declaration], ?rules: Array[Rule], ?loc: Location }) -> instance
|
|
38
79
|
end
|
|
39
80
|
|
|
40
|
-
class
|
|
81
|
+
class Include < Struct[String | Location]
|
|
82
|
+
attr_accessor path(): String
|
|
83
|
+
|
|
84
|
+
attr_accessor loc(): Location
|
|
85
|
+
|
|
86
|
+
def self.new: (?path: String, ?loc: Location) -> instance
|
|
87
|
+
| ({ ?path: String, ?loc: Location }) -> instance
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
class Tokens < Struct[Array[String] | Hash[String, String]? | Location]
|
|
41
91
|
attr_accessor names(): Array[String]
|
|
42
92
|
|
|
93
|
+
attr_accessor aliases(): Hash[String, String]?
|
|
94
|
+
|
|
43
95
|
attr_accessor loc(): Location
|
|
44
96
|
|
|
45
|
-
def self.new: (?names: Array[String], ?loc: Location) -> instance
|
|
46
|
-
| ({ ?names: Array[String], ?loc: Location }) -> instance
|
|
97
|
+
def self.new: (?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location) -> instance
|
|
98
|
+
| ({ ?names: Array[String], ?aliases: Hash[String, String]?, ?loc: Location }) -> instance
|
|
47
99
|
end
|
|
48
100
|
|
|
49
101
|
class Precedence < Struct[Symbol | Array[PrecedenceLevel] | Location]
|
|
@@ -86,13 +138,88 @@ module Ibex
|
|
|
86
138
|
| ({ ?conflicts: Integer, ?loc: Location }) -> instance
|
|
87
139
|
end
|
|
88
140
|
|
|
89
|
-
class
|
|
141
|
+
class ExpectRR < Struct[Integer | Location]
|
|
142
|
+
attr_accessor conflicts(): Integer
|
|
143
|
+
|
|
144
|
+
attr_accessor loc(): Location
|
|
145
|
+
|
|
146
|
+
def self.new: (?conflicts: Integer, ?loc: Location) -> instance
|
|
147
|
+
| ({ ?conflicts: Integer, ?loc: Location }) -> instance
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
class Start < Struct[Array[String] | Location]
|
|
151
|
+
attr_accessor names(): Array[String]
|
|
152
|
+
|
|
153
|
+
attr_accessor loc(): Location
|
|
154
|
+
|
|
155
|
+
def self.new: (?names: Array[String], ?loc: Location) -> instance
|
|
156
|
+
| ({ ?names: Array[String], ?loc: Location }) -> instance
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
class Recovery < Struct[Array[String] | Location]
|
|
160
|
+
attr_accessor sync_tokens(): Array[String]
|
|
161
|
+
|
|
162
|
+
attr_accessor loc(): Location
|
|
163
|
+
|
|
164
|
+
def self.new: (?sync_tokens: Array[String], ?loc: Location) -> instance
|
|
165
|
+
| ({ ?sync_tokens: Array[String], ?loc: Location }) -> instance
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
class OnErrorReduce < Struct[Array[String] | Location]
|
|
169
|
+
attr_accessor names(): Array[String]
|
|
170
|
+
|
|
171
|
+
attr_accessor loc(): Location
|
|
172
|
+
|
|
173
|
+
def self.new: (?names: Array[String], ?loc: Location) -> instance
|
|
174
|
+
| ({ ?names: Array[String], ?loc: Location }) -> instance
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
class GrammarTest < Struct[Symbol | String | Location]
|
|
178
|
+
attr_accessor expectation(): Symbol
|
|
179
|
+
|
|
180
|
+
attr_accessor source(): String
|
|
181
|
+
|
|
182
|
+
attr_accessor loc(): Location
|
|
183
|
+
|
|
184
|
+
def self.new: (?expectation: Symbol, ?source: String, ?loc: Location) -> instance
|
|
185
|
+
| ({ ?expectation: Symbol, ?source: String, ?loc: Location }) -> instance
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
class Lexer < Struct[Array[lexer_entry] | Location]
|
|
189
|
+
attr_accessor definitions(): Array[lexer_entry]
|
|
190
|
+
|
|
191
|
+
attr_accessor loc(): Location
|
|
192
|
+
|
|
193
|
+
def self.new: (?definitions: Array[lexer_entry], ?loc: Location) -> instance
|
|
194
|
+
| ({ ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
class LexerRule < Struct[Symbol | String? | String | Location]
|
|
198
|
+
attr_accessor kind(): Symbol
|
|
199
|
+
|
|
200
|
+
attr_accessor token(): String?
|
|
201
|
+
|
|
202
|
+
attr_accessor pattern(): String
|
|
203
|
+
|
|
204
|
+
attr_accessor pattern_kind(): Symbol
|
|
205
|
+
|
|
206
|
+
attr_accessor action(): String?
|
|
207
|
+
|
|
208
|
+
attr_accessor loc(): Location
|
|
209
|
+
|
|
210
|
+
def self.new: (?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location) -> instance
|
|
211
|
+
| ({ ?kind: Symbol, ?token: String?, ?pattern: String, ?pattern_kind: Symbol, ?action: String?, ?loc: Location }) -> instance
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
class LexerState < Struct[String | Array[lexer_entry] | Location]
|
|
90
215
|
attr_accessor name(): String
|
|
91
216
|
|
|
217
|
+
attr_accessor definitions(): Array[lexer_entry]
|
|
218
|
+
|
|
92
219
|
attr_accessor loc(): Location
|
|
93
220
|
|
|
94
|
-
def self.new: (?name: String, ?loc: Location) -> instance
|
|
95
|
-
| ({ ?name: String, ?loc: Location }) -> instance
|
|
221
|
+
def self.new: (?name: String, ?definitions: Array[lexer_entry], ?loc: Location) -> instance
|
|
222
|
+
| ({ ?name: String, ?definitions: Array[lexer_entry], ?loc: Location }) -> instance
|
|
96
223
|
end
|
|
97
224
|
|
|
98
225
|
class Convert < Struct[Array[Conversion] | Location]
|
|
@@ -115,28 +242,96 @@ module Ibex
|
|
|
115
242
|
| ({ ?name: String, ?expression: String, ?loc: Location }) -> instance
|
|
116
243
|
end
|
|
117
244
|
|
|
118
|
-
class
|
|
119
|
-
attr_accessor
|
|
245
|
+
class DisplayName < Struct[String | Location]
|
|
246
|
+
attr_accessor name(): String
|
|
247
|
+
|
|
248
|
+
attr_accessor value(): String
|
|
249
|
+
|
|
250
|
+
attr_accessor loc(): Location
|
|
251
|
+
|
|
252
|
+
def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
|
|
253
|
+
| ({ ?name: String, ?value: String, ?loc: Location }) -> instance
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
class SemanticType < Struct[String | Location]
|
|
257
|
+
attr_accessor name(): String
|
|
258
|
+
|
|
259
|
+
attr_accessor value(): String
|
|
260
|
+
|
|
261
|
+
attr_accessor loc(): Location
|
|
262
|
+
|
|
263
|
+
def self.new: (?name: String, ?value: String, ?loc: Location) -> instance
|
|
264
|
+
| ({ ?name: String, ?value: String, ?loc: Location }) -> instance
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
class Parameter < Struct[String | String? | Location]
|
|
268
|
+
attr_accessor name(): String
|
|
269
|
+
|
|
270
|
+
attr_accessor semantic_type(): String?
|
|
271
|
+
|
|
272
|
+
attr_accessor loc(): Location
|
|
273
|
+
|
|
274
|
+
def self.new: (?name: String, ?semantic_type: String?, ?loc: Location) -> instance
|
|
275
|
+
| ({ ?name: String, ?semantic_type: String?, ?loc: Location }) -> instance
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
class Printer < Struct[String | Location]
|
|
279
|
+
attr_accessor name(): String
|
|
280
|
+
|
|
281
|
+
attr_accessor code(): String
|
|
282
|
+
|
|
283
|
+
attr_accessor loc(): Location
|
|
284
|
+
|
|
285
|
+
def self.new: (?name: String, ?code: String, ?loc: Location) -> instance
|
|
286
|
+
| ({ ?name: String, ?code: String, ?loc: Location }) -> instance
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
class ParserConfiguration < Struct[Array[ParserSetting] | Location]
|
|
290
|
+
attr_accessor settings(): Array[ParserSetting]
|
|
291
|
+
|
|
292
|
+
attr_accessor loc(): Location
|
|
120
293
|
|
|
121
|
-
|
|
294
|
+
def self.new: (?settings: Array[ParserSetting], ?loc: Location) -> instance
|
|
295
|
+
| ({ ?settings: Array[ParserSetting], ?loc: Location }) -> instance
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
class ParserSetting < Struct[Symbol | Location]
|
|
299
|
+
attr_accessor key(): Symbol
|
|
300
|
+
|
|
301
|
+
attr_accessor value(): Symbol
|
|
122
302
|
|
|
123
303
|
attr_accessor loc(): Location
|
|
124
304
|
|
|
125
|
-
def self.new: (?
|
|
126
|
-
| ({ ?
|
|
305
|
+
def self.new: (?key: Symbol, ?value: Symbol, ?loc: Location) -> instance
|
|
306
|
+
| ({ ?key: Symbol, ?value: Symbol, ?loc: Location }) -> instance
|
|
127
307
|
end
|
|
128
308
|
|
|
129
|
-
|
|
309
|
+
ROOT_ONLY_DECLARATION_NAMES: Hash[Class, String]
|
|
310
|
+
|
|
311
|
+
class Alternative < Struct[Array[item] | InlineAction? | String? | NodeAnnotation? | Location]
|
|
130
312
|
attr_accessor items(): Array[item]
|
|
131
313
|
|
|
132
314
|
attr_accessor action(): InlineAction?
|
|
133
315
|
|
|
134
316
|
attr_accessor precedence(): String?
|
|
135
317
|
|
|
318
|
+
attr_accessor node_annotation(): NodeAnnotation?
|
|
319
|
+
|
|
136
320
|
attr_accessor loc(): Location
|
|
137
321
|
|
|
138
|
-
def self.new: (?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?loc: Location) -> instance
|
|
139
|
-
| ({ ?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?loc: Location }) -> instance
|
|
322
|
+
def self.new: (?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location) -> instance
|
|
323
|
+
| ({ ?items: Array[item], ?action: InlineAction?, ?precedence: String?, ?node_annotation: NodeAnnotation?, ?loc: Location }) -> instance
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
class NodeAnnotation < Struct[String | Array[String] | Location]
|
|
327
|
+
attr_accessor name(): String
|
|
328
|
+
|
|
329
|
+
attr_accessor fields(): Array[String]
|
|
330
|
+
|
|
331
|
+
attr_accessor loc(): Location
|
|
332
|
+
|
|
333
|
+
def self.new: (?name: String, ?fields: Array[String], ?loc: Location) -> instance
|
|
334
|
+
| ({ ?name: String, ?fields: Array[String], ?loc: Location }) -> instance
|
|
140
335
|
end
|
|
141
336
|
|
|
142
337
|
class SymbolReference < Struct[String | String? | Location]
|
|
@@ -150,6 +345,19 @@ module Ibex
|
|
|
150
345
|
| ({ ?name: String, ?named_reference: String?, ?loc: Location }) -> instance
|
|
151
346
|
end
|
|
152
347
|
|
|
348
|
+
class ParameterizedReference < Struct[String | Array[item] | String? | Location]
|
|
349
|
+
attr_accessor name(): String
|
|
350
|
+
|
|
351
|
+
attr_accessor arguments(): Array[item]
|
|
352
|
+
|
|
353
|
+
attr_accessor named_reference(): String?
|
|
354
|
+
|
|
355
|
+
attr_accessor loc(): Location
|
|
356
|
+
|
|
357
|
+
def self.new: (?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location) -> instance
|
|
358
|
+
| ({ ?name: String, ?arguments: Array[item], ?named_reference: String?, ?loc: Location }) -> instance
|
|
359
|
+
end
|
|
360
|
+
|
|
153
361
|
class InlineAction < Struct[String | Location]
|
|
154
362
|
attr_accessor code(): String
|
|
155
363
|
|
|
@@ -159,6 +367,13 @@ module Ibex
|
|
|
159
367
|
| ({ ?code: String, ?loc: Location }) -> instance
|
|
160
368
|
end
|
|
161
369
|
|
|
370
|
+
class Empty < Struct[Location]
|
|
371
|
+
attr_accessor loc(): Location
|
|
372
|
+
|
|
373
|
+
def self.new: (?loc: Location) -> instance
|
|
374
|
+
| ({ ?loc: Location }) -> instance
|
|
375
|
+
end
|
|
376
|
+
|
|
162
377
|
class Optional < Struct[item | Location]
|
|
163
378
|
attr_accessor item(): item
|
|
164
379
|
|
|
@@ -8,6 +8,10 @@ module Ibex
|
|
|
8
8
|
|
|
9
9
|
include BootstrapParserRules
|
|
10
10
|
|
|
11
|
+
include BootstrapParserParameters
|
|
12
|
+
|
|
13
|
+
include ParserConfigurationSupport
|
|
14
|
+
|
|
11
15
|
@mode: Symbol
|
|
12
16
|
|
|
13
17
|
@index: Integer
|
|
@@ -20,8 +24,17 @@ module Ibex
|
|
|
20
24
|
# @rbs () -> AST::Root
|
|
21
25
|
def parse: () -> AST::Root
|
|
22
26
|
|
|
27
|
+
# @rbs () -> AST::Fragment
|
|
28
|
+
def parse_fragment: () -> AST::Fragment
|
|
29
|
+
|
|
23
30
|
private
|
|
24
31
|
|
|
32
|
+
# @rbs (Array[AST::declaration] declarations) -> void
|
|
33
|
+
def reject_fragment_root_declarations: (Array[AST::declaration] declarations) -> void
|
|
34
|
+
|
|
35
|
+
# @rbs (AST::declaration declaration) -> String?
|
|
36
|
+
def fragment_root_declaration_name: (AST::declaration declaration) -> String?
|
|
37
|
+
|
|
25
38
|
# @rbs () -> String
|
|
26
39
|
def parse_constant_path: () -> String
|
|
27
40
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/diagnostic.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# An immutable machine-readable frontend error.
|
|
6
|
+
class Diagnostic
|
|
7
|
+
attr_reader code: String
|
|
8
|
+
|
|
9
|
+
attr_reader phase: Symbol
|
|
10
|
+
|
|
11
|
+
attr_reader message: String
|
|
12
|
+
|
|
13
|
+
attr_reader location: Location
|
|
14
|
+
|
|
15
|
+
attr_reader span: SourceSpan?
|
|
16
|
+
|
|
17
|
+
attr_reader expected: Array[String]
|
|
18
|
+
|
|
19
|
+
attr_reader received: String?
|
|
20
|
+
|
|
21
|
+
# @rbs (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?,
|
|
22
|
+
# ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
|
|
23
|
+
def initialize: (code: String, phase: Symbol, message: String, location: Location, ?span: SourceSpan?, ?expected: Array[String], ?received: String?, ?rendered: String?) -> void
|
|
24
|
+
|
|
25
|
+
# @rbs () -> String
|
|
26
|
+
def severity: () -> String
|
|
27
|
+
|
|
28
|
+
# @rbs () -> String
|
|
29
|
+
def to_s: () -> String
|
|
30
|
+
|
|
31
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
32
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Immutable output from a diagnostic parse.
|
|
36
|
+
class ParseResult
|
|
37
|
+
attr_reader diagnostics: Array[Diagnostic]
|
|
38
|
+
|
|
39
|
+
attr_reader ast: AST::Root?
|
|
40
|
+
|
|
41
|
+
attr_reader document: SourceDocument?
|
|
42
|
+
|
|
43
|
+
# @rbs (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
|
|
44
|
+
def initialize: (diagnostics: Array[Diagnostic], ast: AST::Root?, document: SourceDocument?) -> void
|
|
45
|
+
|
|
46
|
+
# @rbs () -> bool
|
|
47
|
+
def success?: () -> bool
|
|
48
|
+
|
|
49
|
+
# @rbs () -> bool
|
|
50
|
+
def partial?: () -> bool
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Generated from lib/ibex/frontend/diagnostic_recovery.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Frontend
|
|
5
|
+
# Re-runs the generated parser after suppressing only conservative source regions.
|
|
6
|
+
class DiagnosticRecovery
|
|
7
|
+
DECLARATION_STARTS: Array[String]
|
|
8
|
+
|
|
9
|
+
@suppressed: Hash[Integer, bool]
|
|
10
|
+
|
|
11
|
+
@max_diagnostics: Integer
|
|
12
|
+
|
|
13
|
+
@mode: Symbol
|
|
14
|
+
|
|
15
|
+
@tokens: Array[Token]
|
|
16
|
+
|
|
17
|
+
# @rbs (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
|
|
18
|
+
def initialize: (Array[Token] tokens, mode: Symbol, max_diagnostics: Integer) -> void
|
|
19
|
+
|
|
20
|
+
# @rbs () -> [AST::Root | AST::Fragment | nil, Array[Diagnostic]]
|
|
21
|
+
def parse: () -> [ AST::Root | AST::Fragment | nil, Array[Diagnostic] ]
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
# @rbs () -> (AST::Root | AST::Fragment | nil)
|
|
26
|
+
def parse_until_stable: () -> (AST::Root | AST::Fragment | nil)
|
|
27
|
+
|
|
28
|
+
# @rbs () -> Array[Token]
|
|
29
|
+
def working_tokens: () -> Array[Token]
|
|
30
|
+
|
|
31
|
+
# @rbs (Diagnostic diagnostic) -> void
|
|
32
|
+
def append_diagnostic: (Diagnostic diagnostic) -> void
|
|
33
|
+
|
|
34
|
+
# @rbs (Diagnostic diagnostic) -> [String, String, Integer, Integer, String]
|
|
35
|
+
def diagnostic_key: (Diagnostic diagnostic) -> [ String, String, Integer, Integer, String ]
|
|
36
|
+
|
|
37
|
+
# @rbs () -> Array[Diagnostic]
|
|
38
|
+
def sorted_diagnostics: () -> Array[Diagnostic]
|
|
39
|
+
|
|
40
|
+
# @rbs (Diagnostic diagnostic) -> [String, Integer, Integer, String, String]
|
|
41
|
+
def diagnostic_sort_key: (Diagnostic diagnostic) -> [ String, Integer, Integer, String, String ]
|
|
42
|
+
|
|
43
|
+
# @rbs (Token? token, Exception error) -> Range[Integer]?
|
|
44
|
+
def suppression_range: (Token? token, Exception error) -> Range[Integer]?
|
|
45
|
+
|
|
46
|
+
# @rbs (Token? token) -> Integer?
|
|
47
|
+
def token_index: (Token? token) -> Integer?
|
|
48
|
+
|
|
49
|
+
# @rbs (String message) -> Integer?
|
|
50
|
+
def token_index_for_message: (String message) -> Integer?
|
|
51
|
+
|
|
52
|
+
# @rbs () -> Integer?
|
|
53
|
+
def rule_marker_index: () -> Integer?
|
|
54
|
+
|
|
55
|
+
# @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
56
|
+
def declaration_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
57
|
+
|
|
58
|
+
# @rbs (Integer index) -> bool
|
|
59
|
+
def declaration_start?: (Integer index) -> bool
|
|
60
|
+
|
|
61
|
+
# @rbs (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
|
|
62
|
+
def declaration_finish: (Integer start, Integer rule_marker, Array[Integer] starts) -> Integer
|
|
63
|
+
|
|
64
|
+
# @rbs (Integer start, Integer fallback, String closer) -> Integer
|
|
65
|
+
def matching_declaration_end: (Integer start, Integer fallback, String closer) -> Integer
|
|
66
|
+
|
|
67
|
+
# @rbs (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
68
|
+
def rule_range: (Integer failure, Integer rule_marker) -> Range[Integer]?
|
|
69
|
+
|
|
70
|
+
# @rbs (Integer rule_marker) -> Integer
|
|
71
|
+
def grammar_end_index: (Integer rule_marker) -> Integer
|
|
72
|
+
|
|
73
|
+
# @rbs (Integer rule_marker, Integer grammar_end) -> Array[Integer]
|
|
74
|
+
def rule_definition_starts: (Integer rule_marker, Integer grammar_end) -> Array[Integer]
|
|
75
|
+
|
|
76
|
+
# @rbs (Integer index, Integer? lhs_column) -> bool
|
|
77
|
+
def lhs_candidate?: (Integer index, Integer? lhs_column) -> bool
|
|
78
|
+
|
|
79
|
+
# @rbs (Integer failure, Integer start, Integer finish) -> Range[Integer]?
|
|
80
|
+
def alternative_range: (Integer failure, Integer start, Integer finish) -> Range[Integer]?
|
|
81
|
+
|
|
82
|
+
# @rbs (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
|
|
83
|
+
def alternative_slice: (Integer? previous, Integer? following, Integer colon, Integer finish) -> Range[Integer]?
|
|
84
|
+
|
|
85
|
+
# @rbs (Integer start, Integer finish) -> Array[Integer]
|
|
86
|
+
def top_level_pipes: (Integer start, Integer finish) -> Array[Integer]
|
|
87
|
+
|
|
88
|
+
# @rbs (Range[Integer] range) -> bool
|
|
89
|
+
def suppress: (Range[Integer] range) -> bool
|
|
90
|
+
|
|
91
|
+
# @rbs (Exception error, Token? token, phase: Symbol) -> Diagnostic
|
|
92
|
+
def diagnostic_from: (Exception error, Token? token, phase: Symbol) -> Diagnostic
|
|
93
|
+
|
|
94
|
+
# @rbs (String message) -> [Array[String], String?]
|
|
95
|
+
def expected_and_received: (String message) -> [ Array[String], String? ]
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
data/sig/ibex/frontend/dsl.rbs
CHANGED
|
@@ -35,12 +35,36 @@ module Ibex
|
|
|
35
35
|
# @rbs (Integer conflicts) -> void
|
|
36
36
|
def expect: (Integer conflicts) -> void
|
|
37
37
|
|
|
38
|
-
# @rbs (Object
|
|
39
|
-
def start: (Object
|
|
38
|
+
# @rbs (*Object names) -> void
|
|
39
|
+
def start: (*Object names) -> void
|
|
40
|
+
|
|
41
|
+
# @rbs (*Object names) -> void
|
|
42
|
+
def recover_sync: (*Object names) -> void
|
|
43
|
+
|
|
44
|
+
# @rbs (*Object names) -> void
|
|
45
|
+
def on_error_reduce: (*Object names) -> void
|
|
46
|
+
|
|
47
|
+
# @rbs (Object source) -> void
|
|
48
|
+
def test_accept: (Object source) -> void
|
|
49
|
+
|
|
50
|
+
# @rbs (Object source) -> void
|
|
51
|
+
def test_reject: (Object source) -> void
|
|
40
52
|
|
|
41
53
|
# @rbs (Object name, Object expression) -> void
|
|
42
54
|
def convert: (Object name, Object expression) -> void
|
|
43
55
|
|
|
56
|
+
# @rbs (Object name, Object value) -> void
|
|
57
|
+
def display: (Object name, Object value) -> void
|
|
58
|
+
|
|
59
|
+
# @rbs (Object name, Object value) -> void
|
|
60
|
+
def type: (Object name, Object value) -> void
|
|
61
|
+
|
|
62
|
+
# @rbs (Object name, ?Object? semantic_type) -> void
|
|
63
|
+
def param: (Object name, ?Object? semantic_type) -> void
|
|
64
|
+
|
|
65
|
+
# @rbs (Object name, Object code) -> void
|
|
66
|
+
def printer: (Object name, Object code) -> void
|
|
67
|
+
|
|
44
68
|
# @rbs (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
|
|
45
69
|
def precedence: (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
|
|
46
70
|
|
|
@@ -79,6 +103,11 @@ module Ibex
|
|
|
79
103
|
|
|
80
104
|
# @rbs () -> Location
|
|
81
105
|
def next_location: () -> Location
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
|
|
109
|
+
# @rbs (Object value, String feature) -> String
|
|
110
|
+
def metadata_value: (Object value, String feature) -> String
|
|
82
111
|
end
|
|
83
112
|
|
|
84
113
|
# Collects ordered associativity levels.
|
|
@@ -116,8 +145,8 @@ module Ibex
|
|
|
116
145
|
# @rbs (Builder grammar, Location default_location) -> void
|
|
117
146
|
def initialize: (Builder grammar, Location default_location) -> void
|
|
118
147
|
|
|
119
|
-
# @rbs (*Object items, ?action: Object?, ?precedence: Object?) -> void
|
|
120
|
-
def alt: (*Object items, ?action: Object?, ?precedence: Object?) -> void
|
|
148
|
+
# @rbs (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
|
|
149
|
+
def alt: (*Object items, ?action: Object?, ?precedence: Object?, ?node: AST::NodeAnnotation?) -> void
|
|
121
150
|
end
|
|
122
151
|
end
|
|
123
152
|
end
|