optimistic-json 0.1.2 → 0.1.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +6 -0
  4. data/Rakefile +5 -1
  5. data/lib/optimistic/json/parser.rb +28 -7
  6. data/lib/optimistic/json/version.rb +2 -1
  7. data/lib/optimistic/json.rb +1 -0
  8. data/sorbet/config +4 -0
  9. data/sorbet/rbi/annotations/.gitattributes +1 -0
  10. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  11. data/sorbet/rbi/gems/.gitattributes +1 -0
  12. data/sorbet/rbi/gems/ast@2.4.2.rbi +550 -0
  13. data/sorbet/rbi/gems/benchmark@0.5.0.rbi +621 -0
  14. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +1068 -0
  15. data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  16. data/sorbet/rbi/gems/gem-release@2.2.2.rbi +1335 -0
  17. data/sorbet/rbi/gems/io-console@0.6.0.rbi +9 -0
  18. data/sorbet/rbi/gems/json@2.7.0.rbi +1797 -0
  19. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +12986 -0
  20. data/sorbet/rbi/gems/logger@1.6.0.rbi +845 -0
  21. data/sorbet/rbi/gems/multi_json@1.15.0.rbi +218 -0
  22. data/sorbet/rbi/gems/netrc@0.11.0.rbi +147 -0
  23. data/sorbet/rbi/gems/parallel@1.28.0.rbi +270 -0
  24. data/sorbet/rbi/gems/parser@3.2.2.4.rbi +5154 -0
  25. data/sorbet/rbi/gems/prism@1.9.0.rbi +42224 -0
  26. data/sorbet/rbi/gems/psych@5.1.1.1.rbi +2321 -0
  27. data/sorbet/rbi/gems/racc@1.7.3.rbi +169 -0
  28. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +362 -0
  29. data/sorbet/rbi/gems/rake@13.1.0.rbi +3025 -0
  30. data/sorbet/rbi/gems/rbi@0.3.11.rbi +5505 -0
  31. data/sorbet/rbi/gems/rbs@4.0.2.rbi +6908 -0
  32. data/sorbet/rbi/gems/rdoc@6.6.0.rbi +9 -0
  33. data/sorbet/rbi/gems/regexp_parser@2.8.2.rbi +3268 -0
  34. data/sorbet/rbi/gems/reline@0.4.1.rbi +9 -0
  35. data/sorbet/rbi/gems/require-hooks@0.4.0.rbi +152 -0
  36. data/sorbet/rbi/gems/rexml@3.2.6.rbi +4798 -0
  37. data/sorbet/rbi/gems/rspec-core@3.12.2.rbi +9405 -0
  38. data/sorbet/rbi/gems/rspec-expectations@3.12.3.rbi +6013 -0
  39. data/sorbet/rbi/gems/rspec-mocks@3.12.6.rbi +4750 -0
  40. data/sorbet/rbi/gems/rspec-support@3.12.1.rbi +1261 -0
  41. data/sorbet/rbi/gems/rspec@3.12.0.rbi +15 -0
  42. data/sorbet/rbi/gems/rubocop-ast@1.30.0.rbi +6750 -0
  43. data/sorbet/rbi/gems/rubocop-capybara@2.19.0.rbi +1058 -0
  44. data/sorbet/rbi/gems/rubocop-factory_bot@2.24.0.rbi +875 -0
  45. data/sorbet/rbi/gems/rubocop-rspec@2.25.0.rbi +7696 -0
  46. data/sorbet/rbi/gems/rubocop@1.58.0.rbi +53790 -0
  47. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +988 -0
  48. data/sorbet/rbi/gems/rubydex@0.2.3.rbi +787 -0
  49. data/sorbet/rbi/gems/spoom@1.7.14.rbi +6151 -0
  50. data/sorbet/rbi/gems/stringio@3.1.0.rbi +9 -0
  51. data/sorbet/rbi/gems/tapioca@0.19.1.rbi +3558 -0
  52. data/sorbet/rbi/gems/thor@1.5.0.rbi +3870 -0
  53. data/sorbet/rbi/gems/tsort@0.2.0.rbi +387 -0
  54. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +64 -0
  55. data/sorbet/tapioca/config.yml +13 -0
  56. data/sorbet/tapioca/require.rb +4 -0
  57. metadata +54 -22
  58. data/sig/optimistic/json.rbs +0 -6
@@ -0,0 +1,875 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `rubocop-factory_bot` gem.
5
+ # Please instead update this file by running `bin/tapioca gem rubocop-factory_bot`.
6
+
7
+
8
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:3
9
+ module RuboCop; end
10
+
11
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/mixin/configurable_explicit_only.rb:4
12
+ module RuboCop::Cop; end
13
+
14
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/mixin/configurable_explicit_only.rb:5
15
+ module RuboCop::Cop::FactoryBot; end
16
+
17
+ # Use a consistent style to define associations.
18
+ #
19
+ # @safety
20
+ # This cop may cause false-positives in `EnforcedStyle: explicit`
21
+ # case. It recognizes any method call that has no arguments as an
22
+ # implicit association but it might be a user-defined trait call.
23
+ #
24
+ # @example EnforcedStyle: implicit (default)
25
+ # # bad
26
+ # factory :post do
27
+ # association :user
28
+ # end
29
+ #
30
+ # # good
31
+ # factory :post do
32
+ # user
33
+ # end
34
+ #
35
+ # # bad
36
+ # factory :post do
37
+ # association :user, :author
38
+ # end
39
+ #
40
+ # # good
41
+ # factory :post do
42
+ # user factory: %i[user author]
43
+ # end
44
+ #
45
+ # @example EnforcedStyle: explicit
46
+ # # bad
47
+ # factory :post do
48
+ # user
49
+ # end
50
+ #
51
+ # # good
52
+ # factory :post do
53
+ # association :user
54
+ # end
55
+ #
56
+ # # bad
57
+ # factory :post do
58
+ # user factory: %i[user author]
59
+ # end
60
+ #
61
+ # # good
62
+ # factory :post do
63
+ # association :user, :author
64
+ # end
65
+ #
66
+ # # good (NonImplicitAssociationMethodNames: ['email'])
67
+ # sequence :email do |n|
68
+ # "person#{n}@example.com"
69
+ # end
70
+ #
71
+ # factory :user do
72
+ # email
73
+ # end
74
+ #
75
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:63
76
+ class RuboCop::Cop::FactoryBot::AssociationStyle < ::RuboCop::Cop::Base
77
+ include ::RuboCop::Cop::ConfigurableEnforcedStyle
78
+ extend ::RuboCop::Cop::AutoCorrector
79
+
80
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:139
81
+ def association_names(param0); end
82
+
83
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:96
84
+ def explicit_association?(param0 = T.unsafe(nil)); end
85
+
86
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:113
87
+ def factory_option_matcher(param0 = T.unsafe(nil)); end
88
+
89
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:108
90
+ def implicit_association?(param0 = T.unsafe(nil)); end
91
+
92
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:82
93
+ def on_send(node); end
94
+
95
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:144
96
+ def trait_name(param0); end
97
+
98
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:134
99
+ def trait_names_from_explicit(param0 = T.unsafe(nil)); end
100
+
101
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:101
102
+ def with_strategy_build_option?(param0 = T.unsafe(nil)); end
103
+
104
+ private
105
+
106
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:148
107
+ def autocorrect(corrector, node); end
108
+
109
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:156
110
+ def autocorrect_to_explicit_style(corrector, node); end
111
+
112
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:164
113
+ def autocorrect_to_implicit_style(corrector, node); end
114
+
115
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:174
116
+ def bad?(node); end
117
+
118
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:195
119
+ def bad_associations_in(node); end
120
+
121
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:201
122
+ def children_of_factory_block(node); end
123
+
124
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:213
125
+ def factory_names_from_explicit(node); end
126
+
127
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:185
128
+ def keyword?(node); end
129
+
130
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:223
131
+ def non_implicit_association_method_name?(method_name); end
132
+
133
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:227
134
+ def non_implicit_association_method_names; end
135
+
136
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:240
137
+ def options_for_autocorrect_to_implicit_style(node); end
138
+
139
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:232
140
+ def options_from_explicit(node); end
141
+
142
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:249
143
+ def trait_within_trait?(node); end
144
+ end
145
+
146
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:68
147
+ RuboCop::Cop::FactoryBot::AssociationStyle::DEFAULT_NON_IMPLICIT_ASSOCIATION_METHOD_NAMES = T.let(T.unsafe(nil), Array)
148
+
149
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:76
150
+ RuboCop::Cop::FactoryBot::AssociationStyle::KEYWORDS = T.let(T.unsafe(nil), Array)
151
+
152
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/association_style.rb:75
153
+ RuboCop::Cop::FactoryBot::AssociationStyle::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
154
+
155
+ # Always declare attribute values as blocks.
156
+ #
157
+ # @example
158
+ # # bad
159
+ # kind [:active, :rejected].sample
160
+ #
161
+ # # good
162
+ # kind { [:active, :rejected].sample }
163
+ #
164
+ # # bad
165
+ # closed_at 1.day.from_now
166
+ #
167
+ # # good
168
+ # closed_at { 1.day.from_now }
169
+ #
170
+ # # bad
171
+ # count 1
172
+ #
173
+ # # good
174
+ # count { 1 }
175
+ #
176
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:27
177
+ class RuboCop::Cop::FactoryBot::AttributeDefinedStatically < ::RuboCop::Cop::Base
178
+ extend ::RuboCop::Cop::AutoCorrector
179
+
180
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:85
181
+ def association?(param0 = T.unsafe(nil)); end
182
+
183
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:38
184
+ def factory_attributes(param0 = T.unsafe(nil)); end
185
+
186
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:42
187
+ def on_block(node); end
188
+
189
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:33
190
+ def value_matcher(param0 = T.unsafe(nil)); end
191
+
192
+ private
193
+
194
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:119
195
+ def attribute_defining_method?(method_name); end
196
+
197
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:58
198
+ def autocorrect(corrector, node); end
199
+
200
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:87
201
+ def autocorrect_replacing_parens(corrector, node); end
202
+
203
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:94
204
+ def autocorrect_without_parens(corrector, node); end
205
+
206
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:103
207
+ def braces(node); end
208
+
209
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:66
210
+ def offensive_receiver?(receiver, node); end
211
+
212
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:80
213
+ def proc?(attribute); end
214
+
215
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:72
216
+ def receiver_matches_first_block_argument?(receiver, node); end
217
+
218
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:115
219
+ def reserved_method?(method_name); end
220
+
221
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:111
222
+ def value_hash_without_braces?(node); end
223
+ end
224
+
225
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/attribute_defined_statically.rb:30
226
+ RuboCop::Cop::FactoryBot::AttributeDefinedStatically::MSG = T.let(T.unsafe(nil), String)
227
+
228
+ # Handles `ExplicitOnly` configuration parameters.
229
+ #
230
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/mixin/configurable_explicit_only.rb:7
231
+ module RuboCop::Cop::FactoryBot::ConfigurableExplicitOnly
232
+ include ::RuboCop::FactoryBot::Language
233
+
234
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/mixin/configurable_explicit_only.rb:16
235
+ def explicit_only?; end
236
+
237
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/mixin/configurable_explicit_only.rb:10
238
+ def factory_call?(node); end
239
+ end
240
+
241
+ # Use a consistent style for parentheses in factory_bot calls.
242
+ #
243
+ # @example `EnforcedStyle: require_parentheses` (default)
244
+ #
245
+ # # bad
246
+ # create :user
247
+ # build :login
248
+ #
249
+ # # good
250
+ # create(:user)
251
+ # build(:login)
252
+ #
253
+ # @example `EnforcedStyle: omit_parentheses`
254
+ #
255
+ # # bad
256
+ # create(:user)
257
+ # build(:login)
258
+ #
259
+ # # good
260
+ # create :user
261
+ # build :login
262
+ #
263
+ # # also good
264
+ # # when method name and first argument are not on same line
265
+ # create(
266
+ # :user
267
+ # )
268
+ # build(
269
+ # :user,
270
+ # name: 'foo'
271
+ # )
272
+ #
273
+ # @example `ExplicitOnly: false` (default)
274
+ #
275
+ # # bad - with `EnforcedStyle: require_parentheses`
276
+ # FactoryBot.create :user
277
+ # build :user
278
+ #
279
+ # # good - with `EnforcedStyle: require_parentheses`
280
+ # FactoryBot.create(:user)
281
+ # build(:user)
282
+ #
283
+ # @example `ExplicitOnly: true`
284
+ #
285
+ # # bad - with `EnforcedStyle: require_parentheses`
286
+ # FactoryBot.create :user
287
+ # FactoryBot.build :user
288
+ #
289
+ # # good - with `EnforcedStyle: require_parentheses`
290
+ # FactoryBot.create(:user)
291
+ # FactoryBot.build(:user)
292
+ # create :user
293
+ # build :user
294
+ #
295
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:60
296
+ class RuboCop::Cop::FactoryBot::ConsistentParenthesesStyle < ::RuboCop::Cop::Base
297
+ include ::RuboCop::Cop::ConfigurableEnforcedStyle
298
+ include ::RuboCop::FactoryBot::Language
299
+ include ::RuboCop::Cop::FactoryBot::ConfigurableExplicitOnly
300
+ extend ::RuboCop::Cop::AutoCorrector
301
+
302
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:71
303
+ def factory_call(param0 = T.unsafe(nil)); end
304
+
305
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:82
306
+ def on_send(node); end
307
+
308
+ private
309
+
310
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:118
311
+ def ambiguous_without_parentheses?(node); end
312
+
313
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:90
314
+ def register_offense(node); end
315
+
316
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:97
317
+ def register_offense_with_parentheses(node); end
318
+
319
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:107
320
+ def register_offense_without_parentheses(node); end
321
+
322
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:122
323
+ def remove_parentheses(corrector, node); end
324
+
325
+ class << self
326
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:78
327
+ def autocorrect_incompatible_with; end
328
+ end
329
+ end
330
+
331
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:116
332
+ RuboCop::Cop::FactoryBot::ConsistentParenthesesStyle::AMBIGUOUS_TYPES = T.let(T.unsafe(nil), Array)
333
+
334
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:67
335
+ RuboCop::Cop::FactoryBot::ConsistentParenthesesStyle::FACTORY_CALLS = T.let(T.unsafe(nil), Set)
336
+
337
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:66
338
+ RuboCop::Cop::FactoryBot::ConsistentParenthesesStyle::MSG_OMIT_PARENS = T.let(T.unsafe(nil), String)
339
+
340
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:65
341
+ RuboCop::Cop::FactoryBot::ConsistentParenthesesStyle::MSG_REQUIRE_PARENS = T.let(T.unsafe(nil), String)
342
+
343
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/consistent_parentheses_style.rb:68
344
+ RuboCop::Cop::FactoryBot::ConsistentParenthesesStyle::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Set)
345
+
346
+ # Checks for create_list usage.
347
+ #
348
+ # This cop can be configured using the `EnforcedStyle` option
349
+ #
350
+ # @safety
351
+ # This cop's autocorrection is unsafe because replacing `n.times` to
352
+ # `create_list` changes its returned value.
353
+ #
354
+ # @example `EnforcedStyle: create_list` (default)
355
+ # # bad
356
+ # 3.times { create :user }
357
+ # 3.times.map { create :user }
358
+ # [create(:user), create(:user), create(:user)]
359
+ # Array.new(3) { create :user }
360
+ #
361
+ # # good
362
+ # create_list :user, 3
363
+ #
364
+ # # bad
365
+ # 3.times { create :user, age: 18 }
366
+ #
367
+ # # good - index is used to alter the created models attributes
368
+ # 3.times { |n| create :user, age: n }
369
+ #
370
+ # # good - contains a method call, may return different values
371
+ # 3.times { create :user, age: rand }
372
+ #
373
+ # @example `EnforcedStyle: n_times`
374
+ # # bad
375
+ # create_list :user, 3
376
+ # [create(:user), create(:user), create(:user)]
377
+ #
378
+ # # good
379
+ # 3.times.map { create :user }
380
+ #
381
+ # @example `ExplicitOnly: false` (default)
382
+ #
383
+ # # bad - with `EnforcedStyle: create_list`
384
+ # 3.times { FactoryBot.create :user }
385
+ # 3.times { create :user }
386
+ #
387
+ # # good - with `EnforcedStyle: create_list`
388
+ # FactoryBot.create_list :user, 3
389
+ # create_list :user, 3
390
+ #
391
+ # @example `ExplicitOnly: true`
392
+ #
393
+ # # bad - with `EnforcedStyle: create_list`
394
+ # 3.times { FactoryBot.create :user }
395
+ #
396
+ # # good - with `EnforcedStyle: create_list`
397
+ # FactoryBot.create_list :user, 3
398
+ # create_list :user, 3
399
+ # 3.times { create :user }
400
+ #
401
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:61
402
+ class RuboCop::Cop::FactoryBot::CreateList < ::RuboCop::Cop::Base
403
+ include ::RuboCop::Cop::ConfigurableEnforcedStyle
404
+ include ::RuboCop::FactoryBot::Language
405
+ include ::RuboCop::Cop::FactoryBot::ConfigurableExplicitOnly
406
+ extend ::RuboCop::Cop::AutoCorrector
407
+
408
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:92
409
+ def arguments_include_method_call?(param0 = T.unsafe(nil)); end
410
+
411
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:83
412
+ def block_with_arg_and_used?(param0 = T.unsafe(nil)); end
413
+
414
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:97
415
+ def factory_call(param0 = T.unsafe(nil)); end
416
+
417
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:107
418
+ def factory_calls_in_array?(param0); end
419
+
420
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:102
421
+ def factory_list_call(param0 = T.unsafe(nil)); end
422
+
423
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:111
424
+ def on_array(node); end
425
+
426
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:123
427
+ def on_block(node); end
428
+
429
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:136
430
+ def on_send(node); end
431
+
432
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:72
433
+ def repeat_count(param0 = T.unsafe(nil)); end
434
+
435
+ private
436
+
437
+ # For ease of modification, it is replaced with the `n_times` style,
438
+ # but if it is not appropriate for the configured style,
439
+ # it will be replaced in the subsequent autocorrection.
440
+ #
441
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:160
442
+ def autocorrect_same_factory_calls_in_array(corrector, node); end
443
+
444
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:171
445
+ def contains_only_factory?(node); end
446
+
447
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:179
448
+ def preferred_message_for_array(node); end
449
+
450
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:151
451
+ def repeat_multiple_time?(node); end
452
+
453
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:188
454
+ def same_factory_calls_in_array?(node); end
455
+ end
456
+
457
+ # :nodoc
458
+ #
459
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:194
460
+ module RuboCop::Cop::FactoryBot::CreateList::Corrector
461
+ private
462
+
463
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:197
464
+ def build_options_string(options); end
465
+
466
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:201
467
+ def format_method_call(node, method, arguments); end
468
+
469
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:209
470
+ def format_receiver(receiver); end
471
+ end
472
+
473
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:254
474
+ class RuboCop::Cop::FactoryBot::CreateList::CreateListCorrector
475
+ include ::RuboCop::Cop::FactoryBot::CreateList::Corrector
476
+
477
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:257
478
+ def initialize(node); end
479
+
480
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:261
481
+ def call(corrector); end
482
+
483
+ private
484
+
485
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:284
486
+ def build_arguments(node, count); end
487
+
488
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:293
489
+ def call_replacement(node); end
490
+
491
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:275
492
+ def call_with_block_replacement(node); end
493
+
494
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:306
495
+ def count_from(node); end
496
+
497
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:319
498
+ def format_block(node); end
499
+
500
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:327
501
+ def format_multiline_block(node); end
502
+
503
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:335
504
+ def format_singleline_block(node); end
505
+
506
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:273
507
+ def node; end
508
+ end
509
+
510
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:67
511
+ RuboCop::Cop::FactoryBot::CreateList::MSG_CREATE_LIST = T.let(T.unsafe(nil), String)
512
+
513
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:68
514
+ RuboCop::Cop::FactoryBot::CreateList::MSG_N_TIMES = T.let(T.unsafe(nil), String)
515
+
516
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:69
517
+ RuboCop::Cop::FactoryBot::CreateList::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
518
+
519
+ # :nodoc
520
+ #
521
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:217
522
+ class RuboCop::Cop::FactoryBot::CreateList::TimesCorrector
523
+ include ::RuboCop::Cop::FactoryBot::CreateList::Corrector
524
+
525
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:220
526
+ def initialize(node); end
527
+
528
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:224
529
+ def call(corrector); end
530
+
531
+ private
532
+
533
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:246
534
+ def factory_call_block_source; end
535
+
536
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:233
537
+ def generate_n_times_block(node); end
538
+
539
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/create_list.rb:231
540
+ def node; end
541
+ end
542
+
543
+ # Use definition in factory association instead of hard coding a strategy.
544
+ #
545
+ # @example
546
+ # # bad - only works for one strategy
547
+ # factory :foo do
548
+ # profile { create(:profile) }
549
+ # end
550
+ #
551
+ # # good - implicit
552
+ # factory :foo do
553
+ # profile
554
+ # end
555
+ #
556
+ # # good - explicit
557
+ # factory :foo do
558
+ # association :profile
559
+ # end
560
+ #
561
+ # # good - inline
562
+ # factory :foo do
563
+ # profile { association :profile }
564
+ # end
565
+ #
566
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_association_with_strategy.rb:29
567
+ class RuboCop::Cop::FactoryBot::FactoryAssociationWithStrategy < ::RuboCop::Cop::Base
568
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_association_with_strategy.rb:36
569
+ def factory_declaration(param0 = T.unsafe(nil)); end
570
+
571
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_association_with_strategy.rb:43
572
+ def factory_strategy_association(param0 = T.unsafe(nil)); end
573
+
574
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_association_with_strategy.rb:51
575
+ def on_block(node); end
576
+ end
577
+
578
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_association_with_strategy.rb:33
579
+ RuboCop::Cop::FactoryBot::FactoryAssociationWithStrategy::HARDCODED = T.let(T.unsafe(nil), Set)
580
+
581
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_association_with_strategy.rb:30
582
+ RuboCop::Cop::FactoryBot::FactoryAssociationWithStrategy::MSG = T.let(T.unsafe(nil), String)
583
+
584
+ # Use string value when setting the class attribute explicitly.
585
+ #
586
+ # This cop would promote faster tests by lazy-loading of
587
+ # application files. Also, this could help you suppress potential bugs
588
+ # in combination with external libraries by avoiding a preload of
589
+ # application files from the factory files.
590
+ #
591
+ # @example
592
+ # # bad
593
+ # factory :foo, class: Foo do
594
+ # end
595
+ #
596
+ # # good
597
+ # factory :foo, class: 'Foo' do
598
+ # end
599
+ #
600
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_class_name.rb:22
601
+ class RuboCop::Cop::FactoryBot::FactoryClassName < ::RuboCop::Cop::Base
602
+ extend ::RuboCop::Cop::AutoCorrector
603
+
604
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_class_name.rb:31
605
+ def class_name(param0 = T.unsafe(nil)); end
606
+
607
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_class_name.rb:35
608
+ def on_send(node); end
609
+
610
+ private
611
+
612
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_class_name.rb:48
613
+ def allowed?(const_name); end
614
+ end
615
+
616
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_class_name.rb:27
617
+ RuboCop::Cop::FactoryBot::FactoryClassName::ALLOWED_CONSTANTS = T.let(T.unsafe(nil), Array)
618
+
619
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_class_name.rb:25
620
+ RuboCop::Cop::FactoryBot::FactoryClassName::MSG = T.let(T.unsafe(nil), String)
621
+
622
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_class_name.rb:28
623
+ RuboCop::Cop::FactoryBot::FactoryClassName::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
624
+
625
+ # Checks for name style for argument of FactoryBot::Syntax::Methods.
626
+ #
627
+ # @example EnforcedStyle: symbol (default)
628
+ # # bad
629
+ # create('user')
630
+ # build "user", username: "NAME"
631
+ #
632
+ # # good
633
+ # create(:user)
634
+ # build :user, username: "NAME"
635
+ #
636
+ # @example EnforcedStyle: string
637
+ # # bad
638
+ # create(:user)
639
+ # build :user, username: "NAME"
640
+ #
641
+ # # good
642
+ # create('user')
643
+ # build "user", username: "NAME"
644
+ #
645
+ # @example `ExplicitOnly: false` (default)
646
+ #
647
+ # # bad - with `EnforcedStyle: symbol`
648
+ # FactoryBot.create('user')
649
+ # create('user')
650
+ #
651
+ # # good - with `EnforcedStyle: symbol`
652
+ # FactoryBot.create(:user)
653
+ # create(:user)
654
+ #
655
+ # @example `ExplicitOnly: true`
656
+ #
657
+ # # bad - with `EnforcedStyle: symbol`
658
+ # FactoryBot.create(:user)
659
+ # FactoryBot.build "user", username: "NAME"
660
+ #
661
+ # # good - with `EnforcedStyle: symbol`
662
+ # FactoryBot.create('user')
663
+ # FactoryBot.build "user", username: "NAME"
664
+ # FactoryBot.create(:user)
665
+ # create(:user)
666
+ #
667
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:48
668
+ class RuboCop::Cop::FactoryBot::FactoryNameStyle < ::RuboCop::Cop::Base
669
+ include ::RuboCop::Cop::ConfigurableEnforcedStyle
670
+ include ::RuboCop::FactoryBot::Language
671
+ include ::RuboCop::Cop::FactoryBot::ConfigurableExplicitOnly
672
+ extend ::RuboCop::Cop::AutoCorrector
673
+
674
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:59
675
+ def factory_call(param0 = T.unsafe(nil)); end
676
+
677
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:66
678
+ def on_send(node); end
679
+
680
+ private
681
+
682
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:82
683
+ def offense_for_string_style?(name); end
684
+
685
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:78
686
+ def offense_for_symbol_style?(name); end
687
+
688
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:86
689
+ def register_offense(name, prefer); end
690
+ end
691
+
692
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:55
693
+ RuboCop::Cop::FactoryBot::FactoryNameStyle::FACTORY_CALLS = T.let(T.unsafe(nil), Set)
694
+
695
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:54
696
+ RuboCop::Cop::FactoryBot::FactoryNameStyle::MSG = T.let(T.unsafe(nil), String)
697
+
698
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/factory_name_style.rb:56
699
+ RuboCop::Cop::FactoryBot::FactoryNameStyle::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Set)
700
+
701
+ # Do not create a FactoryBot sequence for an id column.
702
+ #
703
+ # @example
704
+ # # bad - can lead to conflicts between FactoryBot and DB sequences
705
+ # factory :foo do
706
+ # sequence :id
707
+ # end
708
+ #
709
+ # # good - a non-id column
710
+ # factory :foo do
711
+ # sequence :some_non_id_column
712
+ # end
713
+ #
714
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/id_sequence.rb:19
715
+ class RuboCop::Cop::FactoryBot::IdSequence < ::RuboCop::Cop::Base
716
+ include ::RuboCop::Cop::RangeHelp
717
+ extend ::RuboCop::Cop::AutoCorrector
718
+
719
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/id_sequence.rb:26
720
+ def on_send(node); end
721
+ end
722
+
723
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/id_sequence.rb:23
724
+ RuboCop::Cop::FactoryBot::IdSequence::MSG = T.let(T.unsafe(nil), String)
725
+
726
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/id_sequence.rb:24
727
+ RuboCop::Cop::FactoryBot::IdSequence::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
728
+
729
+ # Checks for redundant `factory` option.
730
+ #
731
+ # @example
732
+ # # bad
733
+ # association :user, factory: :user
734
+ #
735
+ # # good
736
+ # association :user
737
+ #
738
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/redundant_factory_option.rb:14
739
+ class RuboCop::Cop::FactoryBot::RedundantFactoryOption < ::RuboCop::Cop::Base
740
+ include ::RuboCop::Cop::RangeHelp
741
+ extend ::RuboCop::Cop::AutoCorrector
742
+
743
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/redundant_factory_option.rb:24
744
+ def association_with_a_factory_option(param0 = T.unsafe(nil)); end
745
+
746
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/redundant_factory_option.rb:42
747
+ def on_send(node); end
748
+
749
+ private
750
+
751
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/redundant_factory_option.rb:55
752
+ def autocorrect(corrector, node); end
753
+ end
754
+
755
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/redundant_factory_option.rb:19
756
+ RuboCop::Cop::FactoryBot::RedundantFactoryOption::MSG = T.let(T.unsafe(nil), String)
757
+
758
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/redundant_factory_option.rb:21
759
+ RuboCop::Cop::FactoryBot::RedundantFactoryOption::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
760
+
761
+ # Use shorthands from `FactoryBot::Syntax::Methods` in your specs.
762
+ #
763
+ # @safety
764
+ # The autocorrection is marked as unsafe because the cop
765
+ # cannot verify whether you already include
766
+ # `FactoryBot::Syntax::Methods` in your test suite.
767
+ #
768
+ # If you're using Rails, add the following configuration to
769
+ # `spec/support/factory_bot.rb` and be sure to require that file in
770
+ # `rails_helper.rb`:
771
+ #
772
+ # [source,ruby]
773
+ # ----
774
+ # RSpec.configure do |config|
775
+ # config.include FactoryBot::Syntax::Methods
776
+ # end
777
+ # ----
778
+ #
779
+ # If you're not using Rails:
780
+ #
781
+ # [source,ruby]
782
+ # ----
783
+ # RSpec.configure do |config|
784
+ # config.include FactoryBot::Syntax::Methods
785
+ #
786
+ # config.before(:suite) do
787
+ # FactoryBot.find_definitions
788
+ # end
789
+ # end
790
+ # ----
791
+ #
792
+ # @example
793
+ # # bad
794
+ # FactoryBot.create(:bar)
795
+ # FactoryBot.build(:bar)
796
+ # FactoryBot.attributes_for(:bar)
797
+ #
798
+ # # good
799
+ # create(:bar)
800
+ # build(:bar)
801
+ # attributes_for(:bar)
802
+ #
803
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:48
804
+ class RuboCop::Cop::FactoryBot::SyntaxMethods < ::RuboCop::Cop::Base
805
+ include ::RuboCop::Cop::RangeHelp
806
+ include ::RuboCop::FactoryBot::Language
807
+ extend ::RuboCop::Cop::AutoCorrector
808
+
809
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:73
810
+ def on_send(node); end
811
+
812
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:58
813
+ def spec_group?(param0 = T.unsafe(nil)); end
814
+
815
+ private
816
+
817
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:87
818
+ def crime_scene(node); end
819
+
820
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:109
821
+ def example_group_root?(node); end
822
+
823
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:113
824
+ def example_group_root_with_siblings?(node); end
825
+
826
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:101
827
+ def inside_example_group?(node); end
828
+
829
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:94
830
+ def offense(node); end
831
+ end
832
+
833
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:53
834
+ RuboCop::Cop::FactoryBot::SyntaxMethods::MSG = T.let(T.unsafe(nil), String)
835
+
836
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/cop/factory_bot/syntax_methods.rb:55
837
+ RuboCop::Cop::FactoryBot::SyntaxMethods::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Set)
838
+
839
+ # RuboCop factory_bot project namespace
840
+ #
841
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:5
842
+ module RuboCop::FactoryBot
843
+ class << self
844
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:54
845
+ def attribute_defining_methods; end
846
+
847
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:58
848
+ def reserved_methods; end
849
+ end
850
+ end
851
+
852
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:6
853
+ RuboCop::FactoryBot::ATTRIBUTE_DEFINING_METHODS = T.let(T.unsafe(nil), Array)
854
+
855
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:29
856
+ RuboCop::FactoryBot::DEFINITION_PROXY_METHODS = T.let(T.unsafe(nil), Array)
857
+
858
+ # Contains node matchers for common factory_bot DSL.
859
+ #
860
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/language.rb:6
861
+ module RuboCop::FactoryBot::Language
862
+ extend ::RuboCop::AST::NodePattern::Macros
863
+
864
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/language.rb:30
865
+ def factory_bot?(param0 = T.unsafe(nil)); end
866
+ end
867
+
868
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/language.rb:9
869
+ RuboCop::FactoryBot::Language::METHODS = T.let(T.unsafe(nil), Set)
870
+
871
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:42
872
+ RuboCop::FactoryBot::RESERVED_METHODS = T.let(T.unsafe(nil), Array)
873
+
874
+ # pkg:gem/rubocop-factory_bot#lib/rubocop/factory_bot/factory_bot.rb:14
875
+ RuboCop::FactoryBot::UNPROXIED_METHODS = T.let(T.unsafe(nil), Array)