rigortype 0.0.2 → 0.0.4

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -7
  3. data/data/builtins/ruby_core/array.yml +1470 -0
  4. data/data/builtins/ruby_core/file.yml +501 -0
  5. data/data/builtins/ruby_core/hash.yml +936 -0
  6. data/data/builtins/ruby_core/io.yml +1594 -0
  7. data/data/builtins/ruby_core/numeric.yml +1809 -0
  8. data/data/builtins/ruby_core/range.yml +389 -0
  9. data/data/builtins/ruby_core/set.yml +594 -0
  10. data/data/builtins/ruby_core/string.yml +1850 -0
  11. data/data/builtins/ruby_core/time.yml +750 -0
  12. data/lib/rigor/analysis/check_rules.rb +97 -4
  13. data/lib/rigor/analysis/runner.rb +4 -0
  14. data/lib/rigor/builtins/imported_refinements.rb +251 -0
  15. data/lib/rigor/configuration.rb +6 -1
  16. data/lib/rigor/inference/acceptance.rb +324 -6
  17. data/lib/rigor/inference/builtins/array_catalog.rb +46 -0
  18. data/lib/rigor/inference/builtins/hash_catalog.rb +40 -0
  19. data/lib/rigor/inference/builtins/method_catalog.rb +90 -0
  20. data/lib/rigor/inference/builtins/numeric_catalog.rb +93 -0
  21. data/lib/rigor/inference/builtins/range_catalog.rb +46 -0
  22. data/lib/rigor/inference/builtins/set_catalog.rb +54 -0
  23. data/lib/rigor/inference/builtins/string_catalog.rb +39 -0
  24. data/lib/rigor/inference/builtins/time_catalog.rb +64 -0
  25. data/lib/rigor/inference/expression_typer.rb +48 -1
  26. data/lib/rigor/inference/method_dispatcher/constant_folding.rb +670 -16
  27. data/lib/rigor/inference/method_dispatcher/file_folding.rb +144 -0
  28. data/lib/rigor/inference/method_dispatcher/iterator_dispatch.rb +215 -0
  29. data/lib/rigor/inference/method_dispatcher/overload_selector.rb +23 -7
  30. data/lib/rigor/inference/method_dispatcher/rbs_dispatch.rb +4 -0
  31. data/lib/rigor/inference/method_dispatcher/shape_dispatch.rb +240 -4
  32. data/lib/rigor/inference/method_dispatcher.rb +28 -21
  33. data/lib/rigor/inference/method_parameter_binder.rb +29 -4
  34. data/lib/rigor/inference/narrowing.rb +376 -4
  35. data/lib/rigor/inference/scope_indexer.rb +10 -2
  36. data/lib/rigor/inference/statement_evaluator.rb +213 -2
  37. data/lib/rigor/rbs_extended.rb +230 -15
  38. data/lib/rigor/scope.rb +14 -0
  39. data/lib/rigor/type/combinator.rb +159 -1
  40. data/lib/rigor/type/difference.rb +155 -0
  41. data/lib/rigor/type/integer_range.rb +137 -0
  42. data/lib/rigor/type/intersection.rb +135 -0
  43. data/lib/rigor/type/refined.rb +174 -0
  44. data/lib/rigor/type.rb +4 -0
  45. data/lib/rigor/version.rb +1 -1
  46. data/sig/rigor/rbs_extended.rbs +14 -0
  47. data/sig/rigor/scope.rbs +1 -0
  48. data/sig/rigor/type.rbs +91 -1
  49. metadata +25 -1
@@ -0,0 +1,501 @@
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/file.c
6
+ ruby_prelude:
7
+ rbs:
8
+ - references/rbs/core/file.rbs
9
+ - references/rbs/core/file_test.rbs
10
+ purity_levels:
11
+ leaf: Prelude :leaf marker (VM-enforced) or C body uses no dispatch/yield/mutation.
12
+ trivial: Prelude method body is a literal return (self/true/false/nil/Integer).
13
+ leaf_when_numeric: C body falls through to rb_num_coerce_* only when an operand
14
+ is non-numeric; safe to fold when every argument is a concrete numeric.
15
+ inline_block: Prelude method carries :inline_block or :use_block; block-dependent.
16
+ block_dependent: C body yields or checks rb_block_given_p.
17
+ mutates_self: C body checks rb_check_frozen — typically a prelude to mutation.
18
+ dispatch: C body calls user-redefinable methods (rb_funcall*, rb_equal, rb_Float,
19
+ num_funcall*, etc).
20
+ unknown: C body not located in indexed C files.
21
+ classes:
22
+ File:
23
+ parent: rb_cIO
24
+ defined_at: references/ruby/file.c:7512
25
+ includes: []
26
+ constants:
27
+ Separator:
28
+ c_expression: separator
29
+ defined_at: references/ruby/file.c:7583
30
+ SEPARATOR:
31
+ c_expression: separator
32
+ defined_at: references/ruby/file.c:7585
33
+ ALT_SEPARATOR:
34
+ c_expression: Qnil
35
+ defined_at: references/ruby/file.c:7593
36
+ PATH_SEPARATOR:
37
+ c_expression: rb_fstring_cstr(PATH_SEP)
38
+ defined_at: references/ruby/file.c:7596
39
+ aliases: {}
40
+ instance_methods:
41
+ lstat:
42
+ source: c
43
+ cfunc: rb_file_lstat
44
+ arity: 0
45
+ defined_at: references/ruby/file.c:7599
46
+ c_body_at: references/ruby/file.c:1565
47
+ c_effects: []
48
+ purity: leaf
49
+ rbs:
50
+ - "() -> (File::Stat | nil)"
51
+ rbs_at: references/rbs/core/file.rbs:1951
52
+ atime:
53
+ source: c
54
+ cfunc: rb_file_atime
55
+ arity: 0
56
+ defined_at: references/ruby/file.c:7601
57
+ c_body_at: references/ruby/file.c:2469
58
+ c_effects: []
59
+ purity: leaf
60
+ rbs:
61
+ - "() -> Time"
62
+ rbs_at: references/rbs/core/file.rbs:1848
63
+ mtime:
64
+ source: c
65
+ cfunc: rb_file_mtime
66
+ arity: 0
67
+ defined_at: references/ruby/file.c:7602
68
+ c_body_at: references/ruby/file.c:2517
69
+ c_effects: []
70
+ purity: leaf
71
+ rbs:
72
+ - "() -> Time"
73
+ rbs_at: references/rbs/core/file.rbs:1961
74
+ ctime:
75
+ source: c
76
+ cfunc: rb_file_ctime
77
+ arity: 0
78
+ defined_at: references/ruby/file.c:7603
79
+ c_body_at: references/ruby/file.c:2572
80
+ c_effects: []
81
+ purity: leaf
82
+ rbs:
83
+ - "() -> Time"
84
+ rbs_at: references/rbs/core/file.rbs:1901
85
+ birthtime:
86
+ source: c
87
+ cfunc: rb_file_birthtime
88
+ arity: 0
89
+ defined_at: references/ruby/file.c:7604
90
+ purity: unknown
91
+ c_body_at: not_found
92
+ rbs:
93
+ - "() -> Time"
94
+ rbs_at: references/rbs/core/file.rbs:1860
95
+ size:
96
+ source: c
97
+ cfunc: file_size
98
+ arity: 0
99
+ defined_at: references/ruby/file.c:7605
100
+ c_body_at: references/ruby/file.c:2678
101
+ c_effects: []
102
+ purity: leaf
103
+ rbs:
104
+ - "() -> Integer"
105
+ rbs_at: references/rbs/core/file.rbs:1990
106
+ chmod:
107
+ source: c
108
+ cfunc: rb_file_chmod
109
+ arity: 1
110
+ defined_at: references/ruby/file.c:7607
111
+ c_body_at: references/ruby/file.c:2773
112
+ c_effects: []
113
+ purity: leaf
114
+ rbs:
115
+ - "(int mode) -> (0 | nil)"
116
+ rbs_at: references/rbs/core/file.rbs:1874
117
+ chown:
118
+ source: c
119
+ cfunc: rb_file_chown
120
+ arity: 2
121
+ defined_at: references/ruby/file.c:7608
122
+ c_body_at: references/ruby/file.c:2952
123
+ c_effects: []
124
+ purity: leaf
125
+ rbs:
126
+ - "(int? owner, int? group) -> (0 | nil)"
127
+ rbs_at: references/rbs/core/file.rbs:1888
128
+ truncate:
129
+ source: c
130
+ cfunc: rb_file_truncate
131
+ arity: 1
132
+ defined_at: references/ruby/file.c:7609
133
+ purity: unknown
134
+ c_body_at: not_found
135
+ rbs:
136
+ - "(int length) -> 0"
137
+ rbs_at: references/rbs/core/file.rbs:2020
138
+ flock:
139
+ source: c
140
+ cfunc: rb_file_flock
141
+ arity: 1
142
+ defined_at: references/ruby/file.c:7611
143
+ c_body_at: references/ruby/file.c:5524
144
+ c_effects: []
145
+ purity: leaf
146
+ rbs:
147
+ - "(int locking_constant) -> (0 | false)"
148
+ rbs_at: references/rbs/core/file.rbs:1937
149
+ singleton_methods:
150
+ stat:
151
+ source: c
152
+ cfunc: rb_file_s_stat
153
+ arity: 1
154
+ defined_at: references/ruby/file.c:7545
155
+ c_body_at: references/ruby/file.c:1460
156
+ c_effects: []
157
+ purity: leaf
158
+ rbs:
159
+ - "(path file_name) -> File::Stat"
160
+ rbs_at: references/rbs/core/file.rbs:1681
161
+ lstat:
162
+ source: c
163
+ cfunc: rb_file_s_lstat
164
+ arity: 1
165
+ defined_at: references/ruby/file.c:7546
166
+ c_body_at: references/ruby/file.c:1534
167
+ c_effects: []
168
+ purity: leaf
169
+ rbs:
170
+ - "(path file_name) -> File::Stat"
171
+ rbs_at: references/rbs/core/file.rbs:1387
172
+ ftype:
173
+ source: c
174
+ cfunc: rb_file_s_ftype
175
+ arity: 1
176
+ defined_at: references/ruby/file.c:7547
177
+ c_body_at: references/ruby/file.c:2419
178
+ c_effects: []
179
+ purity: leaf
180
+ rbs:
181
+ - "(path file_name) -> String"
182
+ rbs_at: references/rbs/core/file.rbs:1300
183
+ atime:
184
+ source: c
185
+ cfunc: rb_file_s_atime
186
+ arity: 1
187
+ defined_at: references/ruby/file.c:7549
188
+ c_body_at: references/ruby/file.c:2445
189
+ c_effects: []
190
+ purity: leaf
191
+ rbs:
192
+ - "(path | IO file_name) -> Time"
193
+ rbs_at: references/rbs/core/file.rbs:910
194
+ mtime:
195
+ source: c
196
+ cfunc: rb_file_s_mtime
197
+ arity: 1
198
+ defined_at: references/ruby/file.c:7550
199
+ c_body_at: references/ruby/file.c:2494
200
+ c_effects: []
201
+ purity: leaf
202
+ rbs:
203
+ - "(path | IO file_name) -> Time"
204
+ rbs_at: references/rbs/core/file.rbs:1420
205
+ ctime:
206
+ source: c
207
+ cfunc: rb_file_s_ctime
208
+ arity: 1
209
+ defined_at: references/ruby/file.c:7551
210
+ c_body_at: references/ruby/file.c:2546
211
+ c_effects: []
212
+ purity: leaf
213
+ rbs:
214
+ - "(path | IO file_name) -> Time"
215
+ rbs_at: references/rbs/core/file.rbs:1004
216
+ birthtime:
217
+ source: c
218
+ cfunc: rb_file_s_birthtime
219
+ arity: 1
220
+ defined_at: references/ruby/file.c:7552
221
+ purity: unknown
222
+ c_body_at: not_found
223
+ rbs:
224
+ - "(path | IO file_name) -> Time"
225
+ rbs_at: references/rbs/core/file.rbs:940
226
+ utime:
227
+ source: c
228
+ cfunc: rb_file_s_utime
229
+ arity: -1
230
+ defined_at: references/ruby/file.c:7554
231
+ c_body_at: references/ruby/file.c:3202
232
+ c_effects: []
233
+ purity: leaf
234
+ rbs:
235
+ - "(Time | Numeric atime, Time | Numeric mtime, *path file_name) -> Integer"
236
+ rbs_at: references/rbs/core/file.rbs:1771
237
+ chmod:
238
+ source: c
239
+ cfunc: rb_file_s_chmod
240
+ arity: -1
241
+ defined_at: references/ruby/file.c:7555
242
+ c_body_at: references/ruby/file.c:2726
243
+ c_effects: []
244
+ purity: leaf
245
+ rbs:
246
+ - "(int mode, *path file_name) -> Integer"
247
+ rbs_at: references/rbs/core/file.rbs:975
248
+ chown:
249
+ source: c
250
+ cfunc: rb_file_s_chown
251
+ arity: -1
252
+ defined_at: references/ruby/file.c:7556
253
+ c_body_at: references/ruby/file.c:2880
254
+ c_effects: []
255
+ purity: leaf
256
+ rbs:
257
+ - "(int? owner, int? group, *path file_name) -> Integer"
258
+ rbs_at: references/rbs/core/file.rbs:989
259
+ lchmod:
260
+ source: c
261
+ cfunc: rb_file_s_lchmod
262
+ arity: -1
263
+ defined_at: references/ruby/file.c:7557
264
+ purity: unknown
265
+ c_body_at: not_found
266
+ rbs:
267
+ - "(int mode, *path file_name) -> Integer"
268
+ rbs_at: references/rbs/core/file.rbs:1351
269
+ lchown:
270
+ source: c
271
+ cfunc: rb_file_s_lchown
272
+ arity: -1
273
+ defined_at: references/ruby/file.c:7558
274
+ purity: unknown
275
+ c_body_at: not_found
276
+ rbs:
277
+ - "(int? owner, int? group, *path file_name) -> Integer"
278
+ rbs_at: references/rbs/core/file.rbs:1361
279
+ lutime:
280
+ source: c
281
+ cfunc: rb_file_s_lutime
282
+ arity: -1
283
+ defined_at: references/ruby/file.c:7559
284
+ purity: unknown
285
+ c_body_at: not_found
286
+ rbs:
287
+ - "(Time | Numeric atime, Time | Numeric mtime, *path file_name) -> Integer"
288
+ rbs_at: references/rbs/core/file.rbs:1398
289
+ link:
290
+ source: c
291
+ cfunc: rb_file_s_link
292
+ arity: 2
293
+ defined_at: references/ruby/file.c:7561
294
+ purity: unknown
295
+ c_body_at: not_found
296
+ rbs:
297
+ - "(path old_name, path new_name) -> 0"
298
+ rbs_at: references/rbs/core/file.rbs:1374
299
+ symlink:
300
+ source: c
301
+ cfunc: rb_file_s_symlink
302
+ arity: 2
303
+ defined_at: references/ruby/file.c:7562
304
+ purity: unknown
305
+ c_body_at: not_found
306
+ rbs:
307
+ - "(path old_name, path new_name) -> 0"
308
+ rbs_at: references/rbs/core/file.rbs:1703
309
+ readlink:
310
+ source: c
311
+ cfunc: rb_file_s_readlink
312
+ arity: 1
313
+ defined_at: references/ruby/file.c:7563
314
+ purity: unknown
315
+ c_body_at: not_found
316
+ rbs:
317
+ - "(path link_name) -> String"
318
+ rbs_at: references/rbs/core/file.rbs:1568
319
+ unlink:
320
+ source: c
321
+ cfunc: rb_file_s_unlink
322
+ arity: -1
323
+ defined_at: references/ruby/file.c:7565
324
+ c_body_at: references/ruby/file.c:3420
325
+ c_effects: []
326
+ purity: leaf
327
+ rbs:
328
+ - "(*path file_name) -> Integer"
329
+ rbs_at: references/rbs/core/file.rbs:1760
330
+ delete:
331
+ source: c
332
+ cfunc: rb_file_s_unlink
333
+ arity: -1
334
+ defined_at: references/ruby/file.c:7566
335
+ c_body_at: references/ruby/file.c:3420
336
+ c_effects: []
337
+ purity: leaf
338
+ rename:
339
+ source: c
340
+ cfunc: rb_file_s_rename
341
+ arity: 2
342
+ defined_at: references/ruby/file.c:7567
343
+ c_body_at: references/ruby/file.c:3449
344
+ c_effects: []
345
+ purity: leaf
346
+ rbs:
347
+ - "(path old_name, path new_name) -> 0"
348
+ rbs_at: references/rbs/core/file.rbs:1607
349
+ umask:
350
+ source: c
351
+ cfunc: rb_file_s_umask
352
+ arity: -1
353
+ defined_at: references/ruby/file.c:7568
354
+ c_body_at: references/ruby/file.c:3496
355
+ c_effects: []
356
+ purity: leaf
357
+ rbs:
358
+ - "(?int umask) -> Integer"
359
+ rbs_at: references/rbs/core/file.rbs:1745
360
+ truncate:
361
+ source: c
362
+ cfunc: rb_file_s_truncate
363
+ arity: 2
364
+ defined_at: references/ruby/file.c:7569
365
+ purity: unknown
366
+ c_body_at: not_found
367
+ rbs:
368
+ - "(path file_name, int length) -> 0"
369
+ rbs_at: references/rbs/core/file.rbs:1730
370
+ mkfifo:
371
+ source: c
372
+ cfunc: rb_file_s_mkfifo
373
+ arity: -1
374
+ defined_at: references/ruby/file.c:7570
375
+ purity: unknown
376
+ c_body_at: not_found
377
+ rbs:
378
+ - "(path file_name, ?int mode) -> 0"
379
+ rbs_at: references/rbs/core/file.rbs:1408
380
+ expand_path:
381
+ source: c
382
+ cfunc: s_expand_path
383
+ arity: -1
384
+ defined_at: references/ruby/file.c:7571
385
+ c_body_at: references/ruby/file.c:4382
386
+ c_effects: []
387
+ purity: leaf
388
+ rbs:
389
+ - "(path file_name, ?path dir_string) -> String"
390
+ rbs_at: references/rbs/core/file.rbs:1136
391
+ absolute_path:
392
+ source: c
393
+ cfunc: s_absolute_path
394
+ arity: -1
395
+ defined_at: references/ruby/file.c:7572
396
+ c_body_at: references/ruby/file.c:4415
397
+ c_effects: []
398
+ purity: leaf
399
+ rbs:
400
+ - "(path file_name, ?path dir_string) -> String"
401
+ rbs_at: references/rbs/core/file.rbs:888
402
+ absolute_path?:
403
+ source: c
404
+ cfunc: s_absolute_path_p
405
+ arity: 1
406
+ defined_at: references/ruby/file.c:7573
407
+ c_body_at: references/ruby/file.c:4431
408
+ c_effects: []
409
+ purity: leaf
410
+ rbs:
411
+ - "(path file_name) -> bool"
412
+ rbs_at: references/rbs/core/file.rbs:898
413
+ realpath:
414
+ source: c
415
+ cfunc: rb_file_s_realpath
416
+ arity: -1
417
+ defined_at: references/ruby/file.c:7574
418
+ c_body_at: references/ruby/file.c:4796
419
+ c_effects: []
420
+ purity: leaf
421
+ rbs:
422
+ - "(path pathname, ?path dir_string) -> String"
423
+ rbs_at: references/rbs/core/file.rbs:1596
424
+ realdirpath:
425
+ source: c
426
+ cfunc: rb_file_s_realdirpath
427
+ arity: -1
428
+ defined_at: references/ruby/file.c:7575
429
+ c_body_at: references/ruby/file.c:4817
430
+ c_effects: []
431
+ purity: leaf
432
+ rbs:
433
+ - "(path pathname, ?path dir_string) -> String"
434
+ rbs_at: references/rbs/core/file.rbs:1582
435
+ basename:
436
+ source: c
437
+ cfunc: rb_file_s_basename
438
+ arity: -1
439
+ defined_at: references/ruby/file.c:7576
440
+ c_body_at: references/ruby/file.c:4942
441
+ c_effects: []
442
+ purity: leaf
443
+ rbs:
444
+ - "(path file_name, ?string suffix) -> String"
445
+ rbs_at: references/rbs/core/file.rbs:926
446
+ dirname:
447
+ source: c
448
+ cfunc: rb_file_s_dirname
449
+ arity: -1
450
+ defined_at: references/ruby/file.c:7577
451
+ c_body_at: references/ruby/file.c:5007
452
+ c_effects: []
453
+ purity: leaf
454
+ rbs:
455
+ - "(path file_name, ?Integer level) -> String"
456
+ rbs_at: references/rbs/core/file.rbs:1055
457
+ extname:
458
+ source: c
459
+ cfunc: rb_file_s_extname
460
+ arity: 1
461
+ defined_at: references/ruby/file.c:7578
462
+ c_body_at: references/ruby/file.c:5191
463
+ c_effects: []
464
+ purity: leaf
465
+ rbs:
466
+ - "(path path) -> String"
467
+ rbs_at: references/rbs/core/file.rbs:1162
468
+ path:
469
+ source: c
470
+ cfunc: rb_file_s_path
471
+ arity: 1
472
+ defined_at: references/ruby/file.c:7579
473
+ c_body_at: references/ruby/file.c:5235
474
+ c_effects: []
475
+ purity: leaf
476
+ rbs:
477
+ - "(path path) -> String"
478
+ rbs_at: references/rbs/core/file.rbs:1520
479
+ split:
480
+ source: c
481
+ cfunc: rb_file_s_split
482
+ arity: 1
483
+ defined_at: references/ruby/file.c:7586
484
+ c_body_at: references/ruby/file.c:5252
485
+ c_effects: []
486
+ purity: leaf
487
+ rbs:
488
+ - "(path file_name) -> [ String, String ]"
489
+ rbs_at: references/rbs/core/file.rbs:1671
490
+ join:
491
+ source: c
492
+ cfunc: rb_file_s_join
493
+ arity: -2
494
+ defined_at: references/ruby/file.c:7587
495
+ c_body_at: references/ruby/file.c:5343
496
+ c_effects: []
497
+ purity: leaf
498
+ rbs:
499
+ - "(*path) -> String"
500
+ rbs_at: references/rbs/core/file.rbs:1341
501
+ undefined: []