rigortype 0.0.8 → 0.1.0

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +234 -22
  3. data/data/builtins/ruby_core/encoding.yml +210 -0
  4. data/data/builtins/ruby_core/exception.yml +641 -0
  5. data/data/builtins/ruby_core/numeric.yml +3 -2
  6. data/data/builtins/ruby_core/proc.yml +731 -0
  7. data/data/builtins/ruby_core/random.yml +166 -0
  8. data/data/builtins/ruby_core/re.yml +689 -0
  9. data/data/builtins/ruby_core/struct.yml +449 -0
  10. data/lib/rigor/analysis/check_rules.rb +228 -40
  11. data/lib/rigor/analysis/diagnostic.rb +15 -1
  12. data/lib/rigor/analysis/runner.rb +199 -4
  13. data/lib/rigor/builtins/imported_refinements.rb +6 -1
  14. data/lib/rigor/cache/rbs_class_ancestor_table.rb +63 -0
  15. data/lib/rigor/cache/rbs_class_type_param_names.rb +60 -0
  16. data/lib/rigor/cache/rbs_constant_table.rb +15 -51
  17. data/lib/rigor/cache/rbs_descriptor.rb +55 -0
  18. data/lib/rigor/cache/rbs_environment.rb +52 -0
  19. data/lib/rigor/cache/rbs_environment_marshal_patch.rb +40 -0
  20. data/lib/rigor/cache/rbs_instance_definitions.rb +79 -0
  21. data/lib/rigor/cache/rbs_known_class_names.rb +43 -0
  22. data/lib/rigor/cache/store.rb +81 -15
  23. data/lib/rigor/cli.rb +45 -7
  24. data/lib/rigor/configuration/severity_profile.rb +109 -0
  25. data/lib/rigor/configuration.rb +110 -6
  26. data/lib/rigor/environment/rbs_hierarchy.rb +18 -5
  27. data/lib/rigor/environment/rbs_loader.rb +220 -32
  28. data/lib/rigor/environment.rb +11 -2
  29. data/lib/rigor/flow_contribution/conflict.rb +81 -0
  30. data/lib/rigor/flow_contribution/element.rb +53 -0
  31. data/lib/rigor/flow_contribution/fact.rb +88 -0
  32. data/lib/rigor/flow_contribution/merge_result.rb +67 -0
  33. data/lib/rigor/flow_contribution/merger.rb +275 -0
  34. data/lib/rigor/flow_contribution.rb +179 -0
  35. data/lib/rigor/inference/block_parameter_binder.rb +15 -0
  36. data/lib/rigor/inference/builtins/encoding_catalog.rb +67 -0
  37. data/lib/rigor/inference/builtins/exception_catalog.rb +92 -0
  38. data/lib/rigor/inference/builtins/proc_catalog.rb +122 -0
  39. data/lib/rigor/inference/builtins/random_catalog.rb +58 -0
  40. data/lib/rigor/inference/builtins/re_catalog.rb +81 -0
  41. data/lib/rigor/inference/builtins/struct_catalog.rb +55 -0
  42. data/lib/rigor/inference/expression_typer.rb +110 -6
  43. data/lib/rigor/inference/method_dispatcher/constant_folding.rb +16 -1
  44. data/lib/rigor/inference/method_dispatcher/literal_string_folding.rb +173 -0
  45. data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +21 -1
  46. data/lib/rigor/inference/method_dispatcher.rb +2 -0
  47. data/lib/rigor/inference/multi_target_binder.rb +2 -0
  48. data/lib/rigor/inference/narrowing.rb +134 -144
  49. data/lib/rigor/inference/scope_indexer.rb +75 -1
  50. data/lib/rigor/inference/statement_evaluator.rb +380 -40
  51. data/lib/rigor/plugin/access_denied_error.rb +24 -0
  52. data/lib/rigor/plugin/base.rb +241 -0
  53. data/lib/rigor/plugin/io_boundary.rb +102 -0
  54. data/lib/rigor/plugin/load_error.rb +23 -0
  55. data/lib/rigor/plugin/loader.rb +191 -0
  56. data/lib/rigor/plugin/manifest.rb +134 -0
  57. data/lib/rigor/plugin/registry.rb +50 -0
  58. data/lib/rigor/plugin/services.rb +65 -0
  59. data/lib/rigor/plugin/trust_policy.rb +99 -0
  60. data/lib/rigor/plugin.rb +61 -0
  61. data/lib/rigor/rbs_extended.rb +103 -0
  62. data/lib/rigor/reflection.rb +2 -2
  63. data/lib/rigor/type/combinator.rb +72 -0
  64. data/lib/rigor/type/refined.rb +50 -2
  65. data/lib/rigor/version.rb +1 -1
  66. data/lib/rigor.rb +13 -0
  67. data/sig/rigor/environment.rbs +7 -1
  68. data/sig/rigor/inference.rbs +1 -0
  69. data/sig/rigor/rbs_extended.rbs +2 -0
  70. data/sig/rigor/scope.rbs +1 -0
  71. data/sig/rigor/type.rbs +7 -0
  72. data/sig/rigor.rbs +3 -1
  73. metadata +38 -1
@@ -0,0 +1,449 @@
1
+ # DO NOT EDIT — generated by tool/extract_builtin_catalog.rb
2
+ ---
3
+ schema_version: 1
4
+ generated_from:
5
+ ruby_init_c: references/ruby/struct.c
6
+ ruby_prelude:
7
+ rbs:
8
+ - references/rbs/core/struct.rbs
9
+ purity_levels:
10
+ leaf: Prelude :leaf marker (VM-enforced) or C body uses no dispatch/yield/mutation.
11
+ trivial: Prelude method body is a literal return (self/true/false/nil/Integer).
12
+ leaf_when_numeric: C body falls through to rb_num_coerce_* only when an operand
13
+ is non-numeric; safe to fold when every argument is a concrete numeric.
14
+ inline_block: Prelude method carries :inline_block or :use_block; block-dependent.
15
+ block_dependent: C body yields or checks rb_block_given_p.
16
+ mutates_self: C body checks rb_check_frozen — typically a prelude to mutation.
17
+ dispatch: C body calls user-redefinable methods (rb_funcall*, rb_equal, rb_Float,
18
+ num_funcall*, etc).
19
+ unknown: C body not located in indexed C files.
20
+ classes:
21
+ Struct:
22
+ parent: Object
23
+ defined_at: references/ruby/struct.c:2245
24
+ includes:
25
+ - module: Enumerable
26
+ defined_at: references/ruby/struct.c:2246
27
+ constants: {}
28
+ aliases:
29
+ to_s:
30
+ old: inspect
31
+ source: c
32
+ defined_at: references/ruby/struct.c:2263
33
+ instance_methods:
34
+ initialize:
35
+ source: c
36
+ cfunc: rb_struct_initialize_m
37
+ arity: -1
38
+ defined_at: references/ruby/struct.c:2255
39
+ c_body_at: references/ruby/struct.c:752
40
+ c_effects:
41
+ - mutate
42
+ - raises
43
+ purity: mutates_self
44
+ initialize_copy:
45
+ source: c
46
+ cfunc: rb_struct_init_copy
47
+ arity: 1
48
+ defined_at: references/ruby/struct.c:2256
49
+ c_body_at: references/ruby/struct.c:1163
50
+ c_effects:
51
+ - raises
52
+ purity: leaf
53
+ "==":
54
+ source: c
55
+ cfunc: rb_struct_equal
56
+ arity: 1
57
+ defined_at: references/ruby/struct.c:2258
58
+ c_body_at: references/ruby/struct.c:1440
59
+ c_effects:
60
+ - dispatch
61
+ - raises
62
+ purity: dispatch
63
+ rbs:
64
+ - "(untyped other) -> bool"
65
+ rbs_at: references/rbs/core/struct.rbs:289
66
+ eql?:
67
+ source: c
68
+ cfunc: rb_struct_eql
69
+ arity: 1
70
+ defined_at: references/ruby/struct.c:2259
71
+ c_body_at: references/ruby/struct.c:1521
72
+ c_effects:
73
+ - dispatch
74
+ - raises
75
+ purity: dispatch
76
+ rbs:
77
+ - "(untyped other) -> bool"
78
+ rbs_at: references/rbs/core/struct.rbs:310
79
+ hash:
80
+ source: c
81
+ cfunc: rb_struct_hash
82
+ arity: 0
83
+ defined_at: references/ruby/struct.c:2260
84
+ c_body_at: references/ruby/struct.c:1472
85
+ c_effects: []
86
+ purity: leaf
87
+ rbs:
88
+ - "() -> Integer"
89
+ rbs_at: references/rbs/core/struct.rbs:330
90
+ inspect:
91
+ source: c
92
+ cfunc: rb_struct_inspect
93
+ arity: 0
94
+ defined_at: references/ruby/struct.c:2262
95
+ c_body_at: references/ruby/struct.c:1043
96
+ c_effects:
97
+ - dispatch
98
+ purity: dispatch
99
+ rbs:
100
+ - "() -> String"
101
+ rbs_at: references/rbs/core/struct.rbs:342
102
+ to_a:
103
+ source: c
104
+ cfunc: rb_struct_to_a
105
+ arity: 0
106
+ defined_at: references/ruby/struct.c:2264
107
+ c_body_at: references/ruby/struct.c:1062
108
+ c_effects: []
109
+ purity: leaf
110
+ rbs:
111
+ - "() -> Array[Elem]"
112
+ rbs_at: references/rbs/core/struct.rbs:365
113
+ to_h:
114
+ source: c
115
+ cfunc: rb_struct_to_h
116
+ arity: 0
117
+ defined_at: references/ruby/struct.c:2265
118
+ c_body_at: references/ruby/struct.c:1091
119
+ c_effects:
120
+ - block
121
+ - mutate
122
+ purity: block_dependent
123
+ rbs:
124
+ - "() -> Hash[Symbol, Elem]"
125
+ - "[K, V] () { (Symbol key, Elem value) -> [ K, V ] } -> Hash[K, V]"
126
+ rbs_at: references/rbs/core/struct.rbs:388
127
+ values:
128
+ source: c
129
+ cfunc: rb_struct_to_a
130
+ arity: 0
131
+ defined_at: references/ruby/struct.c:2266
132
+ c_body_at: references/ruby/struct.c:1062
133
+ c_effects: []
134
+ purity: leaf
135
+ size:
136
+ source: c
137
+ cfunc: rb_struct_size
138
+ arity: 0
139
+ defined_at: references/ruby/struct.c:2267
140
+ c_body_at: references/ruby/struct.c:1546
141
+ c_effects: []
142
+ purity: leaf
143
+ rbs:
144
+ - "() -> Integer"
145
+ rbs_at: references/rbs/core/struct.rbs:412
146
+ length:
147
+ source: c
148
+ cfunc: rb_struct_size
149
+ arity: 0
150
+ defined_at: references/ruby/struct.c:2268
151
+ c_body_at: references/ruby/struct.c:1546
152
+ c_effects: []
153
+ purity: leaf
154
+ each:
155
+ source: c
156
+ cfunc: rb_struct_each
157
+ arity: 0
158
+ defined_at: references/ruby/struct.c:2270
159
+ c_body_at: references/ruby/struct.c:926
160
+ c_effects:
161
+ - block
162
+ purity: block_dependent
163
+ rbs:
164
+ - "() -> Enumerator[Elem, self]"
165
+ - "() { (Elem value) -> void } -> self"
166
+ rbs_at: references/rbs/core/struct.rbs:444
167
+ each_pair:
168
+ source: c
169
+ cfunc: rb_struct_each_pair
170
+ arity: 0
171
+ defined_at: references/ruby/struct.c:2271
172
+ c_body_at: references/ruby/struct.c:961
173
+ c_effects:
174
+ - block
175
+ purity: block_dependent
176
+ rbs:
177
+ - "() -> Enumerator[[ Symbol, Elem ], self]"
178
+ - "() { ([ Symbol, Elem ] key_value) -> void } -> self"
179
+ rbs_at: references/rbs/core/struct.rbs:468
180
+ "[]":
181
+ source: c
182
+ cfunc: rb_struct_aref
183
+ arity: 1
184
+ defined_at: references/ruby/struct.c:2272
185
+ c_body_at: references/ruby/struct.c:1258
186
+ c_effects: []
187
+ purity: leaf
188
+ rbs:
189
+ - "(index name_or_position) -> Elem"
190
+ rbs_at: references/rbs/core/struct.rbs:495
191
+ "[]=":
192
+ source: c
193
+ cfunc: rb_struct_aset
194
+ arity: 2
195
+ defined_at: references/ruby/struct.c:2273
196
+ c_body_at: references/ruby/struct.c:1296
197
+ c_effects:
198
+ - mutate
199
+ purity: mutates_self
200
+ rbs:
201
+ - "(index name_or_position, Elem value) -> Elem"
202
+ rbs_at: references/rbs/core/struct.rbs:524
203
+ select:
204
+ source: c
205
+ cfunc: rb_struct_select
206
+ arity: -1
207
+ defined_at: references/ruby/struct.c:2274
208
+ c_body_at: references/ruby/struct.c:1388
209
+ c_effects:
210
+ - block
211
+ - mutate
212
+ purity: block_dependent
213
+ rbs:
214
+ - "() -> Enumerator[Elem, Array[Elem]]"
215
+ - "() { (Elem value) -> boolish } -> Array[Elem]"
216
+ rbs_at: references/rbs/core/struct.rbs:543
217
+ filter:
218
+ source: c
219
+ cfunc: rb_struct_select
220
+ arity: -1
221
+ defined_at: references/ruby/struct.c:2275
222
+ c_body_at: references/ruby/struct.c:1388
223
+ c_effects:
224
+ - block
225
+ - mutate
226
+ purity: block_dependent
227
+ values_at:
228
+ source: c
229
+ cfunc: rb_struct_values_at
230
+ arity: -1
231
+ defined_at: references/ruby/struct.c:2276
232
+ c_body_at: references/ruby/struct.c:1364
233
+ c_effects: []
234
+ purity: leaf
235
+ rbs:
236
+ - "(*int | range[int?] positions) -> Array[Elem]"
237
+ rbs_at: references/rbs/core/struct.rbs:594
238
+ members:
239
+ source: c
240
+ cfunc: rb_struct_members_m
241
+ arity: 0
242
+ defined_at: references/ruby/struct.c:2278
243
+ c_body_at: references/ruby/struct.c:227
244
+ c_effects: []
245
+ purity: leaf
246
+ rbs:
247
+ - "() -> Array[Symbol]"
248
+ rbs_at: references/rbs/core/struct.rbs:607
249
+ dig:
250
+ source: c
251
+ cfunc: rb_struct_dig
252
+ arity: -1
253
+ defined_at: references/ruby/struct.c:2279
254
+ c_body_at: references/ruby/struct.c:1584
255
+ c_effects: []
256
+ purity: leaf
257
+ rbs:
258
+ - "(index name_or_position) -> Elem"
259
+ - "(index name_or_position, untyped, *untyped) -> untyped"
260
+ rbs_at: references/rbs/core/struct.rbs:637
261
+ deconstruct:
262
+ source: c
263
+ cfunc: rb_struct_to_a
264
+ arity: 0
265
+ defined_at: references/ruby/struct.c:2281
266
+ c_body_at: references/ruby/struct.c:1062
267
+ c_effects: []
268
+ purity: leaf
269
+ deconstruct_keys:
270
+ source: c
271
+ cfunc: rb_struct_deconstruct_keys
272
+ arity: 1
273
+ defined_at: references/ruby/struct.c:2282
274
+ c_body_at: references/ruby/struct.c:1126
275
+ c_effects: []
276
+ purity: leaf
277
+ rbs:
278
+ - "(Array[index & Hash::_Key]? indices) -> Hash[index & Hash::_Key, Elem]"
279
+ rbs_at: references/rbs/core/struct.rbs:667
280
+ singleton_methods:
281
+ new:
282
+ source: c
283
+ cfunc: rb_struct_s_def
284
+ arity: -1
285
+ defined_at: references/ruby/struct.c:2249
286
+ c_body_at: references/ruby/struct.c:643
287
+ c_effects:
288
+ - block
289
+ - mutate
290
+ - raises
291
+ purity: block_dependent
292
+ rbs:
293
+ - "(string? classname, *interned fields, ?keyword_init: boolish?) ?{ (singleton(Struct))
294
+ [self: singleton(Struct)] -> void } -> untyped"
295
+ - "(Symbol field1, *interned fields, ?keyword_init: boolish?) ?{ (singleton(Struct))
296
+ [self: singleton(Struct)] -> void } -> untyped"
297
+ rbs_at: references/rbs/core/struct.rbs:238
298
+ keyword_init?:
299
+ source: c
300
+ cfunc: rb_struct_s_keyword_init_p
301
+ arity: 0
302
+ defined_at: references/ruby/struct.c:2251
303
+ c_body_at: references/ruby/struct.c:62
304
+ c_effects: []
305
+ purity: leaf
306
+ rbs:
307
+ - "() -> bool?"
308
+ rbs_at: references/rbs/core/struct.rbs:267
309
+ members:
310
+ source: c
311
+ cfunc: rb_struct_s_members_m
312
+ arity: 0
313
+ defined_at: references/ruby/struct.c:2252
314
+ c_body_at: references/ruby/struct.c:207
315
+ c_effects: []
316
+ purity: leaf
317
+ rbs:
318
+ - "() -> Array[Symbol]"
319
+ rbs_at: references/rbs/core/struct.rbs:250
320
+ undefined: []
321
+ Data:
322
+ parent: Object
323
+ defined_at: references/ruby/struct.c:2284
324
+ includes: []
325
+ constants: {}
326
+ aliases:
327
+ to_s:
328
+ old: inspect
329
+ source: c
330
+ defined_at: references/ruby/struct.c:2302
331
+ instance_methods:
332
+ initialize:
333
+ source: c
334
+ cfunc: rb_data_initialize_m
335
+ arity: -1
336
+ defined_at: references/ruby/struct.c:2294
337
+ c_body_at: references/ruby/struct.c:1833
338
+ c_effects:
339
+ - mutate
340
+ purity: mutates_self
341
+ initialize_copy:
342
+ source: c
343
+ cfunc: rb_data_init_copy
344
+ arity: 1
345
+ defined_at: references/ruby/struct.c:2295
346
+ c_body_at: references/ruby/struct.c:1881
347
+ c_effects: []
348
+ purity: leaf
349
+ "==":
350
+ source: c
351
+ cfunc: rb_data_equal
352
+ arity: 1
353
+ defined_at: references/ruby/struct.c:2297
354
+ c_body_at: references/ruby/struct.c:1440
355
+ c_effects:
356
+ - dispatch
357
+ - raises
358
+ purity: dispatch
359
+ eql?:
360
+ source: c
361
+ cfunc: rb_data_eql
362
+ arity: 1
363
+ defined_at: references/ruby/struct.c:2298
364
+ c_body_at: references/ruby/struct.c:1521
365
+ c_effects:
366
+ - dispatch
367
+ - raises
368
+ purity: dispatch
369
+ hash:
370
+ source: c
371
+ cfunc: rb_data_hash
372
+ arity: 0
373
+ defined_at: references/ruby/struct.c:2299
374
+ c_body_at: references/ruby/struct.c:1472
375
+ c_effects: []
376
+ purity: leaf
377
+ inspect:
378
+ source: c
379
+ cfunc: rb_data_inspect
380
+ arity: 0
381
+ defined_at: references/ruby/struct.c:2301
382
+ c_body_at: references/ruby/struct.c:1952
383
+ c_effects:
384
+ - dispatch
385
+ purity: dispatch
386
+ to_h:
387
+ source: c
388
+ cfunc: rb_data_to_h
389
+ arity: 0
390
+ defined_at: references/ruby/struct.c:2303
391
+ c_body_at: references/ruby/struct.c:1091
392
+ c_effects:
393
+ - block
394
+ - mutate
395
+ purity: block_dependent
396
+ members:
397
+ source: c
398
+ cfunc: rb_data_members_m
399
+ arity: 0
400
+ defined_at: references/ruby/struct.c:2305
401
+ c_body_at: references/ruby/struct.c:227
402
+ c_effects: []
403
+ purity: leaf
404
+ deconstruct:
405
+ source: c
406
+ cfunc: rb_data_deconstruct
407
+ arity: 0
408
+ defined_at: references/ruby/struct.c:2307
409
+ c_body_at: references/ruby/struct.c:1062
410
+ c_effects: []
411
+ purity: leaf
412
+ deconstruct_keys:
413
+ source: c
414
+ cfunc: rb_data_deconstruct_keys
415
+ arity: 1
416
+ defined_at: references/ruby/struct.c:2308
417
+ c_body_at: references/ruby/struct.c:2131
418
+ c_effects: []
419
+ purity: leaf
420
+ with:
421
+ source: c
422
+ cfunc: rb_data_with
423
+ arity: -1
424
+ defined_at: references/ruby/struct.c:2310
425
+ c_body_at: references/ruby/struct.c:1919
426
+ c_effects: []
427
+ purity: leaf
428
+ singleton_methods:
429
+ define:
430
+ source: c
431
+ cfunc: rb_data_s_def
432
+ arity: -1
433
+ defined_at: references/ruby/struct.c:2288
434
+ c_body_at: references/ruby/struct.c:1709
435
+ c_effects:
436
+ - block
437
+ - mutate
438
+ - raises
439
+ purity: block_dependent
440
+ members:
441
+ source: c
442
+ cfunc: rb_data_s_members_m
443
+ arity: 0
444
+ defined_at: references/ruby/struct.c:2291
445
+ c_body_at: references/ruby/struct.c:207
446
+ c_effects: []
447
+ purity: leaf
448
+ undefined:
449
+ - new