rigortype 0.4.6 → 0.4.7
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 +2 -2
- data/data/gem_overlay/activesupport/core_ext.rbs +16 -13
- data/data/vendored_gem_sigs/bundler/bundler.rbs +1 -1
- data/data/vendored_gem_sigs/rubygems/rubygems_extras.rbs +4 -3
- data/docs/handbook/01-getting-started.md +5 -2
- data/docs/handbook/11-sig-gen.md +50 -3
- data/docs/handbook/appendix-phpstan.md +4 -4
- data/docs/manual/02-cli-reference.md +152 -26
- data/docs/manual/03-configuration.md +36 -3
- data/docs/manual/06-baseline.md +6 -4
- data/docs/manual/09-editor-integration.md +13 -2
- data/docs/manual/10-mcp-server.md +38 -2
- data/docs/manual/12-caching.md +4 -3
- data/docs/manual/plugins/rigor-actionpack.md +19 -11
- data/docs/manual/plugins/rigor-activesupport-core-ext.md +20 -1
- data/lib/rigor/analysis/baseline.rb +24 -27
- data/lib/rigor/analysis/check_rules/always_truthy_condition_collector.rb +5 -6
- data/lib/rigor/analysis/check_rules/dead_assignment_collector.rb +2 -2
- data/lib/rigor/analysis/check_rules/declaration_sourced_guard.rb +4 -4
- data/lib/rigor/analysis/check_rules/duplicate_hash_key_collector.rb +2 -2
- data/lib/rigor/analysis/check_rules/inferred_param_guard.rb +85 -13
- data/lib/rigor/analysis/check_rules/ivar_write_collector.rb +3 -2
- data/lib/rigor/analysis/check_rules/lexical_method_sites.rb +0 -1
- data/lib/rigor/analysis/check_rules/main_pass_collector.rb +5 -8
- data/lib/rigor/analysis/check_rules/published_constant_guard.rb +1 -1
- data/lib/rigor/analysis/check_rules/rebinding_block_callees.rb +3 -3
- data/lib/rigor/analysis/check_rules/return_in_ensure_collector.rb +1 -2
- data/lib/rigor/analysis/check_rules/rule_ids.rb +1 -1
- data/lib/rigor/analysis/check_rules/rule_walk.rb +9 -7
- data/lib/rigor/analysis/check_rules/shadowed_rescue_collector.rb +3 -4
- data/lib/rigor/analysis/check_rules/special_global_setters.rb +3 -3
- data/lib/rigor/analysis/check_rules/unreachable_clause_collector.rb +2 -2
- data/lib/rigor/analysis/check_rules/void_value_use_collector.rb +1 -1
- data/lib/rigor/analysis/check_rules.rb +124 -44
- data/lib/rigor/analysis/crash_signature.rb +2 -2
- data/lib/rigor/analysis/dependency_recorder.rb +4 -4
- data/lib/rigor/analysis/dependency_source_inference/boundary_cross_reporter.rb +14 -3
- data/lib/rigor/analysis/dependency_source_inference/gem_resolver.rb +1 -1
- data/lib/rigor/analysis/dependency_source_inference/index.rb +6 -8
- data/lib/rigor/analysis/dependency_source_inference/walker.rb +4 -4
- data/lib/rigor/analysis/edit_replay.rb +93 -6
- data/lib/rigor/analysis/fact_store.rb +3 -3
- data/lib/rigor/analysis/incremental_run_slot/write_guard.rb +2 -2
- data/lib/rigor/analysis/incremental_run_slot.rb +2 -2
- data/lib/rigor/analysis/incremental_session.rb +27 -16
- data/lib/rigor/analysis/rule_catalog.rb +2 -2
- data/lib/rigor/analysis/run_stats.rb +2 -2
- data/lib/rigor/analysis/runner/buffer_pool_dispatcher.rb +2 -2
- data/lib/rigor/analysis/runner/declaration_position.rb +1 -1
- data/lib/rigor/analysis/runner/diagnostic_aggregator.rb +193 -93
- data/lib/rigor/analysis/runner/effect_envelope_pass.rb +1 -1
- data/lib/rigor/analysis/runner/pool_coordinator.rb +147 -323
- data/lib/rigor/analysis/runner/project_pre_passes.rb +3 -3
- data/lib/rigor/analysis/runner/run_level_facts.rb +304 -0
- data/lib/rigor/analysis/runner/run_snapshots.rb +44 -54
- data/lib/rigor/analysis/runner/worker_payload.rb +36 -0
- data/lib/rigor/analysis/runner.rb +77 -71
- data/lib/rigor/analysis/self_call_resolution_recorder.rb +1 -1
- data/lib/rigor/analysis/template_unit_positions.rb +2 -3
- data/lib/rigor/analysis/template_units.rb +9 -1
- data/lib/rigor/analysis/worker_session.rb +24 -31
- data/lib/rigor/bleeding_edge.rb +3 -6
- data/lib/rigor/builtins/imported_refinements.rb +6 -8
- data/lib/rigor/builtins/predefined_constant_refinements.rb +1 -1
- data/lib/rigor/builtins/regex_refinement.rb +4 -6
- data/lib/rigor/cache/descriptor.rb +6 -5
- data/lib/rigor/cache/incremental_snapshot.rb +31 -12
- data/lib/rigor/cache/rbs_cache_producer.rb +2 -2
- data/lib/rigor/cache/rbs_class_ancestor_table.rb +1 -1
- data/lib/rigor/cache/rbs_class_type_param_names.rb +2 -2
- data/lib/rigor/cache/rbs_constant_table.rb +1 -1
- data/lib/rigor/cache/rbs_descriptor.rb +54 -3
- data/lib/rigor/cache/rbs_environment.rb +4 -1
- data/lib/rigor/cache/rbs_environment_marshal_patch.rb +2 -2
- data/lib/rigor/cache/rbs_known_class_names.rb +1 -1
- data/lib/rigor/cache/store.rb +11 -10
- data/lib/rigor/ci_detector.rb +1 -1
- data/lib/rigor/cli/annotate_command.rb +24 -19
- data/lib/rigor/cli/baseline_command.rb +145 -55
- data/lib/rigor/cli/catalogue.rb +256 -0
- data/lib/rigor/cli/check_command.rb +108 -102
- data/lib/rigor/cli/check_runner_factory.rb +2 -2
- data/lib/rigor/cli/command.rb +15 -1
- data/lib/rigor/cli/coverage_command.rb +21 -8
- data/lib/rigor/cli/coverage_mutation.rb +5 -7
- data/lib/rigor/cli/coverage_renderer.rb +2 -1
- data/lib/rigor/cli/coverage_scan.rb +3 -5
- data/lib/rigor/cli/diff_command.rb +25 -20
- data/lib/rigor/cli/docs_command.rb +1 -2
- data/lib/rigor/cli/doctor_command.rb +12 -12
- data/lib/rigor/cli/effects_command.rb +50 -40
- data/lib/rigor/cli/effects_diff_renderer.rb +18 -17
- data/lib/rigor/cli/effects_explain_renderer.rb +13 -12
- data/lib/rigor/cli/effects_renderer.rb +2 -1
- data/lib/rigor/cli/effects_snapshot_command.rb +18 -17
- data/lib/rigor/cli/explain_command.rb +18 -8
- data/lib/rigor/cli/fused_protection_renderer.rb +2 -1
- data/lib/rigor/cli/json_document.rb +41 -0
- data/lib/rigor/cli/lens_command.rb +12 -8
- data/lib/rigor/cli/lsp_command.rb +250 -23
- data/lib/rigor/cli/mcp_command.rb +12 -7
- data/lib/rigor/cli/mutation_fork_scan.rb +1 -1
- data/lib/rigor/cli/mutation_protection_renderer.rb +3 -2
- data/lib/rigor/cli/options.rb +40 -1
- data/lib/rigor/cli/plugin_command.rb +93 -46
- data/lib/rigor/cli/plugins_command.rb +17 -18
- data/lib/rigor/cli/plugins_renderer.rb +10 -6
- data/lib/rigor/cli/protection_fork_scan.rb +2 -2
- data/lib/rigor/cli/protection_renderer.rb +2 -1
- data/lib/rigor/cli/show_bleedingedge_command.rb +21 -15
- data/lib/rigor/cli/sig_gen_command.rb +84 -27
- data/lib/rigor/cli/skill_command.rb +32 -3
- data/lib/rigor/cli/skill_deep_probe.rb +1 -1
- data/lib/rigor/cli/skill_describe.rb +1 -1
- data/lib/rigor/cli/trace_command.rb +14 -9
- data/lib/rigor/cli/triage_command.rb +10 -11
- data/lib/rigor/cli/triage_renderer.rb +2 -1
- data/lib/rigor/cli/type_of_command.rb +16 -11
- data/lib/rigor/cli/type_of_project_scope.rb +1 -4
- data/lib/rigor/cli/type_of_renderer.rb +4 -1
- data/lib/rigor/cli/type_scan_command.rb +14 -9
- data/lib/rigor/cli/type_scan_renderer.rb +2 -1
- data/lib/rigor/cli/unused_command.rb +27 -17
- data/lib/rigor/cli/upgrade_command.rb +5 -0
- data/lib/rigor/cli.rb +209 -54
- data/lib/rigor/config_audit.rb +1 -1
- data/lib/rigor/configuration/severity_profile.rb +5 -5
- data/lib/rigor/configuration.rb +72 -30
- data/lib/rigor/effects/definition_context.rb +0 -2
- data/lib/rigor/effects/envelope.rb +1 -1
- data/lib/rigor/effects/framework_units.rb +1 -1
- data/lib/rigor/effects/mutation_classifier.rb +4 -7
- data/lib/rigor/effects/propagator.rb +1 -1
- data/lib/rigor/effects/registry.rb +2 -2
- data/lib/rigor/effects/snapshot.rb +1 -1
- data/lib/rigor/effects/taint_cause.rb +0 -2
- data/lib/rigor/effects/unit_scan.rb +9 -13
- data/lib/rigor/environment/bundle_sig_discovery.rb +5 -9
- data/lib/rigor/environment/class_registry.rb +3 -3
- data/lib/rigor/environment/core_root.rb +77 -0
- data/lib/rigor/environment/default_libraries.rb +1 -1
- data/lib/rigor/environment/deferred_signature_plan.rb +283 -0
- data/lib/rigor/environment/gated_signature_guard.rb +1 -1
- data/lib/rigor/environment/gated_signature_plan.rb +5 -2
- data/lib/rigor/environment/lockfile_resolver.rb +28 -12
- data/lib/rigor/environment/member_consistency/comparator.rb +18 -1
- data/lib/rigor/environment/member_consistency.rb +56 -7
- data/lib/rigor/environment/missing_gem_constant_index.rb +3 -2
- data/lib/rigor/environment/project_path_gems.rb +124 -0
- data/lib/rigor/environment/rbs_hierarchy.rb +6 -15
- data/lib/rigor/environment/rbs_loader.rb +480 -67
- data/lib/rigor/environment/reflection.rb +7 -7
- data/lib/rigor/environment/required_features.rb +0 -3
- data/lib/rigor/environment/ruby_library_roots.rb +1 -1
- data/lib/rigor/environment/vendored_signature_plan.rb +153 -0
- data/lib/rigor/environment.rb +41 -10
- data/lib/rigor/flow_contribution/merger.rb +4 -4
- data/lib/rigor/inference/acceptance.rb +93 -32
- data/lib/rigor/inference/block_parameter_binder.rb +2 -3
- data/lib/rigor/inference/block_run_count.rb +178 -0
- data/lib/rigor/inference/budget_trace.rb +8 -2
- data/lib/rigor/inference/builtins/exception_catalog.rb +2 -2
- data/lib/rigor/inference/builtins/numeric_catalog.rb +2 -5
- data/lib/rigor/inference/builtins/random_catalog.rb +2 -2
- data/lib/rigor/inference/callee_mutation_chain.rb +88 -77
- data/lib/rigor/inference/callee_write_census.rb +815 -0
- data/lib/rigor/inference/construction_escape.rb +217 -0
- data/lib/rigor/inference/declaration_walk/traversal.rb +1 -1
- data/lib/rigor/inference/deep_erasure.rb +39 -7
- data/lib/rigor/inference/def_handle.rb +1 -1
- data/lib/rigor/inference/def_node_resolver.rb +1 -1
- data/lib/rigor/inference/def_return_typer.rb +46 -4
- data/lib/rigor/inference/definer_resolution.rb +4 -2
- data/lib/rigor/inference/definers_index.rb +106 -0
- data/lib/rigor/inference/direct_ivar_writes.rb +300 -0
- data/lib/rigor/inference/element_read_widening.rb +49 -3
- data/lib/rigor/inference/expression_typer.rb +116 -49
- data/lib/rigor/inference/external_ancestor_resolution.rb +3 -4
- data/lib/rigor/inference/global_write_census.rb +76 -2
- data/lib/rigor/inference/global_writer_reach.rb +260 -0
- data/lib/rigor/inference/hkt_body.rb +1 -2
- data/lib/rigor/inference/hkt_body_parser.rb +3 -5
- data/lib/rigor/inference/hkt_reducer.rb +2 -2
- data/lib/rigor/inference/hkt_registry.rb +3 -5
- data/lib/rigor/inference/indexed_narrowing.rb +4 -7
- data/lib/rigor/inference/intervening_ivar_reset.rb +26 -4
- data/lib/rigor/inference/ivar_writer_census.rb +51 -0
- data/lib/rigor/inference/key_presence_guard.rb +2 -1
- data/lib/rigor/inference/loop_value_record.rb +8 -4
- data/lib/rigor/inference/match_rebinding/frame.rb +46 -0
- data/lib/rigor/inference/match_rebinding/yielding_match.rb +45 -0
- data/lib/rigor/inference/match_rebinding.rb +11 -1
- data/lib/rigor/inference/memo_audit.rb +55 -0
- data/lib/rigor/inference/method_dispatcher/alias_strict_nominals.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/argument_distribution.rb +40 -0
- data/lib/rigor/inference/method_dispatcher/block_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/constant_folding.rb +3 -3
- data/lib/rigor/inference/method_dispatcher/contested_overloads.rb +89 -0
- data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/kernel_dispatch.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/no_match_fallback.rb +54 -0
- data/lib/rigor/inference/method_dispatcher/overload_selector.rb +39 -27
- data/lib/rigor/inference/method_dispatcher/random_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +203 -17
- data/lib/rigor/inference/method_dispatcher/reduce_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher/regexp_folding.rb +2 -2
- data/lib/rigor/inference/method_dispatcher/self_substitute.rb +2 -2
- data/lib/rigor/inference/method_dispatcher/set_folding.rb +9 -7
- data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +83 -20
- data/lib/rigor/inference/method_dispatcher/singleton_folding.rb +0 -1
- data/lib/rigor/inference/method_dispatcher/singleton_mixin_dispatch.rb +50 -17
- data/lib/rigor/inference/method_dispatcher/struct_folding.rb +5 -5
- data/lib/rigor/inference/method_dispatcher/struct_materialization.rb +4 -6
- data/lib/rigor/inference/method_dispatcher/uri_folding.rb +1 -1
- data/lib/rigor/inference/method_dispatcher.rb +64 -14
- data/lib/rigor/inference/module_function_state.rb +11 -1
- data/lib/rigor/inference/multi_target_binder.rb +1 -1
- data/lib/rigor/inference/mutation_rejoin.rb +240 -4
- data/lib/rigor/inference/mutation_widening.rb +157 -27
- data/lib/rigor/inference/narrowing.rb +47 -33
- data/lib/rigor/inference/optimistic_origin.rb +1 -1
- data/lib/rigor/inference/out_buffer_mutation.rb +72 -0
- data/lib/rigor/inference/parameter_inference_collector.rb +5 -6
- data/lib/rigor/inference/pre_eval_constants.rb +1 -1
- data/lib/rigor/inference/project_method_ownership.rb +6 -3
- data/lib/rigor/inference/project_yielder.rb +11 -17
- data/lib/rigor/inference/receiver_alias.rb +20 -0
- data/lib/rigor/inference/refined_dispatch/constructed_class.rb +3 -1
- data/lib/rigor/inference/refined_dispatch/own_method.rb +2 -1
- data/lib/rigor/inference/remover_holder_scan.rb +233 -0
- data/lib/rigor/inference/remover_narrowing.rb +224 -0
- data/lib/rigor/inference/rewrite_mutation.rb +53 -2
- data/lib/rigor/inference/scope_indexer/certainty.rb +0 -1
- data/lib/rigor/inference/scope_indexer/constant_ivar_value.rb +93 -0
- data/lib/rigor/inference/scope_indexer/declared_param_writes.rb +58 -15
- data/lib/rigor/inference/scope_indexer/derived_param_value.rb +112 -0
- data/lib/rigor/inference/scope_indexer/empty_seed.rb +99 -0
- data/lib/rigor/inference/scope_indexer/ivar_contributions.rb +135 -0
- data/lib/rigor/inference/scope_indexer.rb +137 -46
- data/lib/rigor/inference/self_call_ivar_writes.rb +84 -12
- data/lib/rigor/inference/set_mutation.rb +189 -0
- data/lib/rigor/inference/singleton_hook_decline.rb +1 -2
- data/lib/rigor/inference/statement_evaluator.rb +2328 -138
- data/lib/rigor/inference/struct_fold_safety.rb +4 -6
- data/lib/rigor/inference/synthetic_method_scanner.rb +5 -6
- data/lib/rigor/inference/toplevel_def_census.rb +59 -0
- data/lib/rigor/inference/unknown_store_widening.rb +103 -4
- data/lib/rigor/inference/unthreaded_rebinds.rb +2 -3
- data/lib/rigor/inference/void_tail_summary.rb +2 -1
- data/lib/rigor/language_server/buffer_table.rb +3 -3
- data/lib/rigor/language_server/completion_provider.rb +26 -20
- data/lib/rigor/language_server/config_warning_announcer.rb +28 -0
- data/lib/rigor/language_server/diagnostic_publisher.rb +8 -3
- data/lib/rigor/language_server/document_symbol_provider.rb +1 -1
- data/lib/rigor/language_server/folding_range_provider.rb +1 -2
- data/lib/rigor/language_server/hover_provider.rb +1 -7
- data/lib/rigor/language_server/hover_renderer.rb +6 -8
- data/lib/rigor/language_server/project_context.rb +39 -1
- data/lib/rigor/language_server/publish_batcher.rb +3 -4
- data/lib/rigor/language_server/selection_range_provider.rb +2 -4
- data/lib/rigor/language_server/server.rb +7 -3
- data/lib/rigor/language_server/signature_help_provider.rb +4 -4
- data/lib/rigor/lens/plugins.rb +1 -1
- data/lib/rigor/mcp/server.rb +73 -2
- data/lib/rigor/mcp.rb +1 -1
- data/lib/rigor/plugin/access_denied_error.rb +1 -2
- data/lib/rigor/plugin/bundled_catalog.rb +1 -12
- data/lib/rigor/plugin/io_boundary.rb +1 -1
- data/lib/rigor/plugin/loader.rb +25 -8
- data/lib/rigor/plugin/macro/heredoc_template.rb +7 -8
- data/lib/rigor/plugin/macro/trait_registry.rb +6 -9
- data/lib/rigor/plugin/manifest.rb +9 -13
- data/lib/rigor/plugin/registry.rb +3 -3
- data/lib/rigor/plugin/services.rb +2 -3
- data/lib/rigor/plugin/source_rbs_synthesis_reporter.rb +11 -0
- data/lib/rigor/plugin/trust_policy.rb +2 -2
- data/lib/rigor/plugin/type_node_resolver.rb +2 -4
- data/lib/rigor/plugin.rb +6 -8
- data/lib/rigor/plugin_gap_advisory.rb +5 -1
- data/lib/rigor/project_environment.rb +16 -2
- data/lib/rigor/protection/analysis_guard.rb +1 -1
- data/lib/rigor/protection/discovery_seed.rb +44 -5
- data/lib/rigor/protection/mutator.rb +1 -1
- data/lib/rigor/rbs_extended/envelope_scanner.rb +4 -6
- data/lib/rigor/rbs_extended/hkt_directives.rb +6 -10
- data/lib/rigor/rbs_extended/reporter.rb +27 -3
- data/lib/rigor/rbs_extended.rb +2 -3
- data/lib/rigor/reflection/constant_ancestors.rb +5 -3
- data/lib/rigor/rooted_glob.rb +15 -1
- data/lib/rigor/run_scoped_slots.rb +38 -0
- data/lib/rigor/runtime/jit.rb +1 -1
- data/lib/rigor/scope/discovery_index.rb +19 -6
- data/lib/rigor/scope/resolution_chain.rb +3 -1
- data/lib/rigor/scope.rb +365 -31
- data/lib/rigor/sig_gen/classification.rb +4 -0
- data/lib/rigor/sig_gen/effect_annotation.rb +3 -3
- data/lib/rigor/sig_gen/generator.rb +371 -58
- data/lib/rigor/sig_gen/generic_header_scan.rb +189 -0
- data/lib/rigor/sig_gen/inline_declarations.rb +2 -2
- data/lib/rigor/sig_gen/layout_index.rb +3 -3
- data/lib/rigor/sig_gen/method_candidate.rb +23 -4
- data/lib/rigor/sig_gen/observation_collector.rb +3 -5
- data/lib/rigor/sig_gen/observed_call.rb +1 -1
- data/lib/rigor/sig_gen/path_mapper.rb +6 -0
- data/lib/rigor/sig_gen/renderer.rb +15 -9
- data/lib/rigor/sig_gen/skip_reason_catalog.rb +15 -2
- data/lib/rigor/sig_gen/type_name_qualification.rb +69 -0
- data/lib/rigor/sig_gen/write_reporter.rb +63 -14
- data/lib/rigor/sig_gen/write_result.rb +23 -12
- data/lib/rigor/sig_gen/writer.rb +217 -37
- data/lib/rigor/type/acceptance_router.rb +2 -2
- data/lib/rigor/type/accepts_result.rb +1 -1
- data/lib/rigor/type/app.rb +4 -6
- data/lib/rigor/type/combinator.rb +9 -13
- data/lib/rigor/type/constant.rb +4 -5
- data/lib/rigor/type/hash_shape.rb +21 -40
- data/lib/rigor/type/union.rb +1 -1
- data/lib/rigor/type_node/identifier.rb +1 -2
- data/lib/rigor/type_node/resolver_chain.rb +1 -1
- data/lib/rigor/type_node/string_literal.rb +1 -2
- data/lib/rigor/type_node/symbol_literal.rb +1 -2
- data/lib/rigor/type_node/union.rb +3 -6
- data/lib/rigor/value_semantics.rb +1 -10
- data/lib/rigor/version.rb +1 -1
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_discoverer.rb +2 -2
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_index.rb +2 -3
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb +1 -1
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_discoverer.rb +38 -36
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_index.rb +4 -2
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer.rb +6 -4
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +1 -1
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb +1 -5
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_scan.rb +0 -1
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/erb_compiler.rb +2 -1
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/view_assigns.rb +1 -1
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack.rb +66 -19
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/effects.rb +1 -1
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob.rb +4 -3
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/association_roots.rb +3 -2
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/effects.rb +2 -2
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +21 -31
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_index.rb +10 -16
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb +2 -3
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_table.rb +0 -1
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +5 -4
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/attachment_discoverer.rb +3 -4
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/attachment_index.rb +1 -1
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb +7 -12
- data/plugins/rigor-activestorage/lib/rigor-activestorage.rb +1 -1
- data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext/effects.rb +1 -1
- data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext/symbolize_keys.rb +102 -0
- data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext.rb +19 -6
- data/plugins/rigor-activesupport-core-ext/sig/active_support/core_ext.rbs +26 -13
- data/plugins/rigor-alba/lib/rigor/plugin/alba/resource_index.rb +3 -3
- data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema/schema_scanner.rb +1 -3
- data/plugins/rigor-dry-struct/lib/rigor/plugin/dry_struct.rb +6 -6
- data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types/alias_scanner.rb +5 -6
- data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types.rb +1 -1
- data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation/params_shape.rb +2 -3
- data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation.rb +5 -8
- data/plugins/rigor-ethon/lib/rigor/plugin/ethon.rb +0 -1
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_discoverer.rb +1 -1
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot.rb +10 -18
- data/plugins/rigor-ffi/lib/rigor/plugin/ffi/analyzer.rb +0 -1
- data/plugins/rigor-ffi/lib/rigor/plugin/ffi/discoverer.rb +0 -2
- data/plugins/rigor-ffi/lib/rigor/plugin/ffi.rb +4 -5
- data/plugins/rigor-grape/lib/rigor/plugin/grape.rb +0 -2
- data/plugins/rigor-graphql/lib/rigor/plugin/graphql/type_scanner.rb +6 -7
- data/plugins/rigor-hanami/lib/rigor/plugin/hanami/action_checker.rb +2 -4
- data/plugins/rigor-hanami/lib/rigor/plugin/hanami.rb +2 -5
- data/plugins/rigor-mangrove/lib/rigor/plugin/mangrove.rb +2 -2
- data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +6 -6
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_discoverer.rb +2 -1
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/analyzer.rb +3 -8
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_index.rb +2 -3
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_loader.rb +5 -8
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/analyzer.rb +1 -3
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/devise_routes.rb +2 -3
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_discoverer.rb +1 -1
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/routes_parser.rb +4 -11
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes.rb +1 -1
- data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +2 -1
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/matcher_analyzer.rb +1 -1
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec.rb +2 -2
- data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails.rb +3 -4
- data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers/analyzer.rb +6 -8
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq.rb +3 -2
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/absurd_recognizer.rb +4 -5
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/assertion_recognizer.rb +6 -7
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog.rb +1 -1
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sig_parser.rb +2 -2
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet.rb +17 -21
- data/plugins/rigor-statesman/lib/rigor/plugin/statesman.rb +2 -3
- data/plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_discoverer.rb +3 -2
- data/plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_index.rb +4 -4
- data/sig/rigor/analysis/baseline.rbs +0 -3
- data/sig/rigor/analysis/fact_store.rbs +1 -0
- data/sig/rigor/analysis/reachability/scan_cache.rbs +1 -1
- data/sig/rigor/cli/diff_command.rbs +1 -1
- data/sig/rigor/cli/explain_command.rbs +1 -1
- data/sig/rigor/effects/registry.rbs +2 -2
- data/sig/rigor/inference.rbs +4 -1
- data/sig/rigor/plugin/additional_initializer.rbs +0 -5
- data/sig/rigor/plugin/base.rbs +1 -0
- data/sig/rigor/plugin/effect_attribution.rbs +3 -3
- data/sig/rigor/plugin/effect_edge.rbs +1 -1
- data/sig/rigor/plugin/effect_entry_points.rbs +3 -3
- data/sig/rigor/plugin/io_boundary.rbs +2 -1
- data/sig/rigor/plugin/manifest.rbs +9 -9
- data/sig/rigor/plugin/protocol_contract.rbs +3 -7
- data/sig/rigor/scope.rbs +23 -3
- data/skills/rigor-plugin-author/SKILL.md +4 -4
- data/skills/rigor-plugin-author/references/02-walker-and-types.md +5 -5
- data/skills/rigor-plugin-review/SKILL.md +3 -3
- data/skills/rigor-project-init/references/03-baseline-and-bugs.md +12 -1
- metadata +36 -3
|
@@ -18,7 +18,7 @@ class Rigor::Plugin::Manifest
|
|
|
18
18
|
def config_schema: () -> untyped
|
|
19
19
|
def config_defaults: () -> Hash[String, untyped]
|
|
20
20
|
def target_gems: () -> Array[String]
|
|
21
|
-
# sig-gen gap: #
|
|
21
|
+
# sig-gen gap: #2418 — written by a private `assign_*` helper whose parameters are undeclared (`initialize` hands
|
|
22
22
|
# its fields to such helpers); each write is a derived expression (`dup.freeze`, `map`), so the helper's parameter
|
|
23
23
|
# types alone would not generate it.
|
|
24
24
|
def template_globs: () -> Array[String]
|
|
@@ -35,31 +35,31 @@ class Rigor::Plugin::Manifest
|
|
|
35
35
|
def hkt_registrations: () -> untyped
|
|
36
36
|
def hkt_definitions: () -> untyped
|
|
37
37
|
def signature_paths: () -> Array[String]
|
|
38
|
-
# sig-gen gap: #
|
|
38
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: `validate_protocol_contracts!` requires every element
|
|
39
39
|
# `is_a?(ProtocolContract)`.
|
|
40
40
|
def protocol_contracts: () -> Array[Rigor::Plugin::ProtocolContract]
|
|
41
41
|
# ADR-32 WD6/WD12 — any object responding to `call`, and its result is a documented multi-shape
|
|
42
42
|
# outcome (`String` / nil / `[:error, msg]` / `[:ok, src, msgs]`), not `String?` — `untyped` is the
|
|
43
43
|
# honest claim until the outcome has a sig'd shape.
|
|
44
44
|
def source_rbs_synthesizer: () -> untyped
|
|
45
|
-
# sig-gen gap: #
|
|
45
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: the validator (`validate_additional_initializers!`) requires
|
|
46
46
|
# every element `is_a?(AdditionalInitializer)`, so the element type is hand-written.
|
|
47
47
|
def additional_initializers: () -> Array[Rigor::Plugin::AdditionalInitializer]
|
|
48
48
|
|
|
49
|
-
# sig-gen gap: #
|
|
49
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: `validate_effect_root!` bounds the spelling.
|
|
50
50
|
def effect_root: () -> String?
|
|
51
|
-
# sig-gen gap: #
|
|
51
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: `validate_effect_labels!` requires non-empty `String`
|
|
52
52
|
# elements.
|
|
53
53
|
def effect_labels: () -> Array[String]
|
|
54
|
-
# sig-gen gap: #
|
|
54
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: `validate_effect_attributions!` requires every element
|
|
55
55
|
# `is_a?(EffectAttribution)`.
|
|
56
56
|
def effect_attributions: () -> Array[Rigor::Plugin::EffectAttribution]
|
|
57
|
-
# sig-gen gap: #
|
|
57
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: `validate_effect_edges!` requires `is_a?(EffectEdge)`.
|
|
58
58
|
def effect_edges: () -> Array[Rigor::Plugin::EffectEdge]
|
|
59
|
-
# sig-gen gap: #
|
|
59
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: `validate_effect_entry_points!` requires
|
|
60
60
|
# `is_a?(EffectEntryPoints)`.
|
|
61
61
|
def effect_entry_points: () -> Array[Rigor::Plugin::EffectEntryPoints]
|
|
62
|
-
# sig-gen gap: #
|
|
62
|
+
# sig-gen gap: #2418 — same shape as `template_globs`: `validate_effect_ancestry!` requires `is_a?(EffectAncestry)`.
|
|
63
63
|
def effect_ancestry: () -> Array[Rigor::Plugin::EffectAncestry]
|
|
64
64
|
|
|
65
65
|
# The identity opening a root when this plugin's labels join the run's vocabulary: the
|
|
@@ -23,11 +23,8 @@ module Rigor
|
|
|
23
23
|
def self.[]: (index: Integer, type_name: String) -> instance | (Integer index, String type_name) -> instance
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
# sig-gen gap: #2321 — `attr_reader` rows over ivars `initialize` assigns from expressions derived
|
|
27
|
-
# from its parameters (`dup.freeze`/`to_sym`), so the stored types are hand-written.
|
|
28
26
|
attr_reader path_glob: String
|
|
29
27
|
|
|
30
|
-
# sig-gen gap: #2321 — as above (`to_sym` normalizes the accepted Symbol|String).
|
|
31
28
|
attr_reader method_name: Symbol
|
|
32
29
|
|
|
33
30
|
# `singleton ? true : false` collapses any truthy input to bool — sig-gen already infers
|
|
@@ -38,12 +35,11 @@ module Rigor
|
|
|
38
35
|
# parameters are undeclared (it guarantees `Array[ParamType]`).
|
|
39
36
|
attr_reader param_types: Array[ParamType]
|
|
40
37
|
|
|
41
|
-
# sig-gen gap: #2321 — as above (nil or a non-empty `dup.freeze`d String).
|
|
42
38
|
attr_reader return_type_name: String?
|
|
43
39
|
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
#
|
|
40
|
+
# authored: the declared literal union is intent. `initialize` stores `severity.to_sym` after
|
|
41
|
+
# `validate_severity!` bounds it to `VALID_SEVERITIES`, so the value is one of the three literals, but sig-gen
|
|
42
|
+
# generates `Symbol` for it, not the union.
|
|
47
43
|
attr_reader severity: :error | :warning | :info
|
|
48
44
|
|
|
49
45
|
# `method_name`/`severity` accept String too (both are `to_sym`'d); `param_types` entries are
|
data/sig/rigor/scope.rbs
CHANGED
|
@@ -18,6 +18,7 @@ module Rigor
|
|
|
18
18
|
# its bare cause (issue #1302).
|
|
19
19
|
attr_reader optimistic_locals: Hash[Symbol, Symbol | Inference::OptimisticOrigin::BoundMark]
|
|
20
20
|
attr_reader optimistic_ivars: Hash[Symbol, Symbol | Inference::OptimisticOrigin::BoundMark]
|
|
21
|
+
attr_reader construction_facts: Hash[Symbol, Set[untyped]]
|
|
21
22
|
attr_reader repeated_or_writes: Hash[untyped, bool]
|
|
22
23
|
# sig-gen gap: #2323 — the same reader shape; `Inference::MatchRebinding::Frame` carries no signature.
|
|
23
24
|
attr_reader match_frame: untyped
|
|
@@ -64,14 +65,24 @@ module Rigor
|
|
|
64
65
|
# authored: the list holds module names and the `InEffectRefinements::UNKNOWN` Symbol; sig-gen reads the delegated
|
|
65
66
|
# return through an unsigned class as untyped.
|
|
66
67
|
def in_effect_refinements: (untyped node, ?Array[String] declared) -> Array[String | Symbol]
|
|
68
|
+
# authored: the element is an `Array` led by its Symbol kind by contract (`[:defines, name]`, `[:ivar_set, name]`); a Set's element type stays `untyped` in sig-gen (#2177, #2317), so the generator
|
|
69
|
+
# would never propose it.
|
|
67
70
|
def discovered_global_write_census: () -> Set[Array[untyped]]
|
|
68
71
|
def discovered_includes: () -> Hash[String, Array[String]]
|
|
69
72
|
# Issue #1123 — the instance-ancestor-ORDER table beside the include one.
|
|
70
73
|
def discovered_prepends: () -> Hash[String, Array[String]]
|
|
71
74
|
def discovered_extends: () -> Hash[String, Array[String]]
|
|
75
|
+
# authored: the element is `String` (a source path) by contract; a Set's element type stays `untyped` in sig-gen (#2177, #2317), so the generator
|
|
76
|
+
# would never propose it.
|
|
72
77
|
def discovered_class_sources: () -> Hash[String, Set[String]]
|
|
78
|
+
# authored: the element is `String` (a source path) by contract; a Set's element type stays `untyped` in sig-gen (#2177, #2317), so the generator
|
|
79
|
+
# would never propose it.
|
|
73
80
|
def constant_sources: () -> Hash[String, Set[String]]
|
|
81
|
+
# authored: the element is `String` (a constant's last segment) by contract; a Set's element type stays `untyped` in sig-gen (#2177, #2317), so the generator
|
|
82
|
+
# would never propose it.
|
|
74
83
|
def published_constant_names: () -> Set[String]
|
|
84
|
+
# authored: the element is `String` (a constant name) by contract; a Set's element type stays `untyped` in sig-gen (#2177, #2317), so the generator
|
|
85
|
+
# would never propose it.
|
|
75
86
|
def local_constant_names: () -> Set[String]
|
|
76
87
|
# sig-gen gap: #1150 — the `Data.define` table it reads carries no type, so sig-gen skips the return; the shape is hand-written.
|
|
77
88
|
def bound_constant_names: (String name) -> Array[String]
|
|
@@ -208,7 +219,7 @@ module Rigor
|
|
|
208
219
|
|
|
209
220
|
def self.empty: (?environment: Environment, ?source_path: String?) -> Scope
|
|
210
221
|
|
|
211
|
-
def initialize: (environment: Environment, locals: Hash[Symbol, Type::t], ?fact_store: Analysis::FactStore, ?self_type: Type::t?, ?ivars: Hash[Symbol, Type::t], ?cvars: Hash[Symbol, Type::t], ?globals: Hash[Symbol, Type::t], ?discovery: DiscoveryIndex, ?source_path: String?, ?opaque_block_self: bool, ?block_self_unknown: bool | :refinement, ?singleton_class_body: bool, ?dynamic_origins: Hash[untyped, Symbol], ?indexed_narrowings: Hash[IndexedKey, Type::t], ?method_chain_narrowings: Hash[ChainKey, Type::t], ?declaration_sourced: Set[[Symbol, Symbol] | [Symbol, Symbol, Symbol]], ?published_constant_sourced: Set[[Symbol, Symbol]], ?struct_fold_safe_locals: Set[Symbol], ?lexical_nesting: Array[String]?, ?local_origins: Hash[Symbol, Symbol], ?ivar_origins: Hash[Symbol, Symbol], ?void_origins: Hash[untyped, Inference::VoidOrigin], ?plugin_typed_calls: Hash[untyped, bool], ?optimistic_origins: Hash[untyped, Symbol], ?optimistic_locals: Hash[Symbol, Symbol | Inference::OptimisticOrigin::BoundMark], ?optimistic_ivars: Hash[Symbol, Symbol | Inference::OptimisticOrigin::BoundMark], ?repeated_or_writes: Hash[untyped, bool], ?match_frame: untyped, ?constant_narrowings: Hash[String, Type::t], ?guard_records: Hash[[Symbol, Symbol | String], Type::t], ?bot_guard_classes: Hash[[Symbol, Symbol | String], Array[String]], ?declared_refinements: Array[String | Symbol]) -> void
|
|
222
|
+
def initialize: (environment: Environment, locals: Hash[Symbol, Type::t], ?fact_store: Analysis::FactStore, ?self_type: Type::t?, ?ivars: Hash[Symbol, Type::t], ?cvars: Hash[Symbol, Type::t], ?globals: Hash[Symbol, Type::t], ?discovery: DiscoveryIndex, ?source_path: String?, ?opaque_block_self: bool, ?block_self_unknown: bool | :refinement, ?singleton_class_body: bool, ?dynamic_origins: Hash[untyped, Symbol], ?indexed_narrowings: Hash[IndexedKey, Type::t], ?method_chain_narrowings: Hash[ChainKey, Type::t], ?declaration_sourced: Set[[Symbol, Symbol] | [Symbol, Symbol, Symbol]], ?published_constant_sourced: Set[[Symbol, Symbol]], ?struct_fold_safe_locals: Set[Symbol], ?lexical_nesting: Array[String]?, ?local_origins: Hash[Symbol, Symbol], ?ivar_origins: Hash[Symbol, Symbol], ?void_origins: Hash[untyped, Inference::VoidOrigin], ?plugin_typed_calls: Hash[untyped, bool], ?optimistic_origins: Hash[untyped, Symbol], ?optimistic_locals: Hash[Symbol, Symbol | Inference::OptimisticOrigin::BoundMark], ?optimistic_ivars: Hash[Symbol, Symbol | Inference::OptimisticOrigin::BoundMark], ?construction_facts: Hash[Symbol, Set[Symbol]], ?repeated_or_writes: Hash[untyped, bool], ?match_frame: untyped, ?constant_narrowings: Hash[String, Type::t], ?guard_records: Hash[[Symbol, Symbol | String], Type::t], ?bot_guard_classes: Hash[[Symbol, Symbol | String], Array[String]], ?declared_refinements: Array[String | Symbol]) -> void
|
|
212
223
|
def with_source_path: (String? path) -> Scope
|
|
213
224
|
def with_struct_fold_safe: (Set[Symbol] locals) -> Scope
|
|
214
225
|
def with_lexical_nesting: (Array[String]? chain) -> Scope
|
|
@@ -229,10 +240,15 @@ module Rigor
|
|
|
229
240
|
def global: (String | Symbol name) -> Type::t?
|
|
230
241
|
def local_origin: (String | Symbol name) -> Symbol?
|
|
231
242
|
def ivar_origin: (String | Symbol name) -> Symbol?
|
|
243
|
+
# sig-gen gap: #2403 — the `Hash#[]` miss in `bound_cause` is lost across the call; sig-gen says `Symbol`.
|
|
232
244
|
def optimistic_local: (String | Symbol name) -> Symbol?
|
|
245
|
+
# sig-gen gap: #2403 — the `Hash#[]` miss in `bound_cause` is lost across the call; sig-gen says `Symbol`.
|
|
233
246
|
def optimistic_ivar: (String | Symbol name) -> Symbol?
|
|
234
247
|
def optimistic_local_miss: (String | Symbol name) -> Object?
|
|
235
248
|
def optimistic_ivar_miss: (String | Symbol name) -> Object?
|
|
249
|
+
def construction_fact?: (String | Symbol name, ?Symbol fact) -> bool
|
|
250
|
+
def project_method_name?: (untyped) -> (false | true)
|
|
251
|
+
def with_construction_fact: (untyped, untyped) -> Rigor::Scope
|
|
236
252
|
def with_local: (String | Symbol name, Type::t type) -> Scope
|
|
237
253
|
def with_rejoined_locals: (untyped) -> Rigor::Scope
|
|
238
254
|
def with_ivar: (String | Symbol name, Type::t type) -> Scope
|
|
@@ -271,8 +287,6 @@ module Rigor
|
|
|
271
287
|
def seed_declaration_sourced_global: (String | Symbol name, Type::t type) -> Scope
|
|
272
288
|
def with_global_copy_marks: (String | Symbol name, Array[String | Symbol] globals) -> Scope
|
|
273
289
|
def without_local_declaration_marks: (String | Symbol name) -> Scope
|
|
274
|
-
# sig-gen gap: #2322 — the records come out of `@declaration_sourced`, whose set now types; `ref[2]` reads as
|
|
275
|
-
# `Symbol?`, but the `filter_map` over it answers `Array[untyped]`.
|
|
276
290
|
def declaration_sourced_global_copies: (String | Symbol name) -> Array[Symbol]
|
|
277
291
|
def with_declaration_sourced_local: (String | Symbol name, Type::t type) -> Scope
|
|
278
292
|
def with_local_declaration_mark: (String | Symbol name) -> Scope
|
|
@@ -307,6 +321,8 @@ module Rigor
|
|
|
307
321
|
def def_node_slot: (untyped class_name, untyped method_name, ?Symbol kind) -> untyped
|
|
308
322
|
def user_def_for: (String | Symbol class_name, String | Symbol method_name) -> ::Prism::DefNode?
|
|
309
323
|
def user_def_through_ancestors: (String | Symbol class_name, String | Symbol method_name, ?name_memo: Hash[untyped, untyped]) -> ([::Prism::DefNode, String] | [nil, nil])
|
|
324
|
+
def subclassing_opacity: () -> [false | true, Array[untyped]]
|
|
325
|
+
def user_instance_def_owners: (untyped) -> Array[untyped]
|
|
310
326
|
def discovered_method_through_ancestors?: (String | Symbol? class_name, String | Symbol method_name, Symbol kind, ?name_memo: Hash[untyped, untyped]) -> bool
|
|
311
327
|
def external_ancestor_name_candidates: (String | Symbol class_name, ?name_memo: Hash[untyped, untyped]) -> Array[Array[String]]
|
|
312
328
|
def enqueue_ancestors: (String current, Array[String] queue, Hash[untyped, untyped] name_memo, ?mixins: bool) -> void
|
|
@@ -320,6 +336,7 @@ module Rigor
|
|
|
320
336
|
def known_user_class?: (String | Symbol name) -> bool
|
|
321
337
|
def singleton_def_for: (String | Symbol class_name, String | Symbol method_name) -> ::Prism::DefNode?
|
|
322
338
|
def module_function_def?: (untyped, untyped) -> (false | true)
|
|
339
|
+
def module_function_row_def?: (untyped, untyped) -> (false | true)
|
|
323
340
|
def singleton_def_through_ancestors: (String | Symbol class_name, String | Symbol method_name, ?name_memo: Hash[untyped, untyped]) -> ([::Prism::DefNode, String] | [nil, nil])
|
|
324
341
|
def user_def_site_for: (String | Symbol class_name, String | Symbol method_name) -> String?
|
|
325
342
|
def user_singleton_def_site_for: (String | Symbol class_name, String | Symbol method_name) -> String?
|
|
@@ -330,6 +347,9 @@ module Rigor
|
|
|
330
347
|
# sig-gen gap: #1167 — the instance-side twin: the same untyped `call_node`, the same untyped-return skip.
|
|
331
348
|
def instance_def_shadows_call?: (String | Symbol class_name, String | Symbol method_name, untyped call_node) -> bool
|
|
332
349
|
def top_level_def_for: (String | Symbol method_name) -> ::Prism::DefNode?
|
|
350
|
+
def ownerless_definition?: (untyped, ?top_level: untyped) -> (false | true)
|
|
351
|
+
def toplevel_def_ambiguity: (String | Symbol method_name) -> (:contested | :several | :main_singleton | :aliased | :anonymous | :object)?
|
|
352
|
+
def declared_class?: (String | Symbol class_name) -> bool
|
|
333
353
|
def bindable_top_level_def_for: (String | Symbol method_name) -> ::Prism::DefNode?
|
|
334
354
|
def toplevel?: () -> bool
|
|
335
355
|
def discovered_method_visibility: (String | Symbol class_name, String | Symbol method_name) -> Symbol?
|
|
@@ -68,10 +68,10 @@ install`), every plugin bundled in the toolchain is readable source.
|
|
|
68
68
|
Use it as a worked-example library throughout this skill:
|
|
69
69
|
|
|
70
70
|
```sh
|
|
71
|
-
rigor plugin
|
|
72
|
-
rigor plugin
|
|
73
|
-
rigor plugin path
|
|
74
|
-
rigor plugin root # gem root + public API (lib/rigor/plugin.rb)
|
|
71
|
+
rigor plugin # all bundled + example plugins, with paths
|
|
72
|
+
rigor plugin rigor-activesupport-core-ext # a plugin's main source, inline
|
|
73
|
+
rigor plugin --path rigor-units # the dir, to browse with your file tool
|
|
74
|
+
rigor plugin --root # gem root + public API (lib/rigor/plugin.rb)
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
`rigor plugin` (singular) browses the toolchain's plugins; `rigor
|
|
@@ -254,8 +254,8 @@ Two ways to wire the RBS, depending on how the plugin is packaged:
|
|
|
254
254
|
read one as a worked example:
|
|
255
255
|
|
|
256
256
|
```sh
|
|
257
|
-
rigor plugin
|
|
258
|
-
rigor plugin path
|
|
257
|
+
rigor plugin rigor-activesupport-core-ext # see manifest + sig/ layout
|
|
258
|
+
rigor plugin --path rigor-activesupport-core-ext # then browse its sig/ dir
|
|
259
259
|
```
|
|
260
260
|
|
|
261
261
|
2. **A project-private plugin** — the manifest field still works, but
|
|
@@ -280,9 +280,9 @@ They compose — many plugins ship both.
|
|
|
280
280
|
|
|
281
281
|
> **Browse a real plugin instead of guessing the API.** Because Rigor
|
|
282
282
|
> is installed on disk (`mise` / `gem install`), every bundled plugin's
|
|
283
|
-
> source is readable as a worked example. `rigor plugin
|
|
284
|
-
> them all with absolute paths; `rigor plugin
|
|
285
|
-
> plugin's main source; `rigor plugin root` points at the engine source
|
|
283
|
+
> source is readable as a worked example. `rigor plugin` shows
|
|
284
|
+
> them all with absolute paths; `rigor plugin <name>` inlines a
|
|
285
|
+
> plugin's main source; `rigor plugin --root` points at the engine source
|
|
286
286
|
> and the public `Rigor::Plugin::Base` API. When the prose here is
|
|
287
287
|
> thinner than you need, read a shipped plugin that does the same thing.
|
|
288
288
|
|
|
@@ -74,9 +74,9 @@ Rigor is installed on disk, so both the plugin under review and the
|
|
|
74
74
|
worked-example plugins are readable source:
|
|
75
75
|
|
|
76
76
|
```sh
|
|
77
|
-
rigor plugin
|
|
78
|
-
rigor plugin
|
|
79
|
-
rigor plugin path
|
|
77
|
+
rigor plugin # every bundled + example plugin, with paths
|
|
78
|
+
rigor plugin rigor-<id> # a plugin's main source, inline
|
|
79
|
+
rigor plugin --path rigor-<id> # its directory, to browse
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
The **authoritative** authoring surface — the one this review scores
|
|
@@ -218,8 +218,19 @@ baseline is a ceiling, not a blanket. Reducing it later is the
|
|
|
218
218
|
Recommend committing `.rigor-baseline.yml` — it documents project
|
|
219
219
|
state; list it in the Final step's file inventory.
|
|
220
220
|
|
|
221
|
+
**Rule-less diagnostics cannot be baselined.** A file Prism cannot
|
|
222
|
+
parse (a parse error), a missing `paths:` entry or an internal error
|
|
223
|
+
yields a diagnostic with no rule, so it has no `(file, rule)` bucket.
|
|
224
|
+
The summary then prints a second line ("N diagnostic(s) have no rule
|
|
225
|
+
(parse, path or internal errors) in M file(s) and cannot be
|
|
226
|
+
baselined") and lists the files; the command still exits 0. Acknowledge
|
|
227
|
+
mode reaches a green `rigor check` only after those files are fixed or
|
|
228
|
+
added to `exclude:`, or the bad `paths:` entry is removed. Do that
|
|
229
|
+
before wiring `baseline:`, then re-run `rigor baseline regenerate`.
|
|
230
|
+
|
|
221
231
|
Print the suppression summary for the user: "N diagnostics recorded
|
|
222
|
-
as baseline; M will surface on subsequent runs."
|
|
232
|
+
as baseline; M will surface on subsequent runs." Take N from the
|
|
233
|
+
`covering N diagnostic(s)` count, and count the unbaselineable ones in M.
|
|
223
234
|
|
|
224
235
|
## Phase 8 — Surface real bugs & offer escalation
|
|
225
236
|
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rigortype
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rigor contributors
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 1980-01-
|
|
10
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: language_server-protocol
|
|
@@ -513,8 +513,10 @@ files:
|
|
|
513
513
|
- lib/rigor/analysis/runner/envelope_messages.rb
|
|
514
514
|
- lib/rigor/analysis/runner/pool_coordinator.rb
|
|
515
515
|
- lib/rigor/analysis/runner/project_pre_passes.rb
|
|
516
|
+
- lib/rigor/analysis/runner/run_level_facts.rb
|
|
516
517
|
- lib/rigor/analysis/runner/run_snapshots.rb
|
|
517
518
|
- lib/rigor/analysis/runner/scan_environment.rb
|
|
519
|
+
- lib/rigor/analysis/runner/worker_payload.rb
|
|
518
520
|
- lib/rigor/analysis/self_call_resolution_recorder.rb
|
|
519
521
|
- lib/rigor/analysis/severity_stamp.rb
|
|
520
522
|
- lib/rigor/analysis/shadow_harness.rb
|
|
@@ -551,6 +553,7 @@ files:
|
|
|
551
553
|
- lib/rigor/cli.rb
|
|
552
554
|
- lib/rigor/cli/annotate_command.rb
|
|
553
555
|
- lib/rigor/cli/baseline_command.rb
|
|
556
|
+
- lib/rigor/cli/catalogue.rb
|
|
554
557
|
- lib/rigor/cli/check_command.rb
|
|
555
558
|
- lib/rigor/cli/check_invocation.rb
|
|
556
559
|
- lib/rigor/cli/check_runner_factory.rb
|
|
@@ -574,6 +577,7 @@ files:
|
|
|
574
577
|
- lib/rigor/cli/explain_command.rb
|
|
575
578
|
- lib/rigor/cli/fused_protection_renderer.rb
|
|
576
579
|
- lib/rigor/cli/fused_protection_report.rb
|
|
580
|
+
- lib/rigor/cli/json_document.rb
|
|
577
581
|
- lib/rigor/cli/lens_command.rb
|
|
578
582
|
- lib/rigor/cli/lsp_command.rb
|
|
579
583
|
- lib/rigor/cli/mcp_command.rb
|
|
@@ -660,7 +664,9 @@ files:
|
|
|
660
664
|
- lib/rigor/environment/bundle_sig_discovery.rb
|
|
661
665
|
- lib/rigor/environment/class_registry.rb
|
|
662
666
|
- lib/rigor/environment/constant_type_cache_holder.rb
|
|
667
|
+
- lib/rigor/environment/core_root.rb
|
|
663
668
|
- lib/rigor/environment/default_libraries.rb
|
|
669
|
+
- lib/rigor/environment/deferred_signature_plan.rb
|
|
664
670
|
- lib/rigor/environment/failure_slot.rb
|
|
665
671
|
- lib/rigor/environment/gated_signature_guard.rb
|
|
666
672
|
- lib/rigor/environment/gated_signature_plan.rb
|
|
@@ -670,6 +676,7 @@ files:
|
|
|
670
676
|
- lib/rigor/environment/member_consistency.rb
|
|
671
677
|
- lib/rigor/environment/member_consistency/comparator.rb
|
|
672
678
|
- lib/rigor/environment/missing_gem_constant_index.rb
|
|
679
|
+
- lib/rigor/environment/project_path_gems.rb
|
|
673
680
|
- lib/rigor/environment/rbs_collection_discovery.rb
|
|
674
681
|
- lib/rigor/environment/rbs_coverage_report.rb
|
|
675
682
|
- lib/rigor/environment/rbs_hierarchy.rb
|
|
@@ -679,6 +686,7 @@ files:
|
|
|
679
686
|
- lib/rigor/environment/required_features.rb
|
|
680
687
|
- lib/rigor/environment/ruby_library_roots.rb
|
|
681
688
|
- lib/rigor/environment/source_rbs_synthesis.rb
|
|
689
|
+
- lib/rigor/environment/vendored_signature_plan.rb
|
|
682
690
|
- lib/rigor/flow_contribution.rb
|
|
683
691
|
- lib/rigor/flow_contribution/conflict.rb
|
|
684
692
|
- lib/rigor/flow_contribution/element.rb
|
|
@@ -692,6 +700,7 @@ files:
|
|
|
692
700
|
- lib/rigor/inference/block_call_timing.rb
|
|
693
701
|
- lib/rigor/inference/block_parameter_binder.rb
|
|
694
702
|
- lib/rigor/inference/block_repetition.rb
|
|
703
|
+
- lib/rigor/inference/block_run_count.rb
|
|
695
704
|
- lib/rigor/inference/body_fixpoint.rb
|
|
696
705
|
- lib/rigor/inference/budget_trace.rb
|
|
697
706
|
- lib/rigor/inference/builtins/array_catalog.rb
|
|
@@ -716,9 +725,11 @@ files:
|
|
|
716
725
|
- lib/rigor/inference/builtins/struct_catalog.rb
|
|
717
726
|
- lib/rigor/inference/builtins/time_catalog.rb
|
|
718
727
|
- lib/rigor/inference/callee_mutation_chain.rb
|
|
728
|
+
- lib/rigor/inference/callee_write_census.rb
|
|
719
729
|
- lib/rigor/inference/captured_locals.rb
|
|
720
730
|
- lib/rigor/inference/clause_widening.rb
|
|
721
731
|
- lib/rigor/inference/closure_escape_analyzer.rb
|
|
732
|
+
- lib/rigor/inference/construction_escape.rb
|
|
722
733
|
- lib/rigor/inference/content_join.rb
|
|
723
734
|
- lib/rigor/inference/coverage_scanner.rb
|
|
724
735
|
- lib/rigor/inference/declaration_walk.rb
|
|
@@ -732,6 +743,8 @@ files:
|
|
|
732
743
|
- lib/rigor/inference/def_return_typer.rb
|
|
733
744
|
- lib/rigor/inference/define_method_block_self.rb
|
|
734
745
|
- lib/rigor/inference/definer_resolution.rb
|
|
746
|
+
- lib/rigor/inference/definers_index.rb
|
|
747
|
+
- lib/rigor/inference/direct_ivar_writes.rb
|
|
735
748
|
- lib/rigor/inference/dynamic_origin.rb
|
|
736
749
|
- lib/rigor/inference/element_read_widening.rb
|
|
737
750
|
- lib/rigor/inference/error_info.rb
|
|
@@ -743,6 +756,7 @@ files:
|
|
|
743
756
|
- lib/rigor/inference/fork_map.rb
|
|
744
757
|
- lib/rigor/inference/fresh_frame_blocks.rb
|
|
745
758
|
- lib/rigor/inference/global_write_census.rb
|
|
759
|
+
- lib/rigor/inference/global_writer_reach.rb
|
|
746
760
|
- lib/rigor/inference/guard_rebinding.rb
|
|
747
761
|
- lib/rigor/inference/hash_lookup_mutation.rb
|
|
748
762
|
- lib/rigor/inference/hkt_body.rb
|
|
@@ -773,8 +787,11 @@ files:
|
|
|
773
787
|
- lib/rigor/inference/match_rebinding/frame.rb
|
|
774
788
|
- lib/rigor/inference/match_rebinding/operands.rb
|
|
775
789
|
- lib/rigor/inference/match_rebinding/self_calls.rb
|
|
790
|
+
- lib/rigor/inference/match_rebinding/yielding_match.rb
|
|
791
|
+
- lib/rigor/inference/memo_audit.rb
|
|
776
792
|
- lib/rigor/inference/method_dispatcher.rb
|
|
777
793
|
- lib/rigor/inference/method_dispatcher/alias_strict_nominals.rb
|
|
794
|
+
- lib/rigor/inference/method_dispatcher/argument_distribution.rb
|
|
778
795
|
- lib/rigor/inference/method_dispatcher/argument_nodes.rb
|
|
779
796
|
- lib/rigor/inference/method_dispatcher/arithmetic_sequence_elements.rb
|
|
780
797
|
- lib/rigor/inference/method_dispatcher/array_to_h_folding.rb
|
|
@@ -782,6 +799,7 @@ files:
|
|
|
782
799
|
- lib/rigor/inference/method_dispatcher/call_context.rb
|
|
783
800
|
- lib/rigor/inference/method_dispatcher/cgi_folding.rb
|
|
784
801
|
- lib/rigor/inference/method_dispatcher/constant_folding.rb
|
|
802
|
+
- lib/rigor/inference/method_dispatcher/contested_overloads.rb
|
|
785
803
|
- lib/rigor/inference/method_dispatcher/data_folding.rb
|
|
786
804
|
- lib/rigor/inference/method_dispatcher/facet_distribution.rb
|
|
787
805
|
- lib/rigor/inference/method_dispatcher/file_folding.rb
|
|
@@ -797,6 +815,7 @@ files:
|
|
|
797
815
|
- lib/rigor/inference/method_dispatcher/math_folding.rb
|
|
798
816
|
- lib/rigor/inference/method_dispatcher/member_shape_projection.rb
|
|
799
817
|
- lib/rigor/inference/method_dispatcher/method_folding.rb
|
|
818
|
+
- lib/rigor/inference/method_dispatcher/no_match_fallback.rb
|
|
800
819
|
- lib/rigor/inference/method_dispatcher/optional_count.rb
|
|
801
820
|
- lib/rigor/inference/method_dispatcher/overload_selector.rb
|
|
802
821
|
- lib/rigor/inference/method_dispatcher/process_folding.rb
|
|
@@ -831,6 +850,7 @@ files:
|
|
|
831
850
|
- lib/rigor/inference/operand_walk.rb
|
|
832
851
|
- lib/rigor/inference/optimistic_origin.rb
|
|
833
852
|
- lib/rigor/inference/origin_lookup.rb
|
|
853
|
+
- lib/rigor/inference/out_buffer_mutation.rb
|
|
834
854
|
- lib/rigor/inference/parameter_inference_collector.rb
|
|
835
855
|
- lib/rigor/inference/pre_eval_constants.rb
|
|
836
856
|
- lib/rigor/inference/precision_scanner.rb
|
|
@@ -855,21 +875,28 @@ files:
|
|
|
855
875
|
- lib/rigor/inference/refined_dispatch/own_method.rb
|
|
856
876
|
- lib/rigor/inference/refinement_mutation.rb
|
|
857
877
|
- lib/rigor/inference/reflective_ivar_write.rb
|
|
878
|
+
- lib/rigor/inference/remover_holder_scan.rb
|
|
879
|
+
- lib/rigor/inference/remover_narrowing.rb
|
|
858
880
|
- lib/rigor/inference/repeated_or_writes.rb
|
|
859
881
|
- lib/rigor/inference/return_barrier.rb
|
|
860
882
|
- lib/rigor/inference/rewrite_mutation.rb
|
|
861
883
|
- lib/rigor/inference/scope_indexer.rb
|
|
862
884
|
- lib/rigor/inference/scope_indexer/certainty.rb
|
|
863
885
|
- lib/rigor/inference/scope_indexer/class_cvars_collector.rb
|
|
886
|
+
- lib/rigor/inference/scope_indexer/constant_ivar_value.rb
|
|
864
887
|
- lib/rigor/inference/scope_indexer/declared_ivar_types.rb
|
|
865
888
|
- lib/rigor/inference/scope_indexer/declared_param_writes.rb
|
|
866
889
|
- lib/rigor/inference/scope_indexer/def_nestings_collector.rb
|
|
890
|
+
- lib/rigor/inference/scope_indexer/derived_param_value.rb
|
|
891
|
+
- lib/rigor/inference/scope_indexer/empty_seed.rb
|
|
892
|
+
- lib/rigor/inference/scope_indexer/ivar_contributions.rb
|
|
867
893
|
- lib/rigor/inference/scope_indexer/layered_def_nestings.rb
|
|
868
894
|
- lib/rigor/inference/scope_indexer/member_layouts_collector.rb
|
|
869
895
|
- lib/rigor/inference/scope_indexer/mixin_accumulator.rb
|
|
870
896
|
- lib/rigor/inference/scope_indexer/superclasses_collector.rb
|
|
871
897
|
- lib/rigor/inference/scope_indexer/unseen_ivar_writers.rb
|
|
872
898
|
- lib/rigor/inference/self_call_ivar_writes.rb
|
|
899
|
+
- lib/rigor/inference/set_mutation.rb
|
|
873
900
|
- lib/rigor/inference/singleton_external_ahead.rb
|
|
874
901
|
- lib/rigor/inference/singleton_hook_decline.rb
|
|
875
902
|
- lib/rigor/inference/singleton_object_constant.rb
|
|
@@ -881,6 +908,7 @@ files:
|
|
|
881
908
|
- lib/rigor/inference/synthetic_method_index.rb
|
|
882
909
|
- lib/rigor/inference/synthetic_method_scanner.rb
|
|
883
910
|
- lib/rigor/inference/synthetic_method_scanner/project_members.rb
|
|
911
|
+
- lib/rigor/inference/toplevel_def_census.rb
|
|
884
912
|
- lib/rigor/inference/unknown_store_widening.rb
|
|
885
913
|
- lib/rigor/inference/unthreaded_rebinds.rb
|
|
886
914
|
- lib/rigor/inference/untyped_rejoin.rb
|
|
@@ -891,6 +919,7 @@ files:
|
|
|
891
919
|
- lib/rigor/language_server/buffer_resolution.rb
|
|
892
920
|
- lib/rigor/language_server/buffer_table.rb
|
|
893
921
|
- lib/rigor/language_server/completion_provider.rb
|
|
922
|
+
- lib/rigor/language_server/config_warning_announcer.rb
|
|
894
923
|
- lib/rigor/language_server/debouncer.rb
|
|
895
924
|
- lib/rigor/language_server/diagnostic_publisher.rb
|
|
896
925
|
- lib/rigor/language_server/document_symbol_provider.rb
|
|
@@ -975,6 +1004,7 @@ files:
|
|
|
975
1004
|
- lib/rigor/reflection/constant_ancestors.rb
|
|
976
1005
|
- lib/rigor/reflection/constant_path.rb
|
|
977
1006
|
- lib/rigor/rooted_glob.rb
|
|
1007
|
+
- lib/rigor/run_scoped_slots.rb
|
|
978
1008
|
- lib/rigor/runtime/jit.rb
|
|
979
1009
|
- lib/rigor/scope.rb
|
|
980
1010
|
- lib/rigor/scope/discovery_index.rb
|
|
@@ -986,6 +1016,7 @@ files:
|
|
|
986
1016
|
- lib/rigor/sig_gen/declaration_equivalence.rb
|
|
987
1017
|
- lib/rigor/sig_gen/effect_annotation.rb
|
|
988
1018
|
- lib/rigor/sig_gen/generator.rb
|
|
1019
|
+
- lib/rigor/sig_gen/generic_header_scan.rb
|
|
989
1020
|
- lib/rigor/sig_gen/inline_declarations.rb
|
|
990
1021
|
- lib/rigor/sig_gen/layout_index.rb
|
|
991
1022
|
- lib/rigor/sig_gen/meta_class_shape.rb
|
|
@@ -998,6 +1029,7 @@ files:
|
|
|
998
1029
|
- lib/rigor/sig_gen/skip_reason_catalog.rb
|
|
999
1030
|
- lib/rigor/sig_gen/superclass_spelling.rb
|
|
1000
1031
|
- lib/rigor/sig_gen/type_elaborator.rb
|
|
1032
|
+
- lib/rigor/sig_gen/type_name_qualification.rb
|
|
1001
1033
|
- lib/rigor/sig_gen/write_reporter.rb
|
|
1002
1034
|
- lib/rigor/sig_gen/write_result.rb
|
|
1003
1035
|
- lib/rigor/sig_gen/writer.rb
|
|
@@ -1125,6 +1157,7 @@ files:
|
|
|
1125
1157
|
- plugins/rigor-activesupport-core-ext/lib/rigor-activesupport-core-ext.rb
|
|
1126
1158
|
- plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext.rb
|
|
1127
1159
|
- plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext/effects.rb
|
|
1160
|
+
- plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext/symbolize_keys.rb
|
|
1128
1161
|
- plugins/rigor-activesupport-core-ext/sig/active_support/core_ext.rbs
|
|
1129
1162
|
- plugins/rigor-alba/lib/rigor-alba.rb
|
|
1130
1163
|
- plugins/rigor-alba/lib/rigor/plugin/alba.rb
|
|
@@ -1436,7 +1469,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
1436
1469
|
- !ruby/object:Gem::Version
|
|
1437
1470
|
version: '0'
|
|
1438
1471
|
requirements: []
|
|
1439
|
-
rubygems_version:
|
|
1472
|
+
rubygems_version: 3.7.2
|
|
1440
1473
|
specification_version: 4
|
|
1441
1474
|
summary: Inference-first static analysis for Ruby.
|
|
1442
1475
|
test_files: []
|