rigortype 0.1.15 → 0.1.17

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 (220) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/exe/rigor +19 -0
  4. data/lib/rigor/analysis/check_rules/self_closedness_scanner.rb +100 -0
  5. data/lib/rigor/analysis/check_rules/unreachable_clause_collector.rb +209 -0
  6. data/lib/rigor/analysis/check_rules.rb +174 -71
  7. data/lib/rigor/analysis/dependency_recorder.rb +122 -0
  8. data/lib/rigor/analysis/diagnostic.rb +58 -0
  9. data/lib/rigor/analysis/incremental.rb +162 -0
  10. data/lib/rigor/analysis/incremental_session.rb +337 -0
  11. data/lib/rigor/analysis/rule_catalog.rb +48 -0
  12. data/lib/rigor/analysis/runner.rb +485 -29
  13. data/lib/rigor/analysis/self_call_resolution_recorder.rb +121 -0
  14. data/lib/rigor/analysis/worker_session.rb +3 -2
  15. data/lib/rigor/builtins/static_return_refinements.rb +7 -1
  16. data/lib/rigor/cache/descriptor.rb +56 -51
  17. data/lib/rigor/cache/incremental_snapshot.rb +147 -0
  18. data/lib/rigor/cache/rbs_cache_producer.rb +30 -0
  19. data/lib/rigor/cache/rbs_class_ancestor_table.rb +2 -8
  20. data/lib/rigor/cache/rbs_class_type_param_names.rb +2 -8
  21. data/lib/rigor/cache/rbs_constant_table.rb +2 -8
  22. data/lib/rigor/cache/rbs_environment.rb +2 -8
  23. data/lib/rigor/cache/rbs_instance_definitions.rb +3 -16
  24. data/lib/rigor/cache/rbs_known_class_names.rb +2 -8
  25. data/lib/rigor/cache/store.rb +99 -1
  26. data/lib/rigor/cli/annotate_command.rb +2 -7
  27. data/lib/rigor/cli/baseline_command.rb +2 -7
  28. data/lib/rigor/cli/command.rb +47 -0
  29. data/lib/rigor/cli/coverage_command.rb +3 -23
  30. data/lib/rigor/cli/coverage_renderer.rb +3 -8
  31. data/lib/rigor/cli/diff_command.rb +3 -7
  32. data/lib/rigor/cli/explain_command.rb +2 -7
  33. data/lib/rigor/cli/lsp_command.rb +3 -7
  34. data/lib/rigor/cli/mcp_command.rb +3 -7
  35. data/lib/rigor/cli/options.rb +57 -0
  36. data/lib/rigor/cli/plugin_command.rb +3 -7
  37. data/lib/rigor/cli/plugins_command.rb +52 -10
  38. data/lib/rigor/cli/plugins_renderer.rb +86 -1
  39. data/lib/rigor/cli/renderable.rb +26 -0
  40. data/lib/rigor/cli/sig_gen_command.rb +2 -7
  41. data/lib/rigor/cli/skill_command.rb +3 -7
  42. data/lib/rigor/cli/triage_command.rb +2 -7
  43. data/lib/rigor/cli/type_of_command.rb +5 -38
  44. data/lib/rigor/cli/type_of_renderer.rb +4 -9
  45. data/lib/rigor/cli/type_scan_command.rb +3 -23
  46. data/lib/rigor/cli/type_scan_renderer.rb +4 -9
  47. data/lib/rigor/cli.rb +260 -48
  48. data/lib/rigor/configuration/dependencies.rb +18 -1
  49. data/lib/rigor/configuration/severity_profile.rb +22 -3
  50. data/lib/rigor/configuration.rb +13 -3
  51. data/lib/rigor/environment/rbs_loader.rb +335 -4
  52. data/lib/rigor/environment.rb +8 -2
  53. data/lib/rigor/inference/block_parameter_binder.rb +1 -2
  54. data/lib/rigor/inference/budget_trace.rb +137 -0
  55. data/lib/rigor/inference/builtins/array_catalog.rb +2 -5
  56. data/lib/rigor/inference/builtins/comparable_catalog.rb +2 -5
  57. data/lib/rigor/inference/builtins/complex_catalog.rb +2 -5
  58. data/lib/rigor/inference/builtins/date_catalog.rb +2 -5
  59. data/lib/rigor/inference/builtins/encoding_catalog.rb +2 -5
  60. data/lib/rigor/inference/builtins/enumerable_catalog.rb +2 -5
  61. data/lib/rigor/inference/builtins/exception_catalog.rb +2 -5
  62. data/lib/rigor/inference/builtins/hash_catalog.rb +2 -5
  63. data/lib/rigor/inference/builtins/method_catalog.rb +15 -0
  64. data/lib/rigor/inference/builtins/numeric_catalog.rb +21 -93
  65. data/lib/rigor/inference/builtins/pathname_catalog.rb +2 -5
  66. data/lib/rigor/inference/builtins/proc_catalog.rb +2 -5
  67. data/lib/rigor/inference/builtins/random_catalog.rb +2 -5
  68. data/lib/rigor/inference/builtins/range_catalog.rb +2 -5
  69. data/lib/rigor/inference/builtins/rational_catalog.rb +2 -5
  70. data/lib/rigor/inference/builtins/re_catalog.rb +2 -5
  71. data/lib/rigor/inference/builtins/set_catalog.rb +2 -5
  72. data/lib/rigor/inference/builtins/string_catalog.rb +2 -5
  73. data/lib/rigor/inference/builtins/struct_catalog.rb +2 -5
  74. data/lib/rigor/inference/builtins/time_catalog.rb +2 -5
  75. data/lib/rigor/inference/expression_typer.rb +149 -22
  76. data/lib/rigor/inference/hkt_reducer.rb +2 -0
  77. data/lib/rigor/inference/method_dispatcher/block_folding.rb +5 -1
  78. data/lib/rigor/inference/method_dispatcher/call_context.rb +65 -0
  79. data/lib/rigor/inference/method_dispatcher/cgi_folding.rb +11 -10
  80. data/lib/rigor/inference/method_dispatcher/constant_folding.rb +12 -6
  81. data/lib/rigor/inference/method_dispatcher/data_folding.rb +246 -0
  82. data/lib/rigor/inference/method_dispatcher/file_folding.rb +6 -2
  83. data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +6 -2
  84. data/lib/rigor/inference/method_dispatcher/kernel_dispatch.rb +4 -1
  85. data/lib/rigor/inference/method_dispatcher/literal_string_folding.rb +4 -1
  86. data/lib/rigor/inference/method_dispatcher/math_folding.rb +6 -6
  87. data/lib/rigor/inference/method_dispatcher/method_folding.rb +12 -7
  88. data/lib/rigor/inference/method_dispatcher/overload_selector.rb +23 -6
  89. data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +100 -23
  90. data/lib/rigor/inference/method_dispatcher/regexp_folding.rb +9 -9
  91. data/lib/rigor/inference/method_dispatcher/set_folding.rb +6 -6
  92. data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +120 -9
  93. data/lib/rigor/inference/method_dispatcher/shellwords_folding.rb +12 -12
  94. data/lib/rigor/inference/method_dispatcher/singleton_folding.rb +49 -0
  95. data/lib/rigor/inference/method_dispatcher/time_folding.rb +6 -6
  96. data/lib/rigor/inference/method_dispatcher/uri_folding.rb +9 -9
  97. data/lib/rigor/inference/method_dispatcher.rb +147 -60
  98. data/lib/rigor/inference/narrowing.rb +202 -5
  99. data/lib/rigor/inference/precision_scanner.rb +60 -1
  100. data/lib/rigor/inference/scope_indexer.rb +257 -11
  101. data/lib/rigor/inference/statement_evaluator.rb +110 -26
  102. data/lib/rigor/inference/synthetic_method_index.rb +23 -4
  103. data/lib/rigor/inference/synthetic_method_scanner.rb +148 -14
  104. data/lib/rigor/language_server/buffer_resolution.rb +33 -0
  105. data/lib/rigor/language_server/completion_provider.rb +4 -4
  106. data/lib/rigor/language_server/document_symbol_provider.rb +4 -4
  107. data/lib/rigor/language_server/folding_range_provider.rb +4 -4
  108. data/lib/rigor/language_server/hover_provider.rb +4 -4
  109. data/lib/rigor/language_server/selection_range_provider.rb +4 -4
  110. data/lib/rigor/language_server/signature_help_provider.rb +4 -4
  111. data/lib/rigor/plugin/additional_initializer.rb +108 -0
  112. data/lib/rigor/plugin/base.rb +337 -2
  113. data/lib/rigor/plugin/box.rb +64 -0
  114. data/lib/rigor/plugin/inflector.rb +121 -0
  115. data/lib/rigor/plugin/isolation.rb +191 -0
  116. data/lib/rigor/plugin/macro/nested_class_template.rb +140 -0
  117. data/lib/rigor/plugin/macro.rb +1 -0
  118. data/lib/rigor/plugin/manifest.rb +120 -23
  119. data/lib/rigor/plugin/node_context.rb +62 -0
  120. data/lib/rigor/plugin/registry.rb +49 -1
  121. data/lib/rigor/plugin.rb +3 -0
  122. data/lib/rigor/rbs_extended/conformance_checker.rb +208 -0
  123. data/lib/rigor/rbs_extended.rb +39 -0
  124. data/lib/rigor/scope.rb +123 -9
  125. data/lib/rigor/sig_gen/generator.rb +2 -3
  126. data/lib/rigor/sig_gen/observation_collector.rb +2 -2
  127. data/lib/rigor/source/literals.rb +118 -0
  128. data/lib/rigor/source/node_walker.rb +26 -0
  129. data/lib/rigor/source.rb +1 -0
  130. data/lib/rigor/type/acceptance_router.rb +19 -0
  131. data/lib/rigor/type/accepts_result.rb +3 -10
  132. data/lib/rigor/type/app.rb +3 -7
  133. data/lib/rigor/type/bot.rb +2 -3
  134. data/lib/rigor/type/bound_method.rb +5 -12
  135. data/lib/rigor/type/combinator.rb +23 -1
  136. data/lib/rigor/type/constant.rb +2 -3
  137. data/lib/rigor/type/data_class.rb +80 -0
  138. data/lib/rigor/type/data_instance.rb +100 -0
  139. data/lib/rigor/type/difference.rb +5 -10
  140. data/lib/rigor/type/dynamic.rb +5 -10
  141. data/lib/rigor/type/hash_shape.rb +5 -15
  142. data/lib/rigor/type/integer_range.rb +5 -10
  143. data/lib/rigor/type/intersection.rb +5 -10
  144. data/lib/rigor/type/nominal.rb +5 -10
  145. data/lib/rigor/type/refined.rb +5 -10
  146. data/lib/rigor/type/singleton.rb +5 -10
  147. data/lib/rigor/type/top.rb +2 -3
  148. data/lib/rigor/type/tuple.rb +5 -10
  149. data/lib/rigor/type/union.rb +69 -10
  150. data/lib/rigor/type.rb +2 -0
  151. data/lib/rigor/value_semantics.rb +77 -0
  152. data/lib/rigor/version.rb +1 -1
  153. data/lib/rigor.rb +2 -0
  154. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable/analyzer.rb +31 -53
  155. data/plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb +21 -23
  156. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/analyzer.rb +38 -59
  157. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer/mailer_discoverer.rb +7 -13
  158. data/plugins/rigor-actionmailer/lib/rigor/plugin/actionmailer.rb +22 -33
  159. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack/analyzer.rb +298 -413
  160. data/plugins/rigor-actionpack/lib/rigor/plugin/actionpack.rb +69 -71
  161. data/plugins/rigor-activejob/lib/rigor/plugin/activejob/analyzer.rb +24 -34
  162. data/plugins/rigor-activejob/lib/rigor/plugin/activejob.rb +18 -16
  163. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/analyzer.rb +4 -46
  164. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb +4 -4
  165. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_index.rb +1 -1
  166. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb +17 -12
  167. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/analyzer.rb +2 -8
  168. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage/attachment_discoverer.rb +2 -7
  169. data/plugins/rigor-activestorage/lib/rigor/plugin/activestorage.rb +2 -6
  170. data/plugins/rigor-dry-schema/lib/rigor/plugin/dry_schema/schema_scanner.rb +4 -3
  171. data/plugins/rigor-dry-validation/lib/rigor/plugin/dry_validation.rb +5 -1
  172. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/analyzer.rb +40 -45
  173. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot/factory_discoverer.rb +7 -17
  174. data/plugins/rigor-factorybot/lib/rigor/plugin/factorybot.rb +20 -42
  175. data/plugins/rigor-graphql/lib/rigor/plugin/graphql/type_scanner.rb +7 -4
  176. data/plugins/rigor-hanami/lib/rigor/plugin/hanami/action_checker.rb +4 -8
  177. data/plugins/rigor-mangrove/lib/rigor/plugin/mangrove.rb +188 -0
  178. data/plugins/rigor-mangrove/lib/rigor-mangrove.rb +3 -0
  179. data/plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb +4 -0
  180. data/plugins/rigor-minitest/lib/rigor/plugin/minitest.rb +24 -8
  181. data/plugins/rigor-pundit/lib/rigor/plugin/pundit/analyzer.rb +31 -48
  182. data/plugins/rigor-pundit/lib/rigor/plugin/pundit.rb +21 -23
  183. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n/analyzer.rb +54 -82
  184. data/plugins/rigor-rails-i18n/lib/rigor/plugin/rails_i18n.rb +25 -25
  185. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/analyzer.rb +63 -147
  186. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/devise_routes.rb +4 -17
  187. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes/routes_parser.rb +23 -114
  188. data/plugins/rigor-rails-routes/lib/rigor/plugin/rails_routes.rb +48 -33
  189. data/plugins/rigor-rbs-inline/lib/rigor/plugin/rbs_inline.rb +0 -1
  190. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/let_scope_index.rb +6 -3
  191. data/plugins/rigor-rspec/lib/rigor/plugin/rspec/scope_walker.rb +4 -2
  192. data/plugins/rigor-rspec/lib/rigor/plugin/rspec.rb +13 -12
  193. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/have_http_status_analyzer.rb +28 -40
  194. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails/http_status_codes.rb +44 -47
  195. data/plugins/rigor-rspec-rails/lib/rigor/plugin/rspec_rails.rb +11 -10
  196. data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers/analyzer.rb +45 -87
  197. data/plugins/rigor-shoulda-matchers/lib/rigor/plugin/shoulda_matchers.rb +11 -12
  198. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq/analyzer.rb +29 -42
  199. data/plugins/rigor-sidekiq/lib/rigor/plugin/sidekiq.rb +20 -19
  200. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/catalog_walker.rb +73 -0
  201. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet/type_translator.rb +43 -1
  202. data/plugins/rigor-sorbet/lib/rigor/plugin/sorbet.rb +21 -29
  203. data/plugins/rigor-statesman/lib/rigor/plugin/statesman.rb +36 -96
  204. data/sig/rigor/cache.rbs +19 -0
  205. data/sig/rigor/inference.rbs +22 -0
  206. data/sig/rigor/plugin/access_denied_error.rbs +3 -1
  207. data/sig/rigor/plugin/base.rbs +58 -3
  208. data/sig/rigor/plugin/io_boundary.rbs +3 -0
  209. data/sig/rigor/plugin/manifest.rbs +31 -1
  210. data/sig/rigor/rbs_extended.rbs +2 -0
  211. data/sig/rigor/scope.rbs +5 -0
  212. data/sig/rigor/source.rbs +12 -0
  213. data/sig/rigor/type.rbs +58 -1
  214. data/sig/rigor.rbs +11 -1
  215. data/skills/rigor-plugin-author/SKILL.md +13 -9
  216. data/skills/rigor-plugin-author/references/01-plan-and-scaffold.md +6 -5
  217. data/skills/rigor-plugin-author/references/02-walker-and-types.md +159 -75
  218. data/skills/rigor-plugin-author/references/03-test-and-ship.md +3 -3
  219. metadata +73 -2
  220. data/plugins/rigor-activerecord/lib/rigor/plugin/activerecord/inflector.rb +0 -114
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.1.15
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rigor contributors
@@ -69,6 +69,46 @@ dependencies:
69
69
  - - "<"
70
70
  - !ruby/object:Gem::Version
71
71
  version: '5.0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: activesupport
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '7.0'
79
+ - - "<"
80
+ - !ruby/object:Gem::Version
81
+ version: '9.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '7.0'
89
+ - - "<"
90
+ - !ruby/object:Gem::Version
91
+ version: '9.0'
92
+ - !ruby/object:Gem::Dependency
93
+ name: rack
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '2.0'
99
+ - - "<"
100
+ - !ruby/object:Gem::Version
101
+ version: '4.0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '2.0'
109
+ - - "<"
110
+ - !ruby/object:Gem::Version
111
+ version: '4.0'
72
112
  - !ruby/object:Gem::Dependency
73
113
  name: parallel_tests
74
114
  requirement: !ruby/object:Gem::Requirement
@@ -249,6 +289,9 @@ files:
249
289
  - lib/rigor/analysis/check_rules/always_truthy_condition_collector.rb
250
290
  - lib/rigor/analysis/check_rules/dead_assignment_collector.rb
251
291
  - lib/rigor/analysis/check_rules/ivar_write_collector.rb
292
+ - lib/rigor/analysis/check_rules/self_closedness_scanner.rb
293
+ - lib/rigor/analysis/check_rules/unreachable_clause_collector.rb
294
+ - lib/rigor/analysis/dependency_recorder.rb
252
295
  - lib/rigor/analysis/dependency_source_inference.rb
253
296
  - lib/rigor/analysis/dependency_source_inference/boundary_cross_reporter.rb
254
297
  - lib/rigor/analysis/dependency_source_inference/builder.rb
@@ -259,11 +302,14 @@ files:
259
302
  - lib/rigor/analysis/diagnostic.rb
260
303
  - lib/rigor/analysis/erb_template_detector.rb
261
304
  - lib/rigor/analysis/fact_store.rb
305
+ - lib/rigor/analysis/incremental.rb
306
+ - lib/rigor/analysis/incremental_session.rb
262
307
  - lib/rigor/analysis/project_scan.rb
263
308
  - lib/rigor/analysis/result.rb
264
309
  - lib/rigor/analysis/rule_catalog.rb
265
310
  - lib/rigor/analysis/run_stats.rb
266
311
  - lib/rigor/analysis/runner.rb
312
+ - lib/rigor/analysis/self_call_resolution_recorder.rb
267
313
  - lib/rigor/analysis/worker_session.rb
268
314
  - lib/rigor/ast.rb
269
315
  - lib/rigor/ast/type_node.rb
@@ -272,6 +318,8 @@ files:
272
318
  - lib/rigor/builtins/regex_refinement.rb
273
319
  - lib/rigor/builtins/static_return_refinements.rb
274
320
  - lib/rigor/cache/descriptor.rb
321
+ - lib/rigor/cache/incremental_snapshot.rb
322
+ - lib/rigor/cache/rbs_cache_producer.rb
275
323
  - lib/rigor/cache/rbs_class_ancestor_table.rb
276
324
  - lib/rigor/cache/rbs_class_type_param_names.rb
277
325
  - lib/rigor/cache/rbs_constant_table.rb
@@ -284,6 +332,7 @@ files:
284
332
  - lib/rigor/cli.rb
285
333
  - lib/rigor/cli/annotate_command.rb
286
334
  - lib/rigor/cli/baseline_command.rb
335
+ - lib/rigor/cli/command.rb
287
336
  - lib/rigor/cli/coverage_command.rb
288
337
  - lib/rigor/cli/coverage_renderer.rb
289
338
  - lib/rigor/cli/coverage_report.rb
@@ -291,10 +340,12 @@ files:
291
340
  - lib/rigor/cli/explain_command.rb
292
341
  - lib/rigor/cli/lsp_command.rb
293
342
  - lib/rigor/cli/mcp_command.rb
343
+ - lib/rigor/cli/options.rb
294
344
  - lib/rigor/cli/plugin_command.rb
295
345
  - lib/rigor/cli/plugins_command.rb
296
346
  - lib/rigor/cli/plugins_renderer.rb
297
347
  - lib/rigor/cli/prism_colorizer.rb
348
+ - lib/rigor/cli/renderable.rb
298
349
  - lib/rigor/cli/sig_gen_command.rb
299
350
  - lib/rigor/cli/skill_command.rb
300
351
  - lib/rigor/cli/triage_command.rb
@@ -326,6 +377,7 @@ files:
326
377
  - lib/rigor/flow_contribution/merger.rb
327
378
  - lib/rigor/inference/acceptance.rb
328
379
  - lib/rigor/inference/block_parameter_binder.rb
380
+ - lib/rigor/inference/budget_trace.rb
329
381
  - lib/rigor/inference/builtins/array_catalog.rb
330
382
  - lib/rigor/inference/builtins/comparable_catalog.rb
331
383
  - lib/rigor/inference/builtins/complex_catalog.rb
@@ -360,8 +412,10 @@ files:
360
412
  - lib/rigor/inference/macro_block_self_type.rb
361
413
  - lib/rigor/inference/method_dispatcher.rb
362
414
  - lib/rigor/inference/method_dispatcher/block_folding.rb
415
+ - lib/rigor/inference/method_dispatcher/call_context.rb
363
416
  - lib/rigor/inference/method_dispatcher/cgi_folding.rb
364
417
  - lib/rigor/inference/method_dispatcher/constant_folding.rb
418
+ - lib/rigor/inference/method_dispatcher/data_folding.rb
365
419
  - lib/rigor/inference/method_dispatcher/file_folding.rb
366
420
  - lib/rigor/inference/method_dispatcher/iterator_dispatch.rb
367
421
  - lib/rigor/inference/method_dispatcher/kernel_dispatch.rb
@@ -375,6 +429,7 @@ files:
375
429
  - lib/rigor/inference/method_dispatcher/set_folding.rb
376
430
  - lib/rigor/inference/method_dispatcher/shape_dispatch.rb
377
431
  - lib/rigor/inference/method_dispatcher/shellwords_folding.rb
432
+ - lib/rigor/inference/method_dispatcher/singleton_folding.rb
378
433
  - lib/rigor/inference/method_dispatcher/time_folding.rb
379
434
  - lib/rigor/inference/method_dispatcher/uri_folding.rb
380
435
  - lib/rigor/inference/method_parameter_binder.rb
@@ -391,6 +446,7 @@ files:
391
446
  - lib/rigor/inference/synthetic_method_index.rb
392
447
  - lib/rigor/inference/synthetic_method_scanner.rb
393
448
  - lib/rigor/language_server.rb
449
+ - lib/rigor/language_server/buffer_resolution.rb
394
450
  - lib/rigor/language_server/buffer_table.rb
395
451
  - lib/rigor/language_server/completion_provider.rb
396
452
  - lib/rigor/language_server/debouncer.rb
@@ -411,18 +467,24 @@ files:
411
467
  - lib/rigor/mcp/server.rb
412
468
  - lib/rigor/plugin.rb
413
469
  - lib/rigor/plugin/access_denied_error.rb
470
+ - lib/rigor/plugin/additional_initializer.rb
414
471
  - lib/rigor/plugin/base.rb
415
472
  - lib/rigor/plugin/blueprint.rb
473
+ - lib/rigor/plugin/box.rb
416
474
  - lib/rigor/plugin/fact_store.rb
475
+ - lib/rigor/plugin/inflector.rb
417
476
  - lib/rigor/plugin/io_boundary.rb
477
+ - lib/rigor/plugin/isolation.rb
418
478
  - lib/rigor/plugin/load_error.rb
419
479
  - lib/rigor/plugin/loader.rb
420
480
  - lib/rigor/plugin/macro.rb
421
481
  - lib/rigor/plugin/macro/block_as_method.rb
422
482
  - lib/rigor/plugin/macro/external_file.rb
423
483
  - lib/rigor/plugin/macro/heredoc_template.rb
484
+ - lib/rigor/plugin/macro/nested_class_template.rb
424
485
  - lib/rigor/plugin/macro/trait_registry.rb
425
486
  - lib/rigor/plugin/manifest.rb
487
+ - lib/rigor/plugin/node_context.rb
426
488
  - lib/rigor/plugin/protocol_contract.rb
427
489
  - lib/rigor/plugin/registry.rb
428
490
  - lib/rigor/plugin/services.rb
@@ -430,6 +492,7 @@ files:
430
492
  - lib/rigor/plugin/trust_policy.rb
431
493
  - lib/rigor/plugin/type_node_resolver.rb
432
494
  - lib/rigor/rbs_extended.rb
495
+ - lib/rigor/rbs_extended/conformance_checker.rb
433
496
  - lib/rigor/rbs_extended/hkt_directives.rb
434
497
  - lib/rigor/rbs_extended/reporter.rb
435
498
  - lib/rigor/reflection.rb
@@ -447,6 +510,7 @@ files:
447
510
  - lib/rigor/sig_gen/write_result.rb
448
511
  - lib/rigor/sig_gen/writer.rb
449
512
  - lib/rigor/source.rb
513
+ - lib/rigor/source/literals.rb
450
514
  - lib/rigor/source/node_locator.rb
451
515
  - lib/rigor/source/node_walker.rb
452
516
  - lib/rigor/testing.rb
@@ -455,12 +519,15 @@ files:
455
519
  - lib/rigor/triage/hint.rb
456
520
  - lib/rigor/trinary.rb
457
521
  - lib/rigor/type.rb
522
+ - lib/rigor/type/acceptance_router.rb
458
523
  - lib/rigor/type/accepts_result.rb
459
524
  - lib/rigor/type/app.rb
460
525
  - lib/rigor/type/bot.rb
461
526
  - lib/rigor/type/bound_method.rb
462
527
  - lib/rigor/type/combinator.rb
463
528
  - lib/rigor/type/constant.rb
529
+ - lib/rigor/type/data_class.rb
530
+ - lib/rigor/type/data_instance.rb
464
531
  - lib/rigor/type/difference.rb
465
532
  - lib/rigor/type/dynamic.rb
466
533
  - lib/rigor/type/hash_shape.rb
@@ -482,6 +549,7 @@ files:
482
549
  - lib/rigor/type_node/string_literal.rb
483
550
  - lib/rigor/type_node/symbol_literal.rb
484
551
  - lib/rigor/type_node/union.rb
552
+ - lib/rigor/value_semantics.rb
485
553
  - lib/rigor/version.rb
486
554
  - plugins/rigor-actioncable/lib/rigor-actioncable.rb
487
555
  - plugins/rigor-actioncable/lib/rigor/plugin/actioncable.rb
@@ -506,7 +574,6 @@ files:
506
574
  - plugins/rigor-activerecord/lib/rigor-activerecord.rb
507
575
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord.rb
508
576
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/analyzer.rb
509
- - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/inflector.rb
510
577
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_discoverer.rb
511
578
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/model_index.rb
512
579
  - plugins/rigor-activerecord/lib/rigor/plugin/activerecord/schema_parser.rb
@@ -546,6 +613,8 @@ files:
546
613
  - plugins/rigor-hanami/lib/rigor/plugin/hanami.rb
547
614
  - plugins/rigor-hanami/lib/rigor/plugin/hanami/action_checker.rb
548
615
  - plugins/rigor-hanami/sig/hanami_action.rbs
616
+ - plugins/rigor-mangrove/lib/rigor-mangrove.rb
617
+ - plugins/rigor-mangrove/lib/rigor/plugin/mangrove.rb
549
618
  - plugins/rigor-minitest/lib/rigor-minitest.rb
550
619
  - plugins/rigor-minitest/lib/rigor/plugin/minitest.rb
551
620
  - plugins/rigor-minitest/lib/rigor/plugin/minitest/assertion_analyzer.rb
@@ -613,6 +682,7 @@ files:
613
682
  - sig/rigor/analysis/dependency_source_inference/index.rbs
614
683
  - sig/rigor/analysis/fact_store.rbs
615
684
  - sig/rigor/ast.rbs
685
+ - sig/rigor/cache.rbs
616
686
  - sig/rigor/cli/diff_command.rbs
617
687
  - sig/rigor/cli/explain_command.rbs
618
688
  - sig/rigor/cli/sig_gen_command.rbs
@@ -680,6 +750,7 @@ require_paths:
680
750
  - plugins/rigor-factorybot/lib
681
751
  - plugins/rigor-graphql/lib
682
752
  - plugins/rigor-hanami/lib
753
+ - plugins/rigor-mangrove/lib
683
754
  - plugins/rigor-minitest/lib
684
755
  - plugins/rigor-pundit/lib
685
756
  - plugins/rigor-rails/lib
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rigor
4
- module Plugin
5
- class Activerecord < Rigor::Plugin::Base
6
- # Tiny inflection helper for the common `ClassName → snake_case_plural`
7
- # mapping Rails uses to derive table names. Deliberately
8
- # narrow — handles the regular cases (`User → users`,
9
- # `BlogPost → blog_posts`, `Category → categories`,
10
- # `Bus → buses`, `Wolf → wolves`). Irregular plurals
11
- # (`Person → people`, `Mouse → mice`, `Datum → data`) are
12
- # NOT handled; the user is expected to declare
13
- # `self.table_name = "people"` for those.
14
- #
15
- # Avoids an `activesupport` runtime dependency. Rails apps
16
- # that need richer inflection should set explicit table
17
- # names on the affected models.
18
- module Inflector
19
- IRREGULAR_PLURALS = {
20
- # Common ones we still want to handle without bringing
21
- # in a full inflection table. Users get the configured
22
- # explicit table_name route for anything else.
23
- "person" => "people",
24
- "child" => "children",
25
- "datum" => "data"
26
- }.freeze
27
-
28
- module_function
29
-
30
- # `BlogPost` → `blog_posts`. `User::Profile` → `user_profiles`
31
- # (Rails-style namespacing flattens with underscore).
32
- def tableize(class_name)
33
- underscore = underscore(class_name.to_s.gsub("::", "/"))
34
- # `user/profiles` → `user_profiles`
35
- underscore = underscore.tr("/", "_")
36
- pluralize(underscore)
37
- end
38
-
39
- # `BlogPost` → `blog_post`. Standard Rails-style underscore.
40
- def underscore(camel_case_word)
41
- word = camel_case_word.to_s.dup
42
- word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
43
- word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
44
- word.tr!("-", "_")
45
- word.downcase!
46
- word
47
- end
48
-
49
- # `users` → `User`, `blog_posts` → `BlogPost`.
50
- # Used by the association detector to map an
51
- # association NAME (`has_many :posts` → `Post`) to the
52
- # target class without requiring an explicit
53
- # `class_name:` option. Singularises the word first,
54
- # then camel-cases. Recognises the same irregular
55
- # plurals as {.pluralize}.
56
- def classify(word)
57
- camelize(singularize(word.to_s))
58
- end
59
-
60
- # `posts` → `post`, `categories` → `category`,
61
- # `wolves` → `wolf`, `buses` → `bus`. The inverse of
62
- # {.pluralize} for the regular cases this module
63
- # recognises. Irregular forms (`people` → `person`)
64
- # round-trip via {IRREGULAR_PLURALS}.
65
- def singularize(word)
66
- IRREGULAR_PLURALS.each { |singular, plural| return singular if word == plural }
67
-
68
- case word
69
- when /(.*[bcdfghjklmnpqrstvwxz])ies\z/
70
- "#{Regexp.last_match(1)}y"
71
- when /(.*[sxz]|.*[cs]h)es\z/
72
- Regexp.last_match(0)[0..-3]
73
- when /(.*)ves\z/
74
- "#{Regexp.last_match(1)}f"
75
- when /(.+)s\z/
76
- Regexp.last_match(1)
77
- else
78
- word
79
- end
80
- end
81
-
82
- # `blog_post` → `BlogPost`. Camelizes around `_` and
83
- # `/` separators; the latter promotes namespace boundaries
84
- # to `::` (Rails-style).
85
- def camelize(snake)
86
- snake.to_s.split("/").map do |segment|
87
- segment.split("_").map { |part| part.empty? ? part : part[0].upcase + part[1..] }.join
88
- end.join("::")
89
- end
90
-
91
- # `user` → `users`, `category` → `categories`,
92
- # `bus` → `buses`, `wolf` → `wolves`. Falls back to a
93
- # plain `+ "s"` for unrecognised endings.
94
- def pluralize(word)
95
- return IRREGULAR_PLURALS[word] if IRREGULAR_PLURALS.key?(word)
96
-
97
- case word
98
- when /(.*[bcdfghjklmnpqrstvwxz])y\z/
99
- # `category` → `categories`, `cherry` → `cherries`
100
- "#{Regexp.last_match(1)}ies"
101
- when /(.*[sxz]|.*[cs]h)\z/
102
- # `bus` → `buses`, `box` → `boxes`, `dish` → `dishes`
103
- "#{Regexp.last_match(0)}es"
104
- when /(.*)fe?\z/
105
- # `wolf` → `wolves`, `knife` → `knives`
106
- "#{Regexp.last_match(1)}ves"
107
- else
108
- "#{word}s"
109
- end
110
- end
111
- end
112
- end
113
- end
114
- end