rigortype 0.4.1 → 0.4.3

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 (230) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/data/builtins/ruby_core/io.yml +1 -0
  4. data/data/builtins/ruby_core/proc.yml +4 -0
  5. data/data/builtins/ruby_core/random.yml +4 -0
  6. data/data/builtins/ruby_core/struct.yml +3 -0
  7. data/data/core_overlay/env.rbs +34 -0
  8. data/data/core_overlay/gc.rbs +50 -0
  9. data/data/core_overlay/hash.rbs +45 -0
  10. data/data/core_overlay/integer.rbs +31 -0
  11. data/data/core_overlay/io_buffer.rbs +27 -0
  12. data/data/core_overlay/kernel.rbs +40 -0
  13. data/data/core_overlay/match_data.rbs +28 -0
  14. data/data/core_overlay/module.rbs +51 -0
  15. data/data/core_overlay/object_space.rbs +29 -0
  16. data/data/core_overlay/proc.rbs +45 -0
  17. data/data/core_overlay/range.rbs +40 -0
  18. data/data/core_overlay/source_range.rbs +78 -0
  19. data/data/core_overlay/string.rbs +86 -0
  20. data/data/vendored_gem_sigs/prime/integer-extension.rbs +41 -0
  21. data/data/vendored_gem_sigs/prime/prime.rbs +372 -0
  22. data/docs/handbook/01-getting-started.md +3 -3
  23. data/docs/handbook/06-classes.md +3 -1
  24. data/docs/handbook/11-sig-gen.md +18 -5
  25. data/docs/handbook/appendix-liskov.md +5 -0
  26. data/docs/manual/02-cli-reference.md +19 -1
  27. data/docs/manual/03-configuration.md +7 -5
  28. data/docs/manual/04-diagnostics.md +2 -1
  29. data/docs/manual/05-inspecting-types.md +50 -0
  30. data/docs/manual/06-baseline.md +2 -0
  31. data/docs/manual/07-plugins.md +1 -1
  32. data/docs/manual/12-caching.md +18 -1
  33. data/docs/manual/14-rails-quickstart.md +2 -2
  34. data/docs/manual/18-removing-dead-code.md +41 -4
  35. data/docs/manual/plugins/README.md +6 -1
  36. data/docs/manual/plugins/rigor-activerecord.md +21 -0
  37. data/docs/manual/plugins/rigor-alba.md +60 -0
  38. data/docs/manual/plugins/rigor-minitest.md +22 -4
  39. data/docs/manual/plugins/rigor-typelizer.md +71 -0
  40. data/lib/rigor/analysis/check_rules/ivar_write_collector.rb +27 -3
  41. data/lib/rigor/analysis/check_rules/lexical_method_sites.rb +21 -92
  42. data/lib/rigor/analysis/check_rules/ruby_deprecations.rb +275 -0
  43. data/lib/rigor/analysis/check_rules/rule_ids.rb +11 -0
  44. data/lib/rigor/analysis/check_rules/source_arity.rb +21 -2
  45. data/lib/rigor/analysis/check_rules.rb +292 -59
  46. data/lib/rigor/analysis/dependency_recorder.rb +15 -0
  47. data/lib/rigor/analysis/dependency_source_inference/builder.rb +8 -1
  48. data/lib/rigor/analysis/dependency_source_inference/gem_resolver.rb +21 -0
  49. data/lib/rigor/analysis/dependency_source_inference/index.rb +36 -11
  50. data/lib/rigor/analysis/dependency_source_inference/walker.rb +196 -27
  51. data/lib/rigor/analysis/effects_cache_probe.rb +1 -1
  52. data/lib/rigor/analysis/erb_template_detector.rb +2 -1
  53. data/lib/rigor/analysis/incremental.rb +29 -9
  54. data/lib/rigor/analysis/incremental_run_slot/write_guard.rb +30 -5
  55. data/lib/rigor/analysis/incremental_run_slot.rb +6 -4
  56. data/lib/rigor/analysis/incremental_session.rb +103 -23
  57. data/lib/rigor/analysis/path_expansion.rb +62 -6
  58. data/lib/rigor/analysis/plugin_fact_fingerprint.rb +124 -37
  59. data/lib/rigor/analysis/reachability/graph.rb +241 -37
  60. data/lib/rigor/analysis/reachability/scan.rb +490 -77
  61. data/lib/rigor/analysis/reachability/scan_cache.rb +4 -2
  62. data/lib/rigor/analysis/rule_catalog.rb +43 -0
  63. data/lib/rigor/analysis/run_cache_key.rb +16 -1
  64. data/lib/rigor/analysis/run_cache_probe.rb +1 -1
  65. data/lib/rigor/analysis/run_stats.rb +28 -6
  66. data/lib/rigor/analysis/runner/diagnostic_aggregator.rb +113 -6
  67. data/lib/rigor/analysis/runner/pool_coordinator.rb +77 -19
  68. data/lib/rigor/analysis/runner/project_pre_passes.rb +21 -1
  69. data/lib/rigor/analysis/runner/run_snapshots.rb +6 -1
  70. data/lib/rigor/analysis/runner.rb +62 -13
  71. data/lib/rigor/analysis/worker_session.rb +8 -5
  72. data/lib/rigor/cache/engine_source.rb +21 -7
  73. data/lib/rigor/cache/incremental_snapshot.rb +55 -5
  74. data/lib/rigor/cli/annotate_command.rb +5 -0
  75. data/lib/rigor/cli/baseline_command.rb +7 -18
  76. data/lib/rigor/cli/check_command.rb +140 -40
  77. data/lib/rigor/cli/docs_command.rb +5 -4
  78. data/lib/rigor/cli/lens_command.rb +144 -0
  79. data/lib/rigor/cli/lsp_command.rb +5 -2
  80. data/lib/rigor/cli/skill_command.rb +3 -3
  81. data/lib/rigor/cli/skill_describe.rb +1 -1
  82. data/lib/rigor/cli/trace_command.rb +5 -0
  83. data/lib/rigor/cli/type_of_command.rb +6 -3
  84. data/lib/rigor/cli/unused_command.rb +166 -27
  85. data/lib/rigor/cli.rb +39 -5
  86. data/lib/rigor/configuration/severity_profile.rb +6 -0
  87. data/lib/rigor/configuration.rb +61 -2
  88. data/lib/rigor/environment/bundle_sig_discovery.rb +11 -7
  89. data/lib/rigor/environment/gated_signature_guard.rb +43 -0
  90. data/lib/rigor/environment/gated_signature_plan.rb +339 -0
  91. data/lib/rigor/environment/installed_gem_set.rb +38 -11
  92. data/lib/rigor/environment/lockfile_resolver.rb +37 -6
  93. data/lib/rigor/environment/missing_gem_constant_index.rb +22 -7
  94. data/lib/rigor/environment/rbs_coverage_report.rb +1 -1
  95. data/lib/rigor/environment/rbs_loader.rb +316 -14
  96. data/lib/rigor/environment/required_features.rb +208 -0
  97. data/lib/rigor/environment.rb +33 -8
  98. data/lib/rigor/inference/acceptance.rb +28 -3
  99. data/lib/rigor/inference/builtins/cruby_definers.rb +78 -0
  100. data/lib/rigor/inference/builtins/method_catalog.rb +3 -0
  101. data/lib/rigor/inference/captured_locals.rb +43 -3
  102. data/lib/rigor/inference/def_node_resolver.rb +23 -1
  103. data/lib/rigor/inference/expression_typer.rb +261 -29
  104. data/lib/rigor/inference/global_write_census.rb +7 -4
  105. data/lib/rigor/inference/guard_rebinding.rb +1 -1
  106. data/lib/rigor/inference/in_effect_refinements/proc_literals.rb +83 -0
  107. data/lib/rigor/inference/in_effect_refinements/refine_defs.rb +54 -0
  108. data/lib/rigor/inference/in_effect_refinements/scope_reads.rb +286 -0
  109. data/lib/rigor/inference/in_effect_refinements/walk.rb +276 -0
  110. data/lib/rigor/inference/in_effect_refinements.rb +256 -0
  111. data/lib/rigor/inference/key_presence_guard/scan.rb +281 -0
  112. data/lib/rigor/inference/key_presence_guard.rb +303 -0
  113. data/lib/rigor/inference/macro_block_self_type.rb +59 -12
  114. data/lib/rigor/inference/match_rebinding.rb +1 -1
  115. data/lib/rigor/inference/method_dispatcher/alias_strict_nominals.rb +36 -0
  116. data/lib/rigor/inference/method_dispatcher/argument_nodes.rb +25 -0
  117. data/lib/rigor/inference/method_dispatcher/arithmetic_sequence_elements.rb +73 -0
  118. data/lib/rigor/inference/method_dispatcher/imprecise_argument.rb +68 -0
  119. data/lib/rigor/inference/method_dispatcher/integer_step_block_params.rb +81 -0
  120. data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +6 -0
  121. data/lib/rigor/inference/method_dispatcher/kernel_dispatch.rb +3 -2
  122. data/lib/rigor/inference/method_dispatcher/keyword_arguments.rb +267 -0
  123. data/lib/rigor/inference/method_dispatcher/match_data_folding.rb +2 -2
  124. data/lib/rigor/inference/method_dispatcher/member_shape_projection.rb +3 -3
  125. data/lib/rigor/inference/method_dispatcher/method_folding.rb +2 -1
  126. data/lib/rigor/inference/method_dispatcher/optional_count.rb +63 -0
  127. data/lib/rigor/inference/method_dispatcher/overload_selector.rb +122 -105
  128. data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +247 -28
  129. data/lib/rigor/inference/method_dispatcher/splat_arity.rb +71 -0
  130. data/lib/rigor/inference/method_dispatcher/struct_folding.rb +4 -7
  131. data/lib/rigor/inference/method_dispatcher/struct_materialization.rb +8 -26
  132. data/lib/rigor/inference/method_dispatcher/unit_denominator_rational.rb +67 -0
  133. data/lib/rigor/inference/method_dispatcher.rb +96 -14
  134. data/lib/rigor/inference/module_function_state.rb +2 -1
  135. data/lib/rigor/inference/narrowing.rb +20 -6
  136. data/lib/rigor/inference/object_mixins.rb +180 -0
  137. data/lib/rigor/inference/project_patched_definedness_guard.rb +86 -0
  138. data/lib/rigor/inference/project_patched_methods.rb +12 -7
  139. data/lib/rigor/inference/project_patched_scanner.rb +108 -26
  140. data/lib/rigor/inference/refine_census.rb +239 -0
  141. data/lib/rigor/inference/refine_self.rb +317 -0
  142. data/lib/rigor/inference/refined_dispatch/class_object.rb +350 -0
  143. data/lib/rigor/inference/refined_dispatch/own_method.rb +475 -0
  144. data/lib/rigor/inference/refined_dispatch.rb +320 -0
  145. data/lib/rigor/inference/repeated_or_writes.rb +2 -0
  146. data/lib/rigor/inference/scope_indexer/mixin_accumulator.rb +13 -0
  147. data/lib/rigor/inference/scope_indexer.rb +827 -65
  148. data/lib/rigor/inference/statement_evaluator.rb +294 -51
  149. data/lib/rigor/inference/string_mutation.rb +9 -3
  150. data/lib/rigor/inference/synthetic_method_scanner.rb +2 -1
  151. data/lib/rigor/inference/untyped_rejoin.rb +75 -0
  152. data/lib/rigor/inference/version_guard.rb +19 -10
  153. data/lib/rigor/language_server/project_context.rb +87 -5
  154. data/lib/rigor/language_server/server.rb +18 -0
  155. data/lib/rigor/lens/anchor.rb +115 -0
  156. data/lib/rigor/lens/contract_reader.rb +118 -0
  157. data/lib/rigor/lens/document.rb +113 -0
  158. data/lib/rigor/lens/file_reader.rb +433 -0
  159. data/lib/rigor/lens/members.rb +153 -0
  160. data/lib/rigor/lens/parameters.rb +91 -0
  161. data/lib/rigor/lens/plugins.rb +40 -0
  162. data/lib/rigor/lens/run.rb +280 -0
  163. data/lib/rigor/lens/slot.rb +79 -0
  164. data/lib/rigor/lens.rb +40 -0
  165. data/lib/rigor/plugin/inflector.rb +1 -1
  166. data/lib/rigor/plugin/io_boundary.rb +42 -3
  167. data/lib/rigor/plugin/macro/block_as_method.rb +51 -8
  168. data/lib/rigor/project_environment.rb +48 -6
  169. data/lib/rigor/protection/mutation_cache.rb +3 -2
  170. data/lib/rigor/protection/mutator.rb +1 -1
  171. data/lib/rigor/reflection/constant_ancestors.rb +127 -11
  172. data/lib/rigor/reflection/constant_path.rb +13 -2
  173. data/lib/rigor/reflection.rb +40 -8
  174. data/lib/rigor/scope/discovery_index.rb +40 -1
  175. data/lib/rigor/scope/resolution_chain.rb +159 -11
  176. data/lib/rigor/scope.rb +211 -21
  177. data/lib/rigor/sig_gen/classification.rb +4 -1
  178. data/lib/rigor/sig_gen/generator.rb +100 -10
  179. data/lib/rigor/sig_gen/method_candidate.rb +2 -2
  180. data/lib/rigor/sig_gen/skip_reason_catalog.rb +12 -0
  181. data/lib/rigor/source/alias_names.rb +52 -0
  182. data/lib/rigor/source/literals.rb +3 -2
  183. data/lib/rigor/source/symbol_name.rb +20 -0
  184. data/lib/rigor/type/combinator.rb +34 -2
  185. data/lib/rigor/type/float_range.rb +4 -1
  186. data/lib/rigor/type/nominal.rb +6 -1
  187. data/lib/rigor/version.rb +1 -1
  188. data/plugins/rigor-ac-library-rb/lib/rigor/plugin/ac_library_rb.rb +28 -0
  189. data/plugins/rigor-ac-library-rb/lib/rigor-ac-library-rb.rb +3 -0
  190. data/plugins/rigor-ac-library-rb/sig/ac_library_rb/convolution.rbs +7 -0
  191. data/plugins/rigor-ac-library-rb/sig/ac_library_rb/data_structures.rbs +160 -0
  192. data/plugins/rigor-ac-library-rb/sig/ac_library_rb/graph.rbs +94 -0
  193. data/plugins/rigor-ac-library-rb/sig/ac_library_rb/math.rbs +42 -0
  194. data/plugins/rigor-ac-library-rb/sig/ac_library_rb/modint.rbs +71 -0
  195. data/plugins/rigor-ac-library-rb/sig/ac_library_rb/object.rbs +37 -0
  196. data/plugins/rigor-ac-library-rb/sig/ac_library_rb/segtree.rbs +83 -0
  197. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +2 -1
  198. data/plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers/serializer_discoverer.rb +29 -3
  199. data/plugins/rigor-active-model-serializers/lib/rigor/plugin/active_model_serializers.rb +5 -1
  200. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/association_roots.rb +100 -0
  201. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +94 -10
  202. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +43 -2
  203. data/plugins/rigor-activerecord/sig/active_record/relation.rbs +3 -1
  204. data/plugins/rigor-alba/lib/rigor/plugin/alba/resource_collector.rb +149 -0
  205. data/plugins/rigor-alba/lib/rigor/plugin/alba/resource_discoverer.rb +74 -0
  206. data/plugins/rigor-alba/lib/rigor/plugin/alba/resource_index.rb +104 -0
  207. data/plugins/rigor-alba/lib/rigor/plugin/alba.rb +85 -0
  208. data/plugins/rigor-alba/lib/rigor-alba.rb +3 -0
  209. data/plugins/rigor-alba/sig/alba.rbs +4 -0
  210. data/plugins/rigor-ffi/lib/rigor/plugin/ffi/analyzer.rb +2 -2
  211. data/plugins/rigor-ffi/lib/rigor/plugin/ffi/target_detector.rb +29 -12
  212. data/plugins/rigor-ffi/lib/rigor/plugin/ffi.rb +7 -6
  213. data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +130 -21
  214. data/plugins/rigor-minitest/lib/rigor/plugin/minitest.rb +6 -4
  215. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/analyzer.rb +4 -4
  216. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/analyzer.rb +1 -1
  217. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/routes_parser.rb +1 -1
  218. data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +31 -0
  219. data/plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_collector.rb +102 -0
  220. data/plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_discoverer.rb +87 -0
  221. data/plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_index.rb +76 -0
  222. data/plugins/rigor-typelizer/lib/rigor/plugin/typelizer.rb +73 -0
  223. data/plugins/rigor-typelizer/lib/rigor-typelizer.rb +3 -0
  224. data/sig/rigor/analysis/dependency_source_inference/index.rbs +1 -1
  225. data/sig/rigor/plugin/io_boundary.rbs +3 -0
  226. data/sig/rigor/scope.rbs +30 -4
  227. data/sig/rigor/source.rbs +4 -0
  228. data/sig/rigor.rbs +9 -4
  229. data/skills/rigor-project-init/references/02-configure.md +2 -2
  230. metadata +83 -1
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rigor/plugin"
4
+
5
+ require_relative "typelizer/serializer_index"
6
+ require_relative "typelizer/serializer_collector"
7
+ require_relative "typelizer/serializer_discoverer"
8
+
9
+ module Rigor
10
+ module Plugin
11
+ # rigor-typelizer — roots the serializer classes the typelizer gem
12
+ # (https://github.com/skryukov/typelizer) generates TypeScript interfaces from, so `rigor unused` does not
13
+ # list them as removal candidates.
14
+ #
15
+ # typelizer's `Typelizer.target_serializers` is `base_classes + base_classes.flat_map(&:descendants)`, where
16
+ # `base_classes` holds every named class that ran `include Typelizer::DSL` or `extend Typelizer::DSL`. Such
17
+ # a class may never be referenced from Ruby and still be consumed by the frontend through the generated
18
+ # type, so the plugin publishes it — and every project subclass of it — as a `:reachability_roots` fact.
19
+ #
20
+ # The plugin adds no diagnostic and no return type. It models nothing at runtime: `reject_class` (a lambda
21
+ # in typelizer's configuration that can drop a class from the output) is not evaluated, so a rejected class
22
+ # is still rooted. That costs a hidden candidate, never a false report.
23
+ class Typelizer < Rigor::Plugin::Base
24
+ manifest(
25
+ id: "typelizer",
26
+ target_gems: ["typelizer"],
27
+ version: "0.1.0",
28
+ description: "Roots the serializer classes typelizer generates TypeScript interfaces from, " \
29
+ "for `rigor unused`.",
30
+ config_schema: {
31
+ # Typelizer::Railtie sets exactly these two when `Typelizer.dirs` is empty.
32
+ "dirs" => { kind: :array, default: %w[app/resources app/serializers] }
33
+ },
34
+ produces: [:reachability_roots]
35
+ )
36
+
37
+ producer :serializer_index, watch: -> { watch_globs } do |_params|
38
+ SerializerDiscoverer.new(io_boundary: io_boundary, dirs: @dirs, project_paths: @project_paths).discover
39
+ end
40
+
41
+ def init(services)
42
+ @dirs = Array(config.fetch("dirs")).map(&:to_s)
43
+ @project_paths = Array(services.configuration.paths).map(&:to_s)
44
+ end
45
+
46
+ def prepare(services)
47
+ index = producer_value(:serializer_index)
48
+ return if index.nil?
49
+
50
+ roots = index.roots
51
+ return if roots.empty?
52
+
53
+ services.fact_store.publish(plugin_id: manifest.id, name: :reachability_roots, value: roots)
54
+ end
55
+
56
+ private
57
+
58
+ # Superclass resolution reads every file of the project's `paths:` (a shadowing `Admin::Base` may live
59
+ # outside `dirs`), so all of them are watched, not only `dirs`.
60
+ def watch_globs
61
+ (@dirs + @project_paths).filter_map do |entry|
62
+ if io_boundary.directory?(File.expand_path(entry))
63
+ [entry, "**/*.rb"]
64
+ elsif entry.end_with?(".rb") && io_boundary.file?(File.expand_path(entry))
65
+ [File.dirname(entry), File.basename(entry)]
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ Rigor::Plugin.register(Typelizer)
72
+ end
73
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rigor/plugin/typelizer"
@@ -2,7 +2,7 @@ module Rigor
2
2
  module Analysis
3
3
  module DependencySourceInference
4
4
  class Index
5
- def initialize: (?resolved_gems: untyped, ?unresolvable: untyped, ?method_catalog: untyped, ?budget_exceeded: untyped, ?class_to_gem: untyped, ?budget_overrun_strategy: untyped) -> void
5
+ def initialize: (?resolved_gems: untyped, ?unresolvable: untyped, ?method_catalog: untyped, ?budget_exceeded: untyped, ?class_to_gem: untyped, ?budget_overrun_strategy: untyped, ?gem_modes: untyped, ?refinements: untyped) -> void
6
6
  end
7
7
  end
8
8
  end
@@ -4,6 +4,9 @@ class Rigor::Plugin::IoBoundary
4
4
  def file?: (untyped) -> bool
5
5
  def directory?: (untyped) -> bool
6
6
  def list_directory: (untyped) -> Array[String]
7
+ # Records a `:names` glob row (membership only); a caller needing a match's content `read_file`s it. A `..`
8
+ # segment, a brace or a backslash in `pattern` raises `AccessDeniedError`.
9
+ def glob: (untyped root, untyped pattern) -> Array[String]
7
10
  # sig-gen gap: #1156 — the generator pins the empty-summary literal (`count: 0, first_path: nil`); the
8
11
  # record's fields are the running count and the first refused path, nil when nothing was refused.
9
12
  def refusal_summary: () -> { count: Integer, first_path: String?, nearest_root: String? }?
data/sig/rigor/scope.rbs CHANGED
@@ -29,6 +29,10 @@ module Rigor
29
29
  attr_reader opaque_block_self: bool
30
30
  # sig-gen gap: #1154 — sig-gen skips the reader (sig.skipped.untyped-return): an `attr_reader`
31
31
  # over an ivar assigned in `initialize` from a parameter, so inference reaches `untyped`.
32
+ # Issue #1759 — `:refinement` (REFINEMENT_BLOCK_SELF) directly in a `refine X do … end` block body.
33
+ attr_reader block_self_unknown: bool | :refinement
34
+ # sig-gen gap: #1154 — sig-gen skips the reader (sig.skipped.untyped-return): an `attr_reader`
35
+ # over an ivar assigned in `initialize` from a parameter, so inference reaches `untyped`.
32
36
  attr_reader singleton_class_body: bool
33
37
  attr_reader lexical_nesting: Array[String]?
34
38
  # Issue #1429 — a guard's narrowing of a constant reference, keyed by its spelling.
@@ -40,6 +44,9 @@ module Rigor
40
44
  # Issue #1446 — the classes a class guard narrowed a `bot` receiver to.
41
45
  # sig-gen gap: #1154 — a reader over an ivar `initialize` assigns from a parameter.
42
46
  attr_reader bot_guard_classes: Hash[[Symbol, Symbol | String], Array[String]]
47
+ # Issue #1667 — the modules a plugin-declared refined block runs under, in declaration order.
48
+ # sig-gen gap: #1154 — a reader over an ivar `initialize` assigns from a parameter.
49
+ attr_reader declared_refinements: Array[String]
43
50
 
44
51
  # ADR-53 Track A — the seed-time discovery tables live on the
45
52
  # DiscoveryIndex; Scope keeps per-table readers as delegates.
@@ -64,8 +71,11 @@ module Rigor
64
71
  # deferred-range table's row shape is hand-written.
65
72
  def discovered_deferred_ranges: () -> Hash[String, Array[[Integer, Integer, Symbol?, Symbol?, String?]]]
66
73
  # sig-gen gap: #1148 — sig-gen skips the endless-def reader (untyped return), so the refinement table's
67
- # shape is hand-written.
68
- def discovered_refinements: () -> Hash[String, Hash[Symbol, Array[String]]]
74
+ # shape is hand-written. A method key is a Symbol or the `"*"` wildcard (ADR-121 WD7).
75
+ def discovered_refinements: () -> Hash[String, Hash[Symbol | String, Array[String]]]
76
+ # authored: the list holds module names and the `InEffectRefinements::UNKNOWN` Symbol; sig-gen reads the delegated
77
+ # return through an unsigned class as untyped.
78
+ def in_effect_refinements: (untyped node, ?Array[String] declared) -> Array[String | Symbol]
69
79
  # sig-gen gap: #1148 — sig-gen skips the endless-def reader (untyped return), so the census shape is
70
80
  # hand-written.
71
81
  def discovered_global_write_census: () -> Set[Array[untyped]]
@@ -144,7 +154,7 @@ module Rigor
144
154
  # sig-gen gap: #1150 — `Data.define` members carry no type, as for every other row in this class.
145
155
  attr_reader discovered_deferred_ranges: Hash[String, Array[[Integer, Integer, Symbol?, Symbol?, String?]]]
146
156
  # sig-gen gap: #1150 — `Data.define` members carry no type, as for every other row in this class.
147
- attr_reader discovered_refinements: Hash[String, Hash[Symbol, Array[String]]]
157
+ attr_reader discovered_refinements: Hash[String, Hash[Symbol | String, Array[String]]]
148
158
  # sig-gen gap: #1150 — `Data.define` members carry no type, as for every other row in this class.
149
159
  attr_reader discovered_global_write_census: Set[Array[untyped]]
150
160
  attr_reader run_generation: Object?
@@ -157,6 +167,9 @@ module Rigor
157
167
  # `untyped`: the value is an `Inference::LastLine::SelfEvidence` (or nil), and that class carries no signature,
158
168
  # as `Inference::MatchRebinding::Frame` carries none for `match_frame`.
159
169
  attr_reader implicit_self_evidence: untyped
170
+ # sig-gen gap: #1150 — `Data.define` members carry no type; the value is an `Inference::InEffectRefinements`
171
+ # (or nil), which carries no signature either.
172
+ attr_reader in_effect_refinements: untyped
160
173
  # sig-gen gap: #1150 — `Data.define` members carry no type, as for every other row in this class.
161
174
  attr_reader possible_discovered_methods: Hash[String, Hash[Symbol, Symbol]]
162
175
  # sig-gen gap: #1150 — `Data.define` members carry no type, as for every other row in this class.
@@ -188,7 +201,7 @@ module Rigor
188
201
  # authored: ADR-119 WD1 sibling pairing; no inferred signature exists for it (#1150).
189
202
  def sibling_tables: () -> Hash[Symbol, untyped]
190
203
 
191
- def with: (?declared_types: Hash[untyped, Type::t], ?class_ivars: Hash[String, Hash[Symbol, Type::t]], ?class_cvars: Hash[String, Hash[Symbol, Type::t]], ?program_globals: Hash[Symbol, Type::t], ?program_global_seeds: Hash[Symbol, Type::t], ?discovered_classes: Hash[String, Type::Singleton], ?in_source_constants: Hash[String, Type::t], ?discovered_methods: Hash[String, Hash[Symbol, Symbol]], ?discovered_def_nodes: Hash[String, Hash[Symbol, untyped]], ?discovered_def_nestings: Hash[untyped, Array[String]], ?discovered_singleton_def_nodes: Hash[String, Hash[Symbol, untyped]], ?discovered_def_sources: Hash[String, Hash[Symbol, String]], ?discovered_singleton_def_sources: Hash[String, Hash[Symbol, String]], ?discovered_method_visibilities: Hash[String, Hash[Symbol, Symbol]], ?discovered_parameter_envelopes: Hash[String, Hash[untyped, untyped]], ?discovered_superclasses: Hash[String, String], ?discovered_includes: Hash[String, Array[String]], ?discovered_prepends: Hash[String, Array[String]], ?discovered_extends: Hash[String, Array[String]], ?discovered_class_sources: Hash[String, Set[String]], ?constant_sources: Hash[String, Set[String]], ?constant_writers: Hash[String, Array[String]], ?constant_shadowers: Hash[String, Array[String]], ?published_constant_names: Set[String], ?local_constant_names: Set[String], ?published_constant_alias_names: Set[String], ?published_constant_ivars: Hash[String, Set[Symbol]], ?data_member_layouts: Hash[String, Array[Symbol]], ?struct_member_layouts: Hash[String, { members: Array[Symbol], keyword_init: bool }], ?param_inferred_types: Hash[[String, Symbol, Symbol], Hash[Symbol, Type::t]], ?discovered_deferred_ranges: Hash[String, Array[[Integer, Integer, Symbol?, Symbol?, String?]]], ?discovered_refinements: Hash[String, Hash[Symbol, Array[String]]], ?discovered_global_write_census: Set[Array[untyped]], ?run_generation: Object?, ?patched_line_readers: Set[Symbol], ?clears_last_status: bool, ?defines_case_equality: bool, ?implicit_self_evidence: untyped, ?possible_discovered_methods: Hash[String, Hash[Symbol, Symbol]], ?possible_discovered_deferred_ranges: Hash[String, Array[[Integer, Integer, Symbol?, Symbol?, String?]]], ?contested_discovered_def_nodes: Set[Array[untyped]], ?contested_discovered_singleton_def_nodes: Set[Array[untyped]], ?contested_discovered_method_visibilities: Set[Array[untyped]], ?contested_discovered_parameter_envelopes: Set[Array[untyped]]) -> DiscoveryIndex
204
+ def with: (?declared_types: Hash[untyped, Type::t], ?class_ivars: Hash[String, Hash[Symbol, Type::t]], ?class_cvars: Hash[String, Hash[Symbol, Type::t]], ?program_globals: Hash[Symbol, Type::t], ?program_global_seeds: Hash[Symbol, Type::t], ?discovered_classes: Hash[String, Type::Singleton], ?in_source_constants: Hash[String, Type::t], ?discovered_methods: Hash[String, Hash[Symbol, Symbol]], ?discovered_def_nodes: Hash[String, Hash[Symbol, untyped]], ?discovered_def_nestings: Hash[untyped, Array[String]], ?discovered_singleton_def_nodes: Hash[String, Hash[Symbol, untyped]], ?discovered_def_sources: Hash[String, Hash[Symbol, String]], ?discovered_singleton_def_sources: Hash[String, Hash[Symbol, String]], ?discovered_method_visibilities: Hash[String, Hash[Symbol, Symbol]], ?discovered_parameter_envelopes: Hash[String, Hash[untyped, untyped]], ?discovered_superclasses: Hash[String, String], ?discovered_includes: Hash[String, Array[String]], ?discovered_prepends: Hash[String, Array[String]], ?discovered_extends: Hash[String, Array[String]], ?discovered_class_sources: Hash[String, Set[String]], ?constant_sources: Hash[String, Set[String]], ?constant_writers: Hash[String, Array[String]], ?constant_shadowers: Hash[String, Array[String]], ?published_constant_names: Set[String], ?local_constant_names: Set[String], ?published_constant_alias_names: Set[String], ?published_constant_ivars: Hash[String, Set[Symbol]], ?data_member_layouts: Hash[String, Array[Symbol]], ?struct_member_layouts: Hash[String, { members: Array[Symbol], keyword_init: bool }], ?param_inferred_types: Hash[[String, Symbol, Symbol], Hash[Symbol, Type::t]], ?discovered_deferred_ranges: Hash[String, Array[[Integer, Integer, Symbol?, Symbol?, String?]]], ?discovered_refinements: Hash[String, Hash[Symbol | String, Array[String]]], ?discovered_global_write_census: Set[Array[untyped]], ?run_generation: Object?, ?patched_line_readers: Set[Symbol], ?clears_last_status: bool, ?defines_case_equality: bool, ?implicit_self_evidence: untyped, ?in_effect_refinements: untyped, ?possible_discovered_methods: Hash[String, Hash[Symbol, Symbol]], ?possible_discovered_deferred_ranges: Hash[String, Array[[Integer, Integer, Symbol?, Symbol?, String?]]], ?contested_discovered_def_nodes: Set[Array[untyped]], ?contested_discovered_singleton_def_nodes: Set[Array[untyped]], ?contested_discovered_method_visibilities: Set[Array[untyped]], ?contested_discovered_parameter_envelopes: Set[Array[untyped]]) -> DiscoveryIndex
192
205
  end
193
206
 
194
207
  class IndexedKey
@@ -211,8 +224,15 @@ module Rigor
211
224
  def with_lexical_nesting: (Array[String]? chain) -> Scope
212
225
  def struct_fold_safe?: (String | Symbol name) -> bool
213
226
  def entering_opaque_block: () -> Scope
227
+ # sig-gen gap: #1148 — sig-gen skips the endless-def reader (sig.skipped.untyped-return); the row is hand-written.
228
+ def block_self_unknown?: () -> bool
229
+ REFINEMENT_BLOCK_SELF: :refinement
230
+ # sig-gen gap: #1148 — sig-gen skips the endless-def predicate (sig.skipped.untyped-return); the row is hand-written.
231
+ def refinement_block_self?: () -> bool
232
+ def with_block_self_unknown: (bool flag) -> Scope
214
233
  def opaque_block_self?: () -> bool
215
234
  def with_singleton_class_body: (bool) -> Scope
235
+ def with_declared_refinements: (Array[String] names) -> Scope
216
236
  # sig-gen gap: #1148 — sig-gen skips the endless-def reader (sig.skipped.untyped-return); the row is hand-written.
217
237
  def singleton_class_body?: () -> bool
218
238
  def with_discovery: (DiscoveryIndex index) -> Scope
@@ -227,6 +247,7 @@ module Rigor
227
247
  def optimistic_local_miss: (String | Symbol name) -> Object?
228
248
  def optimistic_ivar_miss: (String | Symbol name) -> Object?
229
249
  def with_local: (String | Symbol name, Type::t type) -> Scope
250
+ def with_rejoined_locals: (untyped) -> Rigor::Scope
230
251
  def with_ivar: (String | Symbol name, Type::t type) -> Scope
231
252
  def with_local_origin: (String | Symbol name, Symbol? cause) -> Scope
232
253
  def with_optimistic_local: (String | Symbol name, Symbol? cause, ?miss: Object?) -> Scope
@@ -279,6 +300,8 @@ module Rigor
279
300
  def inferred_param?: (String | Symbol name) -> bool
280
301
  def forget_match_globals: () -> Scope
281
302
  def untyped_match_globals: () -> Scope
303
+ # sig-gen gap: #1154 — the reader over the `@globals` ivar `initialize` assigns from a parameter reaches
304
+ # `untyped`, so the `bool` is hand-written.
282
305
  def match_globals_bound?: () -> bool
283
306
  def with_match_frame: (untyped body, ?untyped parameters) -> Scope
284
307
  # sig-gen gap: #1154 — the frame reader over an ivar assigned in `initialize` from a parameter reaches
@@ -337,6 +360,7 @@ module Rigor
337
360
  def singleton_extends_of: (String | Symbol class_name) -> Array[String]
338
361
  def indexed_narrowing: (Symbol receiver_kind, String | Symbol receiver_name, untyped key) -> Type::t?
339
362
  def with_indexed_narrowing: (Symbol receiver_kind, String | Symbol receiver_name, untyped key, Type::t type) -> Scope
363
+ def with_isolated_side_tables: () -> Scope
340
364
  def without_indexed_narrowing: (Symbol receiver_kind, String | Symbol receiver_name, untyped key) -> Scope
341
365
  def without_indexed_narrowings_for: (Symbol receiver_kind, String | Symbol receiver_name) -> Scope
342
366
  def method_chain_narrowing: (Symbol receiver_kind, String | Symbol receiver_name, String | Symbol method_name) -> Type::t?
@@ -345,6 +369,8 @@ module Rigor
345
369
  def without_method_chain_narrowings_for: (Symbol receiver_kind, String | Symbol receiver_name) -> Scope
346
370
  def with_fact: (Analysis::FactStore::Fact fact) -> Scope
347
371
  def with_self_type: (Type::t? type) -> Scope
372
+ def with_block_self_type: (Type::t? type, ?keeps_unknown: bool | :refinement) -> Scope
373
+ def block_self_narrowing_unknown?: (Prism::CallNode call_node) -> bool
348
374
  def facts_for: (?target: Analysis::FactStore::Target?, ?bucket: Symbol?) -> Array[Analysis::FactStore::Fact]
349
375
  def local_facts: (String | Symbol name, ?bucket: Symbol?) -> Array[Analysis::FactStore::Fact]
350
376
  def type_of: (untyped node, ?tracer: Inference::FallbackTracer?) -> Type::t
data/sig/rigor/source.rbs CHANGED
@@ -21,6 +21,10 @@ module Rigor
21
21
  def self?.symbol_arg: (untyped? call_node, Integer index) -> Symbol?
22
22
  end
23
23
 
24
+ module SymbolName
25
+ def self?.of: (String? text) -> Symbol?
26
+ end
27
+
24
28
  module NodeWalker
25
29
  def self?.each: (untyped root) { (untyped) -> void } -> nil
26
30
  | (untyped root) -> Enumerator[untyped, nil]
data/sig/rigor.rbs CHANGED
@@ -14,7 +14,9 @@ module Rigor
14
14
  def self.load: (?String? path) -> Configuration
15
15
  def self.discover: () -> String?
16
16
  def self.load_with_includes: (String path, ?visited: Set[String]) -> Hash[String, untyped]
17
- def initialize: (?Hash[String, untyped] data, ?bool effects_key_present) -> void
17
+ def initialize: (?Hash[String, untyped] data, ?bool effects_key_present, ?bool target_ruby_key_present) -> void
18
+ def target_ruby_explicit?: () -> bool
19
+ def stated_runtime_ruby: () -> String?
18
20
  def to_h: () -> Hash[String, untyped]
19
21
  # ADR-103 WD13 — the `effects:` block, nil when the key was absent. Presence is the opt-in.
20
22
  attr_reader effects: Hash[String, untyped]?
@@ -81,7 +83,6 @@ module Rigor
81
83
 
82
84
  class RunStats
83
85
  attr_reader wall_seconds: Float
84
- attr_reader peak_rss_bytes: Integer?
85
86
  attr_reader target_files: Integer
86
87
  attr_reader rbs_classes_total: Integer
87
88
  attr_reader rbs_classes_project_sig: Integer
@@ -91,21 +92,25 @@ module Rigor
91
92
  attr_reader rbs_attribution_available: bool
92
93
 
93
94
  CACHED_SENTINEL: String
95
+ CURRENT_PROCESS_PEAK_RSS: ^() -> Integer?
94
96
 
97
+ # authored: #1529 memoised lazy read; its type enters only through the deliberate `peak_rss_probe:` initialize parameter.
98
+ def peak_rss_bytes: () -> Integer?
95
99
  def self.peak_rss_bytes: () -> Integer?
96
100
  def self.partition_classes: (class_decl_paths: Hash[String, String], signature_paths: Array[untyped]) -> [Integer, Integer]
97
101
  def self.attribution_available?: (class_decl_paths: Hash[String, String]) -> bool
98
102
 
99
103
  def initialize: (
100
104
  wall_seconds: Float,
101
- peak_rss_bytes: Integer?,
102
105
  target_files: Integer,
103
106
  rbs_classes_total: Integer,
104
107
  rbs_classes_project_sig: Integer,
105
108
  rbs_classes_bundled: Integer,
106
109
  gem_walk_classes: Integer,
107
110
  gem_walk_gems: Integer,
108
- ?rbs_attribution_available: bool
111
+ ?rbs_attribution_available: bool,
112
+ ?peak_rss_bytes: Integer?,
113
+ ?peak_rss_probe: ^() -> Integer?
109
114
  ) -> void
110
115
  def format: (untyped out, ?prefix: String) -> void
111
116
  def to_h: () -> Hash[Symbol, untyped]
@@ -97,8 +97,8 @@ test_paths:
97
97
  - spec
98
98
 
99
99
  exclude:
100
- - vendor
101
- - tmp
100
+ - "vendor/**"
101
+ - "tmp/**"
102
102
 
103
103
  plugins:
104
104
  - rigor-actionpack
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rigortype
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rigor contributors
@@ -310,12 +310,25 @@ files:
310
310
  - data/core_overlay/csv.rbs
311
311
  - data/core_overlay/enumerable.rbs
312
312
  - data/core_overlay/enumerator.rbs
313
+ - data/core_overlay/env.rbs
314
+ - data/core_overlay/gc.rbs
315
+ - data/core_overlay/hash.rbs
313
316
  - data/core_overlay/hash_rbs3.rbs
317
+ - data/core_overlay/integer.rbs
318
+ - data/core_overlay/io_buffer.rbs
319
+ - data/core_overlay/kernel.rbs
320
+ - data/core_overlay/match_data.rbs
321
+ - data/core_overlay/module.rbs
314
322
  - data/core_overlay/numeric.rbs
323
+ - data/core_overlay/object_space.rbs
315
324
  - data/core_overlay/pathname.rbs
325
+ - data/core_overlay/proc.rbs
316
326
  - data/core_overlay/process.rbs
317
327
  - data/core_overlay/psych.rbs
328
+ - data/core_overlay/range.rbs
318
329
  - data/core_overlay/resolv.rbs
330
+ - data/core_overlay/source_range.rbs
331
+ - data/core_overlay/string.rbs
319
332
  - data/core_overlay/string_io.rbs
320
333
  - data/core_overlay/string_scanner.rbs
321
334
  - data/effects/core.yml
@@ -334,6 +347,8 @@ files:
334
347
  - data/vendored_gem_sigs/nokogiri/nokogiri.rbs
335
348
  - data/vendored_gem_sigs/nokogiri/nokogiri_html5.rbs
336
349
  - data/vendored_gem_sigs/pg/pg.rbs
350
+ - data/vendored_gem_sigs/prime/integer-extension.rbs
351
+ - data/vendored_gem_sigs/prime/prime.rbs
337
352
  - data/vendored_gem_sigs/prism/prism_supplement.rbs
338
353
  - data/vendored_gem_sigs/racc/racc.rbs
339
354
  - data/vendored_gem_sigs/redis/errors.rbs
@@ -398,6 +413,7 @@ files:
398
413
  - docs/manual/plugins/rigor-activerecord.md
399
414
  - docs/manual/plugins/rigor-activestorage.md
400
415
  - docs/manual/plugins/rigor-activesupport-core-ext.md
416
+ - docs/manual/plugins/rigor-alba.md
401
417
  - docs/manual/plugins/rigor-devise.md
402
418
  - docs/manual/plugins/rigor-dry-schema.md
403
419
  - docs/manual/plugins/rigor-dry-struct.md
@@ -421,6 +437,7 @@ files:
421
437
  - docs/manual/plugins/rigor-sinatra.md
422
438
  - docs/manual/plugins/rigor-sorbet.md
423
439
  - docs/manual/plugins/rigor-statesman.md
440
+ - docs/manual/plugins/rigor-typelizer.md
424
441
  - docs/manual/plugins/rigor-typescript-utility-types.md
425
442
  - exe/rigor
426
443
  - lib/rigor.rb
@@ -438,6 +455,7 @@ files:
438
455
  - lib/rigor/analysis/check_rules/main_pass_collector.rb
439
456
  - lib/rigor/analysis/check_rules/published_constant_guard.rb
440
457
  - lib/rigor/analysis/check_rules/return_in_ensure_collector.rb
458
+ - lib/rigor/analysis/check_rules/ruby_deprecations.rb
441
459
  - lib/rigor/analysis/check_rules/rule_ids.rb
442
460
  - lib/rigor/analysis/check_rules/rule_walk.rb
443
461
  - lib/rigor/analysis/check_rules/self_closedness_scanner.rb
@@ -546,6 +564,7 @@ files:
546
564
  - lib/rigor/cli/explain_command.rb
547
565
  - lib/rigor/cli/fused_protection_renderer.rb
548
566
  - lib/rigor/cli/fused_protection_report.rb
567
+ - lib/rigor/cli/lens_command.rb
549
568
  - lib/rigor/cli/lsp_command.rb
550
569
  - lib/rigor/cli/mcp_command.rb
551
570
  - lib/rigor/cli/measurement_integrity_warning.rb
@@ -632,6 +651,8 @@ files:
632
651
  - lib/rigor/environment/constant_type_cache_holder.rb
633
652
  - lib/rigor/environment/default_libraries.rb
634
653
  - lib/rigor/environment/failure_slot.rb
654
+ - lib/rigor/environment/gated_signature_guard.rb
655
+ - lib/rigor/environment/gated_signature_plan.rb
635
656
  - lib/rigor/environment/hkt_registry_holder.rb
636
657
  - lib/rigor/environment/installed_gem_set.rb
637
658
  - lib/rigor/environment/lockfile_resolver.rb
@@ -644,6 +665,7 @@ files:
644
665
  - lib/rigor/environment/rbs_loader.rb
645
666
  - lib/rigor/environment/reflection.rb
646
667
  - lib/rigor/environment/reporters.rb
668
+ - lib/rigor/environment/required_features.rb
647
669
  - lib/rigor/environment/source_rbs_synthesis.rb
648
670
  - lib/rigor/flow_contribution.rb
649
671
  - lib/rigor/flow_contribution/conflict.rb
@@ -663,6 +685,7 @@ files:
663
685
  - lib/rigor/inference/builtins/array_catalog.rb
664
686
  - lib/rigor/inference/builtins/comparable_catalog.rb
665
687
  - lib/rigor/inference/builtins/complex_catalog.rb
688
+ - lib/rigor/inference/builtins/cruby_definers.rb
666
689
  - lib/rigor/inference/builtins/date_catalog.rb
667
690
  - lib/rigor/inference/builtins/encoding_catalog.rb
668
691
  - lib/rigor/inference/builtins/enumerable_catalog.rb
@@ -712,9 +735,16 @@ files:
712
735
  - lib/rigor/inference/hkt_reducer.rb
713
736
  - lib/rigor/inference/hkt_registry.rb
714
737
  - lib/rigor/inference/hkt_sugar_translator.rb
738
+ - lib/rigor/inference/in_effect_refinements.rb
739
+ - lib/rigor/inference/in_effect_refinements/proc_literals.rb
740
+ - lib/rigor/inference/in_effect_refinements/refine_defs.rb
741
+ - lib/rigor/inference/in_effect_refinements/scope_reads.rb
742
+ - lib/rigor/inference/in_effect_refinements/walk.rb
715
743
  - lib/rigor/inference/index_write_widening.rb
716
744
  - lib/rigor/inference/indexed_narrowing.rb
717
745
  - lib/rigor/inference/jump_targets.rb
746
+ - lib/rigor/inference/key_presence_guard.rb
747
+ - lib/rigor/inference/key_presence_guard/scan.rb
718
748
  - lib/rigor/inference/last_line.rb
719
749
  - lib/rigor/inference/last_line/implicit_self.rb
720
750
  - lib/rigor/inference/last_line/self_evidence.rb
@@ -727,6 +757,8 @@ files:
727
757
  - lib/rigor/inference/match_rebinding/self_calls.rb
728
758
  - lib/rigor/inference/method_dispatcher.rb
729
759
  - lib/rigor/inference/method_dispatcher/alias_strict_nominals.rb
760
+ - lib/rigor/inference/method_dispatcher/argument_nodes.rb
761
+ - lib/rigor/inference/method_dispatcher/arithmetic_sequence_elements.rb
730
762
  - lib/rigor/inference/method_dispatcher/array_to_h_folding.rb
731
763
  - lib/rigor/inference/method_dispatcher/block_folding.rb
732
764
  - lib/rigor/inference/method_dispatcher/call_context.rb
@@ -736,14 +768,18 @@ files:
736
768
  - lib/rigor/inference/method_dispatcher/facet_distribution.rb
737
769
  - lib/rigor/inference/method_dispatcher/file_folding.rb
738
770
  - lib/rigor/inference/method_dispatcher/hash_transform_keys_folding.rb
771
+ - lib/rigor/inference/method_dispatcher/imprecise_argument.rb
772
+ - lib/rigor/inference/method_dispatcher/integer_step_block_params.rb
739
773
  - lib/rigor/inference/method_dispatcher/iterator_dispatch.rb
740
774
  - lib/rigor/inference/method_dispatcher/json_folding.rb
741
775
  - lib/rigor/inference/method_dispatcher/kernel_dispatch.rb
776
+ - lib/rigor/inference/method_dispatcher/keyword_arguments.rb
742
777
  - lib/rigor/inference/method_dispatcher/literal_string_folding.rb
743
778
  - lib/rigor/inference/method_dispatcher/match_data_folding.rb
744
779
  - lib/rigor/inference/method_dispatcher/math_folding.rb
745
780
  - lib/rigor/inference/method_dispatcher/member_shape_projection.rb
746
781
  - lib/rigor/inference/method_dispatcher/method_folding.rb
782
+ - lib/rigor/inference/method_dispatcher/optional_count.rb
747
783
  - lib/rigor/inference/method_dispatcher/overload_selector.rb
748
784
  - lib/rigor/inference/method_dispatcher/process_folding.rb
749
785
  - lib/rigor/inference/method_dispatcher/proven_overload.rb
@@ -758,9 +794,11 @@ files:
758
794
  - lib/rigor/inference/method_dispatcher/shellwords_folding.rb
759
795
  - lib/rigor/inference/method_dispatcher/singleton_folding.rb
760
796
  - lib/rigor/inference/method_dispatcher/singleton_mixin_dispatch.rb
797
+ - lib/rigor/inference/method_dispatcher/splat_arity.rb
761
798
  - lib/rigor/inference/method_dispatcher/struct_folding.rb
762
799
  - lib/rigor/inference/method_dispatcher/struct_materialization.rb
763
800
  - lib/rigor/inference/method_dispatcher/time_folding.rb
801
+ - lib/rigor/inference/method_dispatcher/unit_denominator_rational.rb
764
802
  - lib/rigor/inference/method_dispatcher/universal_object_dispatch.rb
765
803
  - lib/rigor/inference/method_dispatcher/uri_folding.rb
766
804
  - lib/rigor/inference/method_parameter_binder.rb
@@ -769,6 +807,7 @@ files:
769
807
  - lib/rigor/inference/mutation_rejoin.rb
770
808
  - lib/rigor/inference/mutation_widening.rb
771
809
  - lib/rigor/inference/narrowing.rb
810
+ - lib/rigor/inference/object_mixins.rb
772
811
  - lib/rigor/inference/operand_effects.rb
773
812
  - lib/rigor/inference/operand_walk.rb
774
813
  - lib/rigor/inference/optimistic_origin.rb
@@ -777,6 +816,7 @@ files:
777
816
  - lib/rigor/inference/pre_eval_constants.rb
778
817
  - lib/rigor/inference/precision_scanner.rb
779
818
  - lib/rigor/inference/project_method_ownership.rb
819
+ - lib/rigor/inference/project_patched_definedness_guard.rb
780
820
  - lib/rigor/inference/project_patched_methods.rb
781
821
  - lib/rigor/inference/project_patched_scanner.rb
782
822
  - lib/rigor/inference/protection_scanner.rb
@@ -784,6 +824,11 @@ files:
784
824
  - lib/rigor/inference/rbs_type_translator.rb
785
825
  - lib/rigor/inference/receiver_alias.rb
786
826
  - lib/rigor/inference/receiver_blind_block.rb
827
+ - lib/rigor/inference/refine_census.rb
828
+ - lib/rigor/inference/refine_self.rb
829
+ - lib/rigor/inference/refined_dispatch.rb
830
+ - lib/rigor/inference/refined_dispatch/class_object.rb
831
+ - lib/rigor/inference/refined_dispatch/own_method.rb
787
832
  - lib/rigor/inference/refinement_mutation.rb
788
833
  - lib/rigor/inference/repeated_or_writes.rb
789
834
  - lib/rigor/inference/return_barrier.rb
@@ -807,6 +852,7 @@ files:
807
852
  - lib/rigor/inference/synthetic_method_scanner.rb
808
853
  - lib/rigor/inference/unknown_store_widening.rb
809
854
  - lib/rigor/inference/unthreaded_rebinds.rb
855
+ - lib/rigor/inference/untyped_rejoin.rb
810
856
  - lib/rigor/inference/version_guard.rb
811
857
  - lib/rigor/inference/void_origin.rb
812
858
  - lib/rigor/inference/void_tail_summary.rb
@@ -829,6 +875,16 @@ files:
829
875
  - lib/rigor/language_server/signature_help_provider.rb
830
876
  - lib/rigor/language_server/synchronized_writer.rb
831
877
  - lib/rigor/language_server/uri.rb
878
+ - lib/rigor/lens.rb
879
+ - lib/rigor/lens/anchor.rb
880
+ - lib/rigor/lens/contract_reader.rb
881
+ - lib/rigor/lens/document.rb
882
+ - lib/rigor/lens/file_reader.rb
883
+ - lib/rigor/lens/members.rb
884
+ - lib/rigor/lens/parameters.rb
885
+ - lib/rigor/lens/plugins.rb
886
+ - lib/rigor/lens/run.rb
887
+ - lib/rigor/lens/slot.rb
832
888
  - lib/rigor/mcp.rb
833
889
  - lib/rigor/mcp/loop.rb
834
890
  - lib/rigor/mcp/server.rb
@@ -914,12 +970,14 @@ files:
914
970
  - lib/rigor/sig_gen/writer.rb
915
971
  - lib/rigor/signature_path_audit.rb
916
972
  - lib/rigor/source.rb
973
+ - lib/rigor/source/alias_names.rb
917
974
  - lib/rigor/source/constant_path.rb
918
975
  - lib/rigor/source/literals.rb
919
976
  - lib/rigor/source/node_children.rb
920
977
  - lib/rigor/source/node_locator.rb
921
978
  - lib/rigor/source/node_walker.rb
922
979
  - lib/rigor/source/parameter_envelope.rb
980
+ - lib/rigor/source/symbol_name.rb
923
981
  - lib/rigor/testing.rb
924
982
  - lib/rigor/triage.rb
925
983
  - lib/rigor/triage/catalogue.rb
@@ -967,6 +1025,15 @@ files:
967
1025
  - lib/rigor/value_semantics.rb
968
1026
  - lib/rigor/version.rb
969
1027
  - lib/rigortype.rb
1028
+ - plugins/rigor-ac-library-rb/lib/rigor-ac-library-rb.rb
1029
+ - plugins/rigor-ac-library-rb/lib/rigor/plugin/ac_library_rb.rb
1030
+ - plugins/rigor-ac-library-rb/sig/ac_library_rb/convolution.rbs
1031
+ - plugins/rigor-ac-library-rb/sig/ac_library_rb/data_structures.rbs
1032
+ - plugins/rigor-ac-library-rb/sig/ac_library_rb/graph.rbs
1033
+ - plugins/rigor-ac-library-rb/sig/ac_library_rb/math.rbs
1034
+ - plugins/rigor-ac-library-rb/sig/ac_library_rb/modint.rbs
1035
+ - plugins/rigor-ac-library-rb/sig/ac_library_rb/object.rbs
1036
+ - plugins/rigor-ac-library-rb/sig/ac_library_rb/segtree.rbs
970
1037
  - plugins/rigor-actioncable/lib/rigor-actioncable.rb
971
1038
  - plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb
972
1039
  - plugins/rigor-actioncable/lib/rigor/plugin/actioncable/analyzer.rb
@@ -1007,6 +1074,7 @@ files:
1007
1074
  - plugins/rigor-activerecord/lib/rigor-activerecord.rb
1008
1075
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb
1009
1076
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/analyzer.rb
1077
+ - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/association_roots.rb
1010
1078
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/effects.rb
1011
1079
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb
1012
1080
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_index.rb
@@ -1025,6 +1093,12 @@ files:
1025
1093
  - plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext.rb
1026
1094
  - plugins/rigor-activesupport-core-ext/lib/rigor/plugin/activesupport_core_ext/effects.rb
1027
1095
  - plugins/rigor-activesupport-core-ext/sig/active_support/core_ext.rbs
1096
+ - plugins/rigor-alba/lib/rigor-alba.rb
1097
+ - plugins/rigor-alba/lib/rigor/plugin/alba.rb
1098
+ - plugins/rigor-alba/lib/rigor/plugin/alba/resource_collector.rb
1099
+ - plugins/rigor-alba/lib/rigor/plugin/alba/resource_discoverer.rb
1100
+ - plugins/rigor-alba/lib/rigor/plugin/alba/resource_index.rb
1101
+ - plugins/rigor-alba/sig/alba.rbs
1028
1102
  - plugins/rigor-devise/lib/rigor-devise.rb
1029
1103
  - plugins/rigor-devise/lib/rigor/plugin/devise.rb
1030
1104
  - plugins/rigor-dry-monads/lib/rigor-dry-monads.rb
@@ -1150,6 +1224,11 @@ files:
1150
1224
  - plugins/rigor-sorbet/sig/sorbet.rbs
1151
1225
  - plugins/rigor-statesman/lib/rigor-statesman.rb
1152
1226
  - plugins/rigor-statesman/lib/rigor/plugin/statesman.rb
1227
+ - plugins/rigor-typelizer/lib/rigor-typelizer.rb
1228
+ - plugins/rigor-typelizer/lib/rigor/plugin/typelizer.rb
1229
+ - plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_collector.rb
1230
+ - plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_discoverer.rb
1231
+ - plugins/rigor-typelizer/lib/rigor/plugin/typelizer/serializer_index.rb
1153
1232
  - plugins/rigor-typescript-utility-types/lib/rigor-typescript-utility-types.rb
1154
1233
  - plugins/rigor-typescript-utility-types/lib/rigor/plugin/typescript_utility_types.rb
1155
1234
  - sig/prism_node_children.rbs
@@ -1267,6 +1346,7 @@ post_install_message: |
1267
1346
  rdoc_options: []
1268
1347
  require_paths:
1269
1348
  - lib
1349
+ - plugins/rigor-ac-library-rb/lib
1270
1350
  - plugins/rigor-actioncable/lib
1271
1351
  - plugins/rigor-actionmailer/lib
1272
1352
  - plugins/rigor-actionpack/lib
@@ -1275,6 +1355,7 @@ require_paths:
1275
1355
  - plugins/rigor-activerecord/lib
1276
1356
  - plugins/rigor-activestorage/lib
1277
1357
  - plugins/rigor-activesupport-core-ext/lib
1358
+ - plugins/rigor-alba/lib
1278
1359
  - plugins/rigor-devise/lib
1279
1360
  - plugins/rigor-dry-monads/lib
1280
1361
  - plugins/rigor-dry-schema/lib
@@ -1305,6 +1386,7 @@ require_paths:
1305
1386
  - plugins/rigor-sinatra/lib
1306
1387
  - plugins/rigor-sorbet/lib
1307
1388
  - plugins/rigor-statesman/lib
1389
+ - plugins/rigor-typelizer/lib
1308
1390
  - plugins/rigor-typescript-utility-types/lib
1309
1391
  required_ruby_version: !ruby/object:Gem::Requirement
1310
1392
  requirements: