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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Generated from lib/ibex/configuration/inspector.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Configuration
|
|
5
|
+
# Converts parsed source or validated Grammar IR into static configuration facts.
|
|
6
|
+
# rubocop:disable Metrics/ModuleLength -- source and IR adapters share one closed evidence vocabulary.
|
|
7
|
+
module Inspector
|
|
8
|
+
# @rbs (Frontend::Resolution resolution) -> Input
|
|
9
|
+
def self?.from_source: (Frontend::Resolution resolution) -> Input
|
|
10
|
+
|
|
11
|
+
# @rbs (IR::Grammar grammar, path: String) -> Input
|
|
12
|
+
def self?.from_grammar_ir: (IR::Grammar grammar, path: String) -> Input
|
|
13
|
+
|
|
14
|
+
# @rbs (Hash[String, config_value] values, Hash[String, Location] locations,
|
|
15
|
+
# Hash[String, Array[Evidence]] evidence, String name, config_value value,
|
|
16
|
+
# Frontend::Location | Location location) -> void
|
|
17
|
+
def self?.add_source_fact: (Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, String name, config_value value, Frontend::Location | Location location) -> void
|
|
18
|
+
|
|
19
|
+
# @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
|
|
20
|
+
# Hash[String, Array[Evidence]] evidence) -> void
|
|
21
|
+
def self?.add_source_options: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
|
|
22
|
+
|
|
23
|
+
# @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
|
|
24
|
+
# Hash[String, Array[Evidence]] evidence) -> void
|
|
25
|
+
def self?.add_source_parser_contract: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
|
|
26
|
+
|
|
27
|
+
# @rbs (String name) -> bool?
|
|
28
|
+
def self?.option_value: (String name) -> bool?
|
|
29
|
+
|
|
30
|
+
# @rbs (Frontend::Location | Location location) -> Location
|
|
31
|
+
def self?.configuration_location: (Frontend::Location | Location location) -> Location
|
|
32
|
+
|
|
33
|
+
# @rbs (Key key, Array[[bool, Location]] occurrences, bool selected_value) -> Array[Evidence]
|
|
34
|
+
def self?.option_evidence: (Key key, Array[[ bool, Location ]] occurrences, bool selected_value) -> Array[Evidence]
|
|
35
|
+
|
|
36
|
+
# @rbs (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence,
|
|
37
|
+
# Hash[String, Recording] recordings, String name, config_value value) -> void
|
|
38
|
+
def self?.add_ir_fact: (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings, String name, config_value value) -> void
|
|
39
|
+
|
|
40
|
+
# @rbs (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations,
|
|
41
|
+
# Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
|
|
42
|
+
def self?.add_parser_contract: (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
|
|
43
|
+
|
|
44
|
+
# @rbs (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values,
|
|
45
|
+
# Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence,
|
|
46
|
+
# Hash[String, Recording] recordings) -> void
|
|
47
|
+
def self?.add_contract_entry: (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
|
|
48
|
+
|
|
49
|
+
# @rbs (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
|
|
50
|
+
def self?.contract_entries: (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# Generated from lib/ibex/configuration.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
# Typed, provenance-preserving effective configuration.
|
|
5
|
+
module Configuration
|
|
6
|
+
type config_value = Symbol | String | Integer | bool | nil
|
|
7
|
+
|
|
8
|
+
type json_value = String | Integer | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
9
|
+
|
|
10
|
+
OWNER_NAMES: Hash[Symbol, String]
|
|
11
|
+
|
|
12
|
+
POLICIES: Array[Symbol]
|
|
13
|
+
|
|
14
|
+
ORIGIN_KINDS: Array[Symbol]
|
|
15
|
+
|
|
16
|
+
BOOLEAN_VALUES: Array[bool]
|
|
17
|
+
|
|
18
|
+
DECLARED_VALUE_UNSET: Object
|
|
19
|
+
|
|
20
|
+
OWNER_POLICIES: Hash[Symbol, Symbol]
|
|
21
|
+
|
|
22
|
+
# One closed definition of a configuration concept and its value domain.
|
|
23
|
+
class Key
|
|
24
|
+
attr_reader name: String
|
|
25
|
+
|
|
26
|
+
attr_reader type: Symbol
|
|
27
|
+
|
|
28
|
+
attr_reader default: config_value
|
|
29
|
+
|
|
30
|
+
attr_reader owner: Symbol
|
|
31
|
+
|
|
32
|
+
attr_reader policy: Symbol
|
|
33
|
+
|
|
34
|
+
attr_reader allowed_values: Array[config_value]?
|
|
35
|
+
|
|
36
|
+
attr_reader cli_option: Symbol?
|
|
37
|
+
|
|
38
|
+
# @rbs (String name, type: Symbol, default: config_value, owner: Symbol, policy: Symbol,
|
|
39
|
+
# ?allowed_values: Array[config_value]?, ?cli_option: Symbol?) -> void
|
|
40
|
+
def initialize: (String name, type: Symbol, default: config_value, owner: Symbol, policy: Symbol, ?allowed_values: Array[config_value]?, ?cli_option: Symbol?) -> void
|
|
41
|
+
|
|
42
|
+
# Validate and defensively freeze a value from an adapter or declaration.
|
|
43
|
+
# @rbs (config_value value) -> config_value
|
|
44
|
+
def validate: (config_value value) -> config_value
|
|
45
|
+
|
|
46
|
+
# @rbs () -> String
|
|
47
|
+
def owner_name: () -> String
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
# @rbs (String name, Symbol owner, Symbol policy) -> void
|
|
52
|
+
def validate_identity!: (String name, Symbol owner, Symbol policy) -> void
|
|
53
|
+
|
|
54
|
+
# @rbs (Symbol type, Symbol policy, Symbol? cli_option) -> void
|
|
55
|
+
def validate_shape!: (Symbol type, Symbol policy, Symbol? cli_option) -> void
|
|
56
|
+
|
|
57
|
+
# @rbs (config_value value) -> config_value
|
|
58
|
+
def immutable: (config_value value) -> config_value
|
|
59
|
+
|
|
60
|
+
# @rbs (config_value value) -> bool
|
|
61
|
+
def valid_type?: (config_value value) -> bool
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Where a selected configuration value came from.
|
|
65
|
+
class Origin
|
|
66
|
+
attr_reader kind: Symbol
|
|
67
|
+
|
|
68
|
+
attr_reader location: Location?
|
|
69
|
+
|
|
70
|
+
# @rbs (Symbol kind, ?location: Location?) -> void
|
|
71
|
+
def initialize: (Symbol kind, ?location: Location?) -> void
|
|
72
|
+
|
|
73
|
+
# @rbs () -> Hash[String, json_value]
|
|
74
|
+
def to_h: () -> Hash[String, json_value]
|
|
75
|
+
|
|
76
|
+
# @rbs () -> String
|
|
77
|
+
def label: () -> String
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
# @rbs (Location location) -> Hash[String, json_value]
|
|
82
|
+
def stringify_location: (Location location) -> Hash[String, json_value]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# A typed effective value plus the evidence needed to explain it.
|
|
86
|
+
class Value
|
|
87
|
+
attr_reader key: Key
|
|
88
|
+
|
|
89
|
+
attr_reader value: config_value
|
|
90
|
+
|
|
91
|
+
attr_reader origin: Origin
|
|
92
|
+
|
|
93
|
+
attr_reader explicit: bool
|
|
94
|
+
|
|
95
|
+
attr_reader canonical: bool
|
|
96
|
+
|
|
97
|
+
attr_reader declared_value: config_value
|
|
98
|
+
|
|
99
|
+
# @rbs (Key key, config_value value, origin: Origin, explicit: bool, canonical: bool,
|
|
100
|
+
# ?declared_value: config_value | Object) -> void
|
|
101
|
+
def initialize: (Key key, config_value value, origin: Origin, explicit: bool, canonical: bool, ?declared_value: config_value | Object) -> void
|
|
102
|
+
|
|
103
|
+
# @rbs () -> Hash[String, json_value]
|
|
104
|
+
def to_h: () -> Hash[String, json_value]
|
|
105
|
+
|
|
106
|
+
private
|
|
107
|
+
|
|
108
|
+
# @rbs (Key key, Origin origin, bool explicit, bool canonical, config_value | Object declared_value) -> void
|
|
109
|
+
def validate_provenance!: (Key key, Origin origin, bool explicit, bool canonical, config_value | Object declared_value) -> void
|
|
110
|
+
|
|
111
|
+
# @rbs (Key key, Origin origin, bool canonical) -> void
|
|
112
|
+
def validate_canonical_origin!: (Key key, Origin origin, bool canonical) -> void
|
|
113
|
+
|
|
114
|
+
# @rbs (Key key, Origin origin) -> void
|
|
115
|
+
def validate_owner_source!: (Key key, Origin origin) -> void
|
|
116
|
+
|
|
117
|
+
# @rbs (Origin origin, bool explicit) -> void
|
|
118
|
+
def validate_explicitness!: (Origin origin, bool explicit) -> void
|
|
119
|
+
|
|
120
|
+
# @rbs (bool canonical, config_value | Object declared_value) -> void
|
|
121
|
+
def validate_declared_evidence!: (bool canonical, config_value | Object declared_value) -> void
|
|
122
|
+
|
|
123
|
+
# @rbs (config_value value) -> (String | Integer | bool | nil)
|
|
124
|
+
def json_value: (config_value value) -> (String | Integer | bool | nil)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# A fixed/minimum request that contradicts the declared contract.
|
|
128
|
+
class Conflict < Ibex::Error
|
|
129
|
+
attr_reader key: Key
|
|
130
|
+
|
|
131
|
+
attr_reader declared: Value
|
|
132
|
+
|
|
133
|
+
attr_reader requested: Value
|
|
134
|
+
|
|
135
|
+
# @rbs (Key key, Value declared, Value requested) -> void
|
|
136
|
+
def initialize: (Key key, Value declared, Value requested) -> void
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Closed definitions shared by generation, grammar tests, and analyses.
|
|
140
|
+
module Registry
|
|
141
|
+
DEFINITIONS: Array[Key]
|
|
142
|
+
|
|
143
|
+
BY_NAME: Hash[String, Key]
|
|
144
|
+
|
|
145
|
+
# @rbs (String name) -> Key
|
|
146
|
+
def self.fetch: (String name) -> Key
|
|
147
|
+
|
|
148
|
+
# @rbs () -> Array[Key]
|
|
149
|
+
def self.keys: () -> Array[Key]
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Applies fixed/minimum override algebra and exposes deterministic evidence.
|
|
153
|
+
class Resolver
|
|
154
|
+
attr_reader values: Array[Value]
|
|
155
|
+
|
|
156
|
+
# @rbs (?keys: Array[Key], ?grammar: Hash[String, config_value], ?project: Hash[String, config_value],
|
|
157
|
+
# ?cli: Hash[String, config_value], ?analysis_overrides: Hash[String, config_value],
|
|
158
|
+
# ?locations: Hash[Symbol, Hash[String, Location]]) -> void
|
|
159
|
+
def initialize: (?keys: Array[Key], ?grammar: Hash[String, config_value], ?project: Hash[String, config_value], ?cli: Hash[String, config_value], ?analysis_overrides: Hash[String, config_value], ?locations: Hash[Symbol, Hash[String, Location]]) -> void
|
|
160
|
+
|
|
161
|
+
# @rbs (String name) -> Value
|
|
162
|
+
def fetch: (String name) -> Value
|
|
163
|
+
|
|
164
|
+
# @rbs (String name) -> config_value
|
|
165
|
+
def value: (String name) -> config_value
|
|
166
|
+
|
|
167
|
+
# @rbs () -> Hash[String, Array[Hash[String, json_value]]]
|
|
168
|
+
def to_h: () -> Hash[String, Array[Hash[String, json_value]]]
|
|
169
|
+
|
|
170
|
+
# Deterministic JSON independent of caller hash insertion order.
|
|
171
|
+
# @rbs () -> String
|
|
172
|
+
def dump: () -> String
|
|
173
|
+
|
|
174
|
+
private
|
|
175
|
+
|
|
176
|
+
# @rbs (Symbol kind, Hash[String, config_value] entries) -> void
|
|
177
|
+
def validate_source!: (Symbol kind, Hash[String, config_value] entries) -> void
|
|
178
|
+
|
|
179
|
+
# @rbs (Hash[Symbol, Hash[String, Location]] locations,
|
|
180
|
+
# Hash[Symbol, Hash[String, config_value]] sources) -> void
|
|
181
|
+
def validate_locations!: (Hash[Symbol, Hash[String, Location]] locations, Hash[Symbol, Hash[String, config_value]] sources) -> void
|
|
182
|
+
|
|
183
|
+
# @rbs (Key key, Hash[Symbol, Hash[String, config_value]] sources,
|
|
184
|
+
# Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
185
|
+
def resolve_key: (Key key, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
186
|
+
|
|
187
|
+
# @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
|
|
188
|
+
# Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
189
|
+
def resolve_fixed: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
190
|
+
|
|
191
|
+
# @rbs (Key key, Value? grammar, Value declared, Array[Value] requested) -> void
|
|
192
|
+
def reject_fixed_conflicts!: (Key key, Value? grammar, Value declared, Array[Value] requested) -> void
|
|
193
|
+
|
|
194
|
+
# @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
|
|
195
|
+
# Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
196
|
+
def resolve_minimum: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
197
|
+
|
|
198
|
+
# @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
|
|
199
|
+
# Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
200
|
+
def resolve_override: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
|
|
201
|
+
|
|
202
|
+
# @rbs (Key key, Symbol kind, Hash[Symbol, Hash[String, config_value]] sources,
|
|
203
|
+
# Hash[Symbol, Hash[String, Location]] locations) -> Value?
|
|
204
|
+
def source_value: (Key key, Symbol kind, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value?
|
|
205
|
+
|
|
206
|
+
# @rbs (Key key, config_value raw, Symbol kind, Hash[Symbol, Hash[String, Location]] locations,
|
|
207
|
+
# explicit: bool) -> Value
|
|
208
|
+
def value_from: (Key key, config_value raw, Symbol kind, Hash[Symbol, Hash[String, Location]] locations, explicit: bool) -> Value
|
|
209
|
+
|
|
210
|
+
# @rbs (Symbol kind, String name, Hash[Symbol, Hash[String, Location]] locations) -> Origin
|
|
211
|
+
def origin: (Symbol kind, String name, Hash[Symbol, Hash[String, Location]] locations) -> Origin
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Converts the existing internal CLI option hash into canonical concepts.
|
|
215
|
+
class CLIAdapter
|
|
216
|
+
# The adapter receives the legacy CLI option map, which also contains
|
|
217
|
+
# operation flags and list values outside the closed configuration domain.
|
|
218
|
+
# It validates and converts only declared configuration options.
|
|
219
|
+
# @rbs (Hash[Symbol, untyped] options, ?explicit_keys: Array[Symbol]) -> void
|
|
220
|
+
def initialize: (Hash[Symbol, untyped] options, ?explicit_keys: Array[Symbol]) -> void
|
|
221
|
+
|
|
222
|
+
# @rbs (?grammar: Hash[String, config_value], ?locations: Hash[String, Location]) -> Resolver
|
|
223
|
+
def resolve: (?grammar: Hash[String, config_value], ?locations: Hash[String, Location]) -> Resolver
|
|
224
|
+
|
|
225
|
+
# Canonical configuration values selected by explicit legacy CLI options.
|
|
226
|
+
# Raw option spellings stop at this adapter boundary.
|
|
227
|
+
# @rbs () -> Hash[String, config_value]
|
|
228
|
+
def configuration_values: () -> Hash[String, config_value]
|
|
229
|
+
|
|
230
|
+
private
|
|
231
|
+
|
|
232
|
+
# @rbs (Symbol name, untyped value) -> config_value
|
|
233
|
+
def convert: (Symbol name, untyped value) -> config_value
|
|
234
|
+
|
|
235
|
+
# @rbs (untyped value) -> config_value
|
|
236
|
+
def convert_entry_isolation: (untyped value) -> config_value
|
|
237
|
+
|
|
238
|
+
# @rbs () -> Symbol
|
|
239
|
+
def convert_line_mapping: () -> Symbol
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
@@ -4,6 +4,8 @@ module Ibex
|
|
|
4
4
|
module Coverage
|
|
5
5
|
# Strictly turns one or more complete parse sessions into a coverage report.
|
|
6
6
|
class Collector
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
8
|
+
|
|
7
9
|
@expected_sequence: Integer
|
|
8
10
|
|
|
9
11
|
@in_session: bool
|
|
@@ -30,23 +32,23 @@ module Ibex
|
|
|
30
32
|
# @rbs (String path) -> Report
|
|
31
33
|
def self.collect_file: (String path) -> Report
|
|
32
34
|
|
|
33
|
-
# @rbs (Hash[String,
|
|
34
|
-
def consume: (Hash[String,
|
|
35
|
+
# @rbs (Hash[String, json_value] document, source: String, line: Integer) -> void
|
|
36
|
+
def consume: (Hash[String, json_value] document, source: String, line: Integer) -> void
|
|
35
37
|
|
|
36
38
|
# @rbs (source: String) -> Report
|
|
37
39
|
def finish: (source: String) -> Report
|
|
38
40
|
|
|
39
41
|
private
|
|
40
42
|
|
|
41
|
-
# @rbs (Hash[
|
|
42
|
-
def start_session: (Hash[
|
|
43
|
+
# @rbs (Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
|
|
44
|
+
def start_session: (Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
|
|
43
45
|
|
|
44
|
-
# @rbs (String event, Hash[
|
|
45
|
-
def consume_session_event: (String event, Hash[
|
|
46
|
+
# @rbs (String event, Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
|
|
47
|
+
def consume_session_event: (String event, Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
|
|
46
48
|
|
|
47
|
-
# @rbs (Hash[
|
|
49
|
+
# @rbs (Hash[String, json_value] data, String source, Integer line)
|
|
48
50
|
# -> [[String, Integer, Integer, Integer], Integer]
|
|
49
|
-
def session_metadata: (Hash[
|
|
51
|
+
def session_metadata: (Hash[String, json_value] data, String source, Integer line) -> [ [ String, Integer, Integer, Integer ], Integer ]
|
|
50
52
|
|
|
51
53
|
# @rbs ([String, Integer, Integer, Integer] metadata, String source, Integer line) -> void
|
|
52
54
|
def establish_metadata: ([ String, Integer, Integer, Integer ] metadata, String source, Integer line) -> void
|
|
@@ -54,14 +56,14 @@ module Ibex
|
|
|
54
56
|
# @rbs (String source, Integer line) -> void
|
|
55
57
|
def validate_metadata!: (String source, Integer line) -> void
|
|
56
58
|
|
|
57
|
-
# @rbs (
|
|
58
|
-
def hit_state: (
|
|
59
|
+
# @rbs (json_value id, String source, Integer line) -> void
|
|
60
|
+
def hit_state: (json_value id, String source, Integer line) -> void
|
|
59
61
|
|
|
60
|
-
# @rbs (
|
|
61
|
-
def hit_production: (
|
|
62
|
+
# @rbs (json_value id, String source, Integer line) -> void
|
|
63
|
+
def hit_production: (json_value id, String source, Integer line) -> void
|
|
62
64
|
|
|
63
|
-
# @rbs (
|
|
64
|
-
def valid_id?: (
|
|
65
|
+
# @rbs (json_value id, Integer total) -> bool
|
|
66
|
+
def valid_id?: (json_value id, Integer total) -> bool
|
|
65
67
|
|
|
66
68
|
# @rbs (Hash[Integer, Integer] hits, Integer id, String kind, String source, Integer line) -> void
|
|
67
69
|
def increment: (Hash[Integer, Integer] hits, Integer id, String kind, String source, Integer line) -> void
|
|
@@ -4,6 +4,8 @@ module Ibex
|
|
|
4
4
|
module Coverage
|
|
5
5
|
# Bounded reader for the public runtime-event JSON Lines protocol.
|
|
6
6
|
module EventStream
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
8
|
+
|
|
7
9
|
interface _CoverageEventInput
|
|
8
10
|
def gets: (Integer) -> String?
|
|
9
11
|
end
|
|
@@ -16,24 +18,24 @@ module Ibex
|
|
|
16
18
|
|
|
17
19
|
EVENT_TYPES: Array[String]
|
|
18
20
|
|
|
19
|
-
# @rbs (String path) { (Hash[String,
|
|
20
|
-
def self.each_file: (String path) { (Hash[String,
|
|
21
|
+
# @rbs (String path) { (Hash[String, json_value], Integer) -> void } -> void
|
|
22
|
+
def self.each_file: (String path) { (Hash[String, json_value], Integer) -> void } -> void
|
|
21
23
|
|
|
22
24
|
# @rbs (_CoverageEventInput input, source: String)
|
|
23
|
-
# { (Hash[String,
|
|
24
|
-
def self.each_io: (_CoverageEventInput input, source: String) { (Hash[String,
|
|
25
|
+
# { (Hash[String, json_value], Integer) -> void } -> void
|
|
26
|
+
def self.each_io: (_CoverageEventInput input, source: String) { (Hash[String, json_value], Integer) -> void } -> void
|
|
25
27
|
|
|
26
28
|
# @rbs (String line, String source, Integer line_number) -> void
|
|
27
29
|
private def self.reject_oversized_line: (String line, String source, Integer line_number) -> void
|
|
28
30
|
|
|
29
|
-
# @rbs (String line, String source, Integer line_number) -> Hash[String,
|
|
30
|
-
private def self.parse_line: (String line, String source, Integer line_number) -> Hash[String,
|
|
31
|
+
# @rbs (String line, String source, Integer line_number) -> Hash[String, json_value]
|
|
32
|
+
private def self.parse_line: (String line, String source, Integer line_number) -> Hash[String, json_value]
|
|
31
33
|
|
|
32
|
-
# @rbs (Hash[String,
|
|
33
|
-
private def self.validate_envelope: (Hash[String,
|
|
34
|
+
# @rbs (Hash[String, json_value] document, String source, Integer line_number) -> void
|
|
35
|
+
private def self.validate_envelope: (Hash[String, json_value] document, String source, Integer line_number) -> void
|
|
34
36
|
|
|
35
|
-
# @rbs (
|
|
36
|
-
private def self.positive_integer?: (
|
|
37
|
+
# @rbs (json_value value) -> bool
|
|
38
|
+
private def self.positive_integer?: (json_value value) -> bool
|
|
37
39
|
|
|
38
40
|
# @rbs (String source, Integer line_number, String message) -> bot
|
|
39
41
|
private def self.raise_invalid: (String source, Integer line_number, String message) -> bot
|
|
@@ -4,6 +4,8 @@ module Ibex
|
|
|
4
4
|
module Coverage
|
|
5
5
|
# Versioned, mergeable runtime coverage result.
|
|
6
6
|
class Report
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
8
|
+
|
|
7
9
|
IDENTIFIER: String
|
|
8
10
|
|
|
9
11
|
SCHEMA_VERSION: Integer
|
|
@@ -40,31 +42,31 @@ module Ibex
|
|
|
40
42
|
# @rbs (grammar_digest: String, table_format_version: Integer, state_count: Integer, production_count: Integer, sessions: Integer, event_count: Integer, state_hits: Hash[Integer, Integer], production_hits: Hash[Integer, Integer]) -> void
|
|
41
43
|
def initialize: (grammar_digest: String, table_format_version: Integer, state_count: Integer, production_count: Integer, sessions: Integer, event_count: Integer, state_hits: Hash[Integer, Integer], production_hits: Hash[Integer, Integer]) -> void
|
|
42
44
|
|
|
43
|
-
# @rbs () -> Hash[String,
|
|
44
|
-
def to_h: () -> Hash[String,
|
|
45
|
+
# @rbs () -> Hash[String, json_value]
|
|
46
|
+
def to_h: () -> Hash[String, json_value]
|
|
45
47
|
|
|
46
|
-
# @rbs (*
|
|
47
|
-
def to_json: (*
|
|
48
|
+
# @rbs (*Object) -> String
|
|
49
|
+
def to_json: (*Object) -> String
|
|
48
50
|
|
|
49
51
|
# @rbs (String path) -> Report
|
|
50
52
|
def self.load_file: (String path) -> Report
|
|
51
53
|
|
|
52
|
-
# @rbs (
|
|
53
|
-
def self.from_h: (
|
|
54
|
+
# @rbs (json_value value, source: String) -> Report
|
|
55
|
+
def self.from_h: (json_value value, source: String) -> Report
|
|
54
56
|
|
|
55
57
|
# @rbs (Array[Report] reports) -> Report
|
|
56
58
|
def self.merge: (Array[Report] reports) -> Report
|
|
57
59
|
|
|
58
60
|
private
|
|
59
61
|
|
|
60
|
-
# @rbs (
|
|
61
|
-
def validate_digest: (
|
|
62
|
+
# @rbs (json_value input) -> String
|
|
63
|
+
def validate_digest: (json_value input) -> String
|
|
62
64
|
|
|
63
|
-
# @rbs (
|
|
64
|
-
def positive_integer: (
|
|
65
|
+
# @rbs (json_value input, String name) -> Integer
|
|
66
|
+
def positive_integer: (json_value input, String name) -> Integer
|
|
65
67
|
|
|
66
|
-
# @rbs (
|
|
67
|
-
def total_integer: (
|
|
68
|
+
# @rbs (json_value input, String name, minimum: Integer) -> Integer
|
|
69
|
+
def total_integer: (json_value input, String name, minimum: Integer) -> Integer
|
|
68
70
|
|
|
69
71
|
# @rbs (Hash[Integer, Integer] input, Integer total, String kind) -> Hash[Integer, Integer]
|
|
70
72
|
def validate_hits: (Hash[Integer, Integer] input, Integer total, String kind) -> Hash[Integer, Integer]
|
|
@@ -75,14 +77,14 @@ module Ibex
|
|
|
75
77
|
# @rbs () -> void
|
|
76
78
|
def validate_event_bounds: () -> void
|
|
77
79
|
|
|
78
|
-
# @rbs (
|
|
79
|
-
private def self.string_hash: (
|
|
80
|
+
# @rbs (json_value value, String source, String name) -> Hash[String, json_value]
|
|
81
|
+
private def self.string_hash: (json_value value, String source, String name) -> Hash[String, json_value]
|
|
80
82
|
|
|
81
|
-
# @rbs (
|
|
82
|
-
private def self.parse_hits: (
|
|
83
|
+
# @rbs (json_value value, json_value total, String source, String kind) -> Hash[Integer, Integer]
|
|
84
|
+
private def self.parse_hits: (json_value value, json_value total, String source, String kind) -> Hash[Integer, Integer]
|
|
83
85
|
|
|
84
|
-
# @rbs (
|
|
85
|
-
private def self.parse_hit: (
|
|
86
|
+
# @rbs (json_value entry, json_value total, Integer previous, String source, String kind) -> [Integer, Integer]
|
|
87
|
+
private def self.parse_hit: (json_value entry, json_value total, Integer previous, String source, String kind) -> [ Integer, Integer ]
|
|
86
88
|
|
|
87
89
|
# @rbs (Report expected, Report actual) -> void
|
|
88
90
|
private def self.ensure_compatible: (Report expected, Report actual) -> void
|
|
@@ -4,65 +4,67 @@ module Ibex
|
|
|
4
4
|
module Coverage
|
|
5
5
|
# Dependency-free structural validation for runtime-event schema version 1.
|
|
6
6
|
module RuntimeEventValidator
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
8
|
+
|
|
7
9
|
TOKEN_KEYS: Array[String]
|
|
8
10
|
|
|
9
11
|
LOCATION_KEYS: Array[String]
|
|
10
12
|
|
|
11
13
|
VALIDATORS: Hash[String, Symbol]
|
|
12
14
|
|
|
13
|
-
# @rbs (Hash[String,
|
|
14
|
-
def self.valid?: (Hash[String,
|
|
15
|
+
# @rbs (Hash[String, json_value] document) -> bool
|
|
16
|
+
def self.valid?: (Hash[String, json_value] document) -> bool
|
|
15
17
|
|
|
16
|
-
# @rbs (Hash[String,
|
|
17
|
-
private def self.valid_start?: (Hash[String,
|
|
18
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
19
|
+
private def self.valid_start?: (Hash[String, json_value] data) -> bool
|
|
18
20
|
|
|
19
|
-
# @rbs (Hash[String,
|
|
20
|
-
private def self.valid_shift?: (Hash[String,
|
|
21
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
22
|
+
private def self.valid_shift?: (Hash[String, json_value] data) -> bool
|
|
21
23
|
|
|
22
|
-
# @rbs (Hash[String,
|
|
23
|
-
private def self.valid_reduce?: (Hash[String,
|
|
24
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
25
|
+
private def self.valid_reduce?: (Hash[String, json_value] data) -> bool
|
|
24
26
|
|
|
25
|
-
# @rbs (Hash[String,
|
|
26
|
-
private def self.valid_token_event?: (Hash[String,
|
|
27
|
+
# @rbs (Hash[String, json_value] data, reasons: Array[String]) -> bool
|
|
28
|
+
private def self.valid_token_event?: (Hash[String, json_value] data, reasons: Array[String]) -> bool
|
|
27
29
|
|
|
28
|
-
# @rbs (Hash[String,
|
|
29
|
-
private def self.valid_error?: (Hash[String,
|
|
30
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
31
|
+
private def self.valid_error?: (Hash[String, json_value] data) -> bool
|
|
30
32
|
|
|
31
|
-
# @rbs (Hash[String,
|
|
32
|
-
private def self.valid_discard?: (Hash[String,
|
|
33
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
34
|
+
private def self.valid_discard?: (Hash[String, json_value] data) -> bool
|
|
33
35
|
|
|
34
|
-
# @rbs (Hash[String,
|
|
35
|
-
private def self.valid_reject?: (Hash[String,
|
|
36
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
37
|
+
private def self.valid_reject?: (Hash[String, json_value] data) -> bool
|
|
36
38
|
|
|
37
|
-
# @rbs (Hash[String,
|
|
38
|
-
private def self.valid_recover?: (Hash[String,
|
|
39
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
40
|
+
private def self.valid_recover?: (Hash[String, json_value] data) -> bool
|
|
39
41
|
|
|
40
|
-
# @rbs (Hash[String,
|
|
41
|
-
private def self.valid_accept?: (Hash[String,
|
|
42
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
43
|
+
private def self.valid_accept?: (Hash[String, json_value] data) -> bool
|
|
42
44
|
|
|
43
|
-
# @rbs (Hash[String,
|
|
44
|
-
private def self.valid_token_fields?: (Hash[String,
|
|
45
|
+
# @rbs (Hash[String, json_value] data) -> bool
|
|
46
|
+
private def self.valid_token_fields?: (Hash[String, json_value] data) -> bool
|
|
45
47
|
|
|
46
|
-
# @rbs (
|
|
47
|
-
private def self.summary?: (
|
|
48
|
+
# @rbs (json_value value) -> bool
|
|
49
|
+
private def self.summary?: (json_value value) -> bool
|
|
48
50
|
|
|
49
|
-
# @rbs (
|
|
50
|
-
private def self.composite_summary?: (
|
|
51
|
+
# @rbs (json_value value) -> bool
|
|
52
|
+
private def self.composite_summary?: (json_value value) -> bool
|
|
51
53
|
|
|
52
|
-
# @rbs (
|
|
53
|
-
private def self.location?: (
|
|
54
|
+
# @rbs (json_value value) -> bool
|
|
55
|
+
private def self.location?: (json_value value) -> bool
|
|
54
56
|
|
|
55
|
-
# @rbs (Hash[String,
|
|
56
|
-
private def self.exact_keys?: (Hash[String,
|
|
57
|
+
# @rbs (Hash[String, json_value] data, Array[String] keys) -> bool
|
|
58
|
+
private def self.exact_keys?: (Hash[String, json_value] data, Array[String] keys) -> bool
|
|
57
59
|
|
|
58
|
-
# @rbs (
|
|
59
|
-
private def self.integer?: (
|
|
60
|
+
# @rbs (json_value value) -> bool
|
|
61
|
+
private def self.integer?: (json_value value) -> bool
|
|
60
62
|
|
|
61
|
-
# @rbs (
|
|
62
|
-
private def self.optional_integer?: (
|
|
63
|
+
# @rbs (json_value value) -> bool
|
|
64
|
+
private def self.optional_integer?: (json_value value) -> bool
|
|
63
65
|
|
|
64
|
-
# @rbs (
|
|
65
|
-
private def self.optional_string?: (
|
|
66
|
+
# @rbs (json_value value) -> bool
|
|
67
|
+
private def self.optional_string?: (json_value value) -> bool
|
|
66
68
|
end
|
|
67
69
|
end
|
|
68
70
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Generated from lib/ibex/delta_reducer.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
# Deterministic, trial-bounded delta debugging over an ordered sequence.
|
|
5
|
+
class DeltaReducer
|
|
6
|
+
# Immutable outcome of a bounded reduction.
|
|
7
|
+
class Result
|
|
8
|
+
attr_reader items: Array[untyped]
|
|
9
|
+
|
|
10
|
+
attr_reader trials: Integer
|
|
11
|
+
|
|
12
|
+
attr_reader complete: bool
|
|
13
|
+
|
|
14
|
+
attr_reader original_size: Integer
|
|
15
|
+
|
|
16
|
+
# @rbs (items: Array[untyped], trials: Integer, complete: bool, original_size: Integer) -> void
|
|
17
|
+
def initialize: (items: Array[untyped], trials: Integer, complete: bool, original_size: Integer) -> void
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @rbs (?max_trials: Integer) -> void
|
|
21
|
+
def initialize: (?max_trials: Integer) -> void
|
|
22
|
+
|
|
23
|
+
# `failure` must return true while the failure of interest is preserved.
|
|
24
|
+
# @rbs [T] (Array[T] items) { (Array[T]) -> bool } -> Result
|
|
25
|
+
def minimize: [T] (Array[T] items) { (Array[T]) -> bool } -> Result
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
# @rbs (Integer length, Integer count) -> Array[Range[Integer]]
|
|
30
|
+
def partitions: (Integer length, Integer count) -> Array[Range[Integer]]
|
|
31
|
+
|
|
32
|
+
# @rbs (Integer trials) -> Integer
|
|
33
|
+
def checked_trial!: (Integer trials) -> Integer
|
|
34
|
+
|
|
35
|
+
# @rbs (Array[untyped] items, Integer trials, bool complete, Integer original_size) -> Result
|
|
36
|
+
def result: (Array[untyped] items, Integer trials, bool complete, Integer original_size) -> Result
|
|
37
|
+
end
|
|
38
|
+
end
|