rubocop 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/config/default.yml +61 -9
- data/lib/rubocop.rb +6 -1
- data/lib/rubocop/comment_config.rb +6 -6
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/space_before_brackets.rb +10 -12
- data/lib/rubocop/cop/lint/deprecated_constants.rb +75 -0
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +44 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +10 -6
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +2 -1
- data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +48 -0
- data/lib/rubocop/cop/mixin/allowed_identifiers.rb +18 -0
- data/lib/rubocop/cop/mixin/comments_help.rb +1 -10
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
- data/lib/rubocop/cop/naming/variable_name.rb +2 -0
- data/lib/rubocop/cop/naming/variable_number.rb +1 -8
- data/lib/rubocop/cop/style/empty_literal.rb +6 -2
- data/lib/rubocop/cop/style/endless_method.rb +102 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +2 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +8 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +4 -0
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +4 -0
- data/lib/rubocop/cop/style/raise_args.rb +3 -2
- data/lib/rubocop/cop/style/redundant_return.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +29 -2
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +1 -1
- data/lib/rubocop/target_ruby.rb +47 -11
- data/lib/rubocop/version.rb +1 -1
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e14b02ef2156539b9acbf92f0a131cbf5459cccdbb799cf96116f51b61e45c3
|
4
|
+
data.tar.gz: 2322dcababa13d2dbc001fc4a6fb8fe8c39e39b0d27869f4b1b5c59aceefa577
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afc301f47f48f46587318215a0d64a246ac9f4007f7c2396867a1c26cff2a467d59ebd30531adaf5dd3eebcaea001f19b34ab4737bebfe4b51dda7f329a0b4f9
|
7
|
+
data.tar.gz: ee54178b27d0dc5e058f004a27ea53d581583bf3386bf2fc572b4b16ad6099d849720935a6c632aaade0a3c71ca92129c0b3c9dc4dff80e00977d5141bc02615
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -51,7 +51,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
|
|
51
51
|
in your `Gemfile`:
|
52
52
|
|
53
53
|
```rb
|
54
|
-
gem 'rubocop', '~> 1.
|
54
|
+
gem 'rubocop', '~> 1.8', require: false
|
55
55
|
```
|
56
56
|
|
57
57
|
See [versioning](https://docs.rubocop.org/rubocop/1.0/versioning.html) for further details.
|
@@ -241,5 +241,5 @@ RuboCop's changelog is available [here](CHANGELOG.md).
|
|
241
241
|
|
242
242
|
## Copyright
|
243
243
|
|
244
|
-
Copyright (c) 2012-
|
244
|
+
Copyright (c) 2012-2021 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for
|
245
245
|
further details.
|
data/config/default.yml
CHANGED
@@ -132,12 +132,13 @@ AllCops:
|
|
132
132
|
# If a value is specified for TargetRubyVersion then it is used. Acceptable
|
133
133
|
# values are specificed as a float (i.e. 2.5); the teeny version of Ruby
|
134
134
|
# should not be included. If the project specifies a Ruby version in the
|
135
|
-
# .ruby-version
|
136
|
-
# the desired version of Ruby by inspecting the
|
137
|
-
#
|
138
|
-
#
|
139
|
-
# from the lock file.) If the
|
140
|
-
#
|
135
|
+
# .tool-versions or .ruby-version files, Gemfile or gems.rb file, RuboCop will
|
136
|
+
# try to determine the desired version of Ruby by inspecting the
|
137
|
+
# .tool-versions file first, then .ruby-version, followed by the Gemfile.lock
|
138
|
+
# or gems.locked file. (Although the Ruby version is specified in the Gemfile
|
139
|
+
# or gems.rb file, RuboCop reads the final value from the lock file.) If the
|
140
|
+
# Ruby version is still unresolved, RuboCop will use the oldest officially
|
141
|
+
# supported Ruby version (currently Ruby 2.4).
|
141
142
|
TargetRubyVersion: ~
|
142
143
|
# Determines if a notification for extension libraries should be shown when
|
143
144
|
# rubocop is run. Keys are the name of the extension, and values are an array
|
@@ -1197,7 +1198,6 @@ Layout/SpaceBeforeBrackets:
|
|
1197
1198
|
StyleGuide: '#space-in-brackets-access'
|
1198
1199
|
Enabled: pending
|
1199
1200
|
VersionAdded: '1.7'
|
1200
|
-
Safe: false
|
1201
1201
|
|
1202
1202
|
Layout/SpaceBeforeComma:
|
1203
1203
|
Description: 'No spaces before commas.'
|
@@ -1469,6 +1469,34 @@ Lint/DeprecatedClassMethods:
|
|
1469
1469
|
Enabled: true
|
1470
1470
|
VersionAdded: '0.19'
|
1471
1471
|
|
1472
|
+
Lint/DeprecatedConstants:
|
1473
|
+
Description: 'Checks for deprecated constants.'
|
1474
|
+
Enabled: pending
|
1475
|
+
VersionAdded: '1.8'
|
1476
|
+
# You can configure deprecated constants.
|
1477
|
+
# If there is an alternative method, you can set alternative value as `Alternative`.
|
1478
|
+
# And you can set the deprecated version as `DeprecatedVersion`.
|
1479
|
+
# These options can be omitted if they are not needed.
|
1480
|
+
#
|
1481
|
+
# DeprecatedConstants:
|
1482
|
+
# 'DEPRECATED_CONSTANT':
|
1483
|
+
# Alternative: 'alternative_value'
|
1484
|
+
# DeprecatedVersion: 'deprecated_version'
|
1485
|
+
#
|
1486
|
+
DeprecatedConstants:
|
1487
|
+
'NIL':
|
1488
|
+
Alternative: 'nil'
|
1489
|
+
DeprecatedVersion: '2.4'
|
1490
|
+
'TRUE':
|
1491
|
+
Alternative: 'true'
|
1492
|
+
DeprecatedVersion: '2.4'
|
1493
|
+
'FALSE':
|
1494
|
+
Alternative: 'false'
|
1495
|
+
DeprecatedVersion: '2.4'
|
1496
|
+
'Random::DEFAULT':
|
1497
|
+
Alternative: 'Random.new'
|
1498
|
+
DeprecatedVersion: '3.0'
|
1499
|
+
|
1472
1500
|
Lint/DeprecatedOpenSSLConstant:
|
1473
1501
|
Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`."
|
1474
1502
|
Enabled: true
|
@@ -1674,6 +1702,11 @@ Lint/InterpolationCheck:
|
|
1674
1702
|
VersionAdded: '0.50'
|
1675
1703
|
VersionChanged: '0.87'
|
1676
1704
|
|
1705
|
+
Lint/LambdaWithoutLiteralBlock:
|
1706
|
+
Description: 'Checks uses of lambda without a literal block.'
|
1707
|
+
Enabled: pending
|
1708
|
+
VersionAdded: '1.8'
|
1709
|
+
|
1677
1710
|
Lint/LiteralAsCondition:
|
1678
1711
|
Description: 'Checks of literals used in conditions.'
|
1679
1712
|
Enabled: true
|
@@ -1836,6 +1869,11 @@ Lint/RedundantCopEnableDirective:
|
|
1836
1869
|
Enabled: true
|
1837
1870
|
VersionAdded: '0.76'
|
1838
1871
|
|
1872
|
+
Lint/RedundantDirGlobSort:
|
1873
|
+
Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.'
|
1874
|
+
Enabled: pending
|
1875
|
+
VersionAdded: '1.8'
|
1876
|
+
|
1839
1877
|
Lint/RedundantRequireStatement:
|
1840
1878
|
Description: 'Checks for unnecessary `require` statement.'
|
1841
1879
|
Enabled: true
|
@@ -2502,10 +2540,12 @@ Naming/VariableName:
|
|
2502
2540
|
StyleGuide: '#snake-case-symbols-methods-vars'
|
2503
2541
|
Enabled: true
|
2504
2542
|
VersionAdded: '0.50'
|
2543
|
+
VersionChanged: '1.8'
|
2505
2544
|
EnforcedStyle: snake_case
|
2506
2545
|
SupportedStyles:
|
2507
2546
|
- snake_case
|
2508
2547
|
- camelCase
|
2548
|
+
AllowedIdentifiers: []
|
2509
2549
|
|
2510
2550
|
Naming/VariableNumber:
|
2511
2551
|
Description: 'Use the configured style when numbering symbols, methods and variables.'
|
@@ -3197,6 +3237,17 @@ Style/EndBlock:
|
|
3197
3237
|
VersionAdded: '0.9'
|
3198
3238
|
VersionChanged: '0.81'
|
3199
3239
|
|
3240
|
+
Style/EndlessMethod:
|
3241
|
+
Description: 'Avoid the use of multi-lined endless method definitions.'
|
3242
|
+
StyleGuide: '#endless-methods'
|
3243
|
+
Enabled: pending
|
3244
|
+
VersionAdded: '1.8'
|
3245
|
+
EnforcedStyle: allow_single_line
|
3246
|
+
SupportedStyles:
|
3247
|
+
- allow_single_line
|
3248
|
+
- allow_always
|
3249
|
+
- disallow
|
3250
|
+
|
3200
3251
|
Style/EvalWithLocation:
|
3201
3252
|
Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.'
|
3202
3253
|
Enabled: true
|
@@ -3726,7 +3777,8 @@ Style/MutableConstant:
|
|
3726
3777
|
Description: 'Do not assign mutable objects to constants.'
|
3727
3778
|
Enabled: true
|
3728
3779
|
VersionAdded: '0.34'
|
3729
|
-
VersionChanged: '
|
3780
|
+
VersionChanged: '1.8'
|
3781
|
+
SafeAutoCorrect: false
|
3730
3782
|
EnforcedStyle: literals
|
3731
3783
|
SupportedStyles:
|
3732
3784
|
# literals: freeze literals assigned to constants
|
@@ -4330,7 +4382,7 @@ Style/SingleLineMethods:
|
|
4330
4382
|
StyleGuide: '#no-single-line-methods'
|
4331
4383
|
Enabled: true
|
4332
4384
|
VersionAdded: '0.9'
|
4333
|
-
VersionChanged: '1.
|
4385
|
+
VersionChanged: '1.8'
|
4334
4386
|
AllowIfMethodIsEmpty: true
|
4335
4387
|
|
4336
4388
|
Style/SlicingWithRange:
|
data/lib/rubocop.rb
CHANGED
@@ -7,7 +7,7 @@ require 'rainbow'
|
|
7
7
|
require 'set'
|
8
8
|
require 'forwardable'
|
9
9
|
require 'regexp_parser'
|
10
|
-
require 'unicode/display_width
|
10
|
+
require 'unicode/display_width'
|
11
11
|
|
12
12
|
# we have to require RuboCop's version, before rubocop-ast's
|
13
13
|
require_relative 'rubocop/version'
|
@@ -61,6 +61,7 @@ require_relative 'rubocop/cop/mixin/annotation_comment'
|
|
61
61
|
require_relative 'rubocop/cop/mixin/array_min_size'
|
62
62
|
require_relative 'rubocop/cop/mixin/array_syntax'
|
63
63
|
require_relative 'rubocop/cop/mixin/alignment'
|
64
|
+
require_relative 'rubocop/cop/mixin/allowed_identifiers'
|
64
65
|
require_relative 'rubocop/cop/mixin/allowed_methods'
|
65
66
|
require_relative 'rubocop/cop/mixin/auto_corrector'
|
66
67
|
require_relative 'rubocop/cop/mixin/check_assignment'
|
@@ -262,6 +263,7 @@ require_relative 'rubocop/cop/lint/constant_definition_in_block'
|
|
262
263
|
require_relative 'rubocop/cop/lint/constant_resolution'
|
263
264
|
require_relative 'rubocop/cop/lint/debugger'
|
264
265
|
require_relative 'rubocop/cop/lint/deprecated_class_methods'
|
266
|
+
require_relative 'rubocop/cop/lint/deprecated_constants'
|
265
267
|
require_relative 'rubocop/cop/lint/deprecated_open_ssl_constant'
|
266
268
|
require_relative 'rubocop/cop/lint/disjunctive_assignment_in_constructor'
|
267
269
|
require_relative 'rubocop/cop/lint/duplicate_branch'
|
@@ -295,6 +297,7 @@ require_relative 'rubocop/cop/lint/implicit_string_concatenation'
|
|
295
297
|
require_relative 'rubocop/cop/lint/inherit_exception'
|
296
298
|
require_relative 'rubocop/cop/lint/ineffective_access_modifier'
|
297
299
|
require_relative 'rubocop/cop/lint/interpolation_check'
|
300
|
+
require_relative 'rubocop/cop/lint/lambda_without_literal_block'
|
298
301
|
require_relative 'rubocop/cop/lint/literal_as_condition'
|
299
302
|
require_relative 'rubocop/cop/lint/literal_in_interpolation'
|
300
303
|
require_relative 'rubocop/cop/lint/loop'
|
@@ -318,6 +321,7 @@ require_relative 'rubocop/cop/lint/raise_exception'
|
|
318
321
|
require_relative 'rubocop/cop/lint/rand_one'
|
319
322
|
require_relative 'rubocop/cop/lint/redundant_cop_disable_directive'
|
320
323
|
require_relative 'rubocop/cop/lint/redundant_cop_enable_directive'
|
324
|
+
require_relative 'rubocop/cop/lint/redundant_dir_glob_sort'
|
321
325
|
require_relative 'rubocop/cop/lint/redundant_require_statement'
|
322
326
|
require_relative 'rubocop/cop/lint/redundant_safe_navigation'
|
323
327
|
require_relative 'rubocop/cop/lint/redundant_splat_expansion'
|
@@ -446,6 +450,7 @@ require_relative 'rubocop/cop/style/empty_else'
|
|
446
450
|
require_relative 'rubocop/cop/style/empty_lambda_parameter'
|
447
451
|
require_relative 'rubocop/cop/style/empty_literal'
|
448
452
|
require_relative 'rubocop/cop/style/empty_method'
|
453
|
+
require_relative 'rubocop/cop/style/endless_method'
|
449
454
|
require_relative 'rubocop/cop/style/encoding'
|
450
455
|
require_relative 'rubocop/cop/style/end_block'
|
451
456
|
require_relative 'rubocop/cop/style/eval_with_location'
|
@@ -47,6 +47,12 @@ module RuboCop
|
|
47
47
|
)
|
48
48
|
end
|
49
49
|
|
50
|
+
def comment_only_line?(line_number)
|
51
|
+
non_comment_token_line_numbers.none? do |non_comment_line_number|
|
52
|
+
non_comment_line_number == line_number
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
50
56
|
private
|
51
57
|
|
52
58
|
def extra_enabled_comments_with_names(extras:, names:)
|
@@ -166,12 +172,6 @@ module RuboCop
|
|
166
172
|
@all_cop_names ||= Cop::Registry.global.names - [REDUNDANT_DISABLE]
|
167
173
|
end
|
168
174
|
|
169
|
-
def comment_only_line?(line_number)
|
170
|
-
non_comment_token_line_numbers.none? do |non_comment_line_number|
|
171
|
-
non_comment_line_number == line_number
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
175
|
def non_comment_token_line_numbers
|
176
176
|
@non_comment_token_line_numbers ||= begin
|
177
177
|
non_comment_tokens = processed_source.tokens.reject(&:comment?)
|
@@ -16,14 +16,14 @@ module RuboCop
|
|
16
16
|
# if a +
|
17
17
|
# b
|
18
18
|
# something &&
|
19
|
-
#
|
19
|
+
# something_else
|
20
20
|
# end
|
21
21
|
#
|
22
22
|
# # good
|
23
23
|
# if a +
|
24
24
|
# b
|
25
25
|
# something &&
|
26
|
-
#
|
26
|
+
# something_else
|
27
27
|
# end
|
28
28
|
#
|
29
29
|
# @example EnforcedStyle: indented
|
@@ -6,10 +6,6 @@ module RuboCop
|
|
6
6
|
# Checks for space between the name of a receiver and a left
|
7
7
|
# brackets.
|
8
8
|
#
|
9
|
-
# This cop is marked as unsafe because it can occur false positives
|
10
|
-
# for `do_something [this_is_an_array_literal_argument]` that take
|
11
|
-
# an array without parentheses as an argument.
|
12
|
-
#
|
13
9
|
# @example
|
14
10
|
#
|
15
11
|
# # bad
|
@@ -25,21 +21,23 @@ module RuboCop
|
|
25
21
|
MSG = 'Remove the space before the opening brackets.'
|
26
22
|
|
27
23
|
def on_send(node)
|
28
|
-
return if node.parenthesized? || node.parent&.send_type?
|
29
24
|
return unless (first_argument = node.first_argument)
|
30
25
|
|
31
26
|
begin_pos = first_argument.source_range.begin_pos
|
32
|
-
|
33
|
-
return unless (range = offense_range(node, first_argument, begin_pos))
|
27
|
+
return unless (range = offense_range(node, begin_pos))
|
34
28
|
|
35
29
|
register_offense(range)
|
36
30
|
end
|
37
31
|
|
38
32
|
private
|
39
33
|
|
40
|
-
def offense_range(node,
|
41
|
-
if
|
42
|
-
|
34
|
+
def offense_range(node, begin_pos)
|
35
|
+
if reference_variable_with_brackets?(node)
|
36
|
+
receiver_end_pos = node.receiver.source_range.end_pos
|
37
|
+
selector_begin_pos = node.loc.selector.begin_pos
|
38
|
+
return if receiver_end_pos >= selector_begin_pos
|
39
|
+
|
40
|
+
range_between(receiver_end_pos, selector_begin_pos)
|
43
41
|
elsif node.method?(:[]=)
|
44
42
|
end_pos = node.receiver.source_range.end_pos
|
45
43
|
|
@@ -55,8 +53,8 @@ module RuboCop
|
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
|
-
def
|
59
|
-
node.receiver
|
56
|
+
def reference_variable_with_brackets?(node)
|
57
|
+
node.receiver&.variable? && node.method?(:[]) && node.arguments.size == 1
|
60
58
|
end
|
61
59
|
end
|
62
60
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for deprecated constants.
|
7
|
+
#
|
8
|
+
# It has `DeprecatedConstants` config. If there is an alternative method, you can set
|
9
|
+
# alternative value as `Alternative`. And you can set the deprecated version as
|
10
|
+
# `DeprecatedVersion`. These options can be omitted if they are not needed.
|
11
|
+
#
|
12
|
+
# DeprecatedConstants:
|
13
|
+
# 'DEPRECATED_CONSTANT':
|
14
|
+
# Alternative: 'alternative_value'
|
15
|
+
# DeprecatedVersion: 'deprecated_version'
|
16
|
+
#
|
17
|
+
# By default, `NIL`, `TRUE`, `FALSE` and `Random::DEFAULT` are configured.
|
18
|
+
#
|
19
|
+
# @example
|
20
|
+
#
|
21
|
+
# # bad
|
22
|
+
# NIL
|
23
|
+
# TRUE
|
24
|
+
# FALSE
|
25
|
+
# Random::DEFAULT # Return value of Ruby 2 is `Random` instance, Ruby 3.0 is `Random` class.
|
26
|
+
#
|
27
|
+
# # good
|
28
|
+
# nil
|
29
|
+
# true
|
30
|
+
# false
|
31
|
+
# Random.new # `::DEFAULT` has been deprecated in Ruby 3, `.new` is compatible with Ruby 2.
|
32
|
+
#
|
33
|
+
class DeprecatedConstants < Base
|
34
|
+
extend AutoCorrector
|
35
|
+
|
36
|
+
SUGGEST_GOOD_MSG = 'Use `%<good>s` instead of `%<bad>s`%<deprecated_message>s.'
|
37
|
+
DO_NOT_USE_MSG = 'Do not use `%<bad>s`%<deprecated_message>s.'
|
38
|
+
|
39
|
+
def on_const(node)
|
40
|
+
constant = node.absolute? ? consntant_name(node, node.short_name.to_s) : node.source
|
41
|
+
return unless (deprecated_constant = deprecated_constants[constant])
|
42
|
+
|
43
|
+
alternative = deprecated_constant['Alternative']
|
44
|
+
version = deprecated_constant['DeprecatedVersion']
|
45
|
+
|
46
|
+
add_offense(node, message: message(alternative, node.source, version)) do |corrector|
|
47
|
+
corrector.replace(node, alternative)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def consntant_name(node, nested_constant_name)
|
54
|
+
return nested_constant_name unless node.namespace.const_type?
|
55
|
+
|
56
|
+
consntant_name(node.namespace, "#{node.namespace.short_name}::#{nested_constant_name}")
|
57
|
+
end
|
58
|
+
|
59
|
+
def message(good, bad, deprecated_version)
|
60
|
+
deprecated_message = ", deprecated since Ruby #{deprecated_version}" if deprecated_version
|
61
|
+
|
62
|
+
if good
|
63
|
+
format(SUGGEST_GOOD_MSG, good: good, bad: bad, deprecated_message: deprecated_message)
|
64
|
+
else
|
65
|
+
format(DO_NOT_USE_MSG, bad: bad, deprecated_message: deprecated_message)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def deprecated_constants
|
70
|
+
cop_config.fetch('DeprecatedConstants', {})
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks uses of lambda without a literal block.
|
7
|
+
# It emulates the following warning in Ruby 3.0:
|
8
|
+
#
|
9
|
+
# % ruby -vwe 'lambda(&proc {})'
|
10
|
+
# ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19]
|
11
|
+
# -e:1: warning: lambda without a literal block is deprecated; use the proc without
|
12
|
+
# lambda instead
|
13
|
+
#
|
14
|
+
# This way, proc object is never converted to lambda.
|
15
|
+
# Auto-correction replaces with compatible proc argument.
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
#
|
19
|
+
# # bad
|
20
|
+
# lambda(&proc { do_something })
|
21
|
+
# lambda(&Proc.new { do_something })
|
22
|
+
#
|
23
|
+
# # good
|
24
|
+
# proc { do_something }
|
25
|
+
# Proc.new { do_something }
|
26
|
+
# lambda { do_something } # If you use lambda.
|
27
|
+
#
|
28
|
+
class LambdaWithoutLiteralBlock < Base
|
29
|
+
extend AutoCorrector
|
30
|
+
|
31
|
+
MSG = 'lambda without a literal block is deprecated; use the proc without lambda instead.'
|
32
|
+
RESTRICT_ON_SEND = %i[lambda].freeze
|
33
|
+
|
34
|
+
def on_send(node)
|
35
|
+
return if node.parent&.block_type? || !node.first_argument
|
36
|
+
|
37
|
+
add_offense(node) do |corrector|
|
38
|
+
corrector.replace(node, node.first_argument.source.delete('&'))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -11,6 +11,11 @@ module RuboCop
|
|
11
11
|
# that are hard to debug. To ensure this doesn't happen,
|
12
12
|
# always sort the list.
|
13
13
|
#
|
14
|
+
# `Dir.glob` and `Dir[]` sort globbed results by default in Ruby 3.0.
|
15
|
+
# So all bad cases are acceptable when Ruby 3.0 or higher are used.
|
16
|
+
#
|
17
|
+
# This cop will be deprecated and removed when supporting only Ruby 3.0 and higher.
|
18
|
+
#
|
14
19
|
# @example
|
15
20
|
#
|
16
21
|
# # bad
|
@@ -23,8 +28,6 @@ module RuboCop
|
|
23
28
|
# require file
|
24
29
|
# end
|
25
30
|
#
|
26
|
-
# @example
|
27
|
-
#
|
28
31
|
# # bad
|
29
32
|
# Dir.glob(Rails.root.join(__dir__, 'test', '*.rb')) do |file|
|
30
33
|
# require file
|
@@ -35,28 +38,28 @@ module RuboCop
|
|
35
38
|
# require file
|
36
39
|
# end
|
37
40
|
#
|
38
|
-
# @example
|
39
|
-
#
|
40
41
|
# # bad
|
41
42
|
# Dir['./lib/**/*.rb'].each(&method(:require))
|
42
43
|
#
|
43
44
|
# # good
|
44
45
|
# Dir['./lib/**/*.rb'].sort.each(&method(:require))
|
45
46
|
#
|
46
|
-
# @example
|
47
|
-
#
|
48
47
|
# # bad
|
49
48
|
# Dir.glob(Rails.root.join('test', '*.rb'), &method(:require))
|
50
49
|
#
|
51
50
|
# # good
|
52
51
|
# Dir.glob(Rails.root.join('test', '*.rb')).sort.each(&method(:require))
|
53
52
|
#
|
53
|
+
# # good - Respect intent if `sort` keyword option is specified in Ruby 3.0 or higher.
|
54
|
+
# Dir.glob(Rails.root.join(__dir__, 'test', '*.rb'), sort: false).each(&method(:require))
|
55
|
+
#
|
54
56
|
class NonDeterministicRequireOrder < Base
|
55
57
|
extend AutoCorrector
|
56
58
|
|
57
59
|
MSG = 'Sort files before requiring them.'
|
58
60
|
|
59
61
|
def on_block(node)
|
62
|
+
return if target_ruby_version >= 3.0
|
60
63
|
return unless node.body
|
61
64
|
return unless unsorted_dir_loop?(node.send_node)
|
62
65
|
|
@@ -70,6 +73,7 @@ module RuboCop
|
|
70
73
|
end
|
71
74
|
|
72
75
|
def on_block_pass(node)
|
76
|
+
return if target_ruby_version >= 3.0
|
73
77
|
return unless method_require?(node)
|
74
78
|
return unless unsorted_dir_pass?(node.parent)
|
75
79
|
|
@@ -61,7 +61,8 @@ module RuboCop
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def comment_range_with_surrounding_space(range)
|
64
|
-
if previous_line_blank?(range)
|
64
|
+
if previous_line_blank?(range) &&
|
65
|
+
processed_source.comment_config.comment_only_line?(range.line)
|
65
66
|
# When the previous line is blank, it should be retained
|
66
67
|
range_with_surrounding_space(range: range, side: :right)
|
67
68
|
else
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# Sort globbed results by default in Ruby 3.0.
|
7
|
+
# This cop checks for redundant `sort` method to `Dir.glob` and `Dir[]`.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
#
|
11
|
+
# # bad
|
12
|
+
# Dir.glob('./lib/**/*.rb').sort.each do |file|
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# Dir['./lib/**/*.rb'].sort.each do |file|
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# Dir.glob('./lib/**/*.rb').each do |file|
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# Dir['./lib/**/*.rb'].each do |file|
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
class RedundantDirGlobSort < Base
|
26
|
+
extend AutoCorrector
|
27
|
+
extend TargetRubyVersion
|
28
|
+
|
29
|
+
minimum_target_ruby_version 3.0
|
30
|
+
|
31
|
+
MSG = 'Remove redundant `sort`.'
|
32
|
+
RESTRICT_ON_SEND = %i[sort].freeze
|
33
|
+
GLOB_METHODS = %i[glob []].freeze
|
34
|
+
|
35
|
+
def on_send(node)
|
36
|
+
return unless (receiver = node.receiver)
|
37
|
+
return unless receiver.receiver.const_type? && receiver.receiver.short_name == :Dir
|
38
|
+
return unless GLOB_METHODS.include?(receiver.method_name)
|
39
|
+
|
40
|
+
add_offense(node.loc.selector) do |corrector|
|
41
|
+
corrector.remove(node.loc.selector)
|
42
|
+
corrector.remove(node.loc.dot)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
# This module encapsulates the ability to allow certain identifiers in a cop.
|
6
|
+
module AllowedIdentifiers
|
7
|
+
SIGILS = '@$' # if a variable starts with a sigil it will be removed
|
8
|
+
|
9
|
+
def allowed_identifier?(name)
|
10
|
+
allowed_identifiers.include?(name.to_s.delete(SIGILS))
|
11
|
+
end
|
12
|
+
|
13
|
+
def allowed_identifiers
|
14
|
+
cop_config.fetch('AllowedIdentifiers', [])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -22,16 +22,7 @@ module RuboCop
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def begin_pos_with_comment(node)
|
25
|
-
|
26
|
-
first_comment = nil
|
27
|
-
|
28
|
-
processed_source.comments_before_line(annotation_line)
|
29
|
-
.reverse_each do |comment|
|
30
|
-
if comment.location.line == annotation_line
|
31
|
-
first_comment = comment
|
32
|
-
annotation_line -= 1
|
33
|
-
end
|
34
|
-
end
|
25
|
+
first_comment = processed_source.ast_with_comments[node].first
|
35
26
|
|
36
27
|
start_line_position(first_comment || node)
|
37
28
|
end
|
@@ -20,6 +20,7 @@ module RuboCop
|
|
20
20
|
# # good
|
21
21
|
# fooBar = 1
|
22
22
|
class VariableName < Base
|
23
|
+
include AllowedIdentifiers
|
23
24
|
include ConfigurableNaming
|
24
25
|
|
25
26
|
MSG = 'Use %<style>s for variable names.'
|
@@ -27,6 +28,7 @@ module RuboCop
|
|
27
28
|
def on_lvasgn(node)
|
28
29
|
name, = *node
|
29
30
|
return unless name
|
31
|
+
return if allowed_identifier?(name)
|
30
32
|
|
31
33
|
check_name(node, name, node.loc.name)
|
32
34
|
end
|
@@ -97,6 +97,7 @@ module RuboCop
|
|
97
97
|
# expect(Open3).to receive(:capture3)
|
98
98
|
#
|
99
99
|
class VariableNumber < Base
|
100
|
+
include AllowedIdentifiers
|
100
101
|
include ConfigurableNumbering
|
101
102
|
|
102
103
|
MSG = 'Use %<style>s for %<identifier_type>s numbers.'
|
@@ -139,14 +140,6 @@ module RuboCop
|
|
139
140
|
|
140
141
|
format(MSG, style: style, identifier_type: identifier_type)
|
141
142
|
end
|
142
|
-
|
143
|
-
def allowed_identifier?(name)
|
144
|
-
allowed_identifiers.include?(name.to_s.delete('@'))
|
145
|
-
end
|
146
|
-
|
147
|
-
def allowed_identifiers
|
148
|
-
cop_config.fetch('AllowedIdentifiers', [])
|
149
|
-
end
|
150
143
|
end
|
151
144
|
end
|
152
145
|
end
|
@@ -32,8 +32,12 @@ module RuboCop
|
|
32
32
|
def_node_matcher :str_node, '(send (const {nil? cbase} :String) :new)'
|
33
33
|
def_node_matcher :array_with_block,
|
34
34
|
'(block (send (const {nil? cbase} :Array) :new) args _)'
|
35
|
-
def_node_matcher :hash_with_block,
|
36
|
-
|
35
|
+
def_node_matcher :hash_with_block, <<~PATTERN
|
36
|
+
{
|
37
|
+
(block (send (const {nil? cbase} :Hash) :new) args _)
|
38
|
+
(numblock (send (const {nil? cbase} :Hash) :new) ...)
|
39
|
+
}
|
40
|
+
PATTERN
|
37
41
|
|
38
42
|
def on_send(node)
|
39
43
|
return unless (message = offense_message(node))
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for endless methods.
|
7
|
+
#
|
8
|
+
# It can enforce either the use of endless methods definitions
|
9
|
+
# for single-lined method bodies, or disallow endless methods.
|
10
|
+
#
|
11
|
+
# Other method definition types are not considered by this cop.
|
12
|
+
#
|
13
|
+
# The supported styles are:
|
14
|
+
# * allow_single_line (default) - only single line endless method definitions are allowed.
|
15
|
+
# * allow_always - all endless method definitions are allowed.
|
16
|
+
# * disallow - all endless method definitions are disallowed.
|
17
|
+
#
|
18
|
+
# NOTE: Incorrect endless method definitions will always be
|
19
|
+
# corrected to a multi-line definition.
|
20
|
+
#
|
21
|
+
# @example EnforcedStyle: allow_single_line (default)
|
22
|
+
# # good
|
23
|
+
# def my_method() = x
|
24
|
+
#
|
25
|
+
# # bad, multi-line endless method
|
26
|
+
# def my_method() = x.foo
|
27
|
+
# .bar
|
28
|
+
# .baz
|
29
|
+
#
|
30
|
+
# @example EnforcedStyle: allow_always
|
31
|
+
# # good
|
32
|
+
# def my_method() = x
|
33
|
+
#
|
34
|
+
# # good
|
35
|
+
# def my_method() = x.foo
|
36
|
+
# .bar
|
37
|
+
# .baz
|
38
|
+
#
|
39
|
+
# @example EnforcedStyle: disallow
|
40
|
+
# # bad
|
41
|
+
# def my_method; x end
|
42
|
+
#
|
43
|
+
# # bad
|
44
|
+
# def my_method() = x.foo
|
45
|
+
# .bar
|
46
|
+
# .baz
|
47
|
+
#
|
48
|
+
class EndlessMethod < Base
|
49
|
+
include ConfigurableEnforcedStyle
|
50
|
+
extend TargetRubyVersion
|
51
|
+
extend AutoCorrector
|
52
|
+
|
53
|
+
minimum_target_ruby_version 3.0
|
54
|
+
|
55
|
+
CORRECTION_STYLES = %w[multiline single_line].freeze
|
56
|
+
MSG = 'Avoid endless method definitions.'
|
57
|
+
MSG_MULTI_LINE = 'Avoid endless method definitions with multiple lines.'
|
58
|
+
|
59
|
+
def on_def(node)
|
60
|
+
if style == :disallow
|
61
|
+
handle_disallow_style(node)
|
62
|
+
else
|
63
|
+
handle_allow_style(node)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def handle_allow_style(node)
|
70
|
+
return unless node.endless?
|
71
|
+
return if node.single_line? || style == :allow_always
|
72
|
+
|
73
|
+
add_offense(node, message: MSG_MULTI_LINE) do |corrector|
|
74
|
+
correct_to_multiline(corrector, node)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def handle_disallow_style(node)
|
79
|
+
return unless node.endless?
|
80
|
+
|
81
|
+
add_offense(node) do |corrector|
|
82
|
+
correct_to_multiline(corrector, node)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def correct_to_multiline(corrector, node)
|
87
|
+
replacement = <<~RUBY.strip
|
88
|
+
def #{node.method_name}#{arguments(node)}
|
89
|
+
#{node.body.source}
|
90
|
+
end
|
91
|
+
RUBY
|
92
|
+
|
93
|
+
corrector.replace(node, replacement)
|
94
|
+
end
|
95
|
+
|
96
|
+
def arguments(node, missing = '')
|
97
|
+
node.arguments.any? ? node.arguments.source : missing
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -68,7 +68,8 @@ module RuboCop
|
|
68
68
|
length = cop_config['MinBranchesCount'] || 3
|
69
69
|
return length if length.is_a?(Integer) && length.positive?
|
70
70
|
|
71
|
-
|
71
|
+
warn Rainbow('`MinBranchesCount` needs to be a positive integer!').red
|
72
|
+
exit!
|
72
73
|
end
|
73
74
|
end
|
74
75
|
end
|
@@ -82,12 +82,10 @@ module RuboCop
|
|
82
82
|
def autocorrect(corrector, node)
|
83
83
|
if node.modifier_form?
|
84
84
|
correct_to_elsif_from_modifier_form(corrector, node)
|
85
|
-
end_range = node.parent.loc.end
|
86
85
|
else
|
87
86
|
correct_to_elsif_from_if_inside_else_form(corrector, node, node.condition)
|
88
|
-
end_range = node.loc.end
|
89
87
|
end
|
90
|
-
corrector.remove(range_by_whole_lines(
|
88
|
+
corrector.remove(range_by_whole_lines(find_end_range(node), include_final_newline: true))
|
91
89
|
corrector.remove(
|
92
90
|
range_by_whole_lines(node.if_branch.source_range, include_final_newline: true)
|
93
91
|
)
|
@@ -110,6 +108,13 @@ module RuboCop
|
|
110
108
|
corrector.remove(condition)
|
111
109
|
end
|
112
110
|
|
111
|
+
def find_end_range(node)
|
112
|
+
end_range = node.loc.end
|
113
|
+
return end_range if end_range
|
114
|
+
|
115
|
+
find_end_range(node.parent)
|
116
|
+
end
|
117
|
+
|
113
118
|
def allow_if_modifier_in_else_branch?(else_branch)
|
114
119
|
allow_if_modifier? && else_branch&.modifier_form?
|
115
120
|
end
|
@@ -157,6 +157,10 @@ module RuboCop
|
|
157
157
|
include OmitParentheses
|
158
158
|
extend AutoCorrector
|
159
159
|
|
160
|
+
def self.autocorrect_incompatible_with
|
161
|
+
[Style::NestedParenthesizedCalls]
|
162
|
+
end
|
163
|
+
|
160
164
|
def on_send(node)
|
161
165
|
send(style, node) # call require_parentheses or omit_parentheses
|
162
166
|
end
|
@@ -81,11 +81,12 @@ module RuboCop
|
|
81
81
|
return node.source if message_nodes.size > 1
|
82
82
|
|
83
83
|
argument = message_nodes.first.source
|
84
|
+
exception_class = exception_node.const_name || exception_node.receiver.source
|
84
85
|
|
85
86
|
if node.parent && requires_parens?(node.parent)
|
86
|
-
"#{node.method_name}(#{
|
87
|
+
"#{node.method_name}(#{exception_class}.new(#{argument}))"
|
87
88
|
else
|
88
|
-
"#{node.method_name} #{
|
89
|
+
"#{node.method_name} #{exception_class}.new(#{argument})"
|
89
90
|
end
|
90
91
|
end
|
91
92
|
|
@@ -66,7 +66,7 @@ module RuboCop
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def correct_with_arguments(return_node, corrector)
|
69
|
-
if return_node.
|
69
|
+
if return_node.children.size > 1
|
70
70
|
add_brackets(corrector, return_node)
|
71
71
|
elsif hash_without_braces?(return_node.first_argument)
|
72
72
|
add_braces(corrector, return_node.first_argument)
|
@@ -8,6 +8,10 @@ module RuboCop
|
|
8
8
|
#
|
9
9
|
# Endless methods added in Ruby 3.0 are also accepted by this cop.
|
10
10
|
#
|
11
|
+
# If `Style/EndlessMethod` is enabled with `EnforcedStyle: allow` or
|
12
|
+
# `allow_always`, single-line methods will be auto-corrected to endless
|
13
|
+
# methods if there is only one statement in the body.
|
14
|
+
#
|
11
15
|
# @example
|
12
16
|
# # bad
|
13
17
|
# def some_method; body end
|
@@ -47,6 +51,28 @@ module RuboCop
|
|
47
51
|
private
|
48
52
|
|
49
53
|
def autocorrect(corrector, node)
|
54
|
+
if correct_to_endless?(node.body)
|
55
|
+
correct_to_endless(corrector, node)
|
56
|
+
else
|
57
|
+
correct_to_multiline(corrector, node)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def allow_empty?
|
62
|
+
cop_config['AllowIfMethodIsEmpty']
|
63
|
+
end
|
64
|
+
|
65
|
+
def correct_to_endless?(body_node)
|
66
|
+
endless_method_config = config.for_cop('Style/EndlessMethod')
|
67
|
+
|
68
|
+
return false unless endless_method_config['Enabled']
|
69
|
+
return false if endless_method_config['EnforcedStyle'] == 'disallow'
|
70
|
+
return false unless body_node
|
71
|
+
|
72
|
+
!(body_node.begin_type? || body_node.kwbegin_type?)
|
73
|
+
end
|
74
|
+
|
75
|
+
def correct_to_multiline(corrector, node)
|
50
76
|
each_part(node.body) do |part|
|
51
77
|
LineBreakCorrector.break_line_before(
|
52
78
|
range: part, node: node, corrector: corrector,
|
@@ -62,8 +88,9 @@ module RuboCop
|
|
62
88
|
move_comment(node, corrector)
|
63
89
|
end
|
64
90
|
|
65
|
-
def
|
66
|
-
|
91
|
+
def correct_to_endless(corrector, node)
|
92
|
+
replacement = "def #{node.method_name}(#{node.arguments.source}) = #{node.body.source}"
|
93
|
+
corrector.replace(node, replacement)
|
67
94
|
end
|
68
95
|
|
69
96
|
def each_part(body)
|
@@ -100,7 +100,7 @@ module RuboCop
|
|
100
100
|
def correct_for_comment(corrector, node, if_branch)
|
101
101
|
return if config.for_cop('Style/IfUnlessModifier')['Enabled']
|
102
102
|
|
103
|
-
comments = processed_source.
|
103
|
+
comments = processed_source.ast_with_comments[if_branch]
|
104
104
|
comment_text = comments.map(&:text).join("\n") << "\n"
|
105
105
|
|
106
106
|
corrector.insert_before(node.loc.keyword, comment_text) unless comments.empty?
|
data/lib/rubocop/target_ruby.rb
CHANGED
@@ -44,33 +44,61 @@ module RuboCop
|
|
44
44
|
# The target ruby version may be found in a .ruby-version file.
|
45
45
|
# @api private
|
46
46
|
class RubyVersionFile < Source
|
47
|
-
|
47
|
+
RUBY_VERSION_FILENAME = '.ruby-version'
|
48
|
+
RUBY_VERSION_PATTERN = /\A(?:ruby-)?(?<version>\d+\.\d+)/.freeze
|
48
49
|
|
49
50
|
def name
|
50
|
-
"`#{
|
51
|
+
"`#{RUBY_VERSION_FILENAME}`"
|
51
52
|
end
|
52
53
|
|
53
54
|
private
|
54
55
|
|
56
|
+
def filename
|
57
|
+
RUBY_VERSION_FILENAME
|
58
|
+
end
|
59
|
+
|
60
|
+
def pattern
|
61
|
+
RUBY_VERSION_PATTERN
|
62
|
+
end
|
63
|
+
|
55
64
|
def find_version
|
56
|
-
file =
|
65
|
+
file = version_file
|
57
66
|
return unless file && File.file?(file)
|
58
67
|
|
59
|
-
|
60
|
-
# `(ruby-)` is not a capture type.
|
61
|
-
File.read(file).match(/\A(ruby-)?(?<version>\d+\.\d+)/) do |md|
|
62
|
-
# rubocop:enable Lint/MixedRegexpCaptureTypes
|
68
|
+
File.read(file).match(pattern) do |md|
|
63
69
|
md[:version].to_f
|
64
70
|
end
|
65
71
|
end
|
66
72
|
|
67
|
-
def
|
68
|
-
@
|
69
|
-
@config.find_file_upwards(
|
73
|
+
def version_file
|
74
|
+
@version_file ||=
|
75
|
+
@config.find_file_upwards(filename,
|
70
76
|
@config.base_dir_for_path_parameters)
|
71
77
|
end
|
72
78
|
end
|
73
79
|
|
80
|
+
# The target ruby version may be found in a .tool-versions file, in a line
|
81
|
+
# starting with `ruby`.
|
82
|
+
# @api private
|
83
|
+
class ToolVersionsFile < RubyVersionFile
|
84
|
+
TOOL_VERSIONS_FILENAME = '.tool-versions'
|
85
|
+
TOOL_VERSIONS_PATTERN = /\Aruby (?:ruby-)?(?<version>\d+\.\d+)/.freeze
|
86
|
+
|
87
|
+
def name
|
88
|
+
"`#{TOOL_VERSIONS_FILENAME}`"
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def filename
|
94
|
+
TOOL_VERSIONS_FILENAME
|
95
|
+
end
|
96
|
+
|
97
|
+
def pattern
|
98
|
+
TOOL_VERSIONS_PATTERN
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
74
102
|
# The lock file of Bundler may identify the target ruby version.
|
75
103
|
# @api private
|
76
104
|
class BundlerLockFile < Source
|
@@ -194,7 +222,15 @@ module RuboCop
|
|
194
222
|
KNOWN_RUBIES
|
195
223
|
end
|
196
224
|
|
197
|
-
SOURCES = [
|
225
|
+
SOURCES = [
|
226
|
+
RuboCopConfig,
|
227
|
+
RubyVersionFile,
|
228
|
+
ToolVersionsFile,
|
229
|
+
BundlerLockFile,
|
230
|
+
GemspecFile,
|
231
|
+
Default
|
232
|
+
].freeze
|
233
|
+
|
198
234
|
private_constant :SOURCES
|
199
235
|
|
200
236
|
def initialize(config)
|
data/lib/rubocop/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-01-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: parallel
|
@@ -32,14 +32,14 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: 3.0.0.0
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: 3.0.0.0
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rainbow
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
version: 1.4.0
|
138
138
|
- - "<"
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version: '
|
140
|
+
version: '3.0'
|
141
141
|
type: :runtime
|
142
142
|
prerelease: false
|
143
143
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -147,7 +147,7 @@ dependencies:
|
|
147
147
|
version: 1.4.0
|
148
148
|
- - "<"
|
149
149
|
- !ruby/object:Gem::Version
|
150
|
-
version: '
|
150
|
+
version: '3.0'
|
151
151
|
- !ruby/object:Gem::Dependency
|
152
152
|
name: bundler
|
153
153
|
requirement: !ruby/object:Gem::Requirement
|
@@ -368,6 +368,7 @@ files:
|
|
368
368
|
- lib/rubocop/cop/lint/constant_resolution.rb
|
369
369
|
- lib/rubocop/cop/lint/debugger.rb
|
370
370
|
- lib/rubocop/cop/lint/deprecated_class_methods.rb
|
371
|
+
- lib/rubocop/cop/lint/deprecated_constants.rb
|
371
372
|
- lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb
|
372
373
|
- lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb
|
373
374
|
- lib/rubocop/cop/lint/duplicate_branch.rb
|
@@ -401,6 +402,7 @@ files:
|
|
401
402
|
- lib/rubocop/cop/lint/ineffective_access_modifier.rb
|
402
403
|
- lib/rubocop/cop/lint/inherit_exception.rb
|
403
404
|
- lib/rubocop/cop/lint/interpolation_check.rb
|
405
|
+
- lib/rubocop/cop/lint/lambda_without_literal_block.rb
|
404
406
|
- lib/rubocop/cop/lint/literal_as_condition.rb
|
405
407
|
- lib/rubocop/cop/lint/literal_in_interpolation.rb
|
406
408
|
- lib/rubocop/cop/lint/loop.rb
|
@@ -424,6 +426,7 @@ files:
|
|
424
426
|
- lib/rubocop/cop/lint/rand_one.rb
|
425
427
|
- lib/rubocop/cop/lint/redundant_cop_disable_directive.rb
|
426
428
|
- lib/rubocop/cop/lint/redundant_cop_enable_directive.rb
|
429
|
+
- lib/rubocop/cop/lint/redundant_dir_glob_sort.rb
|
427
430
|
- lib/rubocop/cop/lint/redundant_require_statement.rb
|
428
431
|
- lib/rubocop/cop/lint/redundant_safe_navigation.rb
|
429
432
|
- lib/rubocop/cop/lint/redundant_splat_expansion.rb
|
@@ -485,6 +488,7 @@ files:
|
|
485
488
|
- lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb
|
486
489
|
- lib/rubocop/cop/migration/department_name.rb
|
487
490
|
- lib/rubocop/cop/mixin/alignment.rb
|
491
|
+
- lib/rubocop/cop/mixin/allowed_identifiers.rb
|
488
492
|
- lib/rubocop/cop/mixin/allowed_methods.rb
|
489
493
|
- lib/rubocop/cop/mixin/annotation_comment.rb
|
490
494
|
- lib/rubocop/cop/mixin/array_min_size.rb
|
@@ -627,6 +631,7 @@ files:
|
|
627
631
|
- lib/rubocop/cop/style/empty_method.rb
|
628
632
|
- lib/rubocop/cop/style/encoding.rb
|
629
633
|
- lib/rubocop/cop/style/end_block.rb
|
634
|
+
- lib/rubocop/cop/style/endless_method.rb
|
630
635
|
- lib/rubocop/cop/style/eval_with_location.rb
|
631
636
|
- lib/rubocop/cop/style/even_odd.rb
|
632
637
|
- lib/rubocop/cop/style/expand_path_arguments.rb
|
@@ -851,7 +856,7 @@ metadata:
|
|
851
856
|
homepage_uri: https://rubocop.org/
|
852
857
|
changelog_uri: https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md
|
853
858
|
source_code_uri: https://github.com/rubocop-hq/rubocop/
|
854
|
-
documentation_uri: https://docs.rubocop.org/rubocop/1.
|
859
|
+
documentation_uri: https://docs.rubocop.org/rubocop/1.8/
|
855
860
|
bug_tracker_uri: https://github.com/rubocop-hq/rubocop/issues
|
856
861
|
post_install_message:
|
857
862
|
rdoc_options: []
|