ruby-lint 0.9.1 → 1.0.0.pre.preview1

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CONTRIBUTING.md +9 -11
  4. data/Gemfile +6 -3
  5. data/MANIFEST +7 -1
  6. data/README.md +15 -24
  7. data/benchmark/bootup.rb +13 -0
  8. data/checksum/ruby-lint-0.9.1.gem.sha512 +1 -0
  9. data/doc/code_analysis.md +20 -0
  10. data/doc/css/common.css +1 -0
  11. data/doc/images/flow.png +0 -0
  12. data/lib/ruby-lint.rb +1 -3
  13. data/lib/ruby-lint/analysis/base.rb +12 -2
  14. data/lib/ruby-lint/analysis/undefined_variables.rb +3 -2
  15. data/lib/ruby-lint/analysis/unused_variables.rb +3 -2
  16. data/lib/ruby-lint/ast/node.rb +1 -1
  17. data/lib/ruby-lint/benchmark/average.rb +115 -0
  18. data/lib/ruby-lint/cli/analyze.rb +19 -1
  19. data/lib/ruby-lint/constant_loader.rb +1 -3
  20. data/lib/ruby-lint/constant_path.rb +112 -0
  21. data/lib/ruby-lint/definition_builder/base.rb +0 -2
  22. data/lib/ruby-lint/definition_builder/ruby_module.rb +1 -1
  23. data/lib/ruby-lint/definitions/core/array.rb +304 -73
  24. data/lib/ruby-lint/definitions/core/fixnum.rb +575 -19
  25. data/lib/ruby-lint/definitions/core/float.rb +2650 -95
  26. data/lib/ruby-lint/definitions/core/hash.rb +926 -85
  27. data/lib/ruby-lint/definitions/core/ruby_copyright.rb +3 -1
  28. data/lib/ruby-lint/definitions/core/ruby_description.rb +3 -1
  29. data/lib/ruby-lint/definitions/core/ruby_engine.rb +3 -1
  30. data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +3 -1
  31. data/lib/ruby-lint/definitions/core/ruby_platform.rb +3 -1
  32. data/lib/ruby-lint/definitions/core/ruby_release_date.rb +3 -1
  33. data/lib/ruby-lint/definitions/core/ruby_version.rb +3 -1
  34. data/lib/ruby-lint/definitions/core/string.rb +847 -134
  35. data/lib/ruby-lint/definitions/core/string_io.rb +370 -25
  36. data/lib/ruby-lint/definitions/core/struct.rb +611 -146
  37. data/lib/ruby-lint/file_loader.rb +5 -6
  38. data/lib/ruby-lint/file_scanner.rb +44 -11
  39. data/lib/ruby-lint/inspector.rb +12 -2
  40. data/lib/ruby-lint/runner.rb +6 -2
  41. data/lib/ruby-lint/version.rb +1 -1
  42. data/lib/ruby-lint/virtual_machine.rb +19 -5
  43. data/ruby-lint.gemspec +1 -3
  44. data/spec/ruby-lint/analysis/argument_amount_spec.rb +5 -5
  45. data/spec/ruby-lint/analysis/base_spec.rb +4 -0
  46. data/spec/ruby-lint/analysis/shadowing_variables_spec.rb +4 -4
  47. data/spec/ruby-lint/analysis/undefined_methods_spec.rb +6 -6
  48. data/spec/ruby-lint/analysis/undefined_variables_spec.rb +5 -5
  49. data/spec/ruby-lint/analysis/unused_variables_spec.rb +12 -12
  50. data/spec/ruby-lint/cli/analyze_spec.rb +10 -0
  51. data/spec/ruby-lint/constant_path.rb +63 -0
  52. data/spec/ruby-lint/definition/ruby_object_spec.rb +2 -2
  53. data/spec/ruby-lint/report_spec.rb +2 -2
  54. data/spec/ruby-lint/runner_spec.rb +17 -0
  55. data/spec/ruby-lint/virtual_machine/assignments/assignment_arguments_spec.rb +14 -0
  56. data/spec/ruby-lint/virtual_machine/assignments/constants_spec.rb +23 -0
  57. data/spec/ruby-lint/virtual_machine/location_spec.rb +4 -4
  58. data/spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb +4 -4
  59. data/task/build.rake +2 -7
  60. data/task/doc.rake +3 -1
  61. data/task/generate.rake +3 -0
  62. metadata +20 -36
  63. checksums.yaml.gz.asc +0 -17
  64. data.tar.gz.asc +0 -17
  65. data/lib/ruby-lint/helper/constant_paths.rb +0 -50
  66. metadata.gz.asc +0 -17
@@ -11,8 +11,6 @@ module RubyLint
11
11
  # @return [Hash] Hash containing the loaded constants.
12
12
  #
13
13
  class ConstantLoader < Iterator
14
- include Helper::ConstantPaths
15
-
16
14
  attr_reader :loaded
17
15
 
18
16
  ##
@@ -36,7 +34,7 @@ module RubyLint
36
34
  # @param [RubyLint::Node] node
37
35
  #
38
36
  def on_const(node)
39
- load_constant(constant_segments(node).first)
37
+ load_constant(ConstantPath.new(node).root_node[1])
40
38
  end
41
39
 
42
40
  ##
@@ -0,0 +1,112 @@
1
+ module RubyLint
2
+ ##
3
+ # The ConstantPath class can be used for various operations on a constant AST
4
+ # node such as generating the full constant name.
5
+ #
6
+ # @!attribute [r] node
7
+ # @return [RubyLint::AST::Node]
8
+ #
9
+ class ConstantPath
10
+ attr_reader :node
11
+
12
+ ##
13
+ # Hash containing node types to remap when resolving them.
14
+ #
15
+ # @return [Hash]
16
+ #
17
+ REMAP_TYPES = {
18
+ :casgn => :const
19
+ }
20
+
21
+ ##
22
+ # @param [RubyLint::AST::Node] node
23
+ #
24
+ def initialize(node)
25
+ @node = node
26
+ end
27
+
28
+ ##
29
+ # Retrieves the definition associated with the constant path and returns
30
+ # it, or `nil` if no definition was found.
31
+ #
32
+ # @param [RubyLint::Definition::RubyObject] scope The scope to use for the
33
+ # lookups.
34
+ # @return [RubyLint::Definition::RubyObject]
35
+ #
36
+ def resolve(scope)
37
+ current = scope
38
+
39
+ constant_segments.each_with_index do |(type, name), index|
40
+ type = REMAP_TYPES.fetch(type, type)
41
+ found = current.lookup(type, name, index == 0)
42
+
43
+ if found
44
+ current = found.const? ? found : found.value
45
+ else
46
+ return
47
+ end
48
+ end
49
+
50
+ return current
51
+ end
52
+
53
+ ##
54
+ # Returns the very first segment of the constant path as an AST node.
55
+ #
56
+ # @return [RubyLint::AST::Node]
57
+ #
58
+ def root_node
59
+ return constant_segments.first
60
+ end
61
+
62
+ ##
63
+ # Returns a String containing the full constant path, e.g.
64
+ # "RubyLint::Runner".
65
+ #
66
+ # @return [String]
67
+ #
68
+ def to_s
69
+ return constant_segments.map { |seg| seg[1] }.join('::')
70
+ end
71
+
72
+ ##
73
+ # Returns an Array containing the segments of a constant path.
74
+ #
75
+ # @param [RubyLint::AST::Node] node
76
+ # @return [Array<String>]
77
+ #
78
+ def constant_segments(node = self.node)
79
+ segments = []
80
+
81
+ if has_child_node?(node)
82
+ segments.concat(constant_segments(node.children[0]))
83
+ end
84
+
85
+ segments << [node.type, name_for_node(node)]
86
+
87
+ return segments
88
+ end
89
+
90
+ private
91
+
92
+ ##
93
+ # @param [RubyLint::AST::Node] node
94
+ # @return [TrueClass|FalseClass]
95
+ #
96
+ def has_child_node?(node)
97
+ return node.children[0] && node.children[0].is_a?(AST::Node)
98
+ end
99
+
100
+ ##
101
+ # @param [RubyLint::AST::Node] node
102
+ # @return [String]
103
+ #
104
+ def name_for_node(node)
105
+ if node.type == :casgn
106
+ return node.children[1].to_s
107
+ else
108
+ return node.name
109
+ end
110
+ end
111
+ end # ConstantPath
112
+ end # RubyLint
@@ -10,8 +10,6 @@ module RubyLint
10
10
  # @return [RubyLint::Definition::RubyObject]
11
11
  #
12
12
  class Base
13
- include Helper::ConstantPaths
14
-
15
13
  attr_reader :definitions, :node, :options
16
14
 
17
15
  # Ensures compatibility with code that relies on either one of these
@@ -28,7 +28,7 @@ module RubyLint
28
28
  # name_prefix contains the constant path leading up to the name. For
29
29
  # example, if the name is `A::B::C` this node would contain `A::B`.
30
30
  if name_prefix
31
- found = resolve_constant_path(name_prefix)
31
+ found = ConstantPath.new(name_prefix).resolve(current_scope)
32
32
  scope = found if found
33
33
  end
34
34
 
@@ -1,8 +1,9 @@
1
- ##
2
- # Constant: Array
3
- # Created: 2013-04-01 18:33:52 +0200
4
- # Platform: rbx 2.0.0.rc1
1
+ # This file was automatically generated, any manual changes will be lost the
2
+ # next time this file is generated.
5
3
  #
4
+ # Created: 2013-11-11 20:16:57 +0100
5
+ # Platform: rbx 2.1.1
6
+
6
7
  RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
7
8
  klass.inherits(RubyLint::GlobalScope.constant_proxy('Object'))
8
9
 
@@ -10,8 +11,6 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
10
11
  method.define_rest_argument('args')
11
12
  end
12
13
 
13
- klass.define_method('__class_init__')
14
-
15
14
  klass.define_method('allocate')
16
15
 
17
16
  klass.define_method('try_convert') do |method|
@@ -69,6 +68,10 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
69
68
  method.define_argument('exception')
70
69
  end
71
70
 
71
+ klass.define_instance_method('all?')
72
+
73
+ klass.define_instance_method('any?')
74
+
72
75
  klass.define_instance_method('assoc') do |method|
73
76
  method.define_argument('obj')
74
77
  end
@@ -77,12 +80,18 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
77
80
  method.define_argument('idx')
78
81
  end
79
82
 
83
+ klass.define_instance_method('chunk') do |method|
84
+ method.define_optional_argument('initial_state')
85
+ end
86
+
80
87
  klass.define_instance_method('clear')
81
88
 
82
89
  klass.define_instance_method('collect')
83
90
 
84
91
  klass.define_instance_method('collect!')
85
92
 
93
+ klass.define_instance_method('collect_concat')
94
+
86
95
  klass.define_instance_method('combination') do |method|
87
96
  method.define_argument('num')
88
97
  end
@@ -95,9 +104,12 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
95
104
  method.define_argument('other')
96
105
  end
97
106
 
107
+ klass.define_instance_method('count') do |method|
108
+ method.define_optional_argument('item')
109
+ end
110
+
98
111
  klass.define_instance_method('cycle') do |method|
99
112
  method.define_optional_argument('n')
100
- method.define_block_argument('block')
101
113
  end
102
114
 
103
115
  klass.define_instance_method('delete') do |method|
@@ -108,20 +120,48 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
108
120
  method.define_argument('idx')
109
121
  end
110
122
 
111
- klass.define_instance_method('delete_if') do |method|
112
- method.define_block_argument('block')
123
+ klass.define_instance_method('delete_if')
124
+
125
+ klass.define_instance_method('detect') do |method|
126
+ method.define_optional_argument('ifnone')
113
127
  end
114
128
 
115
129
  klass.define_instance_method('drop') do |method|
116
130
  method.define_argument('n')
117
131
  end
118
132
 
133
+ klass.define_instance_method('drop_while')
134
+
119
135
  klass.define_instance_method('each')
120
136
 
137
+ klass.define_instance_method('each_cons') do |method|
138
+ method.define_argument('num')
139
+ end
140
+
141
+ klass.define_instance_method('each_entry') do |method|
142
+ method.define_rest_argument('pass')
143
+ end
144
+
121
145
  klass.define_instance_method('each_index')
122
146
 
147
+ klass.define_instance_method('each_slice') do |method|
148
+ method.define_argument('slice_size')
149
+ end
150
+
151
+ klass.define_instance_method('each_with_index') do |method|
152
+ method.define_rest_argument('args')
153
+ end
154
+
155
+ klass.define_instance_method('each_with_object') do |method|
156
+ method.define_argument('memo')
157
+ end
158
+
123
159
  klass.define_instance_method('empty?')
124
160
 
161
+ klass.define_instance_method('entries') do |method|
162
+ method.define_rest_argument('arg')
163
+ end
164
+
125
165
  klass.define_instance_method('eql?') do |method|
126
166
  method.define_argument('other')
127
167
  end
@@ -137,6 +177,12 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
137
177
  method.define_optional_argument('c')
138
178
  end
139
179
 
180
+ klass.define_instance_method('find') do |method|
181
+ method.define_optional_argument('ifnone')
182
+ end
183
+
184
+ klass.define_instance_method('find_all')
185
+
140
186
  klass.define_instance_method('find_index') do |method|
141
187
  method.define_optional_argument('obj')
142
188
  end
@@ -145,6 +191,8 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
145
191
  method.define_optional_argument('n')
146
192
  end
147
193
 
194
+ klass.define_instance_method('flat_map')
195
+
148
196
  klass.define_instance_method('flatten') do |method|
149
197
  method.define_optional_argument('level')
150
198
  end
@@ -153,6 +201,12 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
153
201
  method.define_optional_argument('level')
154
202
  end
155
203
 
204
+ klass.define_instance_method('grep') do |method|
205
+ method.define_argument('pattern')
206
+ end
207
+
208
+ klass.define_instance_method('group_by')
209
+
156
210
  klass.define_instance_method('hash')
157
211
 
158
212
  klass.define_instance_method('include?') do |method|
@@ -163,6 +217,11 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
163
217
  method.define_optional_argument('obj')
164
218
  end
165
219
 
220
+ klass.define_instance_method('inject') do |method|
221
+ method.define_optional_argument('initial')
222
+ method.define_optional_argument('sym')
223
+ end
224
+
166
225
  klass.define_instance_method('insert') do |method|
167
226
  method.define_argument('idx')
168
227
  method.define_rest_argument('items')
@@ -174,20 +233,36 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
174
233
  method.define_optional_argument('sep')
175
234
  end
176
235
 
177
- klass.define_instance_method('keep_if') do |method|
178
- method.define_block_argument('block')
179
- end
236
+ klass.define_instance_method('keep_if')
180
237
 
181
238
  klass.define_instance_method('last') do |method|
182
239
  method.define_optional_argument('n')
183
240
  end
184
241
 
242
+ klass.define_instance_method('lazy')
243
+
185
244
  klass.define_instance_method('length')
186
245
 
187
246
  klass.define_instance_method('map')
188
247
 
189
248
  klass.define_instance_method('map!')
190
249
 
250
+ klass.define_instance_method('max')
251
+
252
+ klass.define_instance_method('max_by')
253
+
254
+ klass.define_instance_method('member?') do |method|
255
+ method.define_argument('obj')
256
+ end
257
+
258
+ klass.define_instance_method('min')
259
+
260
+ klass.define_instance_method('min_by')
261
+
262
+ klass.define_instance_method('minmax')
263
+
264
+ klass.define_instance_method('minmax_by')
265
+
191
266
  klass.define_instance_method('new_range') do |method|
192
267
  method.define_argument('start')
193
268
  method.define_argument('count')
@@ -199,13 +274,18 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
199
274
 
200
275
  klass.define_instance_method('nitems')
201
276
 
277
+ klass.define_instance_method('none?')
278
+
279
+ klass.define_instance_method('one?')
280
+
202
281
  klass.define_instance_method('pack') do |method|
203
282
  method.define_argument('directives')
204
283
  end
205
284
 
285
+ klass.define_instance_method('partition')
286
+
206
287
  klass.define_instance_method('permutation') do |method|
207
288
  method.define_optional_argument('num')
208
- method.define_block_argument('block')
209
289
  end
210
290
 
211
291
  klass.define_instance_method('pop') do |method|
@@ -214,7 +294,6 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
214
294
 
215
295
  klass.define_instance_method('product') do |method|
216
296
  method.define_rest_argument('args')
217
- method.define_block_argument('block')
218
297
  end
219
298
 
220
299
  klass.define_instance_method('push') do |method|
@@ -225,22 +304,21 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
225
304
  method.define_argument('obj')
226
305
  end
227
306
 
228
- klass.define_instance_method('reject') do |method|
229
- method.define_block_argument('block')
307
+ klass.define_instance_method('reduce') do |method|
308
+ method.define_optional_argument('initial')
309
+ method.define_optional_argument('sym')
230
310
  end
231
311
 
232
- klass.define_instance_method('reject!') do |method|
233
- method.define_block_argument('block')
234
- end
312
+ klass.define_instance_method('reject')
313
+
314
+ klass.define_instance_method('reject!')
235
315
 
236
316
  klass.define_instance_method('repeated_combination') do |method|
237
317
  method.define_argument('combination_size')
238
- method.define_block_argument('block')
239
318
  end
240
319
 
241
320
  klass.define_instance_method('repeated_permutation') do |method|
242
321
  method.define_argument('combination_size')
243
- method.define_block_argument('block')
244
322
  end
245
323
 
246
324
  klass.define_instance_method('replace') do |method|
@@ -266,14 +344,13 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
266
344
  end
267
345
 
268
346
  klass.define_instance_method('sample') do |method|
269
- method.define_rest_argument('args')
347
+ method.define_optional_argument('count')
348
+ method.define_optional_argument('options')
270
349
  end
271
350
 
272
351
  klass.define_instance_method('select')
273
352
 
274
- klass.define_instance_method('select!') do |method|
275
- method.define_block_argument('block')
276
- end
353
+ klass.define_instance_method('select!')
277
354
 
278
355
  klass.define_instance_method('shelljoin')
279
356
 
@@ -301,36 +378,42 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
301
378
  method.define_optional_argument('length')
302
379
  end
303
380
 
304
- klass.define_instance_method('sort') do |method|
305
- method.define_block_argument('block')
381
+ klass.define_instance_method('slice_before') do |method|
382
+ method.define_optional_argument('arg')
306
383
  end
307
384
 
308
- klass.define_instance_method('sort!') do |method|
309
- method.define_block_argument('block')
310
- end
385
+ klass.define_instance_method('sort')
311
386
 
312
- klass.define_instance_method('sort_by!') do |method|
313
- method.define_block_argument('block')
314
- end
387
+ klass.define_instance_method('sort!')
315
388
 
316
- klass.define_instance_method('sort_inplace') do |method|
317
- method.define_block_argument('block')
318
- end
389
+ klass.define_instance_method('sort_by')
390
+
391
+ klass.define_instance_method('sort_by!')
392
+
393
+ klass.define_instance_method('sort_inplace')
319
394
 
320
395
  klass.define_instance_method('start')
321
396
 
322
397
  klass.define_instance_method('start=')
323
398
 
399
+ klass.define_instance_method('take') do |method|
400
+ method.define_argument('n')
401
+ end
402
+
403
+ klass.define_instance_method('take_while')
404
+
324
405
  klass.define_instance_method('to_a')
325
406
 
326
407
  klass.define_instance_method('to_ary')
327
408
 
328
- klass.define_instance_method('to_generator') do |method|
329
- method.define_argument('method')
330
- end
331
-
332
409
  klass.define_instance_method('to_s')
333
410
 
411
+ klass.define_instance_method('to_set') do |method|
412
+ method.define_optional_argument('klass')
413
+ method.define_rest_argument('args')
414
+ method.define_block_argument('block')
415
+ end
416
+
334
417
  klass.define_instance_method('to_tuple')
335
418
 
336
419
  klass.define_instance_method('total')
@@ -343,13 +426,9 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
343
426
 
344
427
  klass.define_instance_method('tuple=')
345
428
 
346
- klass.define_instance_method('uniq') do |method|
347
- method.define_block_argument('block')
348
- end
429
+ klass.define_instance_method('uniq')
349
430
 
350
- klass.define_instance_method('uniq!') do |method|
351
- method.define_block_argument('block')
352
- end
431
+ klass.define_instance_method('uniq!')
353
432
 
354
433
  klass.define_instance_method('unshift') do |method|
355
434
  method.define_rest_argument('values')
@@ -359,6 +438,10 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
359
438
  method.define_rest_argument('args')
360
439
  end
361
440
 
441
+ klass.define_instance_method('with_object') do |method|
442
+ method.define_argument('memo')
443
+ end
444
+
362
445
  klass.define_instance_method('zip') do |method|
363
446
  method.define_rest_argument('others')
364
447
  end
@@ -368,49 +451,197 @@ RubyLint::GlobalScope.definitions.define_constant('Array') do |klass|
368
451
  end
369
452
  end
370
453
 
371
- ##
372
- # Constant: Array::SortedElement
373
- # Created: 2013-04-01 18:33:52 +0200
374
- # Platform: rbx 2.0.0.rc1
375
- #
376
- RubyLint::GlobalScope.definitions.define_constant('Array::SortedElement') do |klass|
454
+ RubyLint::GlobalScope.definitions.define_constant('Array::Enumerator') do |klass|
377
455
  klass.inherits(RubyLint::GlobalScope.constant_proxy('Object'))
378
456
 
379
- klass.define_method('__class_init__')
457
+ klass.define_instance_method('all?')
380
458
 
381
- klass.define_instance_method('<=>') do |method|
382
- method.define_argument('other')
459
+ klass.define_instance_method('any?')
460
+
461
+ klass.define_instance_method('chunk') do |method|
462
+ method.define_optional_argument('initial_state')
383
463
  end
384
464
 
385
- klass.define_instance_method('initialize') do |method|
386
- method.define_argument('val')
387
- method.define_argument('sort_id')
465
+ klass.define_instance_method('collect')
466
+
467
+ klass.define_instance_method('collect_concat')
468
+
469
+ klass.define_instance_method('count') do |method|
470
+ method.define_optional_argument('item')
388
471
  end
389
472
 
390
- klass.define_instance_method('sort_id')
473
+ klass.define_instance_method('cycle') do |method|
474
+ method.define_optional_argument('many')
475
+ end
391
476
 
392
- klass.define_instance_method('value')
393
- end
477
+ klass.define_instance_method('detect') do |method|
478
+ method.define_optional_argument('ifnone')
479
+ end
394
480
 
395
- ##
396
- # Constant: Array::ValueGenerator
397
- # Created: 2013-04-01 18:33:52 +0200
398
- # Platform: rbx 2.0.0.rc1
399
- #
400
- RubyLint::GlobalScope.definitions.define_constant('Array::ValueGenerator') do |klass|
401
- klass.inherits(RubyLint::GlobalScope.constant_proxy('Object'))
481
+ klass.define_instance_method('drop') do |method|
482
+ method.define_argument('n')
483
+ end
402
484
 
403
- klass.define_method('__class_init__')
485
+ klass.define_instance_method('drop_while')
404
486
 
405
- klass.define_instance_method('initialize') do |method|
406
- method.define_argument('array')
487
+ klass.define_instance_method('each') do |method|
488
+ method.define_rest_argument('args')
489
+ end
490
+
491
+ klass.define_instance_method('each_cons') do |method|
492
+ method.define_argument('num')
407
493
  end
408
494
 
495
+ klass.define_instance_method('each_entry') do |method|
496
+ method.define_rest_argument('pass')
497
+ end
498
+
499
+ klass.define_instance_method('each_slice') do |method|
500
+ method.define_argument('slice_size')
501
+ end
502
+
503
+ klass.define_instance_method('each_with_index')
504
+
505
+ klass.define_instance_method('each_with_object') do |method|
506
+ method.define_argument('memo')
507
+ end
508
+
509
+ klass.define_instance_method('entries') do |method|
510
+ method.define_rest_argument('arg')
511
+ end
512
+
513
+ klass.define_instance_method('find') do |method|
514
+ method.define_optional_argument('ifnone')
515
+ end
516
+
517
+ klass.define_instance_method('find_all')
518
+
519
+ klass.define_instance_method('find_index') do |method|
520
+ method.define_optional_argument('value')
521
+ end
522
+
523
+ klass.define_instance_method('first') do |method|
524
+ method.define_optional_argument('n')
525
+ end
526
+
527
+ klass.define_instance_method('flat_map')
528
+
529
+ klass.define_instance_method('grep') do |method|
530
+ method.define_argument('pattern')
531
+ end
532
+
533
+ klass.define_instance_method('group_by')
534
+
535
+ klass.define_instance_method('include?') do |method|
536
+ method.define_argument('obj')
537
+ end
538
+
539
+ klass.define_instance_method('inject') do |method|
540
+ method.define_optional_argument('initial')
541
+ method.define_optional_argument('sym')
542
+ end
543
+
544
+ klass.define_instance_method('lazy')
545
+
546
+ klass.define_instance_method('map')
547
+
548
+ klass.define_instance_method('max')
549
+
550
+ klass.define_instance_method('max_by')
551
+
552
+ klass.define_instance_method('member?') do |method|
553
+ method.define_argument('obj')
554
+ end
555
+
556
+ klass.define_instance_method('min')
557
+
558
+ klass.define_instance_method('min_by')
559
+
560
+ klass.define_instance_method('minmax')
561
+
562
+ klass.define_instance_method('minmax_by')
563
+
409
564
  klass.define_instance_method('next')
410
565
 
411
- klass.define_instance_method('next?')
566
+ klass.define_instance_method('next_values')
567
+
568
+ klass.define_instance_method('none?')
569
+
570
+ klass.define_instance_method('one?')
571
+
572
+ klass.define_instance_method('partition')
573
+
574
+ klass.define_instance_method('peek')
575
+
576
+ klass.define_instance_method('peek_values')
577
+
578
+ klass.define_instance_method('reduce') do |method|
579
+ method.define_optional_argument('initial')
580
+ method.define_optional_argument('sym')
581
+ end
582
+
583
+ klass.define_instance_method('reject')
584
+
585
+ klass.define_instance_method('reverse_each')
412
586
 
413
587
  klass.define_instance_method('rewind')
588
+
589
+ klass.define_instance_method('select')
590
+
591
+ klass.define_instance_method('size')
592
+
593
+ klass.define_instance_method('slice_before') do |method|
594
+ method.define_optional_argument('arg')
595
+ end
596
+
597
+ klass.define_instance_method('sort')
598
+
599
+ klass.define_instance_method('sort_by')
600
+
601
+ klass.define_instance_method('take') do |method|
602
+ method.define_argument('n')
603
+ end
604
+
605
+ klass.define_instance_method('take_while')
606
+
607
+ klass.define_instance_method('to_a') do |method|
608
+ method.define_rest_argument('arg')
609
+ end
610
+
611
+ klass.define_instance_method('to_set') do |method|
612
+ method.define_optional_argument('klass')
613
+ method.define_rest_argument('args')
614
+ method.define_block_argument('block')
615
+ end
616
+
617
+ klass.define_instance_method('with_index') do |method|
618
+ method.define_optional_argument('offset')
619
+ end
620
+
621
+ klass.define_instance_method('with_object') do |method|
622
+ method.define_argument('memo')
623
+ end
624
+
625
+ klass.define_instance_method('zip') do |method|
626
+ method.define_rest_argument('args')
627
+ end
628
+ end
629
+
630
+ RubyLint::GlobalScope.definitions.define_constant('Array::SortedElement') do |klass|
631
+ klass.inherits(RubyLint::GlobalScope.constant_proxy('Object'))
632
+
633
+ klass.define_instance_method('<=>') do |method|
634
+ method.define_argument('other')
635
+ end
636
+
637
+ klass.define_instance_method('initialize') do |method|
638
+ method.define_argument('val')
639
+ method.define_argument('sort_id')
640
+ end
641
+
642
+ klass.define_instance_method('sort_id')
643
+
644
+ klass.define_instance_method('value')
414
645
  end
415
646
 
416
- RubyLint::GlobalScope.definitions.lookup(:const, 'Array').deep_freeze
647
+ RubyLint::GlobalScope.definitions.lookup(:const, 'Array').deep_freeze