rigortype 0.2.7 → 0.2.8
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/docs/manual/04-diagnostics.md +7 -4
- data/docs/manual/06-baseline.md +5 -2
- data/docs/manual/15-type-protection-coverage.md +6 -4
- data/lib/rigor/analysis/baseline.rb +56 -96
- data/lib/rigor/analysis/buffer_binding.rb +13 -20
- data/lib/rigor/analysis/check_rules/always_truthy_condition_collector.rb +29 -48
- data/lib/rigor/analysis/check_rules/dead_assignment_collector.rb +35 -54
- data/lib/rigor/analysis/check_rules/ivar_write_collector.rb +23 -37
- data/lib/rigor/analysis/check_rules/main_pass_collector.rb +16 -23
- data/lib/rigor/analysis/check_rules/rule_walk.rb +48 -71
- data/lib/rigor/analysis/check_rules/self_closedness_scanner.rb +19 -28
- data/lib/rigor/analysis/check_rules/unreachable_clause_collector.rb +48 -67
- data/lib/rigor/analysis/check_rules.rb +174 -274
- data/lib/rigor/analysis/dependency_recorder.rb +26 -38
- data/lib/rigor/analysis/dependency_source_inference/boundary_cross_reporter.rb +13 -25
- data/lib/rigor/analysis/dependency_source_inference/builder.rb +17 -30
- data/lib/rigor/analysis/dependency_source_inference/gem_resolver.rb +15 -26
- data/lib/rigor/analysis/dependency_source_inference/index.rb +45 -76
- data/lib/rigor/analysis/dependency_source_inference/return_type_heuristic.rb +23 -40
- data/lib/rigor/analysis/dependency_source_inference/walker.rb +50 -83
- data/lib/rigor/analysis/dependency_source_inference.rb +6 -10
- data/lib/rigor/analysis/diagnostic.rb +48 -75
- data/lib/rigor/analysis/erb_template_detector.rb +13 -18
- data/lib/rigor/analysis/fact_store.rb +12 -22
- data/lib/rigor/analysis/incremental.rb +47 -63
- data/lib/rigor/analysis/incremental_session.rb +74 -100
- data/lib/rigor/analysis/project_scan.rb +12 -23
- data/lib/rigor/analysis/result.rb +3 -5
- data/lib/rigor/analysis/rule_catalog.rb +67 -95
- data/lib/rigor/analysis/run_stats.rb +38 -61
- data/lib/rigor/analysis/runner/diagnostic_aggregator.rb +101 -160
- data/lib/rigor/analysis/runner/pool_coordinator.rb +121 -188
- data/lib/rigor/analysis/runner/project_pre_passes.rb +62 -96
- data/lib/rigor/analysis/runner/run_snapshots.rb +12 -18
- data/lib/rigor/analysis/runner.rb +220 -333
- data/lib/rigor/analysis/self_call_resolution_recorder.rb +30 -43
- data/lib/rigor/analysis/worker_session.rb +64 -102
- data/lib/rigor/ast/type_node.rb +6 -8
- data/lib/rigor/ast.rb +6 -10
- data/lib/rigor/bleeding_edge.rb +27 -35
- data/lib/rigor/builtins/hkt_builtins.rb +7 -14
- data/lib/rigor/builtins/imported_refinements.rb +106 -149
- data/lib/rigor/builtins/predefined_constant_refinements.rb +51 -65
- data/lib/rigor/builtins/regex_refinement.rb +32 -43
- data/lib/rigor/builtins/static_return_refinements.rb +57 -81
- data/lib/rigor/cache/descriptor.rb +58 -94
- data/lib/rigor/cache/incremental_snapshot.rb +32 -48
- data/lib/rigor/cache/rbs_cache_producer.rb +10 -15
- data/lib/rigor/cache/rbs_class_ancestor_table.rb +10 -16
- data/lib/rigor/cache/rbs_class_type_param_names.rb +10 -16
- data/lib/rigor/cache/rbs_constant_table.rb +8 -13
- data/lib/rigor/cache/rbs_descriptor.rb +8 -13
- data/lib/rigor/cache/rbs_environment.rb +11 -19
- data/lib/rigor/cache/rbs_environment_marshal_patch.rb +11 -19
- data/lib/rigor/cache/rbs_known_class_names.rb +8 -12
- data/lib/rigor/cache/store.rb +96 -151
- data/lib/rigor/cli/annotate_command.rb +51 -88
- data/lib/rigor/cli/baseline_command.rb +10 -17
- data/lib/rigor/cli/check_command.rb +121 -199
- data/lib/rigor/cli/check_runner_factory.rb +8 -14
- data/lib/rigor/cli/ci_detector.rb +9 -14
- data/lib/rigor/cli/command.rb +8 -14
- data/lib/rigor/cli/coverage_command.rb +19 -26
- data/lib/rigor/cli/coverage_mutation.rb +14 -19
- data/lib/rigor/cli/coverage_report.rb +0 -2
- data/lib/rigor/cli/coverage_scan.rb +7 -11
- data/lib/rigor/cli/diagnostic_formats.rb +43 -62
- data/lib/rigor/cli/diff_command.rb +10 -20
- data/lib/rigor/cli/docs_command.rb +26 -40
- data/lib/rigor/cli/doctor_command.rb +8 -9
- data/lib/rigor/cli/explain_command.rb +4 -7
- data/lib/rigor/cli/fused_protection_renderer.rb +4 -5
- data/lib/rigor/cli/fused_protection_report.rb +6 -8
- data/lib/rigor/cli/lsp_command.rb +11 -19
- data/lib/rigor/cli/mcp_command.rb +4 -6
- data/lib/rigor/cli/mutation_protection_renderer.rb +3 -4
- data/lib/rigor/cli/mutation_protection_report.rb +6 -9
- data/lib/rigor/cli/options.rb +11 -19
- data/lib/rigor/cli/plugin_command.rb +18 -30
- data/lib/rigor/cli/plugins_command.rb +29 -51
- data/lib/rigor/cli/plugins_renderer.rb +12 -20
- data/lib/rigor/cli/prism_colorizer.rb +13 -19
- data/lib/rigor/cli/protection_renderer.rb +5 -7
- data/lib/rigor/cli/protection_report.rb +27 -17
- data/lib/rigor/cli/renderable.rb +4 -6
- data/lib/rigor/cli/show_bleedingedge_command.rb +5 -8
- data/lib/rigor/cli/sig_gen_command.rb +14 -26
- data/lib/rigor/cli/skill_command.rb +30 -47
- data/lib/rigor/cli/skill_describe.rb +40 -64
- data/lib/rigor/cli/trace_command.rb +9 -16
- data/lib/rigor/cli/trace_renderer.rb +35 -51
- data/lib/rigor/cli/triage_command.rb +6 -10
- data/lib/rigor/cli/triage_renderer.rb +1 -2
- data/lib/rigor/cli/type_of_command.rb +14 -23
- data/lib/rigor/cli/type_of_renderer.rb +3 -5
- data/lib/rigor/cli/type_scan_command.rb +6 -10
- data/lib/rigor/cli/type_scan_renderer.rb +3 -5
- data/lib/rigor/cli/type_scan_report.rb +2 -3
- data/lib/rigor/cli/upgrade_command.rb +2 -3
- data/lib/rigor/cli.rb +16 -28
- data/lib/rigor/config_audit.rb +35 -44
- data/lib/rigor/configuration/dependencies.rb +41 -70
- data/lib/rigor/configuration/severity_profile.rb +28 -42
- data/lib/rigor/configuration.rb +150 -241
- data/lib/rigor/environment/bundle_sig_discovery.rb +74 -118
- data/lib/rigor/environment/class_registry.rb +19 -26
- data/lib/rigor/environment/constant_type_cache_holder.rb +14 -21
- data/lib/rigor/environment/hkt_registry_holder.rb +6 -12
- data/lib/rigor/environment/lockfile_resolver.rb +31 -47
- data/lib/rigor/environment/rbs_collection_discovery.rb +39 -63
- data/lib/rigor/environment/rbs_coverage_report.rb +24 -42
- data/lib/rigor/environment/rbs_loader.rb +420 -518
- data/lib/rigor/environment/reflection.rb +28 -53
- data/lib/rigor/environment/reporters.rb +13 -24
- data/lib/rigor/environment.rb +176 -291
- data/lib/rigor/flow_contribution/conflict.rb +16 -27
- data/lib/rigor/flow_contribution/element.rb +7 -12
- data/lib/rigor/flow_contribution/fact.rb +33 -57
- data/lib/rigor/flow_contribution/merge_result.rb +6 -9
- data/lib/rigor/flow_contribution/merger.rb +32 -47
- data/lib/rigor/flow_contribution.rb +37 -55
- data/lib/rigor/inference/acceptance.rb +133 -219
- data/lib/rigor/inference/block_parameter_binder.rb +52 -82
- data/lib/rigor/inference/body_fixpoint.rb +22 -30
- data/lib/rigor/inference/budget_trace.rb +43 -63
- data/lib/rigor/inference/builtins/array_catalog.rb +4 -6
- data/lib/rigor/inference/builtins/comparable_catalog.rb +4 -6
- data/lib/rigor/inference/builtins/complex_catalog.rb +13 -19
- data/lib/rigor/inference/builtins/date_catalog.rb +38 -67
- data/lib/rigor/inference/builtins/encoding_catalog.rb +22 -36
- data/lib/rigor/inference/builtins/enumerable_catalog.rb +4 -6
- data/lib/rigor/inference/builtins/exception_catalog.rb +38 -57
- data/lib/rigor/inference/builtins/hash_catalog.rb +9 -14
- data/lib/rigor/inference/builtins/method_catalog.rb +29 -48
- data/lib/rigor/inference/builtins/numeric_catalog.rb +13 -18
- data/lib/rigor/inference/builtins/pathname_catalog.rb +8 -13
- data/lib/rigor/inference/builtins/proc_catalog.rb +38 -62
- data/lib/rigor/inference/builtins/random_catalog.rb +21 -32
- data/lib/rigor/inference/builtins/range_catalog.rb +12 -21
- data/lib/rigor/inference/builtins/rational_catalog.rb +9 -15
- data/lib/rigor/inference/builtins/re_catalog.rb +29 -48
- data/lib/rigor/inference/builtins/set_catalog.rb +18 -27
- data/lib/rigor/inference/builtins/string_catalog.rb +12 -19
- data/lib/rigor/inference/builtins/struct_catalog.rb +18 -30
- data/lib/rigor/inference/builtins/time_catalog.rb +28 -44
- data/lib/rigor/inference/closure_escape_analyzer.rb +44 -67
- data/lib/rigor/inference/coverage_scanner.rb +13 -18
- data/lib/rigor/inference/def_return_typer.rb +8 -14
- data/lib/rigor/inference/dynamic_origin.rb +23 -20
- data/lib/rigor/inference/expression_typer.rb +774 -1152
- data/lib/rigor/inference/fallback.rb +8 -12
- data/lib/rigor/inference/fallback_tracer.rb +4 -10
- data/lib/rigor/inference/flow_tracer.rb +25 -36
- data/lib/rigor/inference/hkt_body.rb +45 -68
- data/lib/rigor/inference/hkt_body_parser.rb +33 -52
- data/lib/rigor/inference/hkt_reducer.rb +38 -59
- data/lib/rigor/inference/hkt_registry.rb +50 -76
- data/lib/rigor/inference/indexed_narrowing.rb +55 -81
- data/lib/rigor/inference/macro_block_self_type.rb +21 -34
- data/lib/rigor/inference/method_dispatcher/array_to_h_folding.rb +11 -18
- data/lib/rigor/inference/method_dispatcher/block_folding.rb +49 -83
- data/lib/rigor/inference/method_dispatcher/call_context.rb +16 -23
- data/lib/rigor/inference/method_dispatcher/cgi_folding.rb +13 -22
- data/lib/rigor/inference/method_dispatcher/constant_folding.rb +307 -454
- data/lib/rigor/inference/method_dispatcher/data_folding.rb +24 -34
- data/lib/rigor/inference/method_dispatcher/file_folding.rb +22 -37
- data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +52 -81
- data/lib/rigor/inference/method_dispatcher/kernel_dispatch.rb +51 -78
- data/lib/rigor/inference/method_dispatcher/literal_string_folding.rb +60 -97
- data/lib/rigor/inference/method_dispatcher/math_folding.rb +23 -34
- data/lib/rigor/inference/method_dispatcher/member_shape_projection.rb +18 -26
- data/lib/rigor/inference/method_dispatcher/method_folding.rb +37 -71
- data/lib/rigor/inference/method_dispatcher/overload_selector.rb +114 -182
- data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +122 -193
- data/lib/rigor/inference/method_dispatcher/receiver_affinity.rb +15 -24
- data/lib/rigor/inference/method_dispatcher/reduce_folding.rb +64 -93
- data/lib/rigor/inference/method_dispatcher/regexp_folding.rb +31 -45
- data/lib/rigor/inference/method_dispatcher/set_folding.rb +6 -9
- data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +356 -511
- data/lib/rigor/inference/method_dispatcher/shellwords_folding.rb +22 -32
- data/lib/rigor/inference/method_dispatcher/singleton_folding.rb +15 -21
- data/lib/rigor/inference/method_dispatcher/struct_folding.rb +66 -82
- data/lib/rigor/inference/method_dispatcher/time_folding.rb +10 -15
- data/lib/rigor/inference/method_dispatcher/uri_folding.rb +9 -13
- data/lib/rigor/inference/method_dispatcher.rb +378 -524
- data/lib/rigor/inference/method_parameter_binder.rb +81 -114
- data/lib/rigor/inference/multi_target_binder.rb +51 -68
- data/lib/rigor/inference/mutation_widening.rb +115 -158
- data/lib/rigor/inference/narrowing.rb +509 -727
- data/lib/rigor/inference/origin_lookup.rb +38 -0
- data/lib/rigor/inference/parameter_inference_collector.rb +100 -100
- data/lib/rigor/inference/precision_scanner.rb +26 -35
- data/lib/rigor/inference/project_patched_methods.rb +20 -32
- data/lib/rigor/inference/project_patched_scanner.rb +23 -37
- data/lib/rigor/inference/protection_scanner.rb +16 -18
- data/lib/rigor/inference/rbs_type_translator.rb +49 -66
- data/lib/rigor/inference/scope_indexer.rb +473 -817
- data/lib/rigor/inference/statement_evaluator.rb +706 -1111
- data/lib/rigor/inference/struct_fold_safety.rb +34 -48
- data/lib/rigor/inference/synthetic_method.rb +9 -16
- data/lib/rigor/inference/synthetic_method_index.rb +20 -35
- data/lib/rigor/inference/synthetic_method_scanner.rb +63 -103
- data/lib/rigor/language_server/buffer_resolution.rb +6 -9
- data/lib/rigor/language_server/buffer_table.rb +11 -18
- data/lib/rigor/language_server/completion_provider.rb +69 -116
- data/lib/rigor/language_server/debouncer.rb +16 -25
- data/lib/rigor/language_server/diagnostic_publisher.rb +26 -40
- data/lib/rigor/language_server/document_symbol_provider.rb +14 -19
- data/lib/rigor/language_server/folding_range_provider.rb +11 -19
- data/lib/rigor/language_server/hover_provider.rb +8 -11
- data/lib/rigor/language_server/hover_renderer.rb +56 -93
- data/lib/rigor/language_server/loop.rb +14 -19
- data/lib/rigor/language_server/project_context.rb +46 -74
- data/lib/rigor/language_server/selection_range_provider.rb +9 -12
- data/lib/rigor/language_server/server.rb +55 -83
- data/lib/rigor/language_server/signature_help_provider.rb +29 -46
- data/lib/rigor/language_server/synchronized_writer.rb +4 -7
- data/lib/rigor/language_server/uri.rb +8 -13
- data/lib/rigor/language_server.rb +4 -6
- data/lib/rigor/mcp/loop.rb +2 -3
- data/lib/rigor/mcp/server.rb +4 -7
- data/lib/rigor/mcp.rb +3 -6
- data/lib/rigor/plugin/access_denied_error.rb +5 -8
- data/lib/rigor/plugin/additional_initializer.rb +21 -31
- data/lib/rigor/plugin/base.rb +335 -518
- data/lib/rigor/plugin/blueprint.rb +14 -23
- data/lib/rigor/plugin/box.rb +18 -29
- data/lib/rigor/plugin/fact_store.rb +16 -26
- data/lib/rigor/plugin/inflector.rb +37 -53
- data/lib/rigor/plugin/io_boundary.rb +33 -56
- data/lib/rigor/plugin/isolation.rb +42 -55
- data/lib/rigor/plugin/load_error.rb +10 -15
- data/lib/rigor/plugin/loader.rb +30 -49
- data/lib/rigor/plugin/macro/block_as_method.rb +20 -32
- data/lib/rigor/plugin/macro/heredoc_template.rb +35 -58
- data/lib/rigor/plugin/macro/nested_class_template.rb +22 -36
- data/lib/rigor/plugin/macro/trait_registry.rb +34 -51
- data/lib/rigor/plugin/macro.rb +10 -15
- data/lib/rigor/plugin/manifest.rb +85 -144
- data/lib/rigor/plugin/node_context.rb +14 -22
- data/lib/rigor/plugin/node_rule_walk.rb +49 -74
- data/lib/rigor/plugin/protocol_contract.rb +25 -39
- data/lib/rigor/plugin/registry.rb +132 -205
- data/lib/rigor/plugin/services.rb +21 -33
- data/lib/rigor/plugin/source_rbs_synthesis_reporter.rb +11 -19
- data/lib/rigor/plugin/trust_policy.rb +24 -38
- data/lib/rigor/plugin/type_node_resolver.rb +15 -24
- data/lib/rigor/protection/diagnostic_oracle.rb +11 -13
- data/lib/rigor/protection/mutation_scanner.rb +27 -35
- data/lib/rigor/protection/mutator.rb +50 -70
- data/lib/rigor/protection/test_suite_oracle.rb +20 -27
- data/lib/rigor/rbs_extended/conformance_checker.rb +48 -68
- data/lib/rigor/rbs_extended/hkt_directives.rb +28 -54
- data/lib/rigor/rbs_extended/reporter.rb +24 -40
- data/lib/rigor/rbs_extended.rb +107 -197
- data/lib/rigor/reflection.rb +68 -86
- data/lib/rigor/scope/discovery_index.rb +14 -19
- data/lib/rigor/scope.rb +255 -310
- data/lib/rigor/sig_gen/classification.rb +6 -10
- data/lib/rigor/sig_gen/generator.rb +197 -323
- data/lib/rigor/sig_gen/layout_index.rb +12 -20
- data/lib/rigor/sig_gen/method_candidate.rb +12 -17
- data/lib/rigor/sig_gen/observation_collector.rb +38 -70
- data/lib/rigor/sig_gen/observed_call.rb +13 -23
- data/lib/rigor/sig_gen/path_mapper.rb +17 -29
- data/lib/rigor/sig_gen/renderer.rb +7 -13
- data/lib/rigor/sig_gen/type_elaborator.rb +15 -28
- data/lib/rigor/sig_gen/write_result.rb +8 -16
- data/lib/rigor/sig_gen/writer.rb +95 -174
- data/lib/rigor/sig_gen.rb +3 -6
- data/lib/rigor/signature_path_audit.rb +24 -30
- data/lib/rigor/source/constant_path.rb +10 -14
- data/lib/rigor/source/literals.rb +31 -45
- data/lib/rigor/source/node_locator.rb +9 -11
- data/lib/rigor/source/node_walker.rb +9 -13
- data/lib/rigor/source.rb +3 -4
- data/lib/rigor/testing.rb +16 -20
- data/lib/rigor/triage/catalogue.rb +38 -62
- data/lib/rigor/triage.rb +31 -52
- data/lib/rigor/trinary.rb +9 -13
- data/lib/rigor/type/acceptance_router.rb +4 -6
- data/lib/rigor/type/accepts_result.rb +10 -14
- data/lib/rigor/type/app.rb +19 -27
- data/lib/rigor/type/bot.rb +4 -6
- data/lib/rigor/type/bound_method.rb +10 -15
- data/lib/rigor/type/combinator.rb +165 -257
- data/lib/rigor/type/constant.rb +23 -34
- data/lib/rigor/type/data_class.rb +10 -15
- data/lib/rigor/type/data_instance.rb +14 -20
- data/lib/rigor/type/difference.rb +21 -32
- data/lib/rigor/type/dynamic.rb +3 -5
- data/lib/rigor/type/hash_shape.rb +32 -18
- data/lib/rigor/type/integer_range.rb +11 -16
- data/lib/rigor/type/intersection.rb +27 -42
- data/lib/rigor/type/nominal.rb +10 -15
- data/lib/rigor/type/plain_lattice.rb +9 -13
- data/lib/rigor/type/refined.rb +67 -114
- data/lib/rigor/type/singleton.rb +4 -6
- data/lib/rigor/type/struct_class.rb +11 -16
- data/lib/rigor/type/struct_instance.rb +15 -21
- data/lib/rigor/type/tuple.rb +14 -19
- data/lib/rigor/type/union.rb +30 -42
- data/lib/rigor/type_node/generic.rb +14 -26
- data/lib/rigor/type_node/identifier.rb +12 -19
- data/lib/rigor/type_node.rb +3 -12
- data/lib/rigor/value_semantics.rb +16 -21
- data/lib/rigor/version.rb +1 -1
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/analyzer.rb +18 -30
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_discoverer.rb +16 -29
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_index.rb +12 -23
- data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb +22 -39
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/analyzer.rb +26 -46
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_discoverer.rb +51 -87
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_index.rb +10 -17
- data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer.rb +26 -39
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +118 -176
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_discoverer.rb +30 -51
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb +57 -92
- data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack.rb +71 -108
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb +13 -22
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_discoverer.rb +15 -25
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_index.rb +8 -13
- data/plugins/rigor-activejob/lib/rigor/plugin/activejob.rb +16 -24
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/analyzer.rb +30 -47
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +79 -129
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_index.rb +36 -57
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb +27 -41
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_table.rb +16 -24
- data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +148 -235
- data/plugins/rigor-activerecord/lib/rigor-activerecord.rb +3 -5
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/analyzer.rb +8 -14
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/attachment_discoverer.rb +9 -15
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/attachment_index.rb +4 -7
- data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb +23 -41
- data/plugins/rigor-activestorage/lib/rigor-activestorage.rb +3 -5
- data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext.rb +6 -10
- data/plugins/rigor-activesupport-core-ext/lib/rigor-activesupport-core-ext.rb +8 -11
- data/plugins/rigor-devise/lib/rigor/plugin/devise.rb +30 -45
- data/plugins/rigor-devise/lib/rigor-devise.rb +3 -5
- data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema/schema_scanner.rb +43 -69
- data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema.rb +26 -35
- data/plugins/rigor-dry-schema/lib/rigor-dry-schema.rb +3 -5
- data/plugins/rigor-dry-struct/lib/rigor/plugin/dry_struct.rb +30 -47
- data/plugins/rigor-dry-struct/lib/rigor-dry-struct.rb +3 -5
- data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types/alias_scanner.rb +67 -113
- data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types.rb +29 -46
- data/plugins/rigor-dry-types/lib/rigor-dry-types.rb +3 -5
- data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation/contract_scanner.rb +13 -20
- data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation.rb +14 -23
- data/plugins/rigor-dry-validation/lib/rigor-dry-validation.rb +2 -3
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/analyzer.rb +22 -37
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_discoverer.rb +28 -46
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_index.rb +13 -17
- data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot.rb +30 -47
- data/plugins/rigor-graphql/lib/rigor/plugin/graphql/type_scanner.rb +52 -80
- data/plugins/rigor-graphql/lib/rigor/plugin/graphql.rb +21 -31
- data/plugins/rigor-graphql/lib/rigor-graphql.rb +3 -5
- data/plugins/rigor-hanami/lib/rigor/plugin/hanami/action_checker.rb +11 -17
- data/plugins/rigor-hanami/lib/rigor/plugin/hanami.rb +20 -34
- data/plugins/rigor-mangrove/lib/rigor/plugin/mangrove.rb +45 -75
- data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +22 -36
- data/plugins/rigor-minitest/lib/rigor/plugin/minitest.rb +22 -41
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/analyzer.rb +17 -32
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_discoverer.rb +6 -12
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_index.rb +4 -8
- data/plugins/rigor-pundit/lib/rigor/plugin/pundit.rb +17 -32
- data/plugins/rigor-rails/lib/rigor-rails.rb +11 -18
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/analyzer.rb +58 -92
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_index.rb +20 -34
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_loader.rb +20 -31
- data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n.rb +49 -82
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/analyzer.rb +55 -92
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/devise_routes.rb +51 -90
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/doorkeeper_routes.rb +17 -30
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_discoverer.rb +38 -70
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_table.rb +42 -74
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/routes_parser.rb +280 -497
- data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes.rb +54 -89
- data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +32 -54
- data/plugins/rigor-rbs-inline/lib/rigor-rbs-inline.rb +8 -13
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/analyzer.rb +9 -16
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_scope_index.rb +24 -39
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_type_resolver.rb +13 -22
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/matcher_analyzer.rb +34 -56
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec/scope_walker.rb +22 -42
- data/plugins/rigor-rspec/lib/rigor/plugin/rspec.rb +43 -75
- data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/have_http_status_analyzer.rb +27 -39
- data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/http_status_codes.rb +14 -19
- data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails.rb +20 -34
- data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers/analyzer.rb +28 -47
- data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers.rb +21 -37
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/analyzer.rb +13 -22
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_discoverer.rb +18 -31
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_index.rb +6 -10
- data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq.rb +14 -29
- data/plugins/rigor-sinatra/lib/rigor/plugin/sinatra.rb +23 -41
- data/plugins/rigor-sinatra/lib/rigor-sinatra.rb +3 -5
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/absurd_recognizer.rb +23 -38
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/assertion_recognizer.rb +57 -96
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog.rb +22 -35
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog_walker.rb +41 -69
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/method_signature.rb +6 -10
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sig_parser.rb +24 -41
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sigil_detector.rb +29 -50
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/type_translator.rb +55 -88
- data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet.rb +159 -262
- data/plugins/rigor-statesman/lib/rigor/plugin/statesman.rb +21 -29
- data/plugins/rigor-statesman/lib/rigor-statesman.rb +3 -5
- data/plugins/rigor-typescript-utility-types/lib/rigor/plugin/typescript_utility_types.rb +23 -37
- data/plugins/rigor-typescript-utility-types/lib/rigor-typescript-utility-types.rb +4 -6
- data/sig/rigor/scope.rbs +6 -0
- metadata +2 -1
data/lib/rigor/reflection.rb
CHANGED
|
@@ -5,52 +5,44 @@ require_relative "type"
|
|
|
5
5
|
module Rigor
|
|
6
6
|
# Read-side facade over Rigor's three reflection sources:
|
|
7
7
|
#
|
|
8
|
-
# 1. **`Rigor::Environment::ClassRegistry`** — Ruby `Class` /
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
# 2. **`Rigor::Environment::RbsLoader`** — RBS-side declarations
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
# classes / modules, in-source constants, discovered method
|
|
18
|
-
# nodes, class ivar / cvar declarations).
|
|
8
|
+
# 1. **`Rigor::Environment::ClassRegistry`** — Ruby `Class` / `Module` objects (Integer,
|
|
9
|
+
# Float, Set, Pathname, …) registered at boot. Static; never changes during a `rigor
|
|
10
|
+
# check` run.
|
|
11
|
+
# 2. **`Rigor::Environment::RbsLoader`** — RBS-side declarations (instance / singleton
|
|
12
|
+
# methods, class hierarchy, constants). Loaded on demand from the project's `sig/`
|
|
13
|
+
# directory + the bundled stdlib RBS.
|
|
14
|
+
# 3. **`Rigor::Scope` discovered facts** — source-side discoveries produced by
|
|
15
|
+
# `Rigor::Inference::ScopeIndexer` (user-defined classes / modules, in-source
|
|
16
|
+
# constants, discovered method nodes, class ivar / cvar declarations).
|
|
19
17
|
#
|
|
20
|
-
# This module is the **stable read shape** the plugin API is
|
|
21
|
-
#
|
|
18
|
+
# This module is the **stable read shape** the plugin API is designed against (ADR-2,
|
|
19
|
+
# `docs/adr/2-extension-api.md`).
|
|
22
20
|
#
|
|
23
|
-
# The facade is **read-only and additive**. Existing call sites
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
# performs no caching beyond what the underlying sources already
|
|
28
|
-
# provide.
|
|
21
|
+
# The facade is **read-only and additive**. Existing call sites that read directly from
|
|
22
|
+
# `Rigor::Scope` or `Rigor::Environment::RbsLoader` continue to work unchanged; they
|
|
23
|
+
# migrate to the facade at their own pace. The facade performs no caching beyond what the
|
|
24
|
+
# underlying sources already provide.
|
|
29
25
|
#
|
|
30
26
|
# ## Public surface (v0.0.7 first pass)
|
|
31
27
|
#
|
|
32
|
-
# - {.class_known?} — does any source recognise this class /
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
# - {.
|
|
39
|
-
#
|
|
40
|
-
# - {.
|
|
41
|
-
#
|
|
42
|
-
# -
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
# below until the unified `MethodDefinition` carrier ships.
|
|
47
|
-
# - {.discovered_class?} / {.discovered_method?} — has the
|
|
48
|
-
# ScopeIndexer pass recorded the class / method as user-
|
|
49
|
-
# defined in the analyzed sources?
|
|
28
|
+
# - {.class_known?} — does any source recognise this class / module name?
|
|
29
|
+
# - {.class_ordering} — `:equal` / `:subclass` / `:superclass` / `:disjoint` / `:unknown`
|
|
30
|
+
# ordering between two class names.
|
|
31
|
+
# - {.nominal_for_name} — `Rigor::Type::Nominal` for the class name, joining registry + RBS
|
|
32
|
+
# lookups.
|
|
33
|
+
# - {.singleton_for_name} — `Rigor::Type::Singleton` for the class name's class object.
|
|
34
|
+
# - {.constant_type_for} — type of a constant (joins in-source constants and RBS-side
|
|
35
|
+
# constants).
|
|
36
|
+
# - {.instance_method_definition} / {.singleton_method_definition} — RBS-side
|
|
37
|
+
# `RBS::Definition::Method` for the method, or `nil` when the method is not declared in
|
|
38
|
+
# RBS. Source-side discovered methods are exposed through {.discovered_method?} below
|
|
39
|
+
# until the unified `MethodDefinition` carrier ships.
|
|
40
|
+
# - {.discovered_class?} / {.discovered_method?} — has the ScopeIndexer pass recorded the
|
|
41
|
+
# class / method as user-defined in the analyzed sources?
|
|
50
42
|
#
|
|
51
|
-
# The provenance side of the API (which source family contributed
|
|
52
|
-
#
|
|
53
|
-
#
|
|
43
|
+
# The provenance side of the API (which source family contributed each fact) is explicitly
|
|
44
|
+
# out of scope for the v0.0.7 first pass; v0.1.0's plugin API added it as a separate
|
|
45
|
+
# concern.
|
|
54
46
|
module Reflection
|
|
55
47
|
module_function
|
|
56
48
|
|
|
@@ -63,19 +55,16 @@ module Rigor
|
|
|
63
55
|
scope.environment.class_known?(class_name)
|
|
64
56
|
end
|
|
65
57
|
|
|
66
|
-
# RBS-only variant of {.class_known?}. Use when the caller
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
# source-discovered class would suppress the rule even
|
|
73
|
-
# when no RBS sig actually proves the method exists.
|
|
58
|
+
# RBS-only variant of {.class_known?}. Use when the caller needs to know specifically
|
|
59
|
+
# whether RBS has a definition for the class, independent of any source-discovered `class
|
|
60
|
+
# Foo; end` declarations. The diagnostic-rule code paths that walk RBS method tables to
|
|
61
|
+
# decide whether to flag a missing method use this variant; otherwise the
|
|
62
|
+
# source-discovered class would suppress the rule even when no RBS sig actually proves
|
|
63
|
+
# the method exists.
|
|
74
64
|
#
|
|
75
|
-
# The kwarg accepts either `scope:` or `environment:`. The
|
|
76
|
-
#
|
|
77
|
-
#
|
|
78
|
-
# only an environment).
|
|
65
|
+
# The kwarg accepts either `scope:` or `environment:`. The latter is for call sites that
|
|
66
|
+
# don't carry a `Scope` (most are bottom-half dispatcher code paths called with only an
|
|
67
|
+
# environment).
|
|
79
68
|
def rbs_class_known?(class_name, scope: nil, environment: nil)
|
|
80
69
|
loader = rbs_loader_for(scope, environment)
|
|
81
70
|
return false if loader.nil?
|
|
@@ -89,21 +78,20 @@ module Rigor
|
|
|
89
78
|
scope.environment.class_ordering(lhs, rhs)
|
|
90
79
|
end
|
|
91
80
|
|
|
92
|
-
# Returns the `Rigor::Type::Nominal` for the class name, or
|
|
93
|
-
#
|
|
81
|
+
# Returns the `Rigor::Type::Nominal` for the class name, or nil when no source knows the
|
|
82
|
+
# class.
|
|
94
83
|
def nominal_for_name(class_name, scope: Scope.empty)
|
|
95
84
|
scope.environment.nominal_for_name(class_name)
|
|
96
85
|
end
|
|
97
86
|
|
|
98
|
-
# Returns the `Rigor::Type::Singleton` for the class name's
|
|
99
|
-
#
|
|
87
|
+
# Returns the `Rigor::Type::Singleton` for the class name's class object, or nil when no
|
|
88
|
+
# source knows the class.
|
|
100
89
|
def singleton_for_name(class_name, scope: Scope.empty)
|
|
101
90
|
scope.environment.singleton_for_name(class_name)
|
|
102
91
|
end
|
|
103
92
|
|
|
104
|
-
# Returns the type of the named constant. Joins in-source
|
|
105
|
-
#
|
|
106
|
-
# constants. In-source wins on collision because the user's
|
|
93
|
+
# Returns the type of the named constant. Joins in-source constants (recorded by
|
|
94
|
+
# `ScopeIndexer`) and RBS-side constants. In-source wins on collision because the user's
|
|
107
95
|
# source is the authoritative declaration.
|
|
108
96
|
def constant_type_for(constant_name, scope: Scope.empty)
|
|
109
97
|
key = constant_name.to_s
|
|
@@ -113,11 +101,10 @@ module Rigor
|
|
|
113
101
|
scope.environment.constant_for_name(constant_name)
|
|
114
102
|
end
|
|
115
103
|
|
|
116
|
-
# Returns the RBS `RBS::Definition::Method` for the instance
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
#
|
|
120
|
-
# under a `MethodDefinition` carrier.
|
|
104
|
+
# Returns the RBS `RBS::Definition::Method` for the instance method, or nil when the
|
|
105
|
+
# class or method is not in RBS. The source-side discovered-method facts are reachable
|
|
106
|
+
# through {.discovered_method?}; a future slice will unify the two under a
|
|
107
|
+
# `MethodDefinition` carrier.
|
|
121
108
|
def instance_method_definition(class_name, method_name, scope: nil, environment: nil)
|
|
122
109
|
loader = rbs_loader_for(scope, environment)
|
|
123
110
|
return nil if loader.nil?
|
|
@@ -125,8 +112,8 @@ module Rigor
|
|
|
125
112
|
loader.instance_method(class_name: class_name.to_s, method_name: method_name.to_sym)
|
|
126
113
|
end
|
|
127
114
|
|
|
128
|
-
# Returns the RBS `RBS::Definition::Method` for the singleton
|
|
129
|
-
#
|
|
115
|
+
# Returns the RBS `RBS::Definition::Method` for the singleton (class-side) method, or
|
|
116
|
+
# nil.
|
|
130
117
|
def singleton_method_definition(class_name, method_name, scope: nil, environment: nil)
|
|
131
118
|
loader = rbs_loader_for(scope, environment)
|
|
132
119
|
return nil if loader.nil?
|
|
@@ -134,11 +121,10 @@ module Rigor
|
|
|
134
121
|
loader.singleton_method(class_name: class_name.to_s, method_name: method_name.to_sym)
|
|
135
122
|
end
|
|
136
123
|
|
|
137
|
-
# Returns the full RBS instance-side class definition
|
|
138
|
-
#
|
|
139
|
-
#
|
|
140
|
-
#
|
|
141
|
-
# constant aliases, malformed signatures).
|
|
124
|
+
# Returns the full RBS instance-side class definition (`RBS::Definition`), used by
|
|
125
|
+
# callers that walk the method table or member list. Returns nil when the class is not
|
|
126
|
+
# in RBS or when the loader cannot build a definition (e.g. constant aliases, malformed
|
|
127
|
+
# signatures).
|
|
142
128
|
def instance_definition(class_name, scope: nil, environment: nil)
|
|
143
129
|
loader = rbs_loader_for(scope, environment)
|
|
144
130
|
return nil if loader.nil?
|
|
@@ -158,10 +144,9 @@ module Rigor
|
|
|
158
144
|
nil
|
|
159
145
|
end
|
|
160
146
|
|
|
161
|
-
# Returns the RBS-declared type parameter names for the
|
|
162
|
-
#
|
|
163
|
-
#
|
|
164
|
-
# binding generic method types to a concrete receiver.
|
|
147
|
+
# Returns the RBS-declared type parameter names for the class (e.g. `[:A]` for
|
|
148
|
+
# `Array[A]`), or `[]` when the class is non-generic / not in RBS. Used by the dispatcher
|
|
149
|
+
# when binding generic method types to a concrete receiver.
|
|
165
150
|
def class_type_param_names(class_name, scope: nil, environment: nil)
|
|
166
151
|
loader = rbs_loader_for(scope, environment)
|
|
167
152
|
return [] if loader.nil?
|
|
@@ -169,11 +154,9 @@ module Rigor
|
|
|
169
154
|
loader.class_type_param_names(class_name.to_s)
|
|
170
155
|
end
|
|
171
156
|
|
|
172
|
-
# Internal helper — resolves the RBS loader from either the
|
|
173
|
-
# `
|
|
174
|
-
#
|
|
175
|
-
# methods document both spellings; the helper centralises
|
|
176
|
-
# the dispatch.
|
|
157
|
+
# Internal helper — resolves the RBS loader from either the `scope:` or the
|
|
158
|
+
# `environment:` kwarg, defaulting to the empty scope's environment when neither is
|
|
159
|
+
# given. Public methods document both spellings; the helper centralises the dispatch.
|
|
177
160
|
def rbs_loader_for(scope, environment)
|
|
178
161
|
return environment.rbs_loader if environment
|
|
179
162
|
return scope.environment.rbs_loader if scope
|
|
@@ -182,17 +165,16 @@ module Rigor
|
|
|
182
165
|
end
|
|
183
166
|
private_class_method :rbs_loader_for
|
|
184
167
|
|
|
185
|
-
# @return [Boolean] true when the analyzed source contains a
|
|
186
|
-
#
|
|
187
|
-
#
|
|
168
|
+
# @return [Boolean] true when the analyzed source contains a class / module declaration
|
|
169
|
+
# for the given name. Does NOT consult the RBS loader (use {.class_known?} for the
|
|
170
|
+
# union).
|
|
188
171
|
def discovered_class?(class_name, scope: Scope.empty)
|
|
189
172
|
scope.discovered_classes.key?(class_name.to_s)
|
|
190
173
|
end
|
|
191
174
|
|
|
192
175
|
# @param kind [:instance, :singleton]
|
|
193
|
-
# @return [Boolean] true when the ScopeIndexer recorded a
|
|
194
|
-
#
|
|
195
|
-
# matching kind.
|
|
176
|
+
# @return [Boolean] true when the ScopeIndexer recorded a `def` for the given method on
|
|
177
|
+
# the given class with the matching kind.
|
|
196
178
|
def discovered_method?(class_name, method_name, kind: :instance, scope: Scope.empty)
|
|
197
179
|
scope.discovered_method?(class_name, method_name, kind)
|
|
198
180
|
end
|
|
@@ -2,16 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
module Rigor
|
|
4
4
|
class Scope
|
|
5
|
-
# ADR-53 Track A — the seed-time discovery context every Scope snapshot
|
|
6
|
-
#
|
|
7
|
-
# pre-
|
|
8
|
-
#
|
|
9
|
-
# varies: `Scope#==` ignores them and `Scope#join` copies them from the
|
|
10
|
-
# receiver unexamined, which is the membership litmus the ADR fixes.
|
|
5
|
+
# ADR-53 Track A — the seed-time discovery context every Scope snapshot carries by a single reference. Holds
|
|
6
|
+
# the tables the index-time pre-passes (`Inference::ScopeIndexer` per file, plus the cross-file project
|
|
7
|
+
# pre-pass) populate and that no control-flow transition ever varies: `Scope#==` ignores them and
|
|
8
|
+
# `Scope#join` copies them from the receiver unexamined, which is the membership litmus the ADR fixes.
|
|
11
9
|
#
|
|
12
|
-
# Immutable (`Data` instances are frozen); deriving a seeded index goes
|
|
13
|
-
#
|
|
14
|
-
# its existing reader surface, so engine call sites and plugins are
|
|
10
|
+
# Immutable (`Data` instances are frozen); deriving a seeded index goes through `#with(table_name: table)`.
|
|
11
|
+
# `Scope` exposes each table through its existing reader surface, so engine call sites and plugins are
|
|
15
12
|
# unaffected by the extraction.
|
|
16
13
|
DiscoveryIndex = Data.define(
|
|
17
14
|
:declared_types,
|
|
@@ -38,8 +35,8 @@ module Rigor
|
|
|
38
35
|
EMPTY_TABLE = {}.freeze
|
|
39
36
|
private_constant :EMPTY_NODE_TABLE, :EMPTY_TABLE
|
|
40
37
|
|
|
41
|
-
# The shared all-empty index `Scope.empty` (and every scope that never
|
|
42
|
-
#
|
|
38
|
+
# The shared all-empty index `Scope.empty` (and every scope that never sees a seeding pass) points at — one
|
|
39
|
+
# allocation per process.
|
|
43
40
|
EMPTY = new(
|
|
44
41
|
declared_types: EMPTY_NODE_TABLE,
|
|
45
42
|
class_ivars: EMPTY_TABLE,
|
|
@@ -57,14 +54,12 @@ module Rigor
|
|
|
57
54
|
discovered_class_sources: EMPTY_TABLE,
|
|
58
55
|
data_member_layouts: EMPTY_TABLE,
|
|
59
56
|
struct_member_layouts: EMPTY_TABLE,
|
|
60
|
-
# ADR-67 WD3 — the call-site parameter-inference table, keyed by
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
# `
|
|
64
|
-
#
|
|
65
|
-
#
|
|
66
|
-
# the `coverage --protection` collection pass populates it today, so a
|
|
67
|
-
# `check` run leaves it empty and seeds nothing (byte-identical).
|
|
57
|
+
# ADR-67 WD3 — the call-site parameter-inference table, keyed by `[class_name, method_name, kind]` (the
|
|
58
|
+
# same `(class, method, kind)` triple {Inference::ParameterInferenceCollector} records and that
|
|
59
|
+
# `build_method_entry_scope` reconstructs from the lexical class path). The value is a
|
|
60
|
+
# `{param_name(Symbol) => Rigor::Type}` map of the union of resolved call-site argument types. Empty on
|
|
61
|
+
# every normal run; only the `coverage --protection` collection pass populates it today, so a `check` run
|
|
62
|
+
# leaves it empty and seeds nothing (byte-identical).
|
|
68
63
|
param_inferred_types: EMPTY_TABLE
|
|
69
64
|
)
|
|
70
65
|
end
|