ibex 0.2.0 → 0.4.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 +100 -272
- data/docs/architecture.md +187 -35
- 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 +3 -4
- data/docs/cst.md +24 -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 +274 -0
- data/docs/development.md +196 -2
- data/docs/direct-ielr-decision.md +120 -0
- data/docs/direct-multi-entry-decision.md +82 -0
- data/docs/editor-setup.md +2 -1
- 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 +1617 -0
- data/docs/error-ux-round2.md +111 -0
- data/docs/error-ux.md +54 -0
- data/docs/getting-started.md +80 -0
- data/docs/grammar-reference.md +184 -13
- data/docs/ielr-design.md +43 -0
- data/docs/ielr.md +92 -0
- data/docs/impact.md +101 -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 +5 -0
- data/docs/maturity.md +129 -0
- data/docs/project-site-strategy.md +54 -0
- data/docs/racc-migration-evidence.md +45 -0
- data/docs/racc-migration.md +11 -0
- data/docs/release-readiness.md +126 -68
- data/docs/repair-semantics.md +123 -0
- data/docs/runtime-abi-evolution.md +310 -0
- data/docs/stability.md +145 -34
- 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/lib/ibex/analysis/digraph.rb +128 -0
- data/lib/ibex/analysis/sets.rb +14 -0
- data/lib/ibex/analysis.rb +1 -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 +14 -5
- 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/diagnostics.rb +31 -11
- data/lib/ibex/cli/documentation.rb +11 -8
- data/lib/ibex/cli/equiv.rb +169 -0
- data/lib/ibex/cli/error_messages.rb +11 -4
- data/lib/ibex/cli/explain.rb +14 -5
- data/lib/ibex/cli/fix.rb +203 -0
- data/lib/ibex/cli/formatting.rb +11 -10
- data/lib/ibex/cli/fuzz.rb +200 -0
- data/lib/ibex/cli/fuzz_regressions.rb +145 -0
- data/lib/ibex/cli/generation_artifacts.rb +53 -2
- data/lib/ibex/cli/generation_error_messages.rb +1 -1
- data/lib/ibex/cli/grammar_tests.rb +32 -14
- data/lib/ibex/cli/impact.rb +393 -0
- data/lib/ibex/cli/ir_tools.rb +5 -61
- data/lib/ibex/cli/outputs.rb +60 -33
- data/lib/ibex/cli/reduce.rb +202 -0
- data/lib/ibex/cli/reduce_reporting.rb +71 -0
- data/lib/ibex/cli/samples.rb +49 -23
- data/lib/ibex/cli/verify.rb +116 -0
- data/lib/ibex/cli/watch.rb +6 -5
- data/lib/ibex/cli.rb +362 -56
- data/lib/ibex/codegen/action_locations.rb +1 -1
- data/lib/ibex/codegen/action_method_source.rb +5 -6
- data/lib/ibex/codegen/action_source.rb +3 -2
- data/lib/ibex/codegen/ambiguity.rb +5 -4
- data/lib/ibex/codegen/explain.rb +123 -55
- data/lib/ibex/codegen/generated_action_abi.rb +10 -5
- data/lib/ibex/codegen/rbs.rb +15 -7
- data/lib/ibex/codegen/report.rb +25 -13
- data/lib/ibex/codegen/ruby.rb +28 -64
- data/lib/ibex/codegen/ruby_actions.rb +9 -6
- data/lib/ibex/codegen/ruby_syntax.rb +15 -9
- 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 +21 -11
- data/lib/ibex/coverage/event_stream.rb +13 -7
- data/lib/ibex/coverage/report.rb +26 -18
- data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
- data/lib/ibex/delta_reducer.rb +99 -0
- data/lib/ibex/diff.rb +141 -0
- data/lib/ibex/equiv/machine.rb +135 -0
- data/lib/ibex/equiv.rb +373 -0
- data/lib/ibex/fix.rb +557 -0
- data/lib/ibex/frontend/ast.rb +22 -2
- data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
- data/lib/ibex/frontend/diagnostic.rb +1 -1
- data/lib/ibex/frontend/formatter.rb +72 -26
- data/lib/ibex/frontend/generated_parser.rb +147 -117
- data/lib/ibex/frontend/generated_parser_base.rb +7 -3
- data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
- data/lib/ibex/frontend/generation.rb +1 -1
- data/lib/ibex/frontend/parser/declarations.rb +17 -2
- data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
- data/lib/ibex/frontend/regenerator.rb +1 -0
- data/lib/ibex/frontend/resolution.rb +2 -1
- data/lib/ibex/frontend/resolver.rb +1 -1
- data/lib/ibex/frontend/rule_documentation.rb +2 -1
- data/lib/ibex/frontend/source_cursor.rb +2 -2
- data/lib/ibex/frontend/source_span.rb +9 -1
- data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
- data/lib/ibex/frontend/token_adapter.rb +10 -0
- data/lib/ibex/frontend.rb +1 -0
- data/lib/ibex/fuzz.rb +219 -0
- data/lib/ibex/generation_input.rb +1 -1
- data/lib/ibex/generation_manifest.rb +36 -25
- data/lib/ibex/generation_transaction.rb +1 -1
- data/lib/ibex/generation_transaction_recovery.rb +4 -4
- data/lib/ibex/generation_transaction_validation.rb +2 -2
- data/lib/ibex/grammar_tests.rb +1 -1
- data/lib/ibex/impact/action_impact.rb +148 -0
- data/lib/ibex/impact/automaton_impact.rb +57 -0
- data/lib/ibex/impact/coverage_impact.rb +53 -0
- data/lib/ibex/impact/graph.rb +132 -0
- data/lib/ibex/impact/propagation.rb +147 -0
- data/lib/ibex/impact/report.rb +273 -0
- data/lib/ibex/impact/seeds.rb +69 -0
- data/lib/ibex/impact/severity.rb +139 -0
- data/lib/ibex/impact.rb +16 -0
- data/lib/ibex/ir/automaton_ir.rb +61 -19
- data/lib/ibex/ir/grammar_ir.rb +76 -45
- data/lib/ibex/ir/lexer_ir.rb +5 -5
- data/lib/ibex/ir/parser_contract.rb +135 -0
- data/lib/ibex/ir/serialize.rb +203 -76
- data/lib/ibex/ir/validator/automaton.rb +64 -34
- data/lib/ibex/ir/validator/base.rb +51 -33
- data/lib/ibex/ir/validator/grammar.rb +113 -83
- data/lib/ibex/ir/validator/lexer.rb +2 -2
- data/lib/ibex/ir/validator.rb +2 -1
- data/lib/ibex/ir.rb +16 -3
- data/lib/ibex/lalr/build_metrics.rb +50 -2
- data/lib/ibex/lalr/builder.rb +191 -56
- data/lib/ibex/lalr/conflict_search.rb +15 -4
- data/lib/ibex/lalr/counterexample.rb +19 -14
- data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
- 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 +22 -8
- 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/unreachable_states.rb +80 -0
- data/lib/ibex/lalr.rb +52 -1
- data/lib/ibex/location.rb +3 -3
- data/lib/ibex/lsp/document_handlers.rb +9 -7
- data/lib/ibex/lsp/initialization_handlers.rb +9 -7
- data/lib/ibex/lsp/navigation_handlers.rb +25 -11
- data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
- data/lib/ibex/lsp/position_codec.rb +6 -2
- data/lib/ibex/lsp/request_handlers.rb +3 -2
- data/lib/ibex/lsp/request_support.rb +14 -7
- data/lib/ibex/lsp/server.rb +13 -11
- data/lib/ibex/lsp/symbol_index.rb +13 -13
- data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
- data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
- data/lib/ibex/lsp/transport.rb +13 -3
- data/lib/ibex/lsp/workspace.rb +5 -4
- data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
- data/lib/ibex/lsp.rb +1 -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 +2 -0
- data/lib/ibex/normalize/diagnostics.rb +63 -38
- data/lib/ibex/normalize/expander.rb +5 -4
- data/lib/ibex/normalize/expression.rb +8 -6
- data/lib/ibex/normalize/grammar_builder.rb +26 -0
- data/lib/ibex/normalize/inline_expansion.rb +100 -49
- data/lib/ibex/normalize/lexer.rb +3 -3
- data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
- data/lib/ibex/normalize/parameter_lowering.rb +40 -23
- data/lib/ibex/normalize/parameters.rb +31 -4
- data/lib/ibex/normalize/parser_configuration.rb +70 -0
- data/lib/ibex/normalize.rb +10 -20
- data/lib/ibex/racc_migration/report.rb +6 -3
- data/lib/ibex/rake_task.rb +1 -1
- data/lib/ibex/samples.rb +43 -13
- 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 +6 -2
- data/lib/ibex/table_simulation/step.rb +3 -1
- data/lib/ibex/tables.rb +14 -0
- 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 +10 -1
- data/lib/ibex/watch/source_snapshot.rb +13 -8
- data/lib/ibex.rb +11 -0
- data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
- data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
- 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/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/explain-v1.schema.json +63 -1
- 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/fuzz-regression-v1.schema.json +79 -0
- data/schema/fuzz-v1.schema.json +114 -0
- data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
- data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
- data/schema/grammar-ir.schema.json +271 -0
- data/schema/ielr-benchmark-v1.schema.json +85 -0
- data/schema/impact-v1.schema.json +208 -0
- data/schema/lexer-profile-v1.schema.json +491 -0
- data/schema/metrics-v1.schema.json +60 -0
- data/schema/reduce-v1.schema.json +22 -0
- data/schema/reduce-v2.schema.json +63 -0
- data/schema/table-artifact-v1.schema.json +377 -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/analysis/sets.rbs +10 -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 +6 -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/diagnostics.rbs +16 -3
- data/sig/ibex/cli/documentation.rbs +5 -1
- data/sig/ibex/cli/equiv.rbs +49 -0
- data/sig/ibex/cli/error_messages.rbs +6 -0
- data/sig/ibex/cli/explain.rbs +6 -0
- data/sig/ibex/cli/fix.rbs +53 -0
- data/sig/ibex/cli/formatting.rbs +5 -1
- data/sig/ibex/cli/fuzz.rbs +47 -0
- data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
- data/sig/ibex/cli/generation_artifacts.rbs +21 -2
- data/sig/ibex/cli/generation_error_messages.rbs +2 -2
- data/sig/ibex/cli/grammar_tests.rbs +15 -3
- data/sig/ibex/cli/impact.rbs +95 -0
- data/sig/ibex/cli/ir_tools.rbs +7 -19
- data/sig/ibex/cli/outputs.rbs +9 -3
- data/sig/ibex/cli/reduce.rbs +60 -0
- data/sig/ibex/cli/reduce_reporting.rbs +27 -0
- data/sig/ibex/cli/samples.rbs +8 -0
- data/sig/ibex/cli/verify.rbs +28 -0
- data/sig/ibex/cli/watch.rbs +2 -2
- data/sig/ibex/cli.rbs +79 -5
- data/sig/ibex/codegen/action_method_source.rbs +4 -4
- data/sig/ibex/codegen/explain.rbs +45 -25
- data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
- data/sig/ibex/codegen/rbs.rbs +12 -10
- data/sig/ibex/codegen/report.rbs +12 -12
- data/sig/ibex/codegen/ruby.rbs +18 -15
- data/sig/ibex/codegen/ruby_actions.rbs +6 -6
- data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
- 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 +16 -14
- data/sig/ibex/coverage/event_stream.rbs +12 -10
- data/sig/ibex/coverage/report.rbs +20 -18
- data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
- 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/fix.rbs +138 -0
- data/sig/ibex/frontend/ast.rbs +33 -7
- data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
- data/sig/ibex/frontend/diagnostic.rbs +2 -2
- data/sig/ibex/frontend/formatter.rbs +38 -30
- data/sig/ibex/frontend/generated_parser.rbs +87 -77
- data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
- data/sig/ibex/frontend/parser/declarations.rbs +3 -0
- data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
- data/sig/ibex/frontend/resolution.rbs +3 -2
- data/sig/ibex/frontend/source_cursor.rbs +2 -2
- data/sig/ibex/frontend/source_span.rbs +5 -2
- data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
- data/sig/ibex/frontend/token_adapter.rbs +6 -0
- data/sig/ibex/fuzz.rbs +71 -0
- data/sig/ibex/generation_input.rbs +2 -2
- data/sig/ibex/generation_manifest.rbs +35 -32
- data/sig/ibex/generation_transaction_recovery.rbs +2 -2
- data/sig/ibex/generation_transaction_validation.rbs +2 -2
- data/sig/ibex/grammar_tests.rbs +2 -2
- data/sig/ibex/impact/action_impact.rbs +58 -0
- data/sig/ibex/impact/automaton_impact.rbs +37 -0
- data/sig/ibex/impact/coverage_impact.rbs +28 -0
- data/sig/ibex/impact/graph.rbs +67 -0
- data/sig/ibex/impact/propagation.rbs +56 -0
- data/sig/ibex/impact/report.rbs +107 -0
- data/sig/ibex/impact/seeds.rbs +36 -0
- data/sig/ibex/impact/severity.rbs +55 -0
- data/sig/ibex/impact.rbs +6 -0
- data/sig/ibex/ir/automaton_ir.rbs +30 -11
- data/sig/ibex/ir/grammar_ir.rbs +41 -27
- data/sig/ibex/ir/lexer_ir.rbs +8 -8
- data/sig/ibex/ir/parser_contract.rbs +69 -0
- data/sig/ibex/ir/serialize.rbs +63 -28
- data/sig/ibex/ir/validator/automaton.rbs +47 -44
- data/sig/ibex/ir/validator/base.rbs +35 -31
- data/sig/ibex/ir/validator/grammar.rbs +78 -67
- data/sig/ibex/ir/validator/lexer.rbs +4 -4
- data/sig/ibex/ir.rbs +9 -3
- data/sig/ibex/lalr/build_metrics.rbs +42 -2
- data/sig/ibex/lalr/builder.rbs +75 -24
- data/sig/ibex/lalr/conflict_search.rbs +5 -2
- data/sig/ibex/lalr/counterexample.rbs +17 -14
- data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
- 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 +17 -5
- 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/unreachable_states.rbs +25 -0
- data/sig/ibex/lalr.rbs +11 -1
- data/sig/ibex/location.rbs +6 -6
- data/sig/ibex/lsp/document_handlers.rbs +8 -8
- data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
- data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
- data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
- data/sig/ibex/lsp/position_codec.rbs +8 -4
- data/sig/ibex/lsp/request_handlers.rbs +4 -4
- data/sig/ibex/lsp/request_support.rbs +8 -8
- data/sig/ibex/lsp/server.rbs +16 -16
- data/sig/ibex/lsp/symbol_index.rbs +20 -21
- data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
- data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
- data/sig/ibex/lsp/transport.rbs +18 -6
- data/sig/ibex/lsp/workspace.rbs +3 -2
- data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
- data/sig/ibex/messages.rbs +26 -0
- data/sig/ibex/metrics.rbs +50 -0
- data/sig/ibex/normalize/diagnostics.rbs +4 -4
- data/sig/ibex/normalize/expander.rbs +2 -2
- data/sig/ibex/normalize/expression.rbs +10 -8
- data/sig/ibex/normalize/grammar_builder.rbs +11 -0
- data/sig/ibex/normalize/inline_expansion.rbs +59 -50
- data/sig/ibex/normalize/lexer.rbs +4 -4
- data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
- data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
- data/sig/ibex/normalize/parameters.rbs +13 -8
- data/sig/ibex/normalize/parser_configuration.rbs +23 -0
- data/sig/ibex/normalize.rbs +11 -5
- data/sig/ibex/racc_migration/report.rbs +8 -6
- data/sig/ibex/rake_task.rbs +1 -1
- data/sig/ibex/samples.rbs +13 -4
- 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 +8 -4
- data/sig/ibex/table_simulation/step.rbs +4 -2
- data/sig/ibex/tables.rbs +10 -9
- 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 +12 -2
- data/sig/ibex/watch/source_snapshot.rbs +13 -9
- metadata +254 -12
- data/lib/ibex/ir/migration.rb +0 -120
- data/sig/ibex/ir/migration.rbs +0 -34
data/sig/ibex/ir/grammar_ir.rbs
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module IR
|
|
5
|
+
# Grammar IR has one active wire format. A future incompatible format
|
|
6
|
+
# change may advance this number, but the runtime never treats old
|
|
7
|
+
# formats as an alternate compatibility surface.
|
|
5
8
|
SCHEMA_VERSION: ::Integer
|
|
6
9
|
|
|
7
10
|
SUPPORTED_SCHEMA_VERSIONS: Array[Integer]
|
|
8
11
|
|
|
9
|
-
# @rbs (
|
|
10
|
-
def self?.deep_freeze: (
|
|
12
|
+
# @rbs (Object? value) -> Object?
|
|
13
|
+
def self?.deep_freeze: (Object? value) -> Object?
|
|
11
14
|
|
|
12
15
|
# An interned terminal or nonterminal.
|
|
13
16
|
class GrammarSymbol
|
|
@@ -39,8 +42,8 @@ module Ibex
|
|
|
39
42
|
# @rbs () -> bool
|
|
40
43
|
def nonterminal?: () -> bool
|
|
41
44
|
|
|
42
|
-
# @rbs (
|
|
43
|
-
def to_h: (
|
|
45
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
46
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
# Opaque Ruby semantic action metadata.
|
|
@@ -59,8 +62,8 @@ module Ibex
|
|
|
59
62
|
# ?composition: action_composition?) -> void
|
|
60
63
|
def initialize: (code: String, location: location, ?named_refs: Array[named_ref], ?context_length: Integer, ?composition: action_composition?) -> void
|
|
61
64
|
|
|
62
|
-
# @rbs (
|
|
63
|
-
def to_h: (
|
|
65
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
66
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
64
67
|
end
|
|
65
68
|
|
|
66
69
|
# A normalized BNF production using symbol ids.
|
|
@@ -75,7 +78,7 @@ module Ibex
|
|
|
75
78
|
|
|
76
79
|
attr_reader precedence_override: Integer?
|
|
77
80
|
|
|
78
|
-
attr_reader origin: Hash[Symbol,
|
|
81
|
+
attr_reader origin: Hash[Symbol, Object?]
|
|
79
82
|
|
|
80
83
|
attr_reader documentation: String?
|
|
81
84
|
|
|
@@ -84,12 +87,12 @@ module Ibex
|
|
|
84
87
|
attr_reader node: node_annotation?
|
|
85
88
|
|
|
86
89
|
# @rbs (id: Integer, lhs: Integer, rhs: Array[Integer], action: Action?, precedence_override: Integer?,
|
|
87
|
-
# origin: Hash[Symbol,
|
|
90
|
+
# origin: Hash[Symbol, Object?], ?documentation: String?, ?expansion: production_expansion?,
|
|
88
91
|
# ?node: node_annotation?) -> void
|
|
89
|
-
def initialize: (id: Integer, lhs: Integer, rhs: Array[Integer], action: Action?, precedence_override: Integer?, origin: Hash[Symbol,
|
|
92
|
+
def initialize: (id: Integer, lhs: Integer, rhs: Array[Integer], action: Action?, precedence_override: Integer?, origin: Hash[Symbol, Object?], ?documentation: String?, ?expansion: production_expansion?, ?node: node_annotation?) -> void
|
|
90
93
|
|
|
91
|
-
# @rbs (
|
|
92
|
-
def to_h: (
|
|
94
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
95
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
93
96
|
end
|
|
94
97
|
|
|
95
98
|
# One opaque user-code block and the location of its first code line.
|
|
@@ -101,8 +104,8 @@ module Ibex
|
|
|
101
104
|
# @rbs (code: String, location: location) -> void
|
|
102
105
|
def initialize: (code: String, location: location) -> void
|
|
103
106
|
|
|
104
|
-
# @rbs () -> Hash[Symbol,
|
|
105
|
-
def to_h: () -> Hash[Symbol,
|
|
107
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
108
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
106
109
|
end
|
|
107
110
|
|
|
108
111
|
# Immutable normalized grammar exchanged between pipeline stages.
|
|
@@ -149,20 +152,28 @@ module Ibex
|
|
|
149
152
|
|
|
150
153
|
attr_reader source_provenance: source_provenance?
|
|
151
154
|
|
|
152
|
-
attr_reader
|
|
155
|
+
attr_reader parser_contract: ParserContract
|
|
153
156
|
|
|
154
157
|
# @rbs (class_name: String, superclass: String?, start: String, expect: Integer, ?expect_rr: Integer?,
|
|
155
158
|
# options: grammar_options,
|
|
156
159
|
# symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String],
|
|
157
160
|
# conversions: Hash[String, String], warnings: Array[grammar_warning], ?user_code_chunks: user_code_chunks?,
|
|
158
|
-
# ?
|
|
159
|
-
# ?migration: migration_metadata?, ?parser_parameters: Array[parser_parameter],
|
|
161
|
+
# ?parser_parameters: Array[parser_parameter],
|
|
160
162
|
# ?value_printers: Array[value_printer], ?grammar_tests: Array[grammar_test],
|
|
161
163
|
# ?recovery: recovery_policy?, ?lexer: Lexer?,
|
|
162
|
-
# ?mode: grammar_mode, ?starts: Array[String]?
|
|
164
|
+
# ?mode: grammar_mode, ?starts: Array[String]?, ?parser_contract: ParserContract,
|
|
165
|
+
# ?source_provenance: source_provenance?) -> void
|
|
163
166
|
# rubocop:disable Metrics/AbcSize, Metrics/ParameterLists
|
|
164
|
-
# Immutable
|
|
165
|
-
def initialize: (class_name: String, superclass: String?, start: String, expect: Integer, options: grammar_options, symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String], conversions: Hash[String, String], warnings: Array[grammar_warning], ?expect_rr: Integer?, ?user_code_chunks: user_code_chunks?, ?
|
|
167
|
+
# Immutable current IR is constructed from explicit public fields.
|
|
168
|
+
def initialize: (class_name: String, superclass: String?, start: String, expect: Integer, options: grammar_options, symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String], conversions: Hash[String, String], warnings: Array[grammar_warning], ?expect_rr: Integer?, ?user_code_chunks: user_code_chunks?, ?parser_parameters: Array[parser_parameter], ?value_printers: Array[value_printer], ?grammar_tests: Array[grammar_test], ?recovery: recovery_policy?, ?lexer: Lexer?, ?mode: grammar_mode, ?starts: Array[String]?, ?parser_contract: ParserContract, ?source_provenance: source_provenance?) -> void
|
|
169
|
+
|
|
170
|
+
# @rbs (class_name: String, superclass: String?, start: String, expect: Integer, options: grammar_options,
|
|
171
|
+
# symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String],
|
|
172
|
+
# conversions: Hash[String, String], warnings: Array[grammar_warning], user_code_chunks: user_code_chunks?,
|
|
173
|
+
# source_provenance: source_provenance?, expect_rr: Integer?, parser_parameters: Array[parser_parameter],
|
|
174
|
+
# value_printers: Array[value_printer], grammar_tests: Array[grammar_test], recovery: recovery_policy?,
|
|
175
|
+
# lexer: Lexer?, mode: grammar_mode, starts: Array[String]?, parser_contract: ParserContract) -> void
|
|
176
|
+
def initialize_current: (class_name: String, superclass: String?, start: String, expect: Integer, options: grammar_options, symbols: Array[GrammarSymbol], productions: Array[Production], user_code: Hash[String, String], conversions: Hash[String, String], warnings: Array[grammar_warning], user_code_chunks: user_code_chunks?, source_provenance: source_provenance?, expect_rr: Integer?, parser_parameters: Array[parser_parameter], value_printers: Array[value_printer], grammar_tests: Array[grammar_test], recovery: recovery_policy?, lexer: Lexer?, mode: grammar_mode, starts: Array[String]?, parser_contract: ParserContract) -> void
|
|
166
177
|
|
|
167
178
|
# @rbs (String name) -> GrammarSymbol?
|
|
168
179
|
def symbol: (String name) -> GrammarSymbol?
|
|
@@ -176,8 +187,8 @@ module Ibex
|
|
|
176
187
|
# @rbs () -> Array[GrammarSymbol]
|
|
177
188
|
def nonterminals: () -> Array[GrammarSymbol]
|
|
178
189
|
|
|
179
|
-
# @rbs () -> Hash[Symbol,
|
|
180
|
-
def to_h: () -> Hash[Symbol,
|
|
190
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
191
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
181
192
|
|
|
182
193
|
private
|
|
183
194
|
|
|
@@ -187,17 +198,20 @@ module Ibex
|
|
|
187
198
|
# @rbs (String start, Array[String]? starts, grammar_mode mode) -> Array[String]
|
|
188
199
|
def validate_starts: (String start, Array[String]? starts, grammar_mode mode) -> Array[String]
|
|
189
200
|
|
|
190
|
-
# @rbs (Hash[Symbol,
|
|
191
|
-
def append_optional_metadata: (Hash[Symbol,
|
|
201
|
+
# @rbs (Hash[Symbol, Object?] value) -> void
|
|
202
|
+
def append_optional_metadata: (Hash[Symbol, Object?] value) -> void
|
|
192
203
|
|
|
193
|
-
# @rbs (Hash[Symbol,
|
|
194
|
-
def append_parser_metadata: (Hash[Symbol,
|
|
204
|
+
# @rbs (Hash[Symbol, Object?] value) -> void
|
|
205
|
+
def append_parser_metadata: (Hash[Symbol, Object?] value) -> void
|
|
195
206
|
|
|
196
|
-
# @rbs (Hash[Symbol,
|
|
197
|
-
def append_recovery_metadata: (Hash[Symbol,
|
|
207
|
+
# @rbs (Hash[Symbol, Object?] value) -> void
|
|
208
|
+
def append_recovery_metadata: (Hash[Symbol, Object?] value) -> void
|
|
198
209
|
|
|
199
210
|
# @rbs () -> void
|
|
200
211
|
def validate_user_code_chunks: () -> void
|
|
212
|
+
|
|
213
|
+
# @rbs (ParserContract parser_contract) -> void
|
|
214
|
+
def validate_current_metadata: (ParserContract parser_contract) -> void
|
|
201
215
|
end
|
|
202
216
|
end
|
|
203
217
|
end
|
data/sig/ibex/ir/lexer_ir.rbs
CHANGED
|
@@ -30,28 +30,28 @@ module Ibex
|
|
|
30
30
|
# options: String, action: String?, location: location) -> void
|
|
31
31
|
def initialize: (id: Integer, state: String, kind: Symbol, token: String?, pattern: String, pattern_kind: Symbol, options: String, action: String?, location: location) -> void
|
|
32
32
|
|
|
33
|
-
# @rbs () -> Hash[Symbol,
|
|
34
|
-
def to_h: () -> Hash[Symbol,
|
|
33
|
+
# @rbs () -> Hash[Symbol, lexer_rule_document_value]
|
|
34
|
+
def to_h: () -> Hash[Symbol, lexer_rule_document_value]
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
# Independently versioned lexer contract embedded by Grammar IR
|
|
37
|
+
# Independently versioned lexer contract embedded by the current Grammar IR.
|
|
38
38
|
class Lexer
|
|
39
39
|
attr_reader states: Array[String]
|
|
40
40
|
|
|
41
41
|
attr_reader rules: Array[LexerRule]
|
|
42
42
|
|
|
43
|
-
attr_reader warnings: Array[
|
|
43
|
+
attr_reader warnings: Array[lexer_warning]
|
|
44
44
|
|
|
45
45
|
attr_reader schema_version: Integer
|
|
46
46
|
|
|
47
47
|
attr_reader source_provenance: source_provenance?
|
|
48
48
|
|
|
49
|
-
# @rbs (states: Array[String], rules: Array[LexerRule], warnings: Array[
|
|
49
|
+
# @rbs (states: Array[String], rules: Array[LexerRule], warnings: Array[lexer_warning],
|
|
50
50
|
# ?schema_version: Integer, ?source_provenance: source_provenance?) -> void
|
|
51
|
-
def initialize: (states: Array[String], rules: Array[LexerRule], warnings: Array[
|
|
51
|
+
def initialize: (states: Array[String], rules: Array[LexerRule], warnings: Array[lexer_warning], ?schema_version: Integer, ?source_provenance: source_provenance?) -> void
|
|
52
52
|
|
|
53
|
-
# @rbs () -> Hash[Symbol,
|
|
54
|
-
def to_h: () -> Hash[Symbol,
|
|
53
|
+
# @rbs () -> Hash[Symbol, lexer_document_value]
|
|
54
|
+
def to_h: () -> Hash[Symbol, lexer_document_value]
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Generated from lib/ibex/ir/parser_contract.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module IR
|
|
5
|
+
# Root-owned parser configuration persisted by the current Grammar IR.
|
|
6
|
+
class ParserContract
|
|
7
|
+
type definition = { configuration: String, values: Array[Symbol] }
|
|
8
|
+
|
|
9
|
+
type entry_location = { file: String?, line: Integer, column: Integer }
|
|
10
|
+
|
|
11
|
+
type entry_value = String? | bool | entry_location?
|
|
12
|
+
|
|
13
|
+
DEFINITIONS: Hash[Symbol, definition]
|
|
14
|
+
|
|
15
|
+
# One specified or explicitly unspecified contract field.
|
|
16
|
+
class Entry
|
|
17
|
+
attr_reader key: Symbol
|
|
18
|
+
|
|
19
|
+
attr_reader value: Symbol?
|
|
20
|
+
|
|
21
|
+
attr_reader location: Location?
|
|
22
|
+
|
|
23
|
+
attr_reader explicit: bool
|
|
24
|
+
|
|
25
|
+
# @rbs (Symbol key, ?value: Symbol?, ?location: Location?, ?explicit: bool) -> void
|
|
26
|
+
def initialize: (Symbol key, ?value: Symbol?, ?location: Location?, ?explicit: bool) -> void
|
|
27
|
+
|
|
28
|
+
# @rbs () -> Hash[Symbol, entry_value]
|
|
29
|
+
def to_h: () -> Hash[Symbol, entry_value]
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
# @rbs (Symbol key, Array[Symbol] allowed, Symbol? value, Location? location, bool explicit) -> void
|
|
34
|
+
def validate_state!: (Symbol key, Array[Symbol] allowed, Symbol? value, Location? location, bool explicit) -> void
|
|
35
|
+
|
|
36
|
+
# @rbs () -> entry_location?
|
|
37
|
+
def serialized_location: () -> entry_location?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
attr_reader algorithm: Entry
|
|
41
|
+
|
|
42
|
+
attr_reader entries: Entry
|
|
43
|
+
|
|
44
|
+
attr_reader cst_trivia: Entry
|
|
45
|
+
|
|
46
|
+
# @rbs (?algorithm: Entry?, ?entries: Entry?, ?cst_trivia: Entry?) -> void
|
|
47
|
+
def initialize: (?algorithm: Entry?, ?entries: Entry?, ?cst_trivia: Entry?) -> void
|
|
48
|
+
|
|
49
|
+
# @rbs () -> Hash[Symbol, Hash[Symbol, entry_value]]
|
|
50
|
+
def to_h: () -> Hash[Symbol, Hash[Symbol, entry_value]]
|
|
51
|
+
|
|
52
|
+
# Values supplied to the typed resolver; unspecified fields are absent.
|
|
53
|
+
# @rbs () -> Hash[String, Symbol]
|
|
54
|
+
def configuration_values: () -> Hash[String, Symbol]
|
|
55
|
+
|
|
56
|
+
# Source locations supplied to the typed resolver.
|
|
57
|
+
# @rbs () -> Hash[String, Location]
|
|
58
|
+
def configuration_locations: () -> Hash[String, Location]
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
# @rbs (Symbol key, Entry? entry) -> Entry
|
|
63
|
+
def normalize_entry: (Symbol key, Entry? entry) -> Entry
|
|
64
|
+
|
|
65
|
+
# @rbs () -> Array[Entry]
|
|
66
|
+
def specified_entries: () -> Array[Entry]
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
data/sig/ibex/ir/serialize.rbs
CHANGED
|
@@ -2,66 +2,101 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module IR
|
|
5
|
-
# Stable JSON serialization for
|
|
6
|
-
# rubocop:disable Metrics/ModuleLength -- explicit
|
|
5
|
+
# Stable JSON serialization for the current pipeline IR.
|
|
6
|
+
# rubocop:disable Metrics/ModuleLength -- explicit fields keep serialization changes auditable.
|
|
7
|
+
# rubocop:disable Lint/SelfAssignment -- RBS inline assertions narrow schema-decoded values in place.
|
|
7
8
|
module Serialize
|
|
8
|
-
private def validate_version: (
|
|
9
|
+
private def validate_version: (Hash[String, IR::serialized_value] data) -> void
|
|
9
10
|
|
|
10
|
-
private def self.validate_version: (
|
|
11
|
+
private def self.validate_version: (Hash[String, IR::serialized_value] data) -> void
|
|
11
12
|
|
|
12
|
-
private def load_grammar: (
|
|
13
|
+
private def load_grammar: (Hash[String, IR::serialized_value] data) -> Grammar
|
|
13
14
|
|
|
14
|
-
private def self.load_grammar: (
|
|
15
|
+
private def self.load_grammar: (Hash[String, IR::serialized_value] data) -> Grammar
|
|
15
16
|
|
|
16
|
-
private def
|
|
17
|
+
private def load_symbols: (Hash[String, IR::serialized_value] data) -> Array[GrammarSymbol]
|
|
17
18
|
|
|
18
|
-
private def self.
|
|
19
|
+
private def self.load_symbols: (Hash[String, IR::serialized_value] data) -> Array[GrammarSymbol]
|
|
19
20
|
|
|
20
|
-
private def
|
|
21
|
+
private def load_productions: (Hash[String, IR::serialized_value] data) -> Array[Production]
|
|
21
22
|
|
|
22
|
-
private def self.
|
|
23
|
+
private def self.load_productions: (Hash[String, IR::serialized_value] data) -> Array[Production]
|
|
23
24
|
|
|
24
|
-
private def
|
|
25
|
+
private def empty_chunks: () -> Hash[String, IR::serialized_value]
|
|
25
26
|
|
|
26
|
-
private def self.
|
|
27
|
+
private def self.empty_chunks: () -> Hash[String, IR::serialized_value]
|
|
27
28
|
|
|
28
|
-
private def
|
|
29
|
+
private def empty_parameters: () -> Array[IR::serialized_value]
|
|
29
30
|
|
|
30
|
-
private def self.
|
|
31
|
+
private def self.empty_parameters: () -> Array[IR::serialized_value]
|
|
31
32
|
|
|
32
|
-
private def
|
|
33
|
+
private def empty_printers: () -> Array[IR::serialized_value]
|
|
33
34
|
|
|
34
|
-
private def self.
|
|
35
|
+
private def self.empty_printers: () -> Array[IR::serialized_value]
|
|
35
36
|
|
|
36
|
-
private def
|
|
37
|
+
private def empty_tests: () -> Array[IR::serialized_value]
|
|
37
38
|
|
|
38
|
-
private def self.
|
|
39
|
+
private def self.empty_tests: () -> Array[IR::serialized_value]
|
|
39
40
|
|
|
40
|
-
private def
|
|
41
|
+
private def empty_recovery: () -> Hash[String, IR::serialized_value]
|
|
41
42
|
|
|
42
|
-
private def self.
|
|
43
|
+
private def self.empty_recovery: () -> Hash[String, IR::serialized_value]
|
|
43
44
|
|
|
44
|
-
private def
|
|
45
|
+
private def load_automaton: (Hash[String, IR::serialized_value] data) -> Automaton
|
|
45
46
|
|
|
46
|
-
private def self.
|
|
47
|
+
private def self.load_automaton: (Hash[String, IR::serialized_value] data) -> Automaton
|
|
47
48
|
|
|
48
|
-
private def
|
|
49
|
+
private def load_lexer: (Hash[String, IR::serialized_value] data) -> Lexer
|
|
49
50
|
|
|
50
|
-
private def self.
|
|
51
|
+
private def self.load_lexer: (Hash[String, IR::serialized_value] data) -> Lexer
|
|
51
52
|
|
|
52
|
-
private def
|
|
53
|
+
private def load_state: (Hash[String, IR::serialized_value] state, Grammar grammar) -> AutomatonState
|
|
53
54
|
|
|
54
|
-
private def self.
|
|
55
|
+
private def self.load_state: (Hash[String, IR::serialized_value] state, Grammar grammar) -> AutomatonState
|
|
55
56
|
|
|
56
|
-
private def
|
|
57
|
+
private def symbol_keyed: (Hash[String, IR::serialized_value] values, Grammar grammar, ?actions: bool) -> Hash[Integer, IR::serialized_value]
|
|
57
58
|
|
|
58
|
-
private def self.
|
|
59
|
+
private def self.symbol_keyed: (Hash[String, IR::serialized_value] values, Grammar grammar, ?actions: bool) -> Hash[Integer, IR::serialized_value]
|
|
60
|
+
|
|
61
|
+
private def normalize_action: (Hash[String, IR::serialized_value] value) -> parser_action?
|
|
62
|
+
|
|
63
|
+
private def self.normalize_action: (Hash[String, IR::serialized_value] value) -> parser_action?
|
|
64
|
+
|
|
65
|
+
private def load_production: (Hash[String, IR::serialized_value] production) -> Production
|
|
66
|
+
|
|
67
|
+
private def self.load_production: (Hash[String, IR::serialized_value] production) -> Production
|
|
68
|
+
|
|
69
|
+
private def load_user_code_chunks: (Hash[String, Array[Hash[String, IR::serialized_value]]] chunks) -> user_code_chunks
|
|
70
|
+
|
|
71
|
+
private def self.load_user_code_chunks: (Hash[String, Array[Hash[String, IR::serialized_value]]] chunks) -> user_code_chunks
|
|
72
|
+
|
|
73
|
+
private def load_symbol_metadata: (Hash[String, IR::serialized_value] symbol, String field) -> String?
|
|
74
|
+
|
|
75
|
+
private def self.load_symbol_metadata: (Hash[String, IR::serialized_value] symbol, String field) -> String?
|
|
76
|
+
|
|
77
|
+
private def load_grammar_tests: (Array[Hash[String, IR::serialized_value]] tests) -> Array[grammar_test]
|
|
78
|
+
|
|
79
|
+
private def self.load_grammar_tests: (Array[Hash[String, IR::serialized_value]] tests) -> Array[grammar_test]
|
|
80
|
+
|
|
81
|
+
private def symbol_source_position: (Hash[String, IR::serialized_value] symbol) -> String
|
|
82
|
+
|
|
83
|
+
private def self.symbol_source_position: (Hash[String, IR::serialized_value] symbol) -> String
|
|
84
|
+
|
|
85
|
+
private def load_parser_contract: (IR::serialized_value value) -> IR::serialized_value
|
|
86
|
+
|
|
87
|
+
private def self.load_parser_contract: (IR::serialized_value value) -> IR::serialized_value
|
|
88
|
+
|
|
89
|
+
private def symbolize: (IR::serialized_value value) -> IR::serialized_value
|
|
90
|
+
|
|
91
|
+
private def self.symbolize: (IR::serialized_value value) -> IR::serialized_value
|
|
59
92
|
|
|
60
93
|
# @rbs (Grammar | Automaton | Lexer value) -> String
|
|
61
94
|
def self?.dump: (Grammar | Automaton | Lexer value) -> String
|
|
62
95
|
|
|
63
96
|
# @rbs (String source) -> (Grammar | Automaton | Lexer)
|
|
64
97
|
def self?.load: (String source) -> (Grammar | Automaton | Lexer)
|
|
98
|
+
|
|
99
|
+
private
|
|
65
100
|
end
|
|
66
101
|
end
|
|
67
102
|
end
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module IR
|
|
5
5
|
module Validator
|
|
6
|
-
# Structural and referential validation for a
|
|
6
|
+
# Structural and referential validation for a current Automaton IR JSON object.
|
|
7
7
|
# rubocop:disable Metrics/ClassLength -- inline type contracts accompany one cohesive document validator.
|
|
8
8
|
class AutomatonDocument < Base
|
|
9
9
|
ROOT_REQUIRED: Array[String]
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
ROOT_OPTIONAL: Array[String]
|
|
12
12
|
|
|
13
13
|
STATE_REQUIRED: Array[String]
|
|
14
14
|
|
|
@@ -20,12 +20,12 @@ module Ibex
|
|
|
20
20
|
|
|
21
21
|
@grammar: GrammarDocument
|
|
22
22
|
|
|
23
|
-
@states_by_id: Hash[Integer,
|
|
23
|
+
@states_by_id: Hash[Integer, json_object]
|
|
24
24
|
|
|
25
|
-
@data:
|
|
25
|
+
@data: json_object
|
|
26
26
|
|
|
27
|
-
# @rbs (
|
|
28
|
-
def initialize: (
|
|
27
|
+
# @rbs (json_object data, ?version: Integer) -> void
|
|
28
|
+
def initialize: (json_object data, ?version: Integer) -> void
|
|
29
29
|
|
|
30
30
|
# @rbs () -> self
|
|
31
31
|
def validate: () -> self
|
|
@@ -35,6 +35,9 @@ module Ibex
|
|
|
35
35
|
# @rbs () -> void
|
|
36
36
|
def validate_entry_states: () -> void
|
|
37
37
|
|
|
38
|
+
# @rbs (Hash[String, untyped] grammar) -> void
|
|
39
|
+
def validate_construction_contract: (Hash[String, untyped] grammar) -> void
|
|
40
|
+
|
|
38
41
|
# @rbs () -> void
|
|
39
42
|
def validate_digest: () -> void
|
|
40
43
|
|
|
@@ -44,65 +47,65 @@ module Ibex
|
|
|
44
47
|
# @rbs () -> void
|
|
45
48
|
def validate_state_contents: () -> void
|
|
46
49
|
|
|
47
|
-
# @rbs (
|
|
48
|
-
def validate_items: (
|
|
50
|
+
# @rbs (json_value value, String path) -> void
|
|
51
|
+
def validate_items: (json_value value, String path) -> void
|
|
49
52
|
|
|
50
|
-
# @rbs (Integer production_id,
|
|
51
|
-
def validate_item_production: (Integer production_id,
|
|
53
|
+
# @rbs (Integer production_id, json_value dot_value, String path) -> void
|
|
54
|
+
def validate_item_production: (Integer production_id, json_value dot_value, String path) -> void
|
|
52
55
|
|
|
53
|
-
# @rbs (
|
|
54
|
-
def validate_lookaheads: (
|
|
56
|
+
# @rbs (json_value value, String path) -> void
|
|
57
|
+
def validate_lookaheads: (json_value value, String path) -> void
|
|
55
58
|
|
|
56
|
-
# @rbs (
|
|
57
|
-
def validate_transitions: (
|
|
59
|
+
# @rbs (json_value value, String path) -> void
|
|
60
|
+
def validate_transitions: (json_value value, String path) -> void
|
|
58
61
|
|
|
59
|
-
# @rbs (
|
|
60
|
-
def validate_actions: (
|
|
62
|
+
# @rbs (json_value value, String path) -> void
|
|
63
|
+
def validate_actions: (json_value value, String path) -> void
|
|
61
64
|
|
|
62
|
-
# @rbs (
|
|
63
|
-
def validate_gotos: (
|
|
65
|
+
# @rbs (json_value value, String path) -> void
|
|
66
|
+
def validate_gotos: (json_value value, String path) -> void
|
|
64
67
|
|
|
65
|
-
# @rbs (
|
|
66
|
-
def symbol_map: (
|
|
68
|
+
# @rbs (json_value value, String path, ?kind: String?) { (json_value, String, json_object) -> void } -> void
|
|
69
|
+
def symbol_map: (json_value value, String path, ?kind: String?) { (json_value, String, json_object) -> void } -> void
|
|
67
70
|
|
|
68
|
-
# @rbs (
|
|
69
|
-
def validate_state_reference: (
|
|
71
|
+
# @rbs (json_value value, String path) -> void
|
|
72
|
+
def validate_state_reference: (json_value value, String path) -> void
|
|
70
73
|
|
|
71
|
-
# @rbs (
|
|
72
|
-
def validate_parser_action: (
|
|
74
|
+
# @rbs (json_value value, String path, ?nullable: bool) -> void
|
|
75
|
+
def validate_parser_action: (json_value value, String path, ?nullable: bool) -> void
|
|
73
76
|
|
|
74
|
-
# @rbs (
|
|
75
|
-
def validate_production_reference: (
|
|
77
|
+
# @rbs (json_value value, String path) -> void
|
|
78
|
+
def validate_production_reference: (json_value value, String path) -> void
|
|
76
79
|
|
|
77
|
-
# @rbs (
|
|
78
|
-
def validate_conflicts: (
|
|
80
|
+
# @rbs (json_value value, String path) -> void
|
|
81
|
+
def validate_conflicts: (json_value value, String path) -> void
|
|
79
82
|
|
|
80
|
-
# @rbs (
|
|
81
|
-
def validate_shift_reduce: (
|
|
83
|
+
# @rbs (json_object conflict, String path) -> void
|
|
84
|
+
def validate_shift_reduce: (json_object conflict, String path) -> void
|
|
82
85
|
|
|
83
|
-
# @rbs (
|
|
84
|
-
def validate_reduce_reduce: (
|
|
86
|
+
# @rbs (json_object conflict, String path) -> void
|
|
87
|
+
def validate_reduce_reduce: (json_object conflict, String path) -> void
|
|
85
88
|
|
|
86
|
-
# @rbs (
|
|
87
|
-
def validate_conflict_entries: (
|
|
89
|
+
# @rbs (json_object conflict, String path) -> void
|
|
90
|
+
def validate_conflict_entries: (json_object conflict, String path) -> void
|
|
88
91
|
|
|
89
|
-
# @rbs (
|
|
90
|
-
def validate_midrule_origins: (
|
|
92
|
+
# @rbs (json_value value, String path) -> void
|
|
93
|
+
def validate_midrule_origins: (json_value value, String path) -> void
|
|
91
94
|
|
|
92
|
-
# @rbs (
|
|
93
|
-
def validate_conflict_symbol: (
|
|
95
|
+
# @rbs (json_value value, String path) -> void
|
|
96
|
+
def validate_conflict_symbol: (json_value value, String path) -> void
|
|
94
97
|
|
|
95
|
-
# @rbs (
|
|
96
|
-
def validate_resolution: (
|
|
98
|
+
# @rbs (json_value value, String path, ?reductions: Array[Integer]?) -> void
|
|
99
|
+
def validate_resolution: (json_value value, String path, ?reductions: Array[Integer]?) -> void
|
|
97
100
|
|
|
98
101
|
# @rbs () -> void
|
|
99
102
|
def validate_conflict_summary: () -> void
|
|
100
103
|
|
|
101
|
-
# @rbs (
|
|
102
|
-
def validate_conflict_counts: (
|
|
104
|
+
# @rbs (json_object summary, String path) -> void
|
|
105
|
+
def validate_conflict_counts: (json_object summary, String path) -> void
|
|
103
106
|
|
|
104
|
-
# @rbs (
|
|
105
|
-
def validate_expectation: (
|
|
107
|
+
# @rbs (json_object summary, String path) -> void
|
|
108
|
+
def validate_expectation: (json_object summary, String path) -> void
|
|
106
109
|
end
|
|
107
110
|
end
|
|
108
111
|
end
|
|
@@ -3,56 +3,60 @@
|
|
|
3
3
|
module Ibex
|
|
4
4
|
module IR
|
|
5
5
|
module Validator
|
|
6
|
-
|
|
6
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
7
|
+
|
|
8
|
+
type json_object = Hash[String, json_value]
|
|
9
|
+
|
|
10
|
+
# Shared JSON-shape checks for current IR documents.
|
|
7
11
|
class Base
|
|
8
12
|
POSITION: ::String
|
|
9
13
|
|
|
10
14
|
private
|
|
11
15
|
|
|
12
|
-
# @rbs (
|
|
13
|
-
def record: (
|
|
16
|
+
# @rbs (json_value value, String path, Array[String] required, ?Array[String] optional) -> json_object
|
|
17
|
+
def record: (json_value value, String path, Array[String] required, ?Array[String] optional) -> json_object
|
|
14
18
|
|
|
15
|
-
# @rbs (
|
|
16
|
-
def object: (
|
|
19
|
+
# @rbs (json_value value, String path) -> json_object
|
|
20
|
+
def object: (json_value value, String path) -> json_object
|
|
17
21
|
|
|
18
|
-
# @rbs (
|
|
19
|
-
def array: (
|
|
22
|
+
# @rbs (json_value value, String path) -> Array[json_value]
|
|
23
|
+
def array: (json_value value, String path) -> Array[json_value]
|
|
20
24
|
|
|
21
|
-
# @rbs (
|
|
22
|
-
def string: (
|
|
25
|
+
# @rbs (json_value value, String path) -> String
|
|
26
|
+
def string: (json_value value, String path) -> String
|
|
23
27
|
|
|
24
|
-
# @rbs (
|
|
25
|
-
def nonempty_string: (
|
|
28
|
+
# @rbs (json_value value, String path) -> String
|
|
29
|
+
def nonempty_string: (json_value value, String path) -> String
|
|
26
30
|
|
|
27
|
-
# @rbs (
|
|
28
|
-
def integer: (
|
|
31
|
+
# @rbs (json_value value, String path) -> Integer
|
|
32
|
+
def integer: (json_value value, String path) -> Integer
|
|
29
33
|
|
|
30
|
-
# @rbs (
|
|
31
|
-
def nonnegative_integer: (
|
|
34
|
+
# @rbs (json_value value, String path) -> Integer
|
|
35
|
+
def nonnegative_integer: (json_value value, String path) -> Integer
|
|
32
36
|
|
|
33
|
-
# @rbs (
|
|
34
|
-
def boolean: (
|
|
37
|
+
# @rbs (json_value value, String path) -> bool
|
|
38
|
+
def boolean: (json_value value, String path) -> bool
|
|
35
39
|
|
|
36
|
-
# @rbs (
|
|
37
|
-
def literal: (
|
|
40
|
+
# @rbs (json_value value, String path, json_value expected) -> void
|
|
41
|
+
def literal: (json_value value, String path, json_value expected) -> void
|
|
38
42
|
|
|
39
|
-
# @rbs (
|
|
40
|
-
def enum: (
|
|
43
|
+
# @rbs (json_value value, String path, Array[String] values) -> String
|
|
44
|
+
def enum: (json_value value, String path, Array[String] values) -> String
|
|
41
45
|
|
|
42
|
-
# @rbs (
|
|
43
|
-
def location: (
|
|
46
|
+
# @rbs (json_value value, String path, ?nullable: bool) -> void
|
|
47
|
+
def location: (json_value value, String path, ?nullable: bool) -> void
|
|
44
48
|
|
|
45
|
-
# @rbs (
|
|
46
|
-
def positive_integer: (
|
|
49
|
+
# @rbs (json_value value, String path) -> Integer
|
|
50
|
+
def positive_integer: (json_value value, String path) -> Integer
|
|
47
51
|
|
|
48
|
-
# @rbs (
|
|
49
|
-
def nullable_string: (
|
|
52
|
+
# @rbs (json_value value, String path) -> String?
|
|
53
|
+
def nullable_string: (json_value value, String path) -> String?
|
|
50
54
|
|
|
51
|
-
# @rbs (
|
|
52
|
-
def metadata: (
|
|
55
|
+
# @rbs (json_value value, String path) -> void
|
|
56
|
+
def metadata: (json_value value, String path) -> void
|
|
53
57
|
|
|
54
|
-
# @rbs (
|
|
55
|
-
def field: (
|
|
58
|
+
# @rbs (json_object value, String key, String path) -> json_value
|
|
59
|
+
def field: (json_object value, String key, String path) -> json_value
|
|
56
60
|
|
|
57
61
|
# @rbs (String path, String key) -> String
|
|
58
62
|
def child_path: (String path, String key) -> String
|