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.
Files changed (414) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/docs/manual/04-diagnostics.md +7 -4
  4. data/docs/manual/06-baseline.md +5 -2
  5. data/docs/manual/15-type-protection-coverage.md +6 -4
  6. data/lib/rigor/analysis/baseline.rb +56 -96
  7. data/lib/rigor/analysis/buffer_binding.rb +13 -20
  8. data/lib/rigor/analysis/check_rules/always_truthy_condition_collector.rb +29 -48
  9. data/lib/rigor/analysis/check_rules/dead_assignment_collector.rb +35 -54
  10. data/lib/rigor/analysis/check_rules/ivar_write_collector.rb +23 -37
  11. data/lib/rigor/analysis/check_rules/main_pass_collector.rb +16 -23
  12. data/lib/rigor/analysis/check_rules/rule_walk.rb +48 -71
  13. data/lib/rigor/analysis/check_rules/self_closedness_scanner.rb +19 -28
  14. data/lib/rigor/analysis/check_rules/unreachable_clause_collector.rb +48 -67
  15. data/lib/rigor/analysis/check_rules.rb +174 -274
  16. data/lib/rigor/analysis/dependency_recorder.rb +26 -38
  17. data/lib/rigor/analysis/dependency_source_inference/boundary_cross_reporter.rb +13 -25
  18. data/lib/rigor/analysis/dependency_source_inference/builder.rb +17 -30
  19. data/lib/rigor/analysis/dependency_source_inference/gem_resolver.rb +15 -26
  20. data/lib/rigor/analysis/dependency_source_inference/index.rb +45 -76
  21. data/lib/rigor/analysis/dependency_source_inference/return_type_heuristic.rb +23 -40
  22. data/lib/rigor/analysis/dependency_source_inference/walker.rb +50 -83
  23. data/lib/rigor/analysis/dependency_source_inference.rb +6 -10
  24. data/lib/rigor/analysis/diagnostic.rb +48 -75
  25. data/lib/rigor/analysis/erb_template_detector.rb +13 -18
  26. data/lib/rigor/analysis/fact_store.rb +12 -22
  27. data/lib/rigor/analysis/incremental.rb +47 -63
  28. data/lib/rigor/analysis/incremental_session.rb +74 -100
  29. data/lib/rigor/analysis/project_scan.rb +12 -23
  30. data/lib/rigor/analysis/result.rb +3 -5
  31. data/lib/rigor/analysis/rule_catalog.rb +67 -95
  32. data/lib/rigor/analysis/run_stats.rb +38 -61
  33. data/lib/rigor/analysis/runner/diagnostic_aggregator.rb +101 -160
  34. data/lib/rigor/analysis/runner/pool_coordinator.rb +121 -188
  35. data/lib/rigor/analysis/runner/project_pre_passes.rb +62 -96
  36. data/lib/rigor/analysis/runner/run_snapshots.rb +12 -18
  37. data/lib/rigor/analysis/runner.rb +220 -333
  38. data/lib/rigor/analysis/self_call_resolution_recorder.rb +30 -43
  39. data/lib/rigor/analysis/worker_session.rb +64 -102
  40. data/lib/rigor/ast/type_node.rb +6 -8
  41. data/lib/rigor/ast.rb +6 -10
  42. data/lib/rigor/bleeding_edge.rb +27 -35
  43. data/lib/rigor/builtins/hkt_builtins.rb +7 -14
  44. data/lib/rigor/builtins/imported_refinements.rb +106 -149
  45. data/lib/rigor/builtins/predefined_constant_refinements.rb +51 -65
  46. data/lib/rigor/builtins/regex_refinement.rb +32 -43
  47. data/lib/rigor/builtins/static_return_refinements.rb +57 -81
  48. data/lib/rigor/cache/descriptor.rb +58 -94
  49. data/lib/rigor/cache/incremental_snapshot.rb +32 -48
  50. data/lib/rigor/cache/rbs_cache_producer.rb +10 -15
  51. data/lib/rigor/cache/rbs_class_ancestor_table.rb +10 -16
  52. data/lib/rigor/cache/rbs_class_type_param_names.rb +10 -16
  53. data/lib/rigor/cache/rbs_constant_table.rb +8 -13
  54. data/lib/rigor/cache/rbs_descriptor.rb +8 -13
  55. data/lib/rigor/cache/rbs_environment.rb +11 -19
  56. data/lib/rigor/cache/rbs_environment_marshal_patch.rb +11 -19
  57. data/lib/rigor/cache/rbs_known_class_names.rb +8 -12
  58. data/lib/rigor/cache/store.rb +96 -151
  59. data/lib/rigor/cli/annotate_command.rb +51 -88
  60. data/lib/rigor/cli/baseline_command.rb +10 -17
  61. data/lib/rigor/cli/check_command.rb +121 -199
  62. data/lib/rigor/cli/check_runner_factory.rb +8 -14
  63. data/lib/rigor/cli/ci_detector.rb +9 -14
  64. data/lib/rigor/cli/command.rb +8 -14
  65. data/lib/rigor/cli/coverage_command.rb +19 -26
  66. data/lib/rigor/cli/coverage_mutation.rb +14 -19
  67. data/lib/rigor/cli/coverage_report.rb +0 -2
  68. data/lib/rigor/cli/coverage_scan.rb +7 -11
  69. data/lib/rigor/cli/diagnostic_formats.rb +43 -62
  70. data/lib/rigor/cli/diff_command.rb +10 -20
  71. data/lib/rigor/cli/docs_command.rb +26 -40
  72. data/lib/rigor/cli/doctor_command.rb +8 -9
  73. data/lib/rigor/cli/explain_command.rb +4 -7
  74. data/lib/rigor/cli/fused_protection_renderer.rb +4 -5
  75. data/lib/rigor/cli/fused_protection_report.rb +6 -8
  76. data/lib/rigor/cli/lsp_command.rb +11 -19
  77. data/lib/rigor/cli/mcp_command.rb +4 -6
  78. data/lib/rigor/cli/mutation_protection_renderer.rb +3 -4
  79. data/lib/rigor/cli/mutation_protection_report.rb +6 -9
  80. data/lib/rigor/cli/options.rb +11 -19
  81. data/lib/rigor/cli/plugin_command.rb +18 -30
  82. data/lib/rigor/cli/plugins_command.rb +29 -51
  83. data/lib/rigor/cli/plugins_renderer.rb +12 -20
  84. data/lib/rigor/cli/prism_colorizer.rb +13 -19
  85. data/lib/rigor/cli/protection_renderer.rb +5 -7
  86. data/lib/rigor/cli/protection_report.rb +27 -17
  87. data/lib/rigor/cli/renderable.rb +4 -6
  88. data/lib/rigor/cli/show_bleedingedge_command.rb +5 -8
  89. data/lib/rigor/cli/sig_gen_command.rb +14 -26
  90. data/lib/rigor/cli/skill_command.rb +30 -47
  91. data/lib/rigor/cli/skill_describe.rb +40 -64
  92. data/lib/rigor/cli/trace_command.rb +9 -16
  93. data/lib/rigor/cli/trace_renderer.rb +35 -51
  94. data/lib/rigor/cli/triage_command.rb +6 -10
  95. data/lib/rigor/cli/triage_renderer.rb +1 -2
  96. data/lib/rigor/cli/type_of_command.rb +14 -23
  97. data/lib/rigor/cli/type_of_renderer.rb +3 -5
  98. data/lib/rigor/cli/type_scan_command.rb +6 -10
  99. data/lib/rigor/cli/type_scan_renderer.rb +3 -5
  100. data/lib/rigor/cli/type_scan_report.rb +2 -3
  101. data/lib/rigor/cli/upgrade_command.rb +2 -3
  102. data/lib/rigor/cli.rb +16 -28
  103. data/lib/rigor/config_audit.rb +35 -44
  104. data/lib/rigor/configuration/dependencies.rb +41 -70
  105. data/lib/rigor/configuration/severity_profile.rb +28 -42
  106. data/lib/rigor/configuration.rb +150 -241
  107. data/lib/rigor/environment/bundle_sig_discovery.rb +74 -118
  108. data/lib/rigor/environment/class_registry.rb +19 -26
  109. data/lib/rigor/environment/constant_type_cache_holder.rb +14 -21
  110. data/lib/rigor/environment/hkt_registry_holder.rb +6 -12
  111. data/lib/rigor/environment/lockfile_resolver.rb +31 -47
  112. data/lib/rigor/environment/rbs_collection_discovery.rb +39 -63
  113. data/lib/rigor/environment/rbs_coverage_report.rb +24 -42
  114. data/lib/rigor/environment/rbs_loader.rb +420 -518
  115. data/lib/rigor/environment/reflection.rb +28 -53
  116. data/lib/rigor/environment/reporters.rb +13 -24
  117. data/lib/rigor/environment.rb +176 -291
  118. data/lib/rigor/flow_contribution/conflict.rb +16 -27
  119. data/lib/rigor/flow_contribution/element.rb +7 -12
  120. data/lib/rigor/flow_contribution/fact.rb +33 -57
  121. data/lib/rigor/flow_contribution/merge_result.rb +6 -9
  122. data/lib/rigor/flow_contribution/merger.rb +32 -47
  123. data/lib/rigor/flow_contribution.rb +37 -55
  124. data/lib/rigor/inference/acceptance.rb +133 -219
  125. data/lib/rigor/inference/block_parameter_binder.rb +52 -82
  126. data/lib/rigor/inference/body_fixpoint.rb +22 -30
  127. data/lib/rigor/inference/budget_trace.rb +43 -63
  128. data/lib/rigor/inference/builtins/array_catalog.rb +4 -6
  129. data/lib/rigor/inference/builtins/comparable_catalog.rb +4 -6
  130. data/lib/rigor/inference/builtins/complex_catalog.rb +13 -19
  131. data/lib/rigor/inference/builtins/date_catalog.rb +38 -67
  132. data/lib/rigor/inference/builtins/encoding_catalog.rb +22 -36
  133. data/lib/rigor/inference/builtins/enumerable_catalog.rb +4 -6
  134. data/lib/rigor/inference/builtins/exception_catalog.rb +38 -57
  135. data/lib/rigor/inference/builtins/hash_catalog.rb +9 -14
  136. data/lib/rigor/inference/builtins/method_catalog.rb +29 -48
  137. data/lib/rigor/inference/builtins/numeric_catalog.rb +13 -18
  138. data/lib/rigor/inference/builtins/pathname_catalog.rb +8 -13
  139. data/lib/rigor/inference/builtins/proc_catalog.rb +38 -62
  140. data/lib/rigor/inference/builtins/random_catalog.rb +21 -32
  141. data/lib/rigor/inference/builtins/range_catalog.rb +12 -21
  142. data/lib/rigor/inference/builtins/rational_catalog.rb +9 -15
  143. data/lib/rigor/inference/builtins/re_catalog.rb +29 -48
  144. data/lib/rigor/inference/builtins/set_catalog.rb +18 -27
  145. data/lib/rigor/inference/builtins/string_catalog.rb +12 -19
  146. data/lib/rigor/inference/builtins/struct_catalog.rb +18 -30
  147. data/lib/rigor/inference/builtins/time_catalog.rb +28 -44
  148. data/lib/rigor/inference/closure_escape_analyzer.rb +44 -67
  149. data/lib/rigor/inference/coverage_scanner.rb +13 -18
  150. data/lib/rigor/inference/def_return_typer.rb +8 -14
  151. data/lib/rigor/inference/dynamic_origin.rb +23 -20
  152. data/lib/rigor/inference/expression_typer.rb +774 -1152
  153. data/lib/rigor/inference/fallback.rb +8 -12
  154. data/lib/rigor/inference/fallback_tracer.rb +4 -10
  155. data/lib/rigor/inference/flow_tracer.rb +25 -36
  156. data/lib/rigor/inference/hkt_body.rb +45 -68
  157. data/lib/rigor/inference/hkt_body_parser.rb +33 -52
  158. data/lib/rigor/inference/hkt_reducer.rb +38 -59
  159. data/lib/rigor/inference/hkt_registry.rb +50 -76
  160. data/lib/rigor/inference/indexed_narrowing.rb +55 -81
  161. data/lib/rigor/inference/macro_block_self_type.rb +21 -34
  162. data/lib/rigor/inference/method_dispatcher/array_to_h_folding.rb +11 -18
  163. data/lib/rigor/inference/method_dispatcher/block_folding.rb +49 -83
  164. data/lib/rigor/inference/method_dispatcher/call_context.rb +16 -23
  165. data/lib/rigor/inference/method_dispatcher/cgi_folding.rb +13 -22
  166. data/lib/rigor/inference/method_dispatcher/constant_folding.rb +307 -454
  167. data/lib/rigor/inference/method_dispatcher/data_folding.rb +24 -34
  168. data/lib/rigor/inference/method_dispatcher/file_folding.rb +22 -37
  169. data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +52 -81
  170. data/lib/rigor/inference/method_dispatcher/kernel_dispatch.rb +51 -78
  171. data/lib/rigor/inference/method_dispatcher/literal_string_folding.rb +60 -97
  172. data/lib/rigor/inference/method_dispatcher/math_folding.rb +23 -34
  173. data/lib/rigor/inference/method_dispatcher/member_shape_projection.rb +18 -26
  174. data/lib/rigor/inference/method_dispatcher/method_folding.rb +37 -71
  175. data/lib/rigor/inference/method_dispatcher/overload_selector.rb +114 -182
  176. data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +122 -193
  177. data/lib/rigor/inference/method_dispatcher/receiver_affinity.rb +15 -24
  178. data/lib/rigor/inference/method_dispatcher/reduce_folding.rb +64 -93
  179. data/lib/rigor/inference/method_dispatcher/regexp_folding.rb +31 -45
  180. data/lib/rigor/inference/method_dispatcher/set_folding.rb +6 -9
  181. data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +356 -511
  182. data/lib/rigor/inference/method_dispatcher/shellwords_folding.rb +22 -32
  183. data/lib/rigor/inference/method_dispatcher/singleton_folding.rb +15 -21
  184. data/lib/rigor/inference/method_dispatcher/struct_folding.rb +66 -82
  185. data/lib/rigor/inference/method_dispatcher/time_folding.rb +10 -15
  186. data/lib/rigor/inference/method_dispatcher/uri_folding.rb +9 -13
  187. data/lib/rigor/inference/method_dispatcher.rb +378 -524
  188. data/lib/rigor/inference/method_parameter_binder.rb +81 -114
  189. data/lib/rigor/inference/multi_target_binder.rb +51 -68
  190. data/lib/rigor/inference/mutation_widening.rb +115 -158
  191. data/lib/rigor/inference/narrowing.rb +509 -727
  192. data/lib/rigor/inference/origin_lookup.rb +38 -0
  193. data/lib/rigor/inference/parameter_inference_collector.rb +100 -100
  194. data/lib/rigor/inference/precision_scanner.rb +26 -35
  195. data/lib/rigor/inference/project_patched_methods.rb +20 -32
  196. data/lib/rigor/inference/project_patched_scanner.rb +23 -37
  197. data/lib/rigor/inference/protection_scanner.rb +16 -18
  198. data/lib/rigor/inference/rbs_type_translator.rb +49 -66
  199. data/lib/rigor/inference/scope_indexer.rb +473 -817
  200. data/lib/rigor/inference/statement_evaluator.rb +706 -1111
  201. data/lib/rigor/inference/struct_fold_safety.rb +34 -48
  202. data/lib/rigor/inference/synthetic_method.rb +9 -16
  203. data/lib/rigor/inference/synthetic_method_index.rb +20 -35
  204. data/lib/rigor/inference/synthetic_method_scanner.rb +63 -103
  205. data/lib/rigor/language_server/buffer_resolution.rb +6 -9
  206. data/lib/rigor/language_server/buffer_table.rb +11 -18
  207. data/lib/rigor/language_server/completion_provider.rb +69 -116
  208. data/lib/rigor/language_server/debouncer.rb +16 -25
  209. data/lib/rigor/language_server/diagnostic_publisher.rb +26 -40
  210. data/lib/rigor/language_server/document_symbol_provider.rb +14 -19
  211. data/lib/rigor/language_server/folding_range_provider.rb +11 -19
  212. data/lib/rigor/language_server/hover_provider.rb +8 -11
  213. data/lib/rigor/language_server/hover_renderer.rb +56 -93
  214. data/lib/rigor/language_server/loop.rb +14 -19
  215. data/lib/rigor/language_server/project_context.rb +46 -74
  216. data/lib/rigor/language_server/selection_range_provider.rb +9 -12
  217. data/lib/rigor/language_server/server.rb +55 -83
  218. data/lib/rigor/language_server/signature_help_provider.rb +29 -46
  219. data/lib/rigor/language_server/synchronized_writer.rb +4 -7
  220. data/lib/rigor/language_server/uri.rb +8 -13
  221. data/lib/rigor/language_server.rb +4 -6
  222. data/lib/rigor/mcp/loop.rb +2 -3
  223. data/lib/rigor/mcp/server.rb +4 -7
  224. data/lib/rigor/mcp.rb +3 -6
  225. data/lib/rigor/plugin/access_denied_error.rb +5 -8
  226. data/lib/rigor/plugin/additional_initializer.rb +21 -31
  227. data/lib/rigor/plugin/base.rb +335 -518
  228. data/lib/rigor/plugin/blueprint.rb +14 -23
  229. data/lib/rigor/plugin/box.rb +18 -29
  230. data/lib/rigor/plugin/fact_store.rb +16 -26
  231. data/lib/rigor/plugin/inflector.rb +37 -53
  232. data/lib/rigor/plugin/io_boundary.rb +33 -56
  233. data/lib/rigor/plugin/isolation.rb +42 -55
  234. data/lib/rigor/plugin/load_error.rb +10 -15
  235. data/lib/rigor/plugin/loader.rb +30 -49
  236. data/lib/rigor/plugin/macro/block_as_method.rb +20 -32
  237. data/lib/rigor/plugin/macro/heredoc_template.rb +35 -58
  238. data/lib/rigor/plugin/macro/nested_class_template.rb +22 -36
  239. data/lib/rigor/plugin/macro/trait_registry.rb +34 -51
  240. data/lib/rigor/plugin/macro.rb +10 -15
  241. data/lib/rigor/plugin/manifest.rb +85 -144
  242. data/lib/rigor/plugin/node_context.rb +14 -22
  243. data/lib/rigor/plugin/node_rule_walk.rb +49 -74
  244. data/lib/rigor/plugin/protocol_contract.rb +25 -39
  245. data/lib/rigor/plugin/registry.rb +132 -205
  246. data/lib/rigor/plugin/services.rb +21 -33
  247. data/lib/rigor/plugin/source_rbs_synthesis_reporter.rb +11 -19
  248. data/lib/rigor/plugin/trust_policy.rb +24 -38
  249. data/lib/rigor/plugin/type_node_resolver.rb +15 -24
  250. data/lib/rigor/protection/diagnostic_oracle.rb +11 -13
  251. data/lib/rigor/protection/mutation_scanner.rb +27 -35
  252. data/lib/rigor/protection/mutator.rb +50 -70
  253. data/lib/rigor/protection/test_suite_oracle.rb +20 -27
  254. data/lib/rigor/rbs_extended/conformance_checker.rb +48 -68
  255. data/lib/rigor/rbs_extended/hkt_directives.rb +28 -54
  256. data/lib/rigor/rbs_extended/reporter.rb +24 -40
  257. data/lib/rigor/rbs_extended.rb +107 -197
  258. data/lib/rigor/reflection.rb +68 -86
  259. data/lib/rigor/scope/discovery_index.rb +14 -19
  260. data/lib/rigor/scope.rb +255 -310
  261. data/lib/rigor/sig_gen/classification.rb +6 -10
  262. data/lib/rigor/sig_gen/generator.rb +197 -323
  263. data/lib/rigor/sig_gen/layout_index.rb +12 -20
  264. data/lib/rigor/sig_gen/method_candidate.rb +12 -17
  265. data/lib/rigor/sig_gen/observation_collector.rb +38 -70
  266. data/lib/rigor/sig_gen/observed_call.rb +13 -23
  267. data/lib/rigor/sig_gen/path_mapper.rb +17 -29
  268. data/lib/rigor/sig_gen/renderer.rb +7 -13
  269. data/lib/rigor/sig_gen/type_elaborator.rb +15 -28
  270. data/lib/rigor/sig_gen/write_result.rb +8 -16
  271. data/lib/rigor/sig_gen/writer.rb +95 -174
  272. data/lib/rigor/sig_gen.rb +3 -6
  273. data/lib/rigor/signature_path_audit.rb +24 -30
  274. data/lib/rigor/source/constant_path.rb +10 -14
  275. data/lib/rigor/source/literals.rb +31 -45
  276. data/lib/rigor/source/node_locator.rb +9 -11
  277. data/lib/rigor/source/node_walker.rb +9 -13
  278. data/lib/rigor/source.rb +3 -4
  279. data/lib/rigor/testing.rb +16 -20
  280. data/lib/rigor/triage/catalogue.rb +38 -62
  281. data/lib/rigor/triage.rb +31 -52
  282. data/lib/rigor/trinary.rb +9 -13
  283. data/lib/rigor/type/acceptance_router.rb +4 -6
  284. data/lib/rigor/type/accepts_result.rb +10 -14
  285. data/lib/rigor/type/app.rb +19 -27
  286. data/lib/rigor/type/bot.rb +4 -6
  287. data/lib/rigor/type/bound_method.rb +10 -15
  288. data/lib/rigor/type/combinator.rb +165 -257
  289. data/lib/rigor/type/constant.rb +23 -34
  290. data/lib/rigor/type/data_class.rb +10 -15
  291. data/lib/rigor/type/data_instance.rb +14 -20
  292. data/lib/rigor/type/difference.rb +21 -32
  293. data/lib/rigor/type/dynamic.rb +3 -5
  294. data/lib/rigor/type/hash_shape.rb +32 -18
  295. data/lib/rigor/type/integer_range.rb +11 -16
  296. data/lib/rigor/type/intersection.rb +27 -42
  297. data/lib/rigor/type/nominal.rb +10 -15
  298. data/lib/rigor/type/plain_lattice.rb +9 -13
  299. data/lib/rigor/type/refined.rb +67 -114
  300. data/lib/rigor/type/singleton.rb +4 -6
  301. data/lib/rigor/type/struct_class.rb +11 -16
  302. data/lib/rigor/type/struct_instance.rb +15 -21
  303. data/lib/rigor/type/tuple.rb +14 -19
  304. data/lib/rigor/type/union.rb +30 -42
  305. data/lib/rigor/type_node/generic.rb +14 -26
  306. data/lib/rigor/type_node/identifier.rb +12 -19
  307. data/lib/rigor/type_node.rb +3 -12
  308. data/lib/rigor/value_semantics.rb +16 -21
  309. data/lib/rigor/version.rb +1 -1
  310. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/analyzer.rb +18 -30
  311. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_discoverer.rb +16 -29
  312. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/channel_index.rb +12 -23
  313. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb +22 -39
  314. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/analyzer.rb +26 -46
  315. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_discoverer.rb +51 -87
  316. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_index.rb +10 -17
  317. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer.rb +26 -39
  318. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +118 -176
  319. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_discoverer.rb +30 -51
  320. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/controller_index.rb +57 -92
  321. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack.rb +71 -108
  322. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb +13 -22
  323. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_discoverer.rb +15 -25
  324. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/job_index.rb +8 -13
  325. data/plugins/rigor-activejob/lib/rigor/plugin/activejob.rb +16 -24
  326. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/analyzer.rb +30 -47
  327. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +79 -129
  328. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_index.rb +36 -57
  329. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb +27 -41
  330. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_table.rb +16 -24
  331. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +148 -235
  332. data/plugins/rigor-activerecord/lib/rigor-activerecord.rb +3 -5
  333. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/analyzer.rb +8 -14
  334. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/attachment_discoverer.rb +9 -15
  335. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/attachment_index.rb +4 -7
  336. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb +23 -41
  337. data/plugins/rigor-activestorage/lib/rigor-activestorage.rb +3 -5
  338. data/plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext.rb +6 -10
  339. data/plugins/rigor-activesupport-core-ext/lib/rigor-activesupport-core-ext.rb +8 -11
  340. data/plugins/rigor-devise/lib/rigor/plugin/devise.rb +30 -45
  341. data/plugins/rigor-devise/lib/rigor-devise.rb +3 -5
  342. data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema/schema_scanner.rb +43 -69
  343. data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema.rb +26 -35
  344. data/plugins/rigor-dry-schema/lib/rigor-dry-schema.rb +3 -5
  345. data/plugins/rigor-dry-struct/lib/rigor/plugin/dry_struct.rb +30 -47
  346. data/plugins/rigor-dry-struct/lib/rigor-dry-struct.rb +3 -5
  347. data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types/alias_scanner.rb +67 -113
  348. data/plugins/rigor-dry-types/lib/rigor/plugin/dry_types.rb +29 -46
  349. data/plugins/rigor-dry-types/lib/rigor-dry-types.rb +3 -5
  350. data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation/contract_scanner.rb +13 -20
  351. data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation.rb +14 -23
  352. data/plugins/rigor-dry-validation/lib/rigor-dry-validation.rb +2 -3
  353. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/analyzer.rb +22 -37
  354. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_discoverer.rb +28 -46
  355. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_index.rb +13 -17
  356. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot.rb +30 -47
  357. data/plugins/rigor-graphql/lib/rigor/plugin/graphql/type_scanner.rb +52 -80
  358. data/plugins/rigor-graphql/lib/rigor/plugin/graphql.rb +21 -31
  359. data/plugins/rigor-graphql/lib/rigor-graphql.rb +3 -5
  360. data/plugins/rigor-hanami/lib/rigor/plugin/hanami/action_checker.rb +11 -17
  361. data/plugins/rigor-hanami/lib/rigor/plugin/hanami.rb +20 -34
  362. data/plugins/rigor-mangrove/lib/rigor/plugin/mangrove.rb +45 -75
  363. data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +22 -36
  364. data/plugins/rigor-minitest/lib/rigor/plugin/minitest.rb +22 -41
  365. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/analyzer.rb +17 -32
  366. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_discoverer.rb +6 -12
  367. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/policy_index.rb +4 -8
  368. data/plugins/rigor-pundit/lib/rigor/plugin/pundit.rb +17 -32
  369. data/plugins/rigor-rails/lib/rigor-rails.rb +11 -18
  370. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/analyzer.rb +58 -92
  371. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_index.rb +20 -34
  372. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/locale_loader.rb +20 -31
  373. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n.rb +49 -82
  374. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/analyzer.rb +55 -92
  375. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/devise_routes.rb +51 -90
  376. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/doorkeeper_routes.rb +17 -30
  377. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_discoverer.rb +38 -70
  378. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/helper_table.rb +42 -74
  379. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/routes_parser.rb +280 -497
  380. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes.rb +54 -89
  381. data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +32 -54
  382. data/plugins/rigor-rbs-inline/lib/rigor-rbs-inline.rb +8 -13
  383. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/analyzer.rb +9 -16
  384. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_scope_index.rb +24 -39
  385. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_type_resolver.rb +13 -22
  386. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/matcher_analyzer.rb +34 -56
  387. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/scope_walker.rb +22 -42
  388. data/plugins/rigor-rspec/lib/rigor/plugin/rspec.rb +43 -75
  389. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/have_http_status_analyzer.rb +27 -39
  390. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/http_status_codes.rb +14 -19
  391. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails.rb +20 -34
  392. data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers/analyzer.rb +28 -47
  393. data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers.rb +21 -37
  394. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/analyzer.rb +13 -22
  395. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_discoverer.rb +18 -31
  396. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/worker_index.rb +6 -10
  397. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq.rb +14 -29
  398. data/plugins/rigor-sinatra/lib/rigor/plugin/sinatra.rb +23 -41
  399. data/plugins/rigor-sinatra/lib/rigor-sinatra.rb +3 -5
  400. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/absurd_recognizer.rb +23 -38
  401. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/assertion_recognizer.rb +57 -96
  402. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog.rb +22 -35
  403. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog_walker.rb +41 -69
  404. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/method_signature.rb +6 -10
  405. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sig_parser.rb +24 -41
  406. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/sigil_detector.rb +29 -50
  407. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/type_translator.rb +55 -88
  408. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet.rb +159 -262
  409. data/plugins/rigor-statesman/lib/rigor/plugin/statesman.rb +21 -29
  410. data/plugins/rigor-statesman/lib/rigor-statesman.rb +3 -5
  411. data/plugins/rigor-typescript-utility-types/lib/rigor/plugin/typescript_utility_types.rb +23 -37
  412. data/plugins/rigor-typescript-utility-types/lib/rigor-typescript-utility-types.rb +4 -6
  413. data/sig/rigor/scope.rbs +6 -0
  414. metadata +2 -1
@@ -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
- # `Module` objects (Integer, Float, Set, Pathname, …) registered
10
- # at boot. Static; never changes during a `rigor check` run.
11
- # 2. **`Rigor::Environment::RbsLoader`** — RBS-side declarations
12
- # (instance / singleton methods, class hierarchy, constants).
13
- # Loaded on demand from the project's `sig/` directory + the
14
- # bundled stdlib RBS.
15
- # 3. **`Rigor::Scope` discovered facts** source-side discoveries
16
- # produced by `Rigor::Inference::ScopeIndexer` (user-defined
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
- # designed against (ADR-2, `docs/adr/2-extension-api.md`).
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
- # that read directly from `Rigor::Scope` or
25
- # `Rigor::Environment::RbsLoader` continue to work unchanged;
26
- # they migrate to the facade at their own pace. The facade
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
- # module name?
34
- # - {.class_ordering} `:equal` / `:subclass` / `:superclass` /
35
- # `:disjoint` / `:unknown` ordering between two class names.
36
- # - {.nominal_for_name} — `Rigor::Type::Nominal` for the class
37
- # name, joining registry + RBS lookups.
38
- # - {.singleton_for_name} — `Rigor::Type::Singleton` for the
39
- # class name's class object.
40
- # - {.constant_type_for} type of a constant (joins in-source
41
- # constants and RBS-side constants).
42
- # - {.instance_method_definition} / {.singleton_method_definition}
43
- # RBS-side `RBS::Definition::Method` for the method, or
44
- # `nil` when the method is not declared in RBS. Source-side
45
- # discovered methods are exposed through {.discovered_method?}
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
- # each fact) is explicitly out of scope for the v0.0.7 first pass;
53
- # v0.1.0's plugin API added it as a separate concern.
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
- # needs to know specifically whether RBS has a definition
68
- # for the class, independent of any source-discovered
69
- # `class Foo; end` declarations. The diagnostic-rule code
70
- # paths that walk RBS method tables to decide whether to
71
- # flag a missing method use this variant; otherwise the
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
- # latter is for call sites that don't carry a `Scope`
77
- # (most are bottom-half dispatcher code paths called with
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
- # nil when no source knows the class.
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
- # class object, or nil when no source knows the class.
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
- # constants (recorded by `ScopeIndexer`) and RBS-side
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
- # method, or nil when the class or method is not in RBS. The
118
- # source-side discovered-method facts are reachable through
119
- # {.discovered_method?}; a future slice will unify the two
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
- # (class-side) method, or nil.
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
- # (`RBS::Definition`), used by callers that walk the method
139
- # table or member list. Returns nil when the class is not in
140
- # RBS or when the loader cannot build a definition (e.g.
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
- # class (e.g. `[:A]` for `Array[A]`), or `[]` when the class
163
- # is non-generic / not in RBS. Used by the dispatcher when
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
- # `scope:` or the `environment:` kwarg, defaulting to the
174
- # empty scope's environment when neither is given. Public
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
- # class / module declaration for the given name. Does NOT
187
- # consult the RBS loader (use {.class_known?} for the union).
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
- # `def` for the given method on the given class with the
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
- # carries by a single reference. Holds the tables the index-time
7
- # pre-passes (`Inference::ScopeIndexer` per file, plus the cross-file
8
- # project pre-pass) populate and that no control-flow transition ever
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
- # through `#with(table_name: table)`. `Scope` exposes each table through
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
- # sees a seeding pass) points at — one allocation per process.
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
- # `[class_name, method_name, kind]` (the same `(class, method, kind)`
62
- # triple {Inference::ParameterInferenceCollector} records and that
63
- # `build_method_entry_scope` reconstructs from the lexical class path).
64
- # The value is a `{param_name(Symbol) => Rigor::Type}` map of the union
65
- # of resolved call-site argument types. Empty on every normal run; only
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