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
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
module Ibex
|
|
4
4
|
# Deterministic description of one published parser generation.
|
|
5
|
+
# rubocop:disable Metrics/ModuleLength -- manifest schema validation is kept in one auditable unit.
|
|
5
6
|
module GenerationManifest
|
|
7
|
+
type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
|
|
8
|
+
|
|
6
9
|
SCHEMA_VERSION: Integer
|
|
7
10
|
|
|
8
11
|
IDENTIFIER: String
|
|
@@ -15,53 +18,53 @@ module Ibex
|
|
|
15
18
|
|
|
16
19
|
ARTIFACT_KEYS: Array[String]
|
|
17
20
|
|
|
18
|
-
# @rbs (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String,
|
|
19
|
-
def self?.render: (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String,
|
|
21
|
+
# @rbs (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, Object?]) -> String
|
|
22
|
+
def self?.render: (ArtifactSet artifacts, source_records: Array[GenerationInput], options: Hash[String, Object?]) -> String
|
|
20
23
|
|
|
21
24
|
# Validate the manifest shape and, by default, every published artifact digest.
|
|
22
|
-
# @rbs (String source, ?verify_artifacts: bool) -> Hash[String,
|
|
23
|
-
def self?.validate: (String source, ?verify_artifacts: bool) -> Hash[String,
|
|
25
|
+
# @rbs (String source, ?verify_artifacts: bool) -> Hash[String, json_value]
|
|
26
|
+
def self?.validate: (String source, ?verify_artifacts: bool) -> Hash[String, json_value]
|
|
24
27
|
|
|
25
|
-
# @rbs (String path, ?verify_artifacts: bool) -> Hash[String,
|
|
26
|
-
def self?.validate_file: (String path, ?verify_artifacts: bool) -> Hash[String,
|
|
28
|
+
# @rbs (String path, ?verify_artifacts: bool) -> Hash[String, json_value]
|
|
29
|
+
def self?.validate_file: (String path, ?verify_artifacts: bool) -> Hash[String, json_value]
|
|
27
30
|
|
|
28
|
-
# @rbs (Artifact artifact) -> Hash[String,
|
|
29
|
-
def self?.artifact_entry: (Artifact artifact) -> Hash[String,
|
|
31
|
+
# @rbs (Artifact artifact) -> Hash[String, json_value]
|
|
32
|
+
def self?.artifact_entry: (Artifact artifact) -> Hash[String, json_value]
|
|
30
33
|
|
|
31
|
-
# @rbs (Array[Hash[String,
|
|
32
|
-
def self?.input_digest: (Array[Hash[String,
|
|
34
|
+
# @rbs (Array[Hash[String, json_value]] files) -> String
|
|
35
|
+
def self?.input_digest: (Array[Hash[String, json_value]] files) -> String
|
|
33
36
|
|
|
34
|
-
# @rbs (Hash[String,
|
|
35
|
-
def self?.sorted_hash: (Hash[String,
|
|
37
|
+
# @rbs (Hash[String, Object?] value) -> Hash[String, Object?]
|
|
38
|
+
def self?.sorted_hash: (Hash[String, Object?] value) -> Hash[String, Object?]
|
|
36
39
|
|
|
37
|
-
# @rbs (
|
|
38
|
-
def self?.validate_document: (
|
|
40
|
+
# @rbs (Object? document) -> void
|
|
41
|
+
def self?.validate_document: (Object? document) -> void
|
|
39
42
|
|
|
40
|
-
# @rbs (Hash[
|
|
41
|
-
def self?.validate_identity: (Hash[
|
|
43
|
+
# @rbs (Hash[Object?, Object?] document) -> void
|
|
44
|
+
def self?.validate_identity: (Hash[Object?, Object?] document) -> void
|
|
42
45
|
|
|
43
|
-
# @rbs (
|
|
44
|
-
def self?.validate_input: (
|
|
46
|
+
# @rbs (Object? input) -> void
|
|
47
|
+
def self?.validate_input: (Object? input) -> void
|
|
45
48
|
|
|
46
|
-
# @rbs (Array[
|
|
47
|
-
def self?.validate_entries: (Array[
|
|
49
|
+
# @rbs (Array[Object?] entries, String label, ?require_kind: bool) -> void
|
|
50
|
+
def self?.validate_entries: (Array[Object?] entries, String label, ?require_kind: bool) -> void
|
|
48
51
|
|
|
49
|
-
# @rbs (
|
|
50
|
-
def self?.validate_entry: (
|
|
52
|
+
# @rbs (Object? entry, String label, bool require_kind) -> void
|
|
53
|
+
def self?.validate_entry: (Object? entry, String label, bool require_kind) -> void
|
|
51
54
|
|
|
52
|
-
# @rbs (
|
|
53
|
-
def self?.validate_path: (
|
|
55
|
+
# @rbs (Object? path, String label) -> void
|
|
56
|
+
def self?.validate_path: (Object? path, String label) -> void
|
|
54
57
|
|
|
55
|
-
# @rbs (
|
|
56
|
-
def self?.validate_kind: (
|
|
58
|
+
# @rbs (Object? kind, String label) -> void
|
|
59
|
+
def self?.validate_kind: (Object? kind, String label) -> void
|
|
57
60
|
|
|
58
|
-
# @rbs (
|
|
59
|
-
def self?.validate_digest: (
|
|
61
|
+
# @rbs (Object? digest, String label) -> void
|
|
62
|
+
def self?.validate_digest: (Object? digest, String label) -> void
|
|
60
63
|
|
|
61
|
-
# @rbs (Hash[
|
|
62
|
-
def self?.exact_keys!: (Hash[
|
|
64
|
+
# @rbs (Hash[Object?, Object?] value, Array[String] expected, String label) -> void
|
|
65
|
+
def self?.exact_keys!: (Hash[Object?, Object?] value, Array[String] expected, String label) -> void
|
|
63
66
|
|
|
64
|
-
# @rbs (Array[
|
|
65
|
-
def self?.verify_entries: (Array[
|
|
67
|
+
# @rbs (Array[Object?] entries) -> void
|
|
68
|
+
def self?.verify_entries: (Array[Object?] entries) -> void
|
|
66
69
|
end
|
|
67
70
|
end
|
|
@@ -21,8 +21,8 @@ module Ibex
|
|
|
21
21
|
# @rbs () -> Array[String]
|
|
22
22
|
def rollback: () -> Array[String]
|
|
23
23
|
|
|
24
|
-
# @rbs (Hash[Symbol,
|
|
25
|
-
def rollback_record: (Hash[Symbol,
|
|
24
|
+
# @rbs (Hash[Symbol, Object?] record) -> void
|
|
25
|
+
def rollback_record: (Hash[Symbol, Object?] record) -> void
|
|
26
26
|
|
|
27
27
|
# @rbs (preserve_backups: bool) -> Array[String]
|
|
28
28
|
def cleanup_artifacts: (preserve_backups: bool) -> Array[String]
|
|
@@ -56,8 +56,8 @@ module Ibex
|
|
|
56
56
|
# @rbs (String phase) -> void
|
|
57
57
|
def validate_current_targets!: (String phase) -> void
|
|
58
58
|
|
|
59
|
-
# @rbs (Hash[Symbol,
|
|
60
|
-
def validate_current_target!: (Hash[Symbol,
|
|
59
|
+
# @rbs (Hash[Symbol, Object?] record, Array[String] sources, String phase) -> void
|
|
60
|
+
def validate_current_target!: (Hash[Symbol, Object?] record, Array[String] sources, String phase) -> void
|
|
61
61
|
|
|
62
62
|
# @rbs () -> void
|
|
63
63
|
def validate_locked_targets!: () -> void
|
data/sig/ibex/grammar_tests.rbs
CHANGED
|
@@ -86,8 +86,8 @@ module Ibex
|
|
|
86
86
|
# @rbs (String output) -> Array[Result]
|
|
87
87
|
def decode_results: (String output) -> Array[Result]
|
|
88
88
|
|
|
89
|
-
# @rbs (IR::grammar_test test,
|
|
90
|
-
def build_result: (IR::grammar_test test,
|
|
89
|
+
# @rbs (IR::grammar_test test, Object? document) -> Result
|
|
90
|
+
def build_result: (IR::grammar_test test, Object? document) -> Result
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/action_impact.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# Checks only structured action metadata; action source remains opaque.
|
|
6
|
+
class ActionImpact
|
|
7
|
+
# @rbs @before: IR::Grammar
|
|
8
|
+
# @rbs @after: IR::Grammar
|
|
9
|
+
# @rbs @affected_names: Array[String]?
|
|
10
|
+
attr_reader findings: Array[Hash[Symbol, Object?]]
|
|
11
|
+
|
|
12
|
+
# @rbs (IR::Grammar before, IR::Grammar after, ?affected_names: Array[String]?) -> void
|
|
13
|
+
def initialize: (IR::Grammar before, IR::Grammar after, ?affected_names: Array[String]?) -> void
|
|
14
|
+
|
|
15
|
+
# @rbs () -> Array[Hash[Symbol, Object?]]
|
|
16
|
+
def to_a: () -> Array[Hash[Symbol, Object?]]
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
# @rbs () -> Array[Hash[Symbol, Object?]]
|
|
21
|
+
def compare: () -> Array[Hash[Symbol, Object?]]
|
|
22
|
+
|
|
23
|
+
# @rbs (String name) -> Array[Hash[Symbol, Object?]]
|
|
24
|
+
def compare_rule: (String name) -> Array[Hash[Symbol, Object?]]
|
|
25
|
+
|
|
26
|
+
# @rbs (Array[IR::Production] before, Array[IR::Production] after) -> Array[[IR::Production, IR::Production]]
|
|
27
|
+
def pair_productions: (Array[IR::Production] before, Array[IR::Production] after) -> Array[[ IR::Production, IR::Production ]]
|
|
28
|
+
|
|
29
|
+
# @rbs (Array[IR::Production] unmatched, Array[IR::Production] after) -> Array[[IR::Production, IR::Production]]
|
|
30
|
+
def pair_exact_productions: (Array[IR::Production] unmatched, Array[IR::Production] after) -> Array[[ IR::Production, IR::Production ]]
|
|
31
|
+
|
|
32
|
+
# @rbs (Array[IR::Production] unmatched, Array[IR::Production] after,
|
|
33
|
+
# Array[[IR::Production, IR::Production]]) -> Array[[IR::Production, IR::Production]]
|
|
34
|
+
def pair_by_location: (Array[IR::Production] unmatched, Array[IR::Production] after, Array[[ IR::Production, IR::Production ]]) -> Array[[ IR::Production, IR::Production ]]
|
|
35
|
+
|
|
36
|
+
# @rbs (IR::Grammar grammar, String name) -> Array[IR::Production]
|
|
37
|
+
def productions_for: (IR::Grammar grammar, String name) -> Array[IR::Production]
|
|
38
|
+
|
|
39
|
+
# @rbs (IR::Grammar grammar, IR::Production production) -> [Array[String], String?]
|
|
40
|
+
def production_signature: (IR::Grammar grammar, IR::Production production) -> [ Array[String], String? ]
|
|
41
|
+
|
|
42
|
+
# @rbs (IR::Production production) -> [Integer, Integer]?
|
|
43
|
+
def action_location_identity: (IR::Production production) -> [ Integer, Integer ]?
|
|
44
|
+
|
|
45
|
+
# @rbs (IR::Production before, IR::Production after) -> Hash[Symbol, Object?]
|
|
46
|
+
def finding_for: (IR::Production before, IR::Production after) -> Hash[Symbol, Object?]
|
|
47
|
+
|
|
48
|
+
# @rbs (IR::Action?, Integer, Integer) -> [String, String]
|
|
49
|
+
def finding_reason: (IR::Action?, Integer, Integer) -> [ String, String ]
|
|
50
|
+
|
|
51
|
+
# @rbs (IR::Action?, Integer) -> bool
|
|
52
|
+
def out_of_range?: (IR::Action?, Integer) -> bool
|
|
53
|
+
|
|
54
|
+
# @rbs (IR::Grammar grammar, IR::Production production) -> String
|
|
55
|
+
def production_name: (IR::Grammar grammar, IR::Production production) -> String
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/automaton_impact.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# Maps propagated grammar symbols to parser states and conflict changes.
|
|
6
|
+
class AutomatonImpact
|
|
7
|
+
# @rbs @automaton: IR::Automaton
|
|
8
|
+
# @rbs @symbol_ids: Array[Integer]
|
|
9
|
+
# @rbs @production_ids: Array[Integer]
|
|
10
|
+
attr_reader affected_states: Array[Integer]
|
|
11
|
+
|
|
12
|
+
attr_reader production_ids: Array[Integer]
|
|
13
|
+
|
|
14
|
+
attr_reader conflict_states: Array[Integer]
|
|
15
|
+
|
|
16
|
+
# @rbs (IR::Automaton automaton, Array[Integer]) -> void
|
|
17
|
+
def initialize: (IR::Automaton automaton, Array[Integer]) -> void
|
|
18
|
+
|
|
19
|
+
# @rbs (Hash[Symbol, Object?] diff) -> Hash[Symbol, Object?]
|
|
20
|
+
def conflict_changes: (Hash[Symbol, Object?] diff) -> Hash[Symbol, Object?]
|
|
21
|
+
|
|
22
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
23
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
# @rbs () -> Array[Integer]
|
|
28
|
+
def affected_productions: () -> Array[Integer]
|
|
29
|
+
|
|
30
|
+
# @rbs () -> Array[Integer]
|
|
31
|
+
def affected_state_ids: () -> Array[Integer]
|
|
32
|
+
|
|
33
|
+
# @rbs () -> Array[Integer]
|
|
34
|
+
def conflict_state_ids: () -> Array[Integer]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/coverage_impact.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# Selects separated runtime coverage reports for affected productions.
|
|
6
|
+
class CoverageImpact
|
|
7
|
+
attr_reader status: String
|
|
8
|
+
|
|
9
|
+
attr_reader reports: Array[Hash[Symbol, Object?]]
|
|
10
|
+
|
|
11
|
+
attr_reader warnings: Array[String]
|
|
12
|
+
|
|
13
|
+
# @rbs (IR::Automaton automaton, Array[Integer], Array[[String, Coverage::Report]]) -> void
|
|
14
|
+
def initialize: (IR::Automaton automaton, Array[Integer], Array[[ String, Coverage::Report ]]) -> void
|
|
15
|
+
|
|
16
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
17
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
# @rbs (Array[[String, Coverage::Report]]) -> Array[Hash[Symbol, Object?]]
|
|
22
|
+
def select_reports: (Array[[ String, Coverage::Report ]]) -> Array[Hash[Symbol, Object?]]
|
|
23
|
+
|
|
24
|
+
# @rbs (Array[[String, Coverage::Report]]) -> String
|
|
25
|
+
def coverage_status: (Array[[ String, Coverage::Report ]]) -> String
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/graph.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# A grammar dependency edge with enough origin information for a witness.
|
|
6
|
+
class Edge
|
|
7
|
+
attr_reader source: Integer
|
|
8
|
+
|
|
9
|
+
attr_reader target: Integer
|
|
10
|
+
|
|
11
|
+
attr_reader kind: Symbol
|
|
12
|
+
|
|
13
|
+
attr_reader production: Integer?
|
|
14
|
+
|
|
15
|
+
attr_reader position: Integer?
|
|
16
|
+
|
|
17
|
+
# @rbs (source: Integer, target: Integer, kind: Symbol, production: Integer?, position: Integer?) -> void
|
|
18
|
+
def initialize: (source: Integer, target: Integer, kind: Symbol, production: Integer?, position: Integer?) -> void
|
|
19
|
+
|
|
20
|
+
# @rbs () -> Array[Integer | Symbol | nil]
|
|
21
|
+
def sort_key: () -> Array[Integer | Symbol | nil]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Combines reference, FIRST, and FOLLOW propagation dependencies.
|
|
25
|
+
class Graph
|
|
26
|
+
EDGE_KINDS: Array[Symbol]
|
|
27
|
+
|
|
28
|
+
KIND_ALIASES: Hash[Symbol, Array[Symbol]]
|
|
29
|
+
|
|
30
|
+
attr_reader grammar: IR::Grammar
|
|
31
|
+
|
|
32
|
+
attr_reader sets: Analysis::Sets
|
|
33
|
+
|
|
34
|
+
# @rbs (IR::Grammar grammar, ?sets: Analysis::Sets) -> void
|
|
35
|
+
def initialize: (IR::Grammar grammar, ?sets: Analysis::Sets) -> void
|
|
36
|
+
|
|
37
|
+
# @rbs (?Symbol kind) -> untyped
|
|
38
|
+
def edges: (?Symbol kind) -> untyped
|
|
39
|
+
|
|
40
|
+
# @rbs (Symbol kind) -> Array[Array[Integer]]
|
|
41
|
+
def adjacency: (Symbol kind) -> Array[Array[Integer]]
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
# @rbs () -> Hash[Symbol, Array[Edge]]
|
|
46
|
+
def build_edges: () -> Hash[Symbol, Array[Edge]]
|
|
47
|
+
|
|
48
|
+
# @rbs (Hash[Symbol, Array[Edge]], IR::Production) -> void
|
|
49
|
+
def add_production_edges: (Hash[Symbol, Array[Edge]], IR::Production) -> void
|
|
50
|
+
|
|
51
|
+
# @rbs (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
|
|
52
|
+
def add_first_edge: (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
|
|
53
|
+
|
|
54
|
+
# @rbs (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
|
|
55
|
+
def add_follow_edges: (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
|
|
56
|
+
|
|
57
|
+
# @rbs (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
|
|
58
|
+
def add_follow_first_edges: (Hash[Symbol, Array[Edge]], IR::Production, Integer, Integer) -> void
|
|
59
|
+
|
|
60
|
+
# @rbs (Integer source, Integer target, Symbol kind, IR::Production production, Integer position) -> Edge
|
|
61
|
+
def edge: (Integer source, Integer target, Symbol kind, IR::Production production, Integer position) -> Edge
|
|
62
|
+
|
|
63
|
+
# @rbs () -> void
|
|
64
|
+
def freeze_edges: () -> void
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/propagation.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# One shortest witness for a symbol reached by dependency propagation.
|
|
6
|
+
class Node
|
|
7
|
+
attr_reader symbol: Integer
|
|
8
|
+
|
|
9
|
+
attr_reader distance: Integer
|
|
10
|
+
|
|
11
|
+
attr_reader witness: Array[Edge]
|
|
12
|
+
|
|
13
|
+
attr_reader kind: Symbol
|
|
14
|
+
|
|
15
|
+
attr_reader component: Array[Integer]
|
|
16
|
+
|
|
17
|
+
# @rbs (symbol: Integer, distance: Integer, witness: Array[Edge], kind: Symbol, component: Array[Integer]) -> void
|
|
18
|
+
def initialize: (symbol: Integer, distance: Integer, witness: Array[Edge], kind: Symbol, component: Array[Integer]) -> void
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Performs deterministic forward propagation over a dependency graph.
|
|
22
|
+
class Propagation
|
|
23
|
+
# @rbs @graph: Graph
|
|
24
|
+
# @rbs (Graph graph) -> void
|
|
25
|
+
def initialize: (Graph graph) -> void
|
|
26
|
+
|
|
27
|
+
# @rbs (Array[Integer] seeds, Symbol kind, ?max_depth: Integer?) -> Hash[Integer, Node]
|
|
28
|
+
def propagate: (Array[Integer] seeds, Symbol kind, ?max_depth: Integer?) -> Hash[Integer, Node]
|
|
29
|
+
|
|
30
|
+
alias call propagate
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# @rbs (Integer?) -> void
|
|
35
|
+
def validate_depth: (Integer?) -> void
|
|
36
|
+
|
|
37
|
+
# @rbs (Array[Integer]) -> Array[Integer]
|
|
38
|
+
def normalize_seeds: (Array[Integer]) -> Array[Integer]
|
|
39
|
+
|
|
40
|
+
# @rbs (Array[Array[Integer]], Integer) -> Array[Integer]
|
|
41
|
+
def component_index: (Array[Array[Integer]], Integer) -> Array[Integer]
|
|
42
|
+
|
|
43
|
+
# @rbs (Array[Array[Integer]], Array[Integer], Integer) -> Array[Array[Integer]]
|
|
44
|
+
def component_adjacency: (Array[Array[Integer]], Array[Integer], Integer) -> Array[Array[Integer]]
|
|
45
|
+
|
|
46
|
+
# @rbs (Array[Integer], Array[Integer], Array[Array[Integer]], Integer?) -> Hash[Integer, Integer]
|
|
47
|
+
def traverse_components: (Array[Integer], Array[Integer], Array[Array[Integer]], Integer?) -> Hash[Integer, Integer]
|
|
48
|
+
|
|
49
|
+
# @rbs (Array[Integer], Array[Array[Integer]], Symbol) -> Hash[Integer, Array[Edge]]
|
|
50
|
+
def symbol_witnesses: (Array[Integer], Array[Array[Integer]], Symbol) -> Hash[Integer, Array[Edge]]
|
|
51
|
+
|
|
52
|
+
# @rbs (Hash[Integer, Integer], Array[Array[Integer]], Symbol, Hash[Integer, Array[Edge]]) -> Hash[Integer, Node]
|
|
53
|
+
def build_nodes: (Hash[Integer, Integer], Array[Array[Integer]], Symbol, Hash[Integer, Array[Edge]]) -> Hash[Integer, Node]
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/report.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# Builds the deterministic public impact-v1 document.
|
|
6
|
+
class Report
|
|
7
|
+
# @rbs @mode: String
|
|
8
|
+
# @rbs @algorithm: String
|
|
9
|
+
# @rbs @grammar: IR::Grammar
|
|
10
|
+
# @rbs @before: IR::Automaton?
|
|
11
|
+
# @rbs @after: IR::Automaton?
|
|
12
|
+
# @rbs @seeds: Array[Hash[Symbol, Object?]]
|
|
13
|
+
# @rbs @nodes: Hash[Integer, Node]
|
|
14
|
+
# @rbs @symbol_kinds: Hash[Integer, Array[String]]
|
|
15
|
+
# @rbs @set_changes: Hash[String, Hash[Symbol, Object?]]
|
|
16
|
+
# @rbs @metadata_names: Array[String]
|
|
17
|
+
# @rbs @automaton: Hash[Symbol, Object?]
|
|
18
|
+
# @rbs @actions: Array[Hash[Symbol, Object?]]
|
|
19
|
+
# @rbs @coverage: Hash[Symbol, Object?]
|
|
20
|
+
# @rbs @minimum: String
|
|
21
|
+
# @rbs @warnings: Array[String]
|
|
22
|
+
# @rbs (mode: String, algorithm: String, grammar: IR::Grammar, before: IR::Automaton?, after: IR::Automaton?,
|
|
23
|
+
# seeds: Array[Hash[Symbol, Object?]], nodes: Hash[Integer, Node], symbol_kinds: Hash[Integer, Array[String]],
|
|
24
|
+
# set_changes: Hash[String, Hash[Symbol, Object?]], automaton: Hash[Symbol, Object?],
|
|
25
|
+
# actions: Array[Hash[Symbol, Object?]], coverage: Hash[Symbol, Object?], ?metadata_names: Array[String],
|
|
26
|
+
# ?minimum: String,
|
|
27
|
+
# ?warnings: Array[String]) -> void
|
|
28
|
+
# rubocop:disable Metrics/ParameterLists
|
|
29
|
+
def initialize: (mode: String, algorithm: String, grammar: IR::Grammar, before: IR::Automaton?, after: IR::Automaton?, seeds: Array[Hash[Symbol, Object?]], nodes: Hash[Integer, Node], symbol_kinds: Hash[Integer, Array[String]], set_changes: Hash[String, Hash[Symbol, Object?]], automaton: Hash[Symbol, Object?], actions: Array[Hash[Symbol, Object?]], coverage: Hash[Symbol, Object?], ?metadata_names: Array[String], ?minimum: String, ?warnings: Array[String]) -> void
|
|
30
|
+
|
|
31
|
+
# @rbs (?minimum: String) -> Hash[Symbol, Object?]
|
|
32
|
+
def to_h: (?minimum: String) -> Hash[Symbol, Object?]
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
# @rbs (String minimum) -> Array[Hash[Symbol, Object?]]
|
|
37
|
+
def symbol_documents: (String minimum) -> Array[Hash[Symbol, Object?]]
|
|
38
|
+
|
|
39
|
+
# @rbs (String) -> Hash[Symbol, Object?]?
|
|
40
|
+
def symbol_document: (String) -> Hash[Symbol, Object?]?
|
|
41
|
+
|
|
42
|
+
# @rbs (String) -> bool
|
|
43
|
+
def reportable_symbol?: (String) -> bool
|
|
44
|
+
|
|
45
|
+
# @rbs (String, Integer?) -> Array[String]
|
|
46
|
+
def symbol_kinds_for: (String, Integer?) -> Array[String]
|
|
47
|
+
|
|
48
|
+
# @rbs (String) -> Array[String]
|
|
49
|
+
def change_kinds: (String) -> Array[String]
|
|
50
|
+
|
|
51
|
+
# @rbs (String, Array[String]) -> String
|
|
52
|
+
def document_severity: (String, Array[String]) -> String
|
|
53
|
+
|
|
54
|
+
# @rbs (Node?, String) -> Array[String]
|
|
55
|
+
def component_names: (Node?, String) -> Array[String]
|
|
56
|
+
|
|
57
|
+
# @rbs (String kind) -> String
|
|
58
|
+
def kind_severity: (String kind) -> String
|
|
59
|
+
|
|
60
|
+
# @rbs (String name, String current) -> String
|
|
61
|
+
def action_severity: (String name, String current) -> String
|
|
62
|
+
|
|
63
|
+
# @rbs (Hash[Symbol, Object?] record) -> String
|
|
64
|
+
def severity_of: (Hash[Symbol, Object?] record) -> String
|
|
65
|
+
|
|
66
|
+
# @rbs () -> Hash[Symbol, Array[String]]
|
|
67
|
+
def empty_change: () -> Hash[Symbol, Array[String]]
|
|
68
|
+
|
|
69
|
+
# @rbs (Array[Edge]) -> Array[Hash[Symbol, Object?]]
|
|
70
|
+
def witness_documents: (Array[Edge]) -> Array[Hash[Symbol, Object?]]
|
|
71
|
+
|
|
72
|
+
# @rbs (Integer) -> String
|
|
73
|
+
def symbol_name: (Integer) -> String
|
|
74
|
+
|
|
75
|
+
# @rbs (IR::Production?) -> String?
|
|
76
|
+
def production_shape: (IR::Production?) -> String?
|
|
77
|
+
|
|
78
|
+
# @rbs (Array[Hash[Symbol, Object?]], Array[Hash[Symbol, Object?]],
|
|
79
|
+
# Hash[Symbol, Object?]) -> Hash[Symbol, Integer]
|
|
80
|
+
def totals: (Array[Hash[Symbol, Object?]], Array[Hash[Symbol, Object?]], Hash[Symbol, Object?]) -> Hash[Symbol, Integer]
|
|
81
|
+
|
|
82
|
+
# @rbs (String minimum) -> Array[Hash[Symbol, Object?]]
|
|
83
|
+
def action_documents: (String minimum) -> Array[Hash[Symbol, Object?]]
|
|
84
|
+
|
|
85
|
+
# @rbs (Hash[Symbol, Object?] action) -> String
|
|
86
|
+
def action_production: (Hash[Symbol, Object?] action) -> String
|
|
87
|
+
|
|
88
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
89
|
+
def coverage_document: () -> Hash[Symbol, Object?]
|
|
90
|
+
|
|
91
|
+
# @rbs (Hash[Symbol, Object?] report) -> String
|
|
92
|
+
def coverage_report_path: (Hash[Symbol, Object?] report) -> String
|
|
93
|
+
|
|
94
|
+
# @rbs () -> Array[String]
|
|
95
|
+
def stable_warnings: () -> Array[String]
|
|
96
|
+
|
|
97
|
+
# @rbs (IR::location?) -> Hash[Symbol, Integer]?
|
|
98
|
+
def stable_location: (IR::location?) -> Hash[Symbol, Integer]?
|
|
99
|
+
|
|
100
|
+
# @rbs (IR::Automaton?) -> String?
|
|
101
|
+
def stable_grammar_digest: (IR::Automaton?) -> String?
|
|
102
|
+
|
|
103
|
+
# @rbs (String) -> String
|
|
104
|
+
def stable_path: (String) -> String
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/seeds.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# Converts command-line symbols and Diff rule ids into analysis seeds.
|
|
6
|
+
class Seeds
|
|
7
|
+
# @rbs @grammar: IR::Grammar
|
|
8
|
+
# @rbs @sets: Analysis::Sets
|
|
9
|
+
# @rbs @records: Array[Hash[Symbol, Object?]]
|
|
10
|
+
# @rbs @ids: Array[Integer]
|
|
11
|
+
attr_reader ids: Array[Integer]
|
|
12
|
+
|
|
13
|
+
attr_reader records: Array[Hash[Symbol, Object?]]
|
|
14
|
+
|
|
15
|
+
# @rbs (IR::Grammar grammar, Array[String] names, ?origin: String) -> void
|
|
16
|
+
def initialize: (IR::Grammar grammar, Array[String] names, ?origin: String) -> void
|
|
17
|
+
|
|
18
|
+
# @rbs (IR::Grammar grammar, Hash[Symbol, Object?] diff, ?origin: String) -> Seeds
|
|
19
|
+
def self.from_diff: (IR::Grammar grammar, Hash[Symbol, Object?] diff, ?origin: String) -> Seeds
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
# @rbs (Hash[Symbol, Object?] record) -> String
|
|
24
|
+
def seed_symbol: (Hash[Symbol, Object?] record) -> String
|
|
25
|
+
|
|
26
|
+
# @rbs (Hash[Symbol, Object?] record) -> Integer
|
|
27
|
+
def seed_id: (Hash[Symbol, Object?] record) -> Integer
|
|
28
|
+
|
|
29
|
+
# @rbs (String name, String origin) -> Array[Hash[Symbol, Object?]]
|
|
30
|
+
def resolve: (String name, String origin) -> Array[Hash[Symbol, Object?]]
|
|
31
|
+
|
|
32
|
+
# @rbs (Integer) -> bool
|
|
33
|
+
def nullable_boundary?: (Integer) -> bool
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Generated from lib/ibex/impact/severity.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
module Ibex
|
|
4
|
+
module Impact
|
|
5
|
+
# Stores only conflict identities so a baseline is stable across state ids.
|
|
6
|
+
class Baseline
|
|
7
|
+
# @rbs (String path) -> void
|
|
8
|
+
def initialize: (String path) -> void
|
|
9
|
+
|
|
10
|
+
# @rbs () -> Array[String]
|
|
11
|
+
def conflicts: () -> Array[String]
|
|
12
|
+
|
|
13
|
+
# @rbs (Object?) -> void
|
|
14
|
+
def validate_document: (Object?) -> void
|
|
15
|
+
|
|
16
|
+
# @rbs (Array[String] identities) -> void
|
|
17
|
+
def write: (Array[String] identities) -> void
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Severity ranking and CI gate evaluation for impact findings.
|
|
21
|
+
module Severity
|
|
22
|
+
LEVELS: Array[String]
|
|
23
|
+
|
|
24
|
+
FAIL_ON: Array[String]
|
|
25
|
+
|
|
26
|
+
RANK: Hash[String, Integer]
|
|
27
|
+
|
|
28
|
+
GATE_TO_KIND: Hash[String, String]
|
|
29
|
+
|
|
30
|
+
# @rbs (String left, String right) -> String
|
|
31
|
+
def self?.max: (String left, String right) -> String
|
|
32
|
+
|
|
33
|
+
# @rbs (Hash[String, Array[String]], Array[Hash[Symbol, String]]) -> Hash[String, String]
|
|
34
|
+
def self?.symbols: (Hash[String, Array[String]], Array[Hash[Symbol, String]]) -> Hash[String, String]
|
|
35
|
+
|
|
36
|
+
# @rbs (String) -> String
|
|
37
|
+
def self?.level_for_kind: (String) -> String
|
|
38
|
+
|
|
39
|
+
# @rbs (Hash[Symbol, Object?] report, Array[String] gates) -> bool
|
|
40
|
+
def self?.fails?: (Hash[Symbol, Object?] report, Array[String] gates) -> bool
|
|
41
|
+
|
|
42
|
+
# @rbs (Hash[Symbol, Object?], Array[String]) -> bool
|
|
43
|
+
def self?.conflict_gate?: (Hash[Symbol, Object?], Array[String]) -> bool
|
|
44
|
+
|
|
45
|
+
# @rbs (Hash[Symbol, Object?], Array[String]) -> bool
|
|
46
|
+
def self?.unreachable_gate?: (Hash[Symbol, Object?], Array[String]) -> bool
|
|
47
|
+
|
|
48
|
+
# @rbs (Hash[Symbol, Object?], Array[String]) -> bool
|
|
49
|
+
def self?.action_gate?: (Hash[Symbol, Object?], Array[String]) -> bool
|
|
50
|
+
|
|
51
|
+
# @rbs (Array[String] gates) -> Array[String]
|
|
52
|
+
def self?.validate_gates: (Array[String] gates) -> Array[String]
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
data/sig/ibex/impact.rbs
ADDED
|
@@ -13,8 +13,8 @@ module Ibex
|
|
|
13
13
|
# @rbs (production: Integer, dot: Integer, lookaheads: Array[Integer]) -> void
|
|
14
14
|
def initialize: (production: Integer, dot: Integer, lookaheads: Array[Integer]) -> void
|
|
15
15
|
|
|
16
|
-
# @rbs (Grammar grammar) -> Hash[Symbol,
|
|
17
|
-
def to_h: (Grammar grammar) -> Hash[Symbol,
|
|
16
|
+
# @rbs (Grammar grammar) -> Hash[Symbol, Object?]
|
|
17
|
+
def to_h: (Grammar grammar) -> Hash[Symbol, Object?]
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
# A deterministic LALR automaton state.
|
|
@@ -38,13 +38,13 @@ module Ibex
|
|
|
38
38
|
# ?conflicts: Array[conflict]) -> void
|
|
39
39
|
def initialize: (id: Integer, items: Array[AutomatonItem], transitions: Hash[Integer, Integer], actions: Hash[Integer, parser_action], gotos: Hash[Integer, Integer], ?default_action: parser_action?, ?conflicts: Array[conflict]) -> void
|
|
40
40
|
|
|
41
|
-
# @rbs (Grammar grammar) -> Hash[Symbol,
|
|
42
|
-
def to_h: (Grammar grammar) -> Hash[Symbol,
|
|
41
|
+
# @rbs (Grammar grammar) -> Hash[Symbol, Object?]
|
|
42
|
+
def to_h: (Grammar grammar) -> Hash[Symbol, Object?]
|
|
43
43
|
|
|
44
44
|
private
|
|
45
45
|
|
|
46
|
-
# @rbs (Hash[Integer,
|
|
47
|
-
def named_keys: (Hash[Integer,
|
|
46
|
+
# @rbs (Hash[Integer, Object?] values, Grammar grammar) -> Hash[String, Object?]
|
|
47
|
+
def named_keys: (Hash[Integer, Object?] values, Grammar grammar) -> Hash[String, Object?]
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Immutable LALR automaton and its source grammar.
|
|
@@ -63,13 +63,20 @@ module Ibex
|
|
|
63
63
|
|
|
64
64
|
attr_reader schema_version: Integer
|
|
65
65
|
|
|
66
|
+
attr_reader entry_construction: String
|
|
67
|
+
|
|
68
|
+
# @rbs (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary,
|
|
69
|
+
# ?algorithm: String, ?grammar_digest: String?, ?entry_states: Hash[String, Integer]?,
|
|
70
|
+
# ?entry_construction: String) -> void
|
|
71
|
+
def initialize: (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary, ?algorithm: String, ?grammar_digest: String?, ?entry_states: Hash[String, Integer]?, ?entry_construction: String) -> void
|
|
72
|
+
|
|
66
73
|
# @rbs (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary,
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
def
|
|
74
|
+
# algorithm: String, grammar_digest: String?, entry_states: Hash[String, Integer]?,
|
|
75
|
+
# entry_construction: String) -> void
|
|
76
|
+
def initialize_current: (grammar: Grammar, states: Array[AutomatonState], conflict_summary: conflict_summary, algorithm: String, grammar_digest: String?, entry_states: Hash[String, Integer]?, entry_construction: String) -> void
|
|
70
77
|
|
|
71
|
-
# @rbs () -> Hash[Symbol,
|
|
72
|
-
def to_h: () -> Hash[Symbol,
|
|
78
|
+
# @rbs () -> Hash[Symbol, Object?]
|
|
79
|
+
def to_h: () -> Hash[Symbol, Object?]
|
|
73
80
|
|
|
74
81
|
private
|
|
75
82
|
|
|
@@ -78,6 +85,18 @@ module Ibex
|
|
|
78
85
|
|
|
79
86
|
# @rbs (Grammar grammar) -> String
|
|
80
87
|
def digest_for: (Grammar grammar) -> String
|
|
88
|
+
|
|
89
|
+
# @rbs (String value) -> String
|
|
90
|
+
def validate_entry_construction: (String value) -> String
|
|
91
|
+
|
|
92
|
+
# @rbs () -> void
|
|
93
|
+
def validate_parser_contract: () -> void
|
|
94
|
+
|
|
95
|
+
# @rbs (ParserContract contract) -> void
|
|
96
|
+
def validate_parser_algorithm: (ParserContract contract) -> void
|
|
97
|
+
|
|
98
|
+
# @rbs (ParserContract contract) -> void
|
|
99
|
+
def validate_parser_entries: (ParserContract contract) -> void
|
|
81
100
|
end
|
|
82
101
|
end
|
|
83
102
|
end
|