rigortype 0.3.8 → 0.3.9
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 +1 -1
- data/data/capability_roles/capability_roles.rbs +36 -0
- data/data/gem_overlay/activesupport/core_ext.rbs +109 -13
- data/docs/handbook/02-everyday-types.md +17 -14
- data/docs/handbook/03-narrowing.md +37 -4
- data/docs/handbook/05-methods-and-blocks.md +1 -1
- data/docs/handbook/06-classes.md +2 -2
- data/docs/handbook/07-rbs-and-extended.md +14 -1
- data/docs/handbook/11-sig-gen.md +72 -1
- data/docs/handbook/README.md +1 -1
- data/docs/handbook/appendix-elixir.md +2 -2
- data/docs/handbook/appendix-go.md +2 -2
- data/docs/handbook/appendix-java-csharp.md +2 -2
- data/docs/handbook/appendix-mypy.md +2 -2
- data/docs/handbook/appendix-phpstan.md +1 -1
- data/docs/handbook/appendix-rust.md +1 -1
- data/docs/handbook/appendix-type-theory.md +4 -4
- data/docs/handbook/appendix-typescript.md +1 -1
- data/docs/llms.txt +2 -0
- data/docs/manual/02-cli-reference.md +32 -4
- data/docs/manual/03-configuration.md +11 -0
- data/docs/manual/04-diagnostics.md +11 -0
- data/docs/manual/07-plugins.md +15 -5
- data/docs/manual/08-skills.md +23 -2
- data/docs/manual/11-ci.md +9 -0
- data/docs/manual/15-type-protection-coverage.md +8 -0
- data/docs/manual/16-rbs-extended-annotations.md +6 -1
- data/docs/manual/18-removing-dead-code.md +10 -8
- data/docs/manual/plugins/rigor-actionpack.md +18 -0
- data/docs/manual/plugins/rigor-activerecord.md +28 -0
- data/docs/manual/plugins/rigor-activesupport-core-ext.md +32 -2
- data/docs/manual/plugins/rigor-rbs-inline.md +42 -1
- data/lib/rigor/analysis/baseline.rb +2 -2
- data/lib/rigor/analysis/check_rules/always_truthy_condition_collector.rb +1 -1
- data/lib/rigor/analysis/check_rules/dead_version_guard_arms.rb +1 -5
- data/lib/rigor/analysis/check_rules/ivar_write_collector.rb +10 -2
- data/lib/rigor/analysis/check_rules/main_pass_collector.rb +1 -1
- data/lib/rigor/analysis/check_rules/published_constant_guard.rb +15 -6
- data/lib/rigor/analysis/check_rules/rule_ids.rb +1 -1
- data/lib/rigor/analysis/check_rules/rule_walk.rb +39 -4
- data/lib/rigor/analysis/check_rules/self_closedness_scanner.rb +1 -1
- data/lib/rigor/analysis/check_rules/shadowed_rescue_collector.rb +1 -1
- data/lib/rigor/analysis/check_rules/unreachable_clause_collector.rb +2 -2
- data/lib/rigor/analysis/check_rules/void_value_use_collector.rb +0 -1
- data/lib/rigor/analysis/check_rules.rb +200 -32
- data/lib/rigor/analysis/crash_signature.rb +8 -24
- data/lib/rigor/analysis/dependency_source_inference/boundary_cross_reporter.rb +1 -1
- data/lib/rigor/analysis/dependency_source_inference/builder.rb +0 -2
- data/lib/rigor/analysis/dependency_source_inference/gem_resolver.rb +0 -2
- data/lib/rigor/analysis/dependency_source_inference/index.rb +5 -5
- data/lib/rigor/analysis/dependency_source_inference/return_type_heuristic.rb +1 -2
- data/lib/rigor/analysis/dependency_source_inference/walker.rb +4 -4
- data/lib/rigor/analysis/effects_cache_probe.rb +3 -4
- data/lib/rigor/analysis/erb_template_detector.rb +1 -2
- data/lib/rigor/analysis/fact_store.rb +6 -1
- data/lib/rigor/analysis/incremental.rb +16 -0
- data/lib/rigor/analysis/incremental_session.rb +81 -22
- data/lib/rigor/analysis/plugin_fact_fingerprint.rb +0 -1
- data/lib/rigor/analysis/reachability/graph.rb +3 -5
- data/lib/rigor/analysis/reachability/plugin_roots.rb +6 -5
- data/lib/rigor/analysis/reachability/project_files.rb +2 -2
- data/lib/rigor/analysis/reachability/scan.rb +5 -5
- data/lib/rigor/analysis/reachability/scan_cache.rb +2 -2
- data/lib/rigor/analysis/reachability/signature_scan.rb +2 -2
- data/lib/rigor/analysis/result.rb +1 -3
- data/lib/rigor/analysis/rule_catalog.rb +4 -1
- data/lib/rigor/analysis/run_cache_key.rb +1 -1
- data/lib/rigor/analysis/run_cache_probe.rb +3 -5
- data/lib/rigor/analysis/runner/buffer_pool_dispatcher.rb +6 -8
- data/lib/rigor/analysis/runner/declaration_position.rb +1 -2
- data/lib/rigor/analysis/runner/diagnostic_aggregator.rb +177 -26
- data/lib/rigor/analysis/runner/effect_annotation_residual_pass.rb +2 -3
- data/lib/rigor/analysis/runner/effect_envelope_pass.rb +9 -10
- data/lib/rigor/analysis/runner/pool_coordinator.rb +256 -88
- data/lib/rigor/analysis/runner/project_pre_passes.rb +12 -6
- data/lib/rigor/analysis/runner/run_snapshots.rb +6 -1
- data/lib/rigor/analysis/runner.rb +133 -35
- data/lib/rigor/analysis/worker_session.rb +9 -10
- data/lib/rigor/bleeding_edge.rb +12 -24
- data/lib/rigor/builtins/hkt_builtins.rb +2 -2
- data/lib/rigor/builtins/imported_refinements.rb +155 -21
- data/lib/rigor/builtins/predefined_constant_refinements.rb +5 -7
- data/lib/rigor/builtins/regex_refinement.rb +4 -4
- data/lib/rigor/builtins/static_return_refinements.rb +5 -6
- data/lib/rigor/cache/annotation_location.rb +2 -4
- data/lib/rigor/cache/descriptor.rb +58 -20
- data/lib/rigor/cache/engine_source.rb +4 -4
- data/lib/rigor/cache/file_digest.rb +9 -1
- data/lib/rigor/cache/incremental_snapshot.rb +40 -6
- data/lib/rigor/cache/rbs_class_ancestor_table.rb +0 -3
- data/lib/rigor/cache/rbs_class_type_param_names.rb +0 -3
- data/lib/rigor/cache/rbs_constant_table.rb +0 -3
- data/lib/rigor/cache/rbs_descriptor.rb +79 -11
- data/lib/rigor/cache/rbs_environment.rb +8 -4
- data/lib/rigor/cache/rbs_known_class_names.rb +0 -3
- data/lib/rigor/cache/store.rb +77 -32
- data/lib/rigor/cli/annotate_command.rb +5 -6
- data/lib/rigor/cli/check_command.rb +57 -10
- data/lib/rigor/cli/check_invocation.rb +6 -11
- data/lib/rigor/cli/check_runner_factory.rb +1 -5
- data/lib/rigor/cli/coverage_command.rb +1 -1
- data/lib/rigor/cli/coverage_mutation.rb +12 -3
- data/lib/rigor/cli/coverage_scan.rb +1 -5
- data/lib/rigor/cli/diff_command.rb +1 -1
- data/lib/rigor/cli/doc_links.rb +3 -3
- data/lib/rigor/cli/docs_command.rb +2 -2
- data/lib/rigor/cli/doctor_command.rb +85 -38
- data/lib/rigor/cli/effects_command.rb +2 -2
- data/lib/rigor/cli/effects_diff_renderer.rb +3 -3
- data/lib/rigor/cli/effects_snapshot_command.rb +1 -1
- data/lib/rigor/cli/explain_command.rb +34 -1
- data/lib/rigor/cli/fused_protection_report.rb +7 -1
- data/lib/rigor/cli/lsp_command.rb +1 -1
- data/lib/rigor/cli/mcp_command.rb +1 -1
- data/lib/rigor/cli/measurement_integrity_warning.rb +4 -5
- data/lib/rigor/cli/mutation_fork_scan.rb +6 -6
- data/lib/rigor/cli/mutation_protection_report.rb +7 -1
- data/lib/rigor/cli/plugin_command.rb +1 -1
- data/lib/rigor/cli/plugins_command.rb +2 -1
- data/lib/rigor/cli/prism_colorizer.rb +2 -2
- data/lib/rigor/cli/protection_fork_scan.rb +6 -6
- data/lib/rigor/cli/show_bleedingedge_command.rb +1 -1
- data/lib/rigor/cli/sig_gen_command.rb +2 -2
- data/lib/rigor/cli/skill_command.rb +1 -1
- data/lib/rigor/cli/skill_deep_probe.rb +4 -4
- data/lib/rigor/cli/skill_describe.rb +36 -35
- data/lib/rigor/cli/trace_command.rb +4 -4
- data/lib/rigor/cli/trace_renderer.rb +5 -6
- data/lib/rigor/cli/triage_command.rb +1 -1
- data/lib/rigor/cli/type_of_command.rb +10 -6
- data/lib/rigor/cli/type_scan_command.rb +4 -4
- data/lib/rigor/cli/unused_command.rb +11 -3
- data/lib/rigor/cli/upgrade_command.rb +1 -1
- data/lib/rigor/cli.rb +68 -6
- data/lib/rigor/config_audit.rb +30 -5
- data/lib/rigor/configuration/severity_profile.rb +6 -6
- data/lib/rigor/configuration.rb +43 -4
- data/lib/rigor/effects/attribution.rb +1 -3
- data/lib/rigor/effects/config_envelopes.rb +6 -8
- data/lib/rigor/effects/definition_lines.rb +25 -6
- data/lib/rigor/effects/effect_table.rb +0 -1
- data/lib/rigor/effects/entry_points.rb +0 -2
- data/lib/rigor/effects/envelope_check.rb +8 -8
- data/lib/rigor/effects/envelope_index.rb +5 -8
- data/lib/rigor/effects/framework_units.rb +4 -6
- data/lib/rigor/effects/identity.rb +4 -6
- data/lib/rigor/effects/inline_anchor.rb +7 -7
- data/lib/rigor/effects/label_intent.rb +3 -4
- data/lib/rigor/effects/liskov_check.rb +8 -8
- data/lib/rigor/effects/method_key.rb +1 -1
- data/lib/rigor/effects/plugin_facts.rb +4 -6
- data/lib/rigor/effects/propagator.rb +2 -3
- data/lib/rigor/effects/scanner.rb +1 -1
- data/lib/rigor/effects/signature_sources.rb +3 -5
- data/lib/rigor/effects/snapshot.rb +10 -10
- data/lib/rigor/effects/snapshot_diff.rb +1 -1
- data/lib/rigor/effects/unit_scan.rb +10 -10
- data/lib/rigor/effects/unknown_label_check.rb +3 -8
- data/lib/rigor/effects/unknown_label_report.rb +3 -4
- data/lib/rigor/environment/bundle_sig_discovery.rb +6 -6
- data/lib/rigor/environment/class_registry.rb +3 -1
- data/lib/rigor/environment/failure_slot.rb +2 -2
- data/lib/rigor/environment/installed_gem_set.rb +85 -0
- data/lib/rigor/environment/lockfile_resolver.rb +51 -4
- data/lib/rigor/environment/missing_gem_constant_index.rb +4 -4
- data/lib/rigor/environment/rbs_collection_discovery.rb +5 -5
- data/lib/rigor/environment/rbs_coverage_report.rb +5 -5
- data/lib/rigor/environment/rbs_hierarchy.rb +3 -1
- data/lib/rigor/environment/rbs_loader.rb +388 -59
- data/lib/rigor/environment.rb +105 -20
- data/lib/rigor/flow_contribution/merger.rb +0 -2
- data/lib/rigor/flow_contribution.rb +11 -13
- data/lib/rigor/inference/acceptance.rb +153 -8
- data/lib/rigor/inference/block_parameter_binder.rb +2 -3
- data/lib/rigor/inference/body_fixpoint.rb +5 -5
- data/lib/rigor/inference/budget_trace.rb +1 -5
- data/lib/rigor/inference/captured_locals.rb +2 -3
- data/lib/rigor/inference/closure_escape_analyzer.rb +2 -4
- data/lib/rigor/inference/coverage_scanner.rb +4 -6
- data/lib/rigor/inference/dynamic_origin.rb +1 -1
- data/lib/rigor/inference/element_read_widening.rb +168 -0
- data/lib/rigor/inference/expression_typer.rb +763 -143
- data/lib/rigor/inference/fork_map.rb +5 -7
- data/lib/rigor/inference/hkt_reducer.rb +2 -3
- data/lib/rigor/inference/hkt_registry.rb +4 -7
- data/lib/rigor/inference/index_write_widening.rb +1 -5
- data/lib/rigor/inference/macro_block_self_type.rb +1 -4
- data/lib/rigor/inference/method_dispatcher/block_folding.rb +2 -9
- data/lib/rigor/inference/method_dispatcher/cgi_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/constant_folding.rb +305 -19
- data/lib/rigor/inference/method_dispatcher/data_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/file_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +2 -2
- data/lib/rigor/inference/method_dispatcher/json_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/kernel_dispatch.rb +7 -1
- data/lib/rigor/inference/method_dispatcher/math_folding.rb +41 -3
- data/lib/rigor/inference/method_dispatcher/method_folding.rb +2 -5
- data/lib/rigor/inference/method_dispatcher/overload_selector.rb +61 -47
- data/lib/rigor/inference/method_dispatcher/random_folding.rb +82 -0
- data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +165 -31
- data/lib/rigor/inference/method_dispatcher/receiver_affinity.rb +25 -4
- data/lib/rigor/inference/method_dispatcher/reduce_folding.rb +2 -8
- data/lib/rigor/inference/method_dispatcher/regexp_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/set_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/shellwords_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/singleton_mixin_dispatch.rb +1 -2
- data/lib/rigor/inference/method_dispatcher/struct_folding.rb +4 -5
- data/lib/rigor/inference/method_dispatcher/struct_materialization.rb +85 -4
- data/lib/rigor/inference/method_dispatcher/time_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/universal_object_dispatch.rb +1 -2
- data/lib/rigor/inference/method_dispatcher/uri_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher.rb +12 -13
- data/lib/rigor/inference/method_parameter_binder.rb +4 -6
- data/lib/rigor/inference/multi_target_binder.rb +1 -3
- data/lib/rigor/inference/mutation_rejoin.rb +168 -0
- data/lib/rigor/inference/mutation_widening.rb +100 -51
- data/lib/rigor/inference/narrowing.rb +299 -46
- data/lib/rigor/inference/optimistic_origin.rb +1 -7
- data/lib/rigor/inference/origin_lookup.rb +2 -3
- data/lib/rigor/inference/parameter_inference_collector.rb +5 -6
- data/lib/rigor/inference/pre_eval_constants.rb +6 -5
- data/lib/rigor/inference/precision_scanner.rb +3 -4
- data/lib/rigor/inference/project_patched_methods.rb +2 -2
- data/lib/rigor/inference/project_patched_scanner.rb +3 -3
- data/lib/rigor/inference/protection_scanner.rb +1 -2
- data/lib/rigor/inference/range_constant.rb +57 -0
- data/lib/rigor/inference/rbs_type_translator.rb +49 -11
- data/lib/rigor/inference/receiver_alias.rb +3 -3
- data/lib/rigor/inference/refinement_mutation.rb +72 -0
- data/lib/rigor/inference/scope_indexer.rb +688 -151
- data/lib/rigor/inference/statement_evaluator.rb +221 -50
- data/lib/rigor/inference/string_mutation.rb +60 -0
- data/lib/rigor/inference/struct_fold_safety.rb +6 -7
- data/lib/rigor/inference/synthetic_method_index.rb +1 -2
- data/lib/rigor/inference/synthetic_method_scanner.rb +4 -6
- data/lib/rigor/inference/version_guard.rb +28 -21
- data/lib/rigor/inference/void_origin.rb +3 -3
- data/lib/rigor/inference/void_tail_summary.rb +2 -4
- data/lib/rigor/language_server/buffer_table.rb +4 -4
- data/lib/rigor/language_server/completion_provider.rb +1 -1
- data/lib/rigor/language_server/debouncer.rb +1 -1
- data/lib/rigor/language_server/diagnostic_publisher.rb +4 -4
- data/lib/rigor/language_server/document_symbol_provider.rb +1 -1
- data/lib/rigor/language_server/folding_range_provider.rb +1 -1
- data/lib/rigor/language_server/hover_provider.rb +1 -1
- data/lib/rigor/language_server/hover_renderer.rb +2 -2
- data/lib/rigor/language_server/incremental_sync.rb +6 -6
- data/lib/rigor/language_server/project_context.rb +2 -5
- data/lib/rigor/language_server/publish_batcher.rb +2 -2
- data/lib/rigor/language_server/selection_range_provider.rb +2 -2
- data/lib/rigor/language_server/server.rb +9 -9
- data/lib/rigor/language_server/signature_help_provider.rb +1 -1
- data/lib/rigor/language_server/uri.rb +1 -1
- data/lib/rigor/plugin/base.rb +90 -21
- data/lib/rigor/plugin/bundled_catalog.rb +167 -0
- data/lib/rigor/plugin/effect_attribution.rb +7 -7
- data/lib/rigor/plugin/effect_entry_points.rb +3 -3
- data/lib/rigor/plugin/fact_store.rb +6 -6
- data/lib/rigor/plugin/io_boundary.rb +93 -8
- data/lib/rigor/plugin/isolation.rb +29 -6
- data/lib/rigor/plugin/loader.rb +31 -12
- data/lib/rigor/plugin/macro/heredoc_template.rb +1 -1
- data/lib/rigor/plugin/macro/trait_registry.rb +1 -1
- data/lib/rigor/plugin/manifest.rb +23 -1
- data/lib/rigor/plugin/registry.rb +42 -12
- data/lib/rigor/plugin/source_rbs_synthesis_reporter.rb +12 -1
- data/lib/rigor/plugin/trust_policy.rb +2 -4
- data/lib/rigor/plugin/type_node_resolver.rb +3 -3
- data/lib/rigor/plugin_gap_advisory.rb +96 -0
- data/lib/rigor/project_environment.rb +138 -0
- data/lib/rigor/protection/analysis_guard.rb +93 -14
- data/lib/rigor/protection/closure_kill_oracle.rb +67 -23
- data/lib/rigor/protection/dependency_closure.rb +5 -8
- data/lib/rigor/protection/diagnostic_oracle.rb +2 -2
- data/lib/rigor/protection/discovery_seed.rb +11 -11
- data/lib/rigor/protection/kill_signature.rb +2 -4
- data/lib/rigor/protection/measurement_integrity.rb +1 -3
- data/lib/rigor/protection/mutation_cache.rb +6 -9
- data/lib/rigor/protection/mutation_scanner.rb +12 -15
- data/lib/rigor/protection/mutator.rb +2 -1
- data/lib/rigor/protection/test_suite_oracle.rb +5 -5
- data/lib/rigor/rbs_extended/conformance_checker.rb +4 -3
- data/lib/rigor/rbs_extended/envelope_scanner.rb +4 -6
- data/lib/rigor/rbs_extended/reporter.rb +36 -10
- data/lib/rigor/rbs_extended.rb +61 -21
- data/lib/rigor/reflection/constant_path.rb +126 -0
- data/lib/rigor/reflection.rb +26 -10
- data/lib/rigor/runtime/jit.rb +6 -8
- data/lib/rigor/scope/discovery_index.rb +30 -0
- data/lib/rigor/scope.rb +203 -4
- data/lib/rigor/sig_gen/generator.rb +115 -22
- data/lib/rigor/sig_gen/layout_index.rb +3 -4
- data/lib/rigor/sig_gen/meta_class_shape.rb +3 -5
- data/lib/rigor/sig_gen/observation_collector.rb +17 -15
- data/lib/rigor/sig_gen/path_mapper.rb +4 -6
- data/lib/rigor/sig_gen/rbs_validity.rb +4 -4
- data/lib/rigor/sig_gen/renderer.rb +4 -5
- data/lib/rigor/sig_gen/skip_reason_catalog.rb +111 -0
- data/lib/rigor/sig_gen/superclass_spelling.rb +27 -0
- data/lib/rigor/sig_gen/type_elaborator.rb +1 -3
- data/lib/rigor/sig_gen/writer.rb +23 -6
- data/lib/rigor/signature_path_audit.rb +153 -6
- data/lib/rigor/source/literals.rb +0 -23
- data/lib/rigor/source/node_children.rb +0 -2
- data/lib/rigor/source/node_locator.rb +5 -11
- data/lib/rigor/source/node_walker.rb +2 -5
- data/lib/rigor/triage/catalogue.rb +1 -3
- data/lib/rigor/triage.rb +3 -5
- data/lib/rigor/type/accepts_result.rb +24 -6
- data/lib/rigor/type/combinator.rb +68 -5
- data/lib/rigor/type/data_class.rb +2 -2
- data/lib/rigor/type/data_instance.rb +4 -4
- data/lib/rigor/type/float_range.rb +128 -0
- data/lib/rigor/type/hash_shape.rb +5 -5
- data/lib/rigor/type/integer_range.rb +13 -8
- data/lib/rigor/type/nominal.rb +8 -2
- data/lib/rigor/type/refined.rb +3 -3
- data/lib/rigor/type/struct_class.rb +3 -3
- data/lib/rigor/type/struct_instance.rb +4 -4
- data/lib/rigor/type.rb +1 -0
- data/lib/rigor/type_node/generic.rb +1 -1
- data/lib/rigor/type_node/range_literal.rb +25 -0
- data/lib/rigor/type_node/resolver_chain.rb +1 -1
- data/lib/rigor/type_node.rb +1 -0
- data/lib/rigor/version.rb +1 -1
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/analyzer.rb +0 -4
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_discoverer.rb +0 -1
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_index.rb +0 -2
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb +1 -0
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/analyzer.rb +0 -4
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_discoverer.rb +3 -5
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_index.rb +1 -4
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer.rb +1 -0
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +33 -30
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_discoverer.rb +0 -1
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb +1 -3
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack.rb +28 -2
- data/plugins/rigor-actionpack/sig/action_controller.rbs +71 -0
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb +0 -4
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/effects.rb +1 -1
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_discoverer.rb +0 -1
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_index.rb +0 -2
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/recurring_scan.rb +1 -1
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob.rb +1 -0
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +3 -4
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb +1 -2
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/structure_sql_parser.rb +1 -2
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +42 -7
- data/plugins/rigor-activerecord/sig/active_record/framework.rbs +123 -0
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb +1 -0
- data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext.rb +9 -2
- data/plugins/rigor-activesupport-core-ext/sig/active_support/core_ext.rbs +119 -14
- data/plugins/rigor-devise/lib/rigor/plugin/devise.rb +1 -0
- data/plugins/rigor-dry-monads/lib/rigor/plugin/dry_monads.rb +1 -0
- data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema/schema_scanner.rb +9 -7
- data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema.rb +7 -3
- data/plugins/rigor-dry-struct/lib/rigor/plugin/dry_struct.rb +1 -0
- data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types/alias_scanner.rb +8 -6
- data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types.rb +11 -7
- data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation/contract_scanner.rb +13 -11
- data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation.rb +9 -4
- data/plugins/rigor-ethon/lib/rigor/plugin/ethon.rb +1 -0
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/analyzer.rb +0 -5
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_discoverer.rb +0 -1
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_index.rb +0 -1
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot.rb +8 -1
- data/plugins/rigor-ffi/lib/rigor/plugin/ffi.rb +36 -4
- data/plugins/rigor-ffi-rzmq/lib/rigor/plugin/ffi_rzmq.rb +1 -0
- data/plugins/rigor-graphql/lib/rigor/plugin/graphql/type_scanner.rb +8 -6
- data/plugins/rigor-graphql/lib/rigor/plugin/graphql.rb +6 -3
- data/plugins/rigor-hanami/lib/rigor/plugin/hanami.rb +1 -0
- data/plugins/rigor-mangrove/lib/rigor/plugin/mangrove.rb +2 -1
- data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +0 -3
- data/plugins/rigor-minitest/lib/rigor/plugin/minitest.rb +1 -0
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/analyzer.rb +0 -5
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/authorization_scan.rb +2 -2
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_discoverer.rb +0 -1
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_index.rb +0 -1
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit.rb +1 -0
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/analyzer.rb +0 -12
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_index.rb +1 -3
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_loader.rb +0 -1
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n.rb +1 -0
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/acronyms.rb +5 -5
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/analyzer.rb +1 -10
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/devise_routes.rb +3 -3
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/doorkeeper_routes.rb +2 -2
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/grape_api_discoverer.rb +2 -2
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_discoverer.rb +2 -2
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_table.rb +9 -10
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/routes_parser.rb +2 -3
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes.rb +1 -0
- data/plugins/rigor-railties/lib/rigor/plugin/railties.rb +1 -0
- data/plugins/rigor-rbnacl/lib/rigor/plugin/rbnacl.rb +13 -1
- data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +128 -3
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/analyzer.rb +0 -3
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_scope_index.rb +0 -3
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_type_resolver.rb +1 -5
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/matcher_analyzer.rb +2 -3
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec.rb +1 -0
- data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/have_http_status_analyzer.rb +0 -3
- data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails.rb +1 -0
- data/plugins/rigor-sassc/lib/rigor/plugin/sassc.rb +1 -0
- data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers/analyzer.rb +1 -9
- data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers.rb +1 -0
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/analyzer.rb +0 -4
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/effects.rb +1 -1
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/schedule_scan.rb +1 -1
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_discoverer.rb +0 -1
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_index.rb +0 -2
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq.rb +1 -0
- data/plugins/rigor-sinatra/lib/rigor/plugin/sinatra.rb +1 -0
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/absurd_recognizer.rb +2 -5
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/assertion_recognizer.rb +1 -4
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog.rb +3 -9
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog_walker.rb +4 -4
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sig_parser.rb +1 -2
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sigil_detector.rb +4 -5
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/type_translator.rb +7 -5
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet.rb +5 -5
- data/plugins/rigor-statesman/lib/rigor/plugin/statesman.rb +1 -0
- data/sig/rigor/analysis/reachability/scan_cache.rbs +12 -0
- data/sig/rigor/cache.rbs +2 -3
- data/sig/rigor/environment.rbs +5 -0
- data/sig/rigor/inference.rbs +3 -10
- data/sig/rigor/plugin/io_boundary.rbs +4 -0
- data/sig/rigor/plugin/manifest.rbs +2 -1
- data/sig/rigor/reflection.rbs +3 -1
- data/sig/rigor/scope.rbs +24 -3
- data/sig/rigor/sig_gen/skip_reason_catalog.rbs +14 -0
- data/sig/rigor/type.rbs +27 -1
- data/sig/rigor.rbs +1 -0
- data/skills/rigor-ask/SKILL.md +8 -6
- data/skills/rigor-plugin-author/references/02-walker-and-types.md +13 -2
- data/skills/rigor-project-init/SKILL.md +6 -3
- data/skills/rigor-project-init/references/02-configure.md +10 -6
- data/skills/rigor-project-init/references/06-agent-contract.md +67 -0
- data/skills/rigor-type-oracle/SKILL.md +228 -0
- data/skills/rigor-type-oracle/references/01-oracle-commands.md +261 -0
- data/skills/rigor-type-oracle/references/02-agents-md-fragment.md +52 -0
- data/skills/rigor-type-oracle/references/03-gap-protocol.md +128 -0
- data/skills/rigor-unused-adjudicate/SKILL.md +8 -5
- metadata +26 -3
- data/lib/rigor/cli/probe_environment.rb +0 -85
- data/sig/rigor/inference/builtins/numeric_catalog.rbs +0 -3
|
@@ -31,11 +31,14 @@ and skipping one is how a live class ends up on a deletion list.
|
|
|
31
31
|
|
|
32
32
|
Run the report and answer these against the project in front of you.
|
|
33
33
|
|
|
34
|
-
**Are framework roots actually supplied?**
|
|
35
|
-
`roots: N (M from plugins,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
**Are framework roots actually supplied?** When a plugin contributes roots, the
|
|
35
|
+
summary's `roots:` line grows a parenthetical: `roots: N (M from plugins, K
|
|
36
|
+
matched no declaration)`. The parenthetical is omitted entirely when no plugin
|
|
37
|
+
contributed — so on a framework application, a bare `roots: N` with **no**
|
|
38
|
+
`(… from plugins …)` note means nothing is naming your controllers, jobs or
|
|
39
|
+
policies, and most of the report is noise. Stop and fix the plugin
|
|
40
|
+
configuration — `rigor docs 07-plugins` — rather than adjudicating hundreds of
|
|
41
|
+
rows.
|
|
39
42
|
|
|
40
43
|
**Does the project ship signatures?** If `signature_paths:` is configured, also
|
|
41
44
|
run with it emptied and compare:
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rigortype
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rigor contributors
|
|
@@ -306,6 +306,7 @@ files:
|
|
|
306
306
|
- data/builtins/ruby_core/string.yml
|
|
307
307
|
- data/builtins/ruby_core/struct.yml
|
|
308
308
|
- data/builtins/ruby_core/time.yml
|
|
309
|
+
- data/capability_roles/capability_roles.rbs
|
|
309
310
|
- data/core_overlay/csv.rbs
|
|
310
311
|
- data/core_overlay/numeric.rbs
|
|
311
312
|
- data/core_overlay/pathname.rbs
|
|
@@ -537,7 +538,6 @@ files:
|
|
|
537
538
|
- lib/rigor/cli/plugins_command.rb
|
|
538
539
|
- lib/rigor/cli/plugins_renderer.rb
|
|
539
540
|
- lib/rigor/cli/prism_colorizer.rb
|
|
540
|
-
- lib/rigor/cli/probe_environment.rb
|
|
541
541
|
- lib/rigor/cli/protection_fork_scan.rb
|
|
542
542
|
- lib/rigor/cli/protection_renderer.rb
|
|
543
543
|
- lib/rigor/cli/protection_report.rb
|
|
@@ -608,6 +608,7 @@ files:
|
|
|
608
608
|
- lib/rigor/environment/default_libraries.rb
|
|
609
609
|
- lib/rigor/environment/failure_slot.rb
|
|
610
610
|
- lib/rigor/environment/hkt_registry_holder.rb
|
|
611
|
+
- lib/rigor/environment/installed_gem_set.rb
|
|
611
612
|
- lib/rigor/environment/lockfile_resolver.rb
|
|
612
613
|
- lib/rigor/environment/missing_gem_constant_index.rb
|
|
613
614
|
- lib/rigor/environment/rbs_collection_discovery.rb
|
|
@@ -655,6 +656,7 @@ files:
|
|
|
655
656
|
- lib/rigor/inference/def_node_resolver.rb
|
|
656
657
|
- lib/rigor/inference/def_return_typer.rb
|
|
657
658
|
- lib/rigor/inference/dynamic_origin.rb
|
|
659
|
+
- lib/rigor/inference/element_read_widening.rb
|
|
658
660
|
- lib/rigor/inference/expression_typer.rb
|
|
659
661
|
- lib/rigor/inference/fallback.rb
|
|
660
662
|
- lib/rigor/inference/fallback_tracer.rb
|
|
@@ -684,6 +686,7 @@ files:
|
|
|
684
686
|
- lib/rigor/inference/method_dispatcher/member_shape_projection.rb
|
|
685
687
|
- lib/rigor/inference/method_dispatcher/method_folding.rb
|
|
686
688
|
- lib/rigor/inference/method_dispatcher/overload_selector.rb
|
|
689
|
+
- lib/rigor/inference/method_dispatcher/random_folding.rb
|
|
687
690
|
- lib/rigor/inference/method_dispatcher/rbs_dispatch.rb
|
|
688
691
|
- lib/rigor/inference/method_dispatcher/receiver_affinity.rb
|
|
689
692
|
- lib/rigor/inference/method_dispatcher/reduce_folding.rb
|
|
@@ -700,6 +703,7 @@ files:
|
|
|
700
703
|
- lib/rigor/inference/method_dispatcher/uri_folding.rb
|
|
701
704
|
- lib/rigor/inference/method_parameter_binder.rb
|
|
702
705
|
- lib/rigor/inference/multi_target_binder.rb
|
|
706
|
+
- lib/rigor/inference/mutation_rejoin.rb
|
|
703
707
|
- lib/rigor/inference/mutation_widening.rb
|
|
704
708
|
- lib/rigor/inference/narrowing.rb
|
|
705
709
|
- lib/rigor/inference/optimistic_origin.rb
|
|
@@ -710,11 +714,14 @@ files:
|
|
|
710
714
|
- lib/rigor/inference/project_patched_methods.rb
|
|
711
715
|
- lib/rigor/inference/project_patched_scanner.rb
|
|
712
716
|
- lib/rigor/inference/protection_scanner.rb
|
|
717
|
+
- lib/rigor/inference/range_constant.rb
|
|
713
718
|
- lib/rigor/inference/rbs_type_translator.rb
|
|
714
719
|
- lib/rigor/inference/receiver_alias.rb
|
|
720
|
+
- lib/rigor/inference/refinement_mutation.rb
|
|
715
721
|
- lib/rigor/inference/scope_indexer.rb
|
|
716
722
|
- lib/rigor/inference/singleton_object_constant.rb
|
|
717
723
|
- lib/rigor/inference/statement_evaluator.rb
|
|
724
|
+
- lib/rigor/inference/string_mutation.rb
|
|
718
725
|
- lib/rigor/inference/struct_fold_safety.rb
|
|
719
726
|
- lib/rigor/inference/synthetic_method.rb
|
|
720
727
|
- lib/rigor/inference/synthetic_method_index.rb
|
|
@@ -750,6 +757,7 @@ files:
|
|
|
750
757
|
- lib/rigor/plugin/base.rb
|
|
751
758
|
- lib/rigor/plugin/blueprint.rb
|
|
752
759
|
- lib/rigor/plugin/box.rb
|
|
760
|
+
- lib/rigor/plugin/bundled_catalog.rb
|
|
753
761
|
- lib/rigor/plugin/effect_ancestry.rb
|
|
754
762
|
- lib/rigor/plugin/effect_attribution.rb
|
|
755
763
|
- lib/rigor/plugin/effect_edge.rb
|
|
@@ -775,6 +783,8 @@ files:
|
|
|
775
783
|
- lib/rigor/plugin/source_rbs_synthesis_reporter.rb
|
|
776
784
|
- lib/rigor/plugin/trust_policy.rb
|
|
777
785
|
- lib/rigor/plugin/type_node_resolver.rb
|
|
786
|
+
- lib/rigor/plugin_gap_advisory.rb
|
|
787
|
+
- lib/rigor/project_environment.rb
|
|
778
788
|
- lib/rigor/protection/analysis_guard.rb
|
|
779
789
|
- lib/rigor/protection/closure_kill_oracle.rb
|
|
780
790
|
- lib/rigor/protection/dependency_closure.rb
|
|
@@ -792,6 +802,7 @@ files:
|
|
|
792
802
|
- lib/rigor/rbs_extended/hkt_directives.rb
|
|
793
803
|
- lib/rigor/rbs_extended/reporter.rb
|
|
794
804
|
- lib/rigor/reflection.rb
|
|
805
|
+
- lib/rigor/reflection/constant_path.rb
|
|
795
806
|
- lib/rigor/runtime/jit.rb
|
|
796
807
|
- lib/rigor/scope.rb
|
|
797
808
|
- lib/rigor/scope/discovery_index.rb
|
|
@@ -806,6 +817,8 @@ files:
|
|
|
806
817
|
- lib/rigor/sig_gen/path_mapper.rb
|
|
807
818
|
- lib/rigor/sig_gen/rbs_validity.rb
|
|
808
819
|
- lib/rigor/sig_gen/renderer.rb
|
|
820
|
+
- lib/rigor/sig_gen/skip_reason_catalog.rb
|
|
821
|
+
- lib/rigor/sig_gen/superclass_spelling.rb
|
|
809
822
|
- lib/rigor/sig_gen/type_elaborator.rb
|
|
810
823
|
- lib/rigor/sig_gen/write_result.rb
|
|
811
824
|
- lib/rigor/sig_gen/writer.rb
|
|
@@ -834,6 +847,7 @@ files:
|
|
|
834
847
|
- lib/rigor/type/data_instance.rb
|
|
835
848
|
- lib/rigor/type/difference.rb
|
|
836
849
|
- lib/rigor/type/dynamic.rb
|
|
850
|
+
- lib/rigor/type/float_range.rb
|
|
837
851
|
- lib/rigor/type/hash_shape.rb
|
|
838
852
|
- lib/rigor/type/integer_range.rb
|
|
839
853
|
- lib/rigor/type/intersection.rb
|
|
@@ -854,6 +868,7 @@ files:
|
|
|
854
868
|
- lib/rigor/type_node/indexed_access.rb
|
|
855
869
|
- lib/rigor/type_node/integer_literal.rb
|
|
856
870
|
- lib/rigor/type_node/name_scope.rb
|
|
871
|
+
- lib/rigor/type_node/range_literal.rb
|
|
857
872
|
- lib/rigor/type_node/resolver_chain.rb
|
|
858
873
|
- lib/rigor/type_node/string_literal.rb
|
|
859
874
|
- lib/rigor/type_node/symbol_literal.rb
|
|
@@ -879,6 +894,7 @@ files:
|
|
|
879
894
|
- plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_discoverer.rb
|
|
880
895
|
- plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb
|
|
881
896
|
- plugins/rigor-actionpack/lib/rigor/plugin/actionpack/effects.rb
|
|
897
|
+
- plugins/rigor-actionpack/sig/action_controller.rbs
|
|
882
898
|
- plugins/rigor-activejob/lib/rigor-activejob.rb
|
|
883
899
|
- plugins/rigor-activejob/lib/rigor/plugin/activejob.rb
|
|
884
900
|
- plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb
|
|
@@ -895,6 +911,7 @@ files:
|
|
|
895
911
|
- plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb
|
|
896
912
|
- plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_table.rb
|
|
897
913
|
- plugins/rigor-activerecord/lib/rigor/plugin/activerecord/structure_sql_parser.rb
|
|
914
|
+
- plugins/rigor-activerecord/sig/active_record/framework.rbs
|
|
898
915
|
- plugins/rigor-activerecord/sig/active_record/relation.rbs
|
|
899
916
|
- plugins/rigor-activestorage/lib/rigor-activestorage.rb
|
|
900
917
|
- plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb
|
|
@@ -1035,6 +1052,7 @@ files:
|
|
|
1035
1052
|
- sig/rigor/analysis/dependency_source_inference/gem_resolver.rbs
|
|
1036
1053
|
- sig/rigor/analysis/dependency_source_inference/index.rbs
|
|
1037
1054
|
- sig/rigor/analysis/fact_store.rbs
|
|
1055
|
+
- sig/rigor/analysis/reachability/scan_cache.rbs
|
|
1038
1056
|
- sig/rigor/ast.rbs
|
|
1039
1057
|
- sig/rigor/cache.rbs
|
|
1040
1058
|
- sig/rigor/cli/diff_command.rbs
|
|
@@ -1045,7 +1063,6 @@ files:
|
|
|
1045
1063
|
- sig/rigor/inference.rbs
|
|
1046
1064
|
- sig/rigor/inference/builtins.rbs
|
|
1047
1065
|
- sig/rigor/inference/builtins/method_catalog.rbs
|
|
1048
|
-
- sig/rigor/inference/builtins/numeric_catalog.rbs
|
|
1049
1066
|
- sig/rigor/inference/void_origin.rbs
|
|
1050
1067
|
- sig/rigor/plugin.rbs
|
|
1051
1068
|
- sig/rigor/plugin/access_denied_error.rbs
|
|
@@ -1063,6 +1080,7 @@ files:
|
|
|
1063
1080
|
- sig/rigor/rbs_extended.rbs
|
|
1064
1081
|
- sig/rigor/reflection.rbs
|
|
1065
1082
|
- sig/rigor/scope.rbs
|
|
1083
|
+
- sig/rigor/sig_gen/skip_reason_catalog.rbs
|
|
1066
1084
|
- sig/rigor/source.rbs
|
|
1067
1085
|
- sig/rigor/testing.rbs
|
|
1068
1086
|
- sig/rigor/trinary.rbs
|
|
@@ -1091,8 +1109,13 @@ files:
|
|
|
1091
1109
|
- skills/rigor-project-init/references/03-baseline-and-bugs.md
|
|
1092
1110
|
- skills/rigor-project-init/references/04-sig-uplift.md
|
|
1093
1111
|
- skills/rigor-project-init/references/05-jit-performance.md
|
|
1112
|
+
- skills/rigor-project-init/references/06-agent-contract.md
|
|
1094
1113
|
- skills/rigor-protection-uplift/SKILL.md
|
|
1095
1114
|
- skills/rigor-rbs-setup/SKILL.md
|
|
1115
|
+
- skills/rigor-type-oracle/SKILL.md
|
|
1116
|
+
- skills/rigor-type-oracle/references/01-oracle-commands.md
|
|
1117
|
+
- skills/rigor-type-oracle/references/02-agents-md-fragment.md
|
|
1118
|
+
- skills/rigor-type-oracle/references/03-gap-protocol.md
|
|
1096
1119
|
- skills/rigor-unused-adjudicate/SKILL.md
|
|
1097
1120
|
- skills/rigor-upgrade/SKILL.md
|
|
1098
1121
|
homepage: https://github.com/rigortype/rigor
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "../environment"
|
|
4
|
-
require_relative "../plugin"
|
|
5
|
-
require_relative "../plugin/loader"
|
|
6
|
-
require_relative "../plugin/services"
|
|
7
|
-
require_relative "../reflection"
|
|
8
|
-
require_relative "../type/combinator"
|
|
9
|
-
|
|
10
|
-
module Rigor
|
|
11
|
-
class CLI
|
|
12
|
-
# Shared construction of the analysis-observing environment for the single-shot probe commands
|
|
13
|
-
# (`type-of`, `type-scan`, `trace`, `annotate`). Each of these answers "what does the engine infer here?"
|
|
14
|
-
# for a hand-picked file or position, so the environment they type against MUST match the one `rigor check`
|
|
15
|
-
# analyses with — otherwise a probe reports a type the real run never computes.
|
|
16
|
-
#
|
|
17
|
-
# The gap this closes: the probes historically built their environment with
|
|
18
|
-
# `Environment.for_project(libraries:, signature_paths:)` only — no plugin registry, no `source_files:`. The
|
|
19
|
-
# `source_rbs_synthesizer` plugin hook (ADR-32 / ADR-93's auto-wired `rigor-rbs-inline`) therefore never
|
|
20
|
-
# ran there, so a class whose only signature comes from an inline `#: () -> void` annotation typed as
|
|
21
|
-
# `Dynamic[top]` under a probe while `check` resolved it through the synthesized RBS. That divergence
|
|
22
|
-
# misattributed a dispatch tier during the #162 transitive-void design pass (see the 2026-07-19 addendum in
|
|
23
|
-
# docs/adr/100-static-diagnostic-family-and-void-origins.md).
|
|
24
|
-
#
|
|
25
|
-
# This threads the two things that were missing — the plugin registry built by the plugin loader, and the
|
|
26
|
-
# `source_files:` the synthesizers run over — matching `rigor check`'s `Environment.for_project` call
|
|
27
|
-
# (built in `Analysis::Runner::PoolCoordinator#build_runner_environment`). A probe legitimately simplifies
|
|
28
|
-
# relative to check: no synthesis-failure reporter (a probe has no diagnostic pipeline) and no synthesis
|
|
29
|
-
# cache store (a single-position probe recomputes cheaply). Plugin loading itself matches check — same
|
|
30
|
-
# `.rigor.yml` `plugins:` config, same ADR-93 auto-wire (already applied by `Configuration.load`), same
|
|
31
|
-
# `enabled:` / `require_magic_comment` semantics via `Plugin::Loader.load`.
|
|
32
|
-
#
|
|
33
|
-
# Fail-soft is the invariant: a project with no plugins, an unresolvable plugin gem, or any error during the
|
|
34
|
-
# plugin-aware build degrades to the bare environment the probes used before — never a crash. `Plugin::Loader`
|
|
35
|
-
# already isolates per-entry load failures onto the registry; the `rescue` here is the belt-and-suspenders
|
|
36
|
-
# around anything the loader or the plugin-aware env build itself might raise.
|
|
37
|
-
module ProbeEnvironment
|
|
38
|
-
module_function
|
|
39
|
-
|
|
40
|
-
# Builds the plugin-aware {Rigor::Environment} a probe types against.
|
|
41
|
-
#
|
|
42
|
-
# @param configuration [Rigor::Configuration] the loaded project configuration (already carries the
|
|
43
|
-
# ADR-93 auto-wired `rigor-rbs-inline` entry when the library is resolvable).
|
|
44
|
-
# @param source_files [Array<String>] the file(s) the probe inspects. Threaded so each loaded plugin's
|
|
45
|
-
# `source_rbs_synthesizer` runs over them at env-build time; an empty list contributes no synthesized RBS.
|
|
46
|
-
# @return [Rigor::Environment]
|
|
47
|
-
def build(configuration:, source_files:)
|
|
48
|
-
Environment.for_project(
|
|
49
|
-
libraries: configuration.libraries,
|
|
50
|
-
signature_paths: configuration.signature_paths,
|
|
51
|
-
plugin_registry: load_plugin_registry(configuration),
|
|
52
|
-
source_files: source_files
|
|
53
|
-
)
|
|
54
|
-
rescue StandardError
|
|
55
|
-
bare(configuration)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Loads the project's configured plugins the same way the plugin-inspection commands (`rigor plugins`,
|
|
59
|
-
# `rigor doctor`) do: a `Plugin::Services` with no cache store (the probe recomputes) driving
|
|
60
|
-
# `Plugin::Loader.load`. Returns `nil` — so `Environment.for_project` skips the plugin tier entirely —
|
|
61
|
-
# when the project declares no plugins.
|
|
62
|
-
def load_plugin_registry(configuration)
|
|
63
|
-
return nil if configuration.plugins.empty?
|
|
64
|
-
|
|
65
|
-
services = Plugin::Services.new(
|
|
66
|
-
reflection: Reflection,
|
|
67
|
-
type: Type::Combinator,
|
|
68
|
-
configuration: configuration,
|
|
69
|
-
cache_store: nil
|
|
70
|
-
)
|
|
71
|
-
Plugin::Loader.load(configuration: configuration, services: services)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# The pre-fix environment: RBS + project signatures only, no plugin tier and no synthesized RBS. The
|
|
75
|
-
# fail-soft floor — a probe on a project with broken or absent plugin setup lands here and behaves exactly
|
|
76
|
-
# as it did before this parity fix.
|
|
77
|
-
def bare(configuration)
|
|
78
|
-
Environment.for_project(
|
|
79
|
-
libraries: configuration.libraries,
|
|
80
|
-
signature_paths: configuration.signature_paths
|
|
81
|
-
)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|