rubocop 1.62.0 → 1.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/config/default.yml +23 -3
- data/lib/rubocop/cli/command/auto_generate_config.rb +12 -3
- data/lib/rubocop/config.rb +33 -10
- data/lib/rubocop/config_obsoletion.rb +1 -1
- data/lib/rubocop/cop/base.rb +37 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +122 -28
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
- data/lib/rubocop/cop/layout/redundant_line_break.rb +8 -2
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -4
- data/lib/rubocop/cop/lint/debugger.rb +27 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +4 -0
- data/lib/rubocop/cop/lint/useless_times.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +12 -1
- data/lib/rubocop/cop/mixin/method_complexity.rb +15 -6
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +31 -12
- data/lib/rubocop/cop/naming/file_name.rb +2 -2
- data/lib/rubocop/cop/naming/inclusive_language.rb +1 -2
- data/lib/rubocop/cop/style/alias.rb +1 -0
- data/lib/rubocop/cop/style/class_vars.rb +3 -3
- data/lib/rubocop/cop/style/collection_compact.rb +3 -3
- data/lib/rubocop/cop/style/copyright.rb +16 -11
- data/lib/rubocop/cop/style/eval_with_location.rb +2 -0
- data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -1
- data/lib/rubocop/cop/style/for.rb +2 -0
- data/lib/rubocop/cop/style/format_string.rb +9 -9
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
- data/lib/rubocop/cop/style/map_into_array.rb +175 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +1 -1
- data/lib/rubocop/cop/style/map_to_set.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +24 -1
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +5 -4
- data/lib/rubocop/cop/style/redundant_each.rb +1 -1
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +1 -1
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +8 -14
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/team.rb +3 -0
- data/lib/rubocop/cop/utils/regexp_ranges.rb +1 -1
- data/lib/rubocop/directive_comment.rb +10 -8
- data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
- data/lib/rubocop/formatter/tap_formatter.rb +3 -7
- data/lib/rubocop/lockfile.rb +34 -4
- data/lib/rubocop/rspec/expect_offense.rb +15 -7
- data/lib/rubocop/rspec/shared_contexts.rb +13 -1
- data/lib/rubocop/runner.rb +3 -0
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +2 -2
- data/lib/rubocop.rb +1 -0
- metadata +5 -4
@@ -81,7 +81,13 @@ module RuboCop
|
|
81
81
|
redundant_argument = redundant_arg_for_method(node.method_name.to_s)
|
82
82
|
return false if redundant_argument.nil?
|
83
83
|
|
84
|
-
node.first_argument.
|
84
|
+
target_argument = if node.first_argument.respond_to?(:value)
|
85
|
+
node.first_argument.value
|
86
|
+
else
|
87
|
+
node.first_argument
|
88
|
+
end
|
89
|
+
|
90
|
+
argument_matched?(target_argument, redundant_argument)
|
85
91
|
end
|
86
92
|
|
87
93
|
def redundant_arg_for_method(method_name)
|
@@ -98,6 +104,23 @@ module RuboCop
|
|
98
104
|
range_with_surrounding_space(node.first_argument.source_range, newlines: false)
|
99
105
|
end
|
100
106
|
end
|
107
|
+
|
108
|
+
def argument_matched?(target_argument, redundant_argument)
|
109
|
+
argument = if target_argument.is_a?(AST::Node)
|
110
|
+
target_argument.source
|
111
|
+
elsif exclude_cntrl_character?(target_argument, redundant_argument)
|
112
|
+
target_argument.inspect
|
113
|
+
else
|
114
|
+
target_argument.to_s
|
115
|
+
end
|
116
|
+
|
117
|
+
argument == redundant_argument
|
118
|
+
end
|
119
|
+
|
120
|
+
def exclude_cntrl_character?(target_argument, redundant_argument)
|
121
|
+
!target_argument.to_s.sub(/\A'/, '"').sub(/'\z/, '"').match?(/[[:cntrl:]]/) ||
|
122
|
+
!redundant_argument.match?(/[[:cntrl:]]/)
|
123
|
+
end
|
101
124
|
end
|
102
125
|
end
|
103
126
|
end
|
@@ -18,14 +18,15 @@ module RuboCop
|
|
18
18
|
extend AutoCorrector
|
19
19
|
|
20
20
|
MSG = 'Remove the redundant current directory path.'
|
21
|
+
RESTRICT_ON_SEND = %i[require_relative].freeze
|
21
22
|
CURRENT_DIRECTORY_PATH = './'
|
22
23
|
|
23
24
|
def on_send(node)
|
24
|
-
return unless node.
|
25
|
-
return unless
|
26
|
-
return unless (index =
|
25
|
+
return unless (first_argument = node.first_argument)
|
26
|
+
return unless first_argument.str_content&.start_with?(CURRENT_DIRECTORY_PATH)
|
27
|
+
return unless (index = first_argument.source.index(CURRENT_DIRECTORY_PATH))
|
27
28
|
|
28
|
-
begin_pos =
|
29
|
+
begin_pos = first_argument.source_range.begin.begin_pos + index
|
29
30
|
range = range_between(begin_pos, begin_pos + 2)
|
30
31
|
|
31
32
|
add_offense(range) do |corrector|
|
@@ -79,7 +79,7 @@ module RuboCop
|
|
79
79
|
private_constant :REPLACEMENT_METHODS
|
80
80
|
|
81
81
|
def on_send(node)
|
82
|
-
return if node.arguments? || node.
|
82
|
+
return if node.arguments? || node.block_literal?
|
83
83
|
|
84
84
|
select_predicate?(node) do |select_node, filter_method|
|
85
85
|
return if RAILS_METHODS.include?(filter_method) && !active_support_extensions_enabled?
|
@@ -72,7 +72,7 @@ module RuboCop
|
|
72
72
|
ALLOWED_STRING_TOKENS = %i[tSTRING tSTRING_CONTENT].freeze
|
73
73
|
ARGUMENT_TYPES = %i[
|
74
74
|
kFALSE kNIL kSELF kTRUE tCONSTANT tCVAR tFLOAT tGVAR tIDENTIFIER tINTEGER tIVAR
|
75
|
-
|
75
|
+
tLBRACK tLCURLY tLPAREN_ARG tSTRING tSTRING_BEG tSYMBOL tXSTRING_BEG
|
76
76
|
].freeze
|
77
77
|
|
78
78
|
def on_new_investigation
|
@@ -124,10 +124,8 @@ module RuboCop
|
|
124
124
|
return true unless (node = find_node_for_line(range.line))
|
125
125
|
return false if argument_newline?(node)
|
126
126
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
continuation_node.source.include?("\n") || continuation_node.source.include?("\\\n")
|
127
|
+
source = node.parent ? node.parent.source : node.source
|
128
|
+
parse(source.gsub("\\\n", "\n")).valid_syntax?
|
131
129
|
end
|
132
130
|
|
133
131
|
def inside_string_literal?(range, token)
|
@@ -142,22 +140,22 @@ module RuboCop
|
|
142
140
|
current_token.type == :tIDENTIFIER && ARGUMENT_TYPES.include?(next_token.type)
|
143
141
|
end
|
144
142
|
|
145
|
-
# rubocop:disable Metrics/AbcSize
|
143
|
+
# rubocop:disable Metrics/AbcSize
|
146
144
|
def argument_newline?(node)
|
147
145
|
node = node.to_a.last if node.assignment?
|
148
146
|
return false if node.parenthesized_call?
|
149
147
|
|
150
148
|
node = node.children.first if node.root? && node.begin_type?
|
151
149
|
|
152
|
-
if argument_is_method?(node)
|
153
|
-
argument_newline?(node.
|
150
|
+
if argument_is_method?(node)
|
151
|
+
argument_newline?(node.first_argument)
|
154
152
|
else
|
155
153
|
return false unless method_call_with_arguments?(node)
|
156
154
|
|
157
|
-
|
155
|
+
node.loc.selector.line != node.first_argument.loc.line
|
158
156
|
end
|
159
157
|
end
|
160
|
-
# rubocop:enable Metrics/AbcSize
|
158
|
+
# rubocop:enable Metrics/AbcSize
|
161
159
|
|
162
160
|
def find_node_for_line(line)
|
163
161
|
processed_source.ast.each_node do |node|
|
@@ -165,10 +163,6 @@ module RuboCop
|
|
165
163
|
end
|
166
164
|
end
|
167
165
|
|
168
|
-
def allowed_type?(node)
|
169
|
-
node.and_type? || node.or_type? || (node.if_type? && node.ternary?)
|
170
|
-
end
|
171
|
-
|
172
166
|
def same_line?(node, line)
|
173
167
|
return false unless (source_range = node.source_range)
|
174
168
|
|
@@ -53,7 +53,7 @@ module RuboCop
|
|
53
53
|
return if interpolated_quotes?(node) || allowed_percent_q?(node)
|
54
54
|
|
55
55
|
add_offense(node) do |corrector|
|
56
|
-
delimiter =
|
56
|
+
delimiter = /\A%Q[^"]+\z|'/.match?(node.source) ? QUOTE : SINGLE_QUOTE
|
57
57
|
|
58
58
|
corrector.replace(node.loc.begin, delimiter)
|
59
59
|
corrector.replace(node.loc.end, delimiter)
|
data/lib/rubocop/cop/team.rb
CHANGED
@@ -174,6 +174,9 @@ module RuboCop
|
|
174
174
|
end
|
175
175
|
|
176
176
|
def support_target_rails_version?(cop)
|
177
|
+
# In this case, the rails version was already checked by `#excluded_file?`
|
178
|
+
return true if defined?(RuboCop::Rails::TargetRailsVersion::USES_REQUIRES_GEM_API)
|
179
|
+
|
177
180
|
return true unless cop.class.respond_to?(:support_target_rails_version?)
|
178
181
|
|
179
182
|
cop.class.support_target_rails_version?(cop.target_rails_version)
|
@@ -6,9 +6,11 @@ module RuboCop
|
|
6
6
|
# cops it contains.
|
7
7
|
class DirectiveComment
|
8
8
|
# @api private
|
9
|
-
|
9
|
+
LINT_DEPARTMENT = 'Lint'
|
10
10
|
# @api private
|
11
|
-
|
11
|
+
LINT_REDUNDANT_DIRECTIVE_COP = "#{LINT_DEPARTMENT}/RedundantCopDisableDirective"
|
12
|
+
# @api private
|
13
|
+
LINT_SYNTAX_COP = "#{LINT_DEPARTMENT}/Syntax"
|
12
14
|
# @api private
|
13
15
|
COP_NAME_PATTERN = '([A-Z]\w+/)*(?:[A-Z]\w+)'
|
14
16
|
# @api private
|
@@ -118,9 +120,10 @@ module RuboCop
|
|
118
120
|
end
|
119
121
|
|
120
122
|
def parsed_cop_names
|
121
|
-
splitted_cops_string.map do |name|
|
123
|
+
cops = splitted_cops_string.map do |name|
|
122
124
|
department?(name) ? cop_names_for_department(name) : name
|
123
125
|
end.flatten
|
126
|
+
cops - [LINT_SYNTAX_COP]
|
124
127
|
end
|
125
128
|
|
126
129
|
def department?(name)
|
@@ -128,17 +131,16 @@ module RuboCop
|
|
128
131
|
end
|
129
132
|
|
130
133
|
def all_cop_names
|
131
|
-
|
134
|
+
exclude_lint_department_cops(cop_registry.names)
|
132
135
|
end
|
133
136
|
|
134
137
|
def cop_names_for_department(department)
|
135
138
|
names = cop_registry.names_for_department(department)
|
136
|
-
|
137
|
-
has_redundant_directive_cop ? exclude_redundant_directive_cop(names) : names
|
139
|
+
department == LINT_DEPARTMENT ? exclude_lint_department_cops(names) : names
|
138
140
|
end
|
139
141
|
|
140
|
-
def
|
141
|
-
cops - [
|
142
|
+
def exclude_lint_department_cops(cops)
|
143
|
+
cops - [LINT_REDUNDANT_DIRECTIVE_COP, LINT_SYNTAX_COP]
|
142
144
|
end
|
143
145
|
end
|
144
146
|
end
|
@@ -24,14 +24,10 @@ module RuboCop
|
|
24
24
|
message: message(offense)
|
25
25
|
)
|
26
26
|
|
27
|
-
|
28
|
-
return unless valid_line?(offense)
|
27
|
+
return unless valid_line?(offense)
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
rescue IndexError
|
33
|
-
# range is not on a valid line; perhaps the source file is empty
|
34
|
-
end
|
29
|
+
report_line(offense.location)
|
30
|
+
report_highlighted_area(offense.highlighted_area)
|
35
31
|
end
|
36
32
|
|
37
33
|
def valid_line?(offense)
|
@@ -53,14 +53,10 @@ module RuboCop
|
|
53
53
|
message: message(offense)
|
54
54
|
)
|
55
55
|
|
56
|
-
|
57
|
-
return unless valid_line?(offense)
|
56
|
+
return unless valid_line?(offense)
|
58
57
|
|
59
|
-
|
60
|
-
|
61
|
-
rescue IndexError
|
62
|
-
# range is not on a valid line; perhaps the source file is empty
|
63
|
-
end
|
58
|
+
report_line(offense.location)
|
59
|
+
report_highlighted_area(offense.highlighted_area)
|
64
60
|
end
|
65
61
|
|
66
62
|
def annotate_message(msg)
|
data/lib/rubocop/lockfile.rb
CHANGED
@@ -5,14 +5,23 @@ module RuboCop
|
|
5
5
|
# Does not actually resolve gems, just parses the lockfile.
|
6
6
|
# @api private
|
7
7
|
class Lockfile
|
8
|
-
#
|
8
|
+
# @param [String, Pathname, nil] lockfile_path
|
9
|
+
def initialize(lockfile_path = nil)
|
10
|
+
lockfile_path ||= defined?(Bundler) ? Bundler.default_lockfile : nil
|
11
|
+
|
12
|
+
@lockfile_path = lockfile_path
|
13
|
+
end
|
14
|
+
|
15
|
+
# Gems that the bundle directly depends on.
|
16
|
+
# @return [Array<Bundler::Dependency>, nil]
|
9
17
|
def dependencies
|
10
18
|
return [] unless parser
|
11
19
|
|
12
20
|
parser.dependencies.values
|
13
21
|
end
|
14
22
|
|
15
|
-
# All activated gems, including transitive dependencies
|
23
|
+
# All activated gems, including transitive dependencies.
|
24
|
+
# @return [Array<Bundler::Dependency>, nil]
|
16
25
|
def gems
|
17
26
|
return [] unless parser
|
18
27
|
|
@@ -21,17 +30,38 @@ module RuboCop
|
|
21
30
|
parser.dependencies.values.concat(parser.specs.flat_map(&:dependencies))
|
22
31
|
end
|
23
32
|
|
33
|
+
# Returns the locked versions of gems from this lockfile.
|
34
|
+
# @param [Boolean] include_transitive_dependencies: When false, only direct dependencies
|
35
|
+
# are returned, i.e. those listed explicitly in the `Gemfile`.
|
36
|
+
# @returns [Hash{String => Gem::Version}] The locked gem versions, keyed by the gems' names.
|
37
|
+
def gem_versions(include_transitive_dependencies: true)
|
38
|
+
return {} unless parser
|
39
|
+
|
40
|
+
all_gem_versions = parser.specs.to_h { |spec| [spec.name, spec.version] }
|
41
|
+
|
42
|
+
if include_transitive_dependencies
|
43
|
+
all_gem_versions
|
44
|
+
else
|
45
|
+
direct_dep_names = parser.dependencies.keys
|
46
|
+
all_gem_versions.slice(*direct_dep_names)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Whether this lockfile includes the named gem, directly or indirectly.
|
51
|
+
# @param [String] name
|
52
|
+
# @return [Boolean]
|
24
53
|
def includes_gem?(name)
|
25
54
|
gems.any? { |gem| gem.name == name }
|
26
55
|
end
|
27
56
|
|
28
57
|
private
|
29
58
|
|
59
|
+
# @return [Bundler::LockfileParser, nil]
|
30
60
|
def parser
|
31
|
-
return unless defined?(Bundler) && Bundler.default_lockfile
|
32
61
|
return @parser if defined?(@parser)
|
62
|
+
return unless @lockfile_path
|
33
63
|
|
34
|
-
lockfile = Bundler.read_file(
|
64
|
+
lockfile = Bundler.read_file(@lockfile_path)
|
35
65
|
@parser = lockfile ? Bundler::LockfileParser.new(lockfile) : nil
|
36
66
|
rescue Bundler::BundlerError
|
37
67
|
nil
|
@@ -111,6 +111,7 @@ module RuboCop
|
|
111
111
|
source
|
112
112
|
end
|
113
113
|
|
114
|
+
# rubocop:disable Metrics/AbcSize
|
114
115
|
def expect_offense(source, file = nil, severity: nil, chomp: false, **replacements)
|
115
116
|
expected_annotations = parse_annotations(source, **replacements)
|
116
117
|
source = expected_annotations.plain_source
|
@@ -123,10 +124,17 @@ module RuboCop
|
|
123
124
|
expect(actual_annotations).to eq(expected_annotations), ''
|
124
125
|
expect(@offenses.map(&:severity).uniq).to eq([severity]) if severity
|
125
126
|
|
127
|
+
# Validate that all offenses have a range that formatters can display
|
128
|
+
expect do
|
129
|
+
@offenses.each { |offense| offense.location.source_line }
|
130
|
+
end.not_to raise_error, 'One of the offenses has a misconstructed range, for ' \
|
131
|
+
'example if the offense is on line 1 and the source is empty'
|
132
|
+
|
126
133
|
@offenses
|
127
134
|
end
|
135
|
+
# rubocop:enable Metrics/AbcSize
|
128
136
|
|
129
|
-
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
|
137
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
|
130
138
|
def expect_correction(correction, loop: true, source: nil)
|
131
139
|
if source
|
132
140
|
expected_annotations = parse_annotations(source, raise_error: false)
|
@@ -148,7 +156,6 @@ module RuboCop
|
|
148
156
|
|
149
157
|
break corrected_source unless loop
|
150
158
|
break corrected_source if @last_corrector.empty?
|
151
|
-
break corrected_source if corrected_source == @processed_source.buffer.source
|
152
159
|
|
153
160
|
if iteration > RuboCop::Runner::MAX_ITERATIONS
|
154
161
|
raise RuboCop::Runner::InfiniteCorrectionLoop.new(@processed_source.path, [@offenses])
|
@@ -163,19 +170,20 @@ module RuboCop
|
|
163
170
|
|
164
171
|
expect(new_source).to eq(correction)
|
165
172
|
end
|
166
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
|
173
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
|
167
174
|
|
168
175
|
def expect_no_corrections
|
169
176
|
raise '`expect_no_corrections` must follow `expect_offense`' unless @processed_source
|
170
177
|
|
171
178
|
return if @last_corrector.empty?
|
172
179
|
|
173
|
-
#
|
174
|
-
# we need to run the actual corrections
|
175
|
-
|
180
|
+
# This is just here for a pretty diff if the source actually got changed
|
176
181
|
new_source = @last_corrector.rewrite
|
177
|
-
|
178
182
|
expect(new_source).to eq(@processed_source.buffer.source)
|
183
|
+
|
184
|
+
# There is an infinite loop if a corrector is present that did not make
|
185
|
+
# any changes. It will cause the same offense/correction on the next loop.
|
186
|
+
raise RuboCop::Runner::InfiniteCorrectionLoop.new(@processed_source.path, [@offenses])
|
179
187
|
end
|
180
188
|
|
181
189
|
def expect_no_offenses(source, file = nil)
|
@@ -110,7 +110,19 @@ RSpec.shared_context 'config' do # rubocop:disable Metrics/BlockLength
|
|
110
110
|
let(:config) do
|
111
111
|
hash = { 'AllCops' => all_cops_config, cop_class.cop_name => cur_cop_config }.merge!(other_cops)
|
112
112
|
|
113
|
-
RuboCop::Config.new(hash, "#{Dir.pwd}/.rubocop.yml")
|
113
|
+
config = RuboCop::Config.new(hash, "#{Dir.pwd}/.rubocop.yml")
|
114
|
+
|
115
|
+
rails_version_in_gemfile = Gem::Version.new(
|
116
|
+
rails_version || RuboCop::Config::DEFAULT_RAILS_VERSION
|
117
|
+
)
|
118
|
+
|
119
|
+
allow(config).to receive(:gem_versions_in_target).and_return(
|
120
|
+
{
|
121
|
+
'railties' => rails_version_in_gemfile
|
122
|
+
}
|
123
|
+
)
|
124
|
+
|
125
|
+
config
|
114
126
|
end
|
115
127
|
|
116
128
|
let(:cop) { cop_class.new(config, cop_options) }
|
data/lib/rubocop/runner.rb
CHANGED
@@ -20,6 +20,9 @@ module RuboCop
|
|
20
20
|
message = 'Infinite loop detected'
|
21
21
|
message += " in #{path}" if path
|
22
22
|
message += " and caused by #{root_cause}" if root_cause
|
23
|
+
message += ' Hint: Please update to the latest RuboCop version if not already in use,'
|
24
|
+
message += ' and report a bug if the issue still occurs on this version.'
|
25
|
+
message += ' Please check the latest version at https://rubygems.org/gems/rubocop'
|
23
26
|
super(message)
|
24
27
|
end
|
25
28
|
end
|
data/lib/rubocop/target_ruby.rb
CHANGED
@@ -105,7 +105,7 @@ module RuboCop
|
|
105
105
|
def version_from_right_hand_side(right_hand_side)
|
106
106
|
gem_requirement_versions = gem_requirement_versions(right_hand_side)
|
107
107
|
|
108
|
-
if right_hand_side.array_type?
|
108
|
+
if right_hand_side.array_type? && right_hand_side.children.all?(&:str_type?)
|
109
109
|
version_from_array(right_hand_side)
|
110
110
|
elsif gem_requirement_versions
|
111
111
|
gem_requirement_versions.map(&:value)
|
data/lib/rubocop/version.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
# This module holds the RuboCop version information.
|
5
5
|
module Version
|
6
|
-
STRING = '1.
|
6
|
+
STRING = '1.63.0'
|
7
7
|
|
8
8
|
MSG = '%<version>s (using %<parser_version>s, ' \
|
9
9
|
'rubocop-ast %<rubocop_ast_version>s, ' \
|
@@ -11,7 +11,7 @@ module RuboCop
|
|
11
11
|
|
12
12
|
CANONICAL_FEATURE_NAMES = {
|
13
13
|
'Rspec' => 'RSpec', 'Graphql' => 'GraphQL', 'Md' => 'Markdown', 'Factory_bot' => 'FactoryBot',
|
14
|
-
'Thread_safety' => 'ThreadSafety'
|
14
|
+
'Thread_safety' => 'ThreadSafety', 'Rspec_rails' => 'RSpecRails'
|
15
15
|
}.freeze
|
16
16
|
EXTENSION_PATH_NAMES = {
|
17
17
|
'rubocop-md' => 'markdown', 'rubocop-factory_bot' => 'factory_bot'
|
data/lib/rubocop.rb
CHANGED
@@ -557,6 +557,7 @@ require_relative 'rubocop/cop/style/lambda'
|
|
557
557
|
require_relative 'rubocop/cop/style/lambda_call'
|
558
558
|
require_relative 'rubocop/cop/style/line_end_concatenation'
|
559
559
|
require_relative 'rubocop/cop/style/magic_comment_format'
|
560
|
+
require_relative 'rubocop/cop/style/map_into_array'
|
560
561
|
require_relative 'rubocop/cop/style/map_to_hash'
|
561
562
|
require_relative 'rubocop/cop/style/map_to_set'
|
562
563
|
require_relative 'rubocop/cop/style/method_call_without_args_parentheses'
|
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.63.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: 2024-
|
13
|
+
date: 2024-04-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -778,6 +778,7 @@ files:
|
|
778
778
|
- lib/rubocop/cop/style/line_end_concatenation.rb
|
779
779
|
- lib/rubocop/cop/style/magic_comment_format.rb
|
780
780
|
- lib/rubocop/cop/style/map_compact_with_conditional_block.rb
|
781
|
+
- lib/rubocop/cop/style/map_into_array.rb
|
781
782
|
- lib/rubocop/cop/style/map_to_hash.rb
|
782
783
|
- lib/rubocop/cop/style/map_to_set.rb
|
783
784
|
- lib/rubocop/cop/style/method_call_with_args_parentheses.rb
|
@@ -1031,9 +1032,9 @@ licenses:
|
|
1031
1032
|
- MIT
|
1032
1033
|
metadata:
|
1033
1034
|
homepage_uri: https://rubocop.org/
|
1034
|
-
changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.
|
1035
|
+
changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.63.0
|
1035
1036
|
source_code_uri: https://github.com/rubocop/rubocop/
|
1036
|
-
documentation_uri: https://docs.rubocop.org/rubocop/1.
|
1037
|
+
documentation_uri: https://docs.rubocop.org/rubocop/1.63/
|
1037
1038
|
bug_tracker_uri: https://github.com/rubocop/rubocop/issues
|
1038
1039
|
rubygems_mfa_required: 'true'
|
1039
1040
|
post_install_message:
|