ibex 0.2.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 +95 -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 +262 -0
- data/docs/development.md +179 -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 +1581 -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/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 +128 -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 +307 -0
- data/docs/stability.md +144 -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.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/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 +357 -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 +140 -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/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 +10 -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/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/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/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/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 +232 -12
- data/lib/ibex/ir/migration.rb +0 -120
- data/sig/ibex/ir/migration.rbs +0 -34
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# rbs_inline: enabled
|
|
2
3
|
|
|
3
4
|
module Ibex
|
|
4
5
|
module Frontend
|
|
@@ -7,7 +8,7 @@ module Ibex
|
|
|
7
8
|
class Formatter
|
|
8
9
|
DECLARATION_STARTS = %i[
|
|
9
10
|
PRAGMA INCLUDE IMPORT TOKEN PRECHIGH PRECLOW OPTIONS EXPECT EXPECT_RR START RECOVER ON_ERROR_REDUCE TEST LEXER
|
|
10
|
-
CONVERT DISPLAY TYPE PARAM PRINTER RULE
|
|
11
|
+
CONVERT DISPLAY TYPE PARAM PRINTER PARSER RULE
|
|
11
12
|
].freeze #: Array[Symbol]
|
|
12
13
|
ASSOCIATIONS = %i[LEFT RIGHT NONASSOC].freeze #: Array[Symbol]
|
|
13
14
|
CALLABLES = %i[LHS PARAMETERIZED_REFERENCE SEPARATED_LIST SEPARATED_NONEMPTY_LIST].freeze #: Array[Symbol]
|
|
@@ -22,6 +23,16 @@ module Ibex
|
|
|
22
23
|
# role: Symbol?,
|
|
23
24
|
# gap: Array[Segment]
|
|
24
25
|
# }
|
|
26
|
+
# type formatter_state = {
|
|
27
|
+
# section: :declarations | :rules,
|
|
28
|
+
# precedence_closer: external_token?,
|
|
29
|
+
# conversion: bool,
|
|
30
|
+
# conversion_name: bool,
|
|
31
|
+
# parser: bool,
|
|
32
|
+
# parser_key: bool,
|
|
33
|
+
# depth: Integer,
|
|
34
|
+
# rule_colon: bool
|
|
35
|
+
# }
|
|
25
36
|
|
|
26
37
|
# @rbs (String source, ?file: String, ?mode: Symbol) -> String
|
|
27
38
|
def self.format(source, file: "(grammar)", mode: :default)
|
|
@@ -105,8 +116,8 @@ module Ibex
|
|
|
105
116
|
def annotate_roles(elements)
|
|
106
117
|
state = {
|
|
107
118
|
section: :declarations, precedence_closer: nil, conversion: false,
|
|
108
|
-
conversion_name: true, depth: 0, rule_colon: false
|
|
109
|
-
} #:
|
|
119
|
+
conversion_name: true, parser: false, parser_key: true, depth: 0, rule_colon: false
|
|
120
|
+
} #: formatter_state
|
|
110
121
|
elements.each do |element|
|
|
111
122
|
external = element.fetch(:external)
|
|
112
123
|
next unless external
|
|
@@ -131,7 +142,7 @@ module Ibex
|
|
|
131
142
|
end
|
|
132
143
|
end
|
|
133
144
|
|
|
134
|
-
# @rbs (external_token external,
|
|
145
|
+
# @rbs (external_token external, formatter_state state) -> Symbol?
|
|
135
146
|
def token_role(external, state)
|
|
136
147
|
document_role = document_token_role(external, state)
|
|
137
148
|
return document_role if document_role
|
|
@@ -139,12 +150,12 @@ module Ibex
|
|
|
139
150
|
rule_token_role(external, state)
|
|
140
151
|
end
|
|
141
152
|
|
|
142
|
-
# @rbs (external_token external,
|
|
153
|
+
# @rbs (external_token external, formatter_state state) -> Symbol?
|
|
143
154
|
def document_token_role(external, state)
|
|
144
155
|
return :user_code if external == :USER_CODE
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return
|
|
156
|
+
|
|
157
|
+
nested_role = nested_declaration_role(external, state)
|
|
158
|
+
return nested_role if nested_role
|
|
148
159
|
return :conversion_entry if state.fetch(:conversion) && state.fetch(:conversion_name)
|
|
149
160
|
return :rule_keyword if external == :RULE
|
|
150
161
|
return :declaration if DECLARATION_STARTS.include?(external)
|
|
@@ -152,7 +163,18 @@ module Ibex
|
|
|
152
163
|
nil
|
|
153
164
|
end
|
|
154
165
|
|
|
155
|
-
# @rbs (
|
|
166
|
+
# @rbs (external_token external, formatter_state state) -> Symbol?
|
|
167
|
+
def nested_declaration_role(external, state)
|
|
168
|
+
return precedence_role(external, state) if %i[PRECHIGH PRECLOW].include?(external)
|
|
169
|
+
return :precedence_level if ASSOCIATIONS.include?(external) && state[:precedence_closer]
|
|
170
|
+
return :parser_end if external == :END && state.fetch(:parser)
|
|
171
|
+
return :parser_setting if state.fetch(:parser) && state.fetch(:parser_key)
|
|
172
|
+
return section_end_role(state) if external == :END
|
|
173
|
+
|
|
174
|
+
nil
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# @rbs (formatter_state state) -> Symbol?
|
|
156
178
|
def section_end_role(state)
|
|
157
179
|
return :conversion_end if state.fetch(:conversion)
|
|
158
180
|
return :grammar_end if state.fetch(:section) == :rules
|
|
@@ -160,7 +182,7 @@ module Ibex
|
|
|
160
182
|
nil
|
|
161
183
|
end
|
|
162
184
|
|
|
163
|
-
# @rbs (external_token external,
|
|
185
|
+
# @rbs (external_token external, formatter_state state) -> Symbol?
|
|
164
186
|
def rule_token_role(external, state)
|
|
165
187
|
return :rule_start if external == :INLINE && state.fetch(:section) == :rules
|
|
166
188
|
return :rule_start if external == :LHS
|
|
@@ -175,21 +197,34 @@ module Ibex
|
|
|
175
197
|
nil
|
|
176
198
|
end
|
|
177
199
|
|
|
178
|
-
# @rbs (external_token external,
|
|
200
|
+
# @rbs (external_token external, formatter_state state) -> Symbol
|
|
179
201
|
def precedence_role(external, state)
|
|
180
202
|
return :precedence_end if state[:precedence_closer] == external
|
|
181
203
|
|
|
182
204
|
:declaration
|
|
183
205
|
end
|
|
184
206
|
|
|
185
|
-
# @rbs (external_token external, Symbol? role,
|
|
207
|
+
# @rbs (external_token external, Symbol? role, formatter_state state) -> void
|
|
186
208
|
def advance_role_state(external, role, state)
|
|
187
209
|
advance_precedence_state(external, role, state)
|
|
188
210
|
advance_conversion_state(external, role, state)
|
|
211
|
+
advance_parser_state(external, role, state)
|
|
189
212
|
advance_rule_state(external, role, state)
|
|
190
213
|
end
|
|
191
214
|
|
|
192
|
-
# @rbs (external_token external, Symbol? role,
|
|
215
|
+
# @rbs (external_token external, Symbol? role, formatter_state state) -> void
|
|
216
|
+
def advance_parser_state(external, role, state)
|
|
217
|
+
if external == :PARSER
|
|
218
|
+
state[:parser] = true
|
|
219
|
+
state[:parser_key] = true
|
|
220
|
+
elsif role == :parser_end
|
|
221
|
+
state[:parser] = false
|
|
222
|
+
elsif state.fetch(:parser)
|
|
223
|
+
state[:parser_key] = !state.fetch(:parser_key)
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# @rbs (external_token external, Symbol? role, formatter_state state) -> void
|
|
193
228
|
def advance_precedence_state(external, role, state)
|
|
194
229
|
if role == :declaration && %i[PRECHIGH PRECLOW].include?(external)
|
|
195
230
|
state[:precedence_closer] = external == :PRECHIGH ? :PRECLOW : :PRECHIGH
|
|
@@ -198,7 +233,7 @@ module Ibex
|
|
|
198
233
|
end
|
|
199
234
|
end
|
|
200
235
|
|
|
201
|
-
# @rbs (external_token external, Symbol? role,
|
|
236
|
+
# @rbs (external_token external, Symbol? role, formatter_state state) -> void
|
|
202
237
|
def advance_conversion_state(external, role, state)
|
|
203
238
|
if external == :CONVERT
|
|
204
239
|
state[:conversion] = true
|
|
@@ -212,7 +247,7 @@ module Ibex
|
|
|
212
247
|
end
|
|
213
248
|
end
|
|
214
249
|
|
|
215
|
-
# @rbs (external_token external, Symbol? role,
|
|
250
|
+
# @rbs (external_token external, Symbol? role, formatter_state state) -> void
|
|
216
251
|
def advance_rule_state(external, role, state)
|
|
217
252
|
state[:section] = :rules if external == :RULE
|
|
218
253
|
state[:rule_colon] = true if external == :LHS
|
|
@@ -310,7 +345,8 @@ module Ibex
|
|
|
310
345
|
return false if current_role == :rule_start && previous.fetch(:external) == :INLINE
|
|
311
346
|
|
|
312
347
|
return true if %i[declaration rule_keyword precedence_level precedence_end conversion_entry
|
|
313
|
-
conversion_end rule_start alternative grammar_end
|
|
348
|
+
conversion_end parser_setting parser_end rule_start alternative grammar_end
|
|
349
|
+
user_code].include?(current_role)
|
|
314
350
|
return true if previous_role == :rule_keyword
|
|
315
351
|
return false unless current.fetch(:segment).kind == :user_code_marker
|
|
316
352
|
|
|
@@ -320,7 +356,7 @@ module Ibex
|
|
|
320
356
|
# @rbs (formatter_element element) -> Integer
|
|
321
357
|
def indentation(element)
|
|
322
358
|
case element.fetch(:role)
|
|
323
|
-
when :rule_start, :precedence_level, :conversion_entry, :rule_comment then 2
|
|
359
|
+
when :rule_start, :precedence_level, :conversion_entry, :parser_setting, :rule_comment then 2
|
|
324
360
|
when :alternative, :alternative_comment then 4
|
|
325
361
|
else 0
|
|
326
362
|
end
|
|
@@ -346,9 +382,9 @@ module Ibex
|
|
|
346
382
|
text.end_with?("\n")
|
|
347
383
|
end
|
|
348
384
|
|
|
349
|
-
# @rbs (
|
|
385
|
+
# @rbs (Object? left, Object? right) -> bool
|
|
350
386
|
def same_semantic_projection?(left, right)
|
|
351
|
-
pending = [[left, right]] #: Array[[
|
|
387
|
+
pending = [[left, right]] #: Array[[Object?, Object?]]
|
|
352
388
|
until pending.empty?
|
|
353
389
|
pair = pending.pop
|
|
354
390
|
next unless pair
|
|
@@ -362,16 +398,20 @@ module Ibex
|
|
|
362
398
|
true
|
|
363
399
|
end
|
|
364
400
|
|
|
365
|
-
# @rbs (
|
|
401
|
+
# @rbs (Object? left, Object? right) -> bool
|
|
366
402
|
def comparable_semantic_values?(left, right)
|
|
367
|
-
|
|
403
|
+
if left.is_a?(Struct)
|
|
404
|
+
return false unless right.is_a?(Struct) && left.instance_of?(right.class)
|
|
405
|
+
|
|
406
|
+
return left.members == right.members
|
|
407
|
+
end
|
|
368
408
|
return right.is_a?(Array) && left.length == right.length if left.is_a?(Array)
|
|
369
409
|
return comparable_semantic_hashes?(left, right) if left.is_a?(Hash)
|
|
370
410
|
|
|
371
411
|
left == right
|
|
372
412
|
end
|
|
373
413
|
|
|
374
|
-
# @rbs (Hash[
|
|
414
|
+
# @rbs (Hash[Object?, Object?] left, Object? right) -> bool
|
|
375
415
|
def comparable_semantic_hashes?(left, right)
|
|
376
416
|
return false unless right.is_a?(Hash)
|
|
377
417
|
|
|
@@ -380,24 +420,30 @@ module Ibex
|
|
|
380
420
|
left_keys.length == right_keys.length && left_keys.all? { |key| right_keys.include?(key) }
|
|
381
421
|
end
|
|
382
422
|
|
|
383
|
-
# @rbs (Array[[
|
|
423
|
+
# @rbs (Array[[Object?, Object?]] pending, Object? left, Object? right) -> void
|
|
384
424
|
def append_semantic_children(pending, left, right)
|
|
385
425
|
case left
|
|
386
426
|
when Struct
|
|
427
|
+
return unless right.is_a?(Struct)
|
|
428
|
+
|
|
387
429
|
semantic_members(left).reverse_each { |member| pending << [left[member], right[member]] }
|
|
388
430
|
when Array
|
|
431
|
+
return unless right.is_a?(Array)
|
|
432
|
+
|
|
389
433
|
left.each_index.reverse_each { |index| pending << [left[index], right[index]] }
|
|
390
434
|
when Hash
|
|
435
|
+
return unless right.is_a?(Hash)
|
|
436
|
+
|
|
391
437
|
semantic_keys(left).reverse_each { |key| pending << [left[key], right[key]] }
|
|
392
438
|
end
|
|
393
439
|
end
|
|
394
440
|
|
|
395
|
-
# @rbs (Struct[
|
|
441
|
+
# @rbs (Struct[Object?] value) -> Array[Symbol]
|
|
396
442
|
def semantic_members(value)
|
|
397
|
-
value.members.reject { |member| %i[loc span].include?(member) }
|
|
443
|
+
value.members.reject { |member| %i[loc span extended_loc].include?(member) }
|
|
398
444
|
end
|
|
399
445
|
|
|
400
|
-
# @rbs (Hash[
|
|
446
|
+
# @rbs (Hash[Object?, Object?] value) -> Array[Object?]
|
|
401
447
|
def semantic_keys(value)
|
|
402
448
|
value.keys.reject { |key| %i[loc span].include?(key) }
|
|
403
449
|
end
|