rubocop 0.88.0 → 0.89.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/bin/rubocop-profile +1 -0
- data/config/default.yml +96 -16
- data/lib/rubocop.rb +16 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +19 -2
- data/lib/rubocop/config_loader.rb +1 -1
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_validator.rb +1 -3
- data/lib/rubocop/cop/base.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +32 -11
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +9 -16
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +49 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +7 -4
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +2 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +4 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +27 -23
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +61 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -31
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +25 -15
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +13 -15
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +35 -6
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +3 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +11 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +9 -7
- data/lib/rubocop/cop/style/alias.rb +7 -3
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -2
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +2 -2
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +11 -2
- data/lib/rubocop/cop/style/documentation.rb +4 -4
- data/lib/rubocop/cop/style/each_with_object.rb +0 -2
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/eval_with_location.rb +4 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -0
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/format_string.rb +4 -0
- data/lib/rubocop/cop/style/format_string_token.rb +1 -0
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/guard_clause.rb +2 -2
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +8 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -3
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +0 -20
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +9 -2
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -0
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +25 -10
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +1 -13
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +2 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/path_util.rb +19 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/rspec/expect_offense.rb +1 -1
- data/lib/rubocop/target_finder.rb +12 -9
- data/lib/rubocop/version.rb +2 -2
- metadata +19 -6
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -8,8 +8,8 @@ module RuboCop
|
|
8
8
|
self.command_name = :version
|
9
9
|
|
10
10
|
def run
|
11
|
-
puts RuboCop::Version.version(false) if @options[:version]
|
12
|
-
puts RuboCop::Version.version(true) if @options[:verbose_version]
|
11
|
+
puts RuboCop::Version.version(debug: false) if @options[:version]
|
12
|
+
puts RuboCop::Version.version(debug: true) if @options[:verbose_version]
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -11,7 +11,7 @@ module RuboCop
|
|
11
11
|
COPS_PATTERN = "(all|#{COP_NAMES_PATTERN})"
|
12
12
|
|
13
13
|
COMMENT_DIRECTIVE_REGEXP = Regexp.new(
|
14
|
-
|
14
|
+
"# rubocop : ((?:disable|enable|todo))\\b #{COPS_PATTERN}"
|
15
15
|
.gsub(' ', '\s*')
|
16
16
|
)
|
17
17
|
|
@@ -55,7 +55,7 @@ module RuboCop
|
|
55
55
|
extras
|
56
56
|
end
|
57
57
|
|
58
|
-
def analyze
|
58
|
+
def analyze # rubocop:todo Metrics/AbcSize
|
59
59
|
analyses = Hash.new { |hash, key| hash[key] = CopAnalysis.new([], nil) }
|
60
60
|
|
61
61
|
each_mentioned_cop do |cop_name, disabled, line, single_line|
|
data/lib/rubocop/config.rb
CHANGED
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def_delegators :@hash, :[], :[]=, :delete, :each, :key?, :keys, :each_key,
|
50
|
-
:map, :merge, :to_h, :to_hash, :transform_values
|
50
|
+
:fetch, :map, :merge, :to_h, :to_hash, :transform_values
|
51
51
|
def_delegators :@validator, :validate, :target_ruby_version
|
52
52
|
|
53
53
|
def to_s
|
@@ -104,12 +104,29 @@ module RuboCop
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
+
# @return [Config] for the given cop / cop name.
|
108
|
+
# Note: the 'Enabled' attribute is calculated according to the department's
|
109
|
+
# and 'AllCops' configuration; other attributes are not inherited.
|
107
110
|
def for_cop(cop)
|
108
111
|
@for_cop[cop.respond_to?(:cop_name) ? cop.cop_name : cop]
|
109
112
|
end
|
110
113
|
|
114
|
+
# @return [Config] for the given cop merged with that of its department (if any)
|
115
|
+
# Note: the 'Enabled' attribute is same as that returned by `for_cop`
|
116
|
+
def for_badge(badge)
|
117
|
+
cop_config = for_cop(badge.to_s)
|
118
|
+
fetch(badge.department.to_s) { return cop_config }
|
119
|
+
.merge(cop_config)
|
120
|
+
end
|
121
|
+
|
122
|
+
# @return [Config] for the given department name.
|
123
|
+
# Note: the 'Enabled' attribute will be present only if specified
|
124
|
+
# at the department's level
|
111
125
|
def for_department(department_name)
|
112
|
-
@
|
126
|
+
@for_department ||= Hash.new do |h, dept|
|
127
|
+
h[dept] = self[dept] || {}
|
128
|
+
end
|
129
|
+
@for_department[department_name.to_s]
|
113
130
|
end
|
114
131
|
|
115
132
|
def for_all_cops
|
@@ -201,7 +201,7 @@ module RuboCop
|
|
201
201
|
next unless dept_params['Enabled']
|
202
202
|
|
203
203
|
new_default_configuration.each do |cop, params|
|
204
|
-
next unless cop.start_with?(dept
|
204
|
+
next unless cop.start_with?("#{dept}/")
|
205
205
|
|
206
206
|
# Retain original default configuration for cops in the department.
|
207
207
|
params['Enabled'] = ConfigLoader.default_configuration[cop]['Enabled']
|
@@ -213,8 +213,8 @@ module RuboCop
|
|
213
213
|
end
|
214
214
|
end
|
215
215
|
|
216
|
-
def transform(config)
|
217
|
-
config.transform_values
|
216
|
+
def transform(config, &block)
|
217
|
+
config.transform_values(&block)
|
218
218
|
end
|
219
219
|
|
220
220
|
def gem_config_path(gem_name, relative_config_path)
|
@@ -84,7 +84,12 @@ module RuboCop
|
|
84
84
|
'Lint/InvalidCharacterLiteral' => 'it was never being actually triggered',
|
85
85
|
'Lint/SpaceBeforeFirstArg' =>
|
86
86
|
'it was a duplicate of `Layout/SpaceBeforeFirstArg`. Please use ' \
|
87
|
-
'`Layout/SpaceBeforeFirstArg` instead'
|
87
|
+
'`Layout/SpaceBeforeFirstArg` instead',
|
88
|
+
'Style/MethodMissingSuper' => 'it has been superseded by `Lint/MissingSuper`. Please use ' \
|
89
|
+
'`Lint/MissingSuper` instead',
|
90
|
+
'Lint/UselessComparison' => 'it has been superseded by '\
|
91
|
+
'`Lint/BinaryOperatorWithIdenticalOperands`. Please use '\
|
92
|
+
'`Lint/BinaryOperatorWithIdenticalOperands` instead'
|
88
93
|
}.map do |cop_name, reason|
|
89
94
|
[cop_name, "The `#{cop_name}` cop has been removed since #{reason}."]
|
90
95
|
end
|
@@ -23,7 +23,6 @@ module RuboCop
|
|
23
23
|
@target_ruby = TargetRuby.new(config)
|
24
24
|
end
|
25
25
|
|
26
|
-
# rubocop:disable Metrics/AbcSize
|
27
26
|
def validate
|
28
27
|
check_cop_config_value(@config)
|
29
28
|
reject_conflicting_safe_settings
|
@@ -45,7 +44,6 @@ module RuboCop
|
|
45
44
|
validate_syntax_cop
|
46
45
|
reject_mutually_exclusive_defaults
|
47
46
|
end
|
48
|
-
# rubocop:enable Metrics/AbcSize
|
49
47
|
|
50
48
|
def target_ruby_version
|
51
49
|
target_ruby.version
|
@@ -150,7 +148,7 @@ module RuboCop
|
|
150
148
|
end
|
151
149
|
end
|
152
150
|
|
153
|
-
def validate_enforced_styles(valid_cop_names)
|
151
|
+
def validate_enforced_styles(valid_cop_names) # rubocop:todo Metrics/AbcSize
|
154
152
|
valid_cop_names.each do |name|
|
155
153
|
styles = @config[name].select { |key, _| key.start_with?('Enforced') }
|
156
154
|
|
data/lib/rubocop/cop/base.rb
CHANGED
@@ -137,6 +137,7 @@ module RuboCop
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def self.inherited(subclass)
|
140
|
+
super
|
140
141
|
Registry.global.enlist(subclass)
|
141
142
|
end
|
142
143
|
|
@@ -189,8 +190,7 @@ module RuboCop
|
|
189
190
|
def cop_config
|
190
191
|
# Use department configuration as basis, but let individual cop
|
191
192
|
# configuration override.
|
192
|
-
@cop_config ||= @config.
|
193
|
-
.merge(@config.for_cop(self))
|
193
|
+
@cop_config ||= @config.for_badge(self.class.badge)
|
194
194
|
end
|
195
195
|
|
196
196
|
def config_to_allow_offenses
|
@@ -29,8 +29,8 @@ module RuboCop
|
|
29
29
|
configured_width:)
|
30
30
|
corrector.insert_before(
|
31
31
|
range,
|
32
|
-
"\n
|
33
|
-
indent_steps * configured_width)
|
32
|
+
"\n#{' ' * (node.loc.keyword.column +
|
33
|
+
indent_steps * configured_width)}"
|
34
34
|
)
|
35
35
|
end
|
36
36
|
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
39
39
|
|
40
40
|
text = eol_comment.loc.expression.source
|
41
41
|
corrector.insert_before(node,
|
42
|
-
text
|
42
|
+
"#{text}\n#{' ' * node.loc.keyword.column}")
|
43
43
|
corrector.remove(eol_comment)
|
44
44
|
end
|
45
45
|
|
@@ -9,33 +9,30 @@ module RuboCop
|
|
9
9
|
class << self
|
10
10
|
attr_reader :processed_source
|
11
11
|
|
12
|
-
def correct(processed_source, node)
|
12
|
+
def correct(corrector, processed_source, node)
|
13
13
|
return if %i[kwarg kwoptarg].include?(node.type)
|
14
14
|
|
15
15
|
@processed_source = processed_source
|
16
16
|
|
17
17
|
if node.blockarg_type?
|
18
|
-
correct_for_blockarg_type(node)
|
18
|
+
correct_for_blockarg_type(corrector, node)
|
19
19
|
else
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
20
|
+
variable_name = if node.optarg_type?
|
21
|
+
node.node_parts[0]
|
22
|
+
else
|
23
|
+
# Extract only a var name without splat (`*`)
|
24
|
+
node.source.gsub(/\A\*+/, '')
|
25
|
+
end
|
26
|
+
|
27
|
+
corrector.replace(node.loc.name, "_#{variable_name}")
|
29
28
|
end
|
30
29
|
end
|
31
30
|
|
32
|
-
def correct_for_blockarg_type(node)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
corrector.remove(range)
|
38
|
-
end
|
31
|
+
def correct_for_blockarg_type(corrector, node)
|
32
|
+
range = range_with_surrounding_space(range: node.source_range, side: :left)
|
33
|
+
range = range_with_surrounding_comma(range, :left)
|
34
|
+
|
35
|
+
corrector.remove(range)
|
39
36
|
end
|
40
37
|
end
|
41
38
|
end
|
data/lib/rubocop/cop/force.rb
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Gemspec
|
6
|
-
# Checks that `required_ruby_version` of gemspec and
|
7
|
-
# of .rubocop.yml
|
6
|
+
# Checks that `required_ruby_version` of gemspec is specified and
|
7
|
+
# equal to `TargetRubyVersion` of .rubocop.yml.
|
8
8
|
# Thereby, RuboCop to perform static analysis working on the version
|
9
9
|
# required by gemspec.
|
10
10
|
#
|
@@ -13,6 +13,11 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# # bad
|
15
15
|
# Gem::Specification.new do |spec|
|
16
|
+
# # no `required_ruby_version` specified
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # bad
|
20
|
+
# Gem::Specification.new do |spec|
|
16
21
|
# spec.required_ruby_version = '>= 2.4.0'
|
17
22
|
# end
|
18
23
|
#
|
@@ -41,17 +46,29 @@ module RuboCop
|
|
41
46
|
# spec.required_ruby_version = '~> 2.5'
|
42
47
|
# end
|
43
48
|
class RequiredRubyVersion < Cop
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
49
|
+
include RangeHelp
|
50
|
+
|
51
|
+
NOT_EQUAL_MSG = '`required_ruby_version` (%<required_ruby_version>s, ' \
|
52
|
+
'declared in %<gemspec_filename>s) and `TargetRubyVersion` ' \
|
53
|
+
'(%<target_ruby_version>s, which may be specified in ' \
|
54
|
+
'.rubocop.yml) should be equal.'
|
55
|
+
MISSING_MSG = '`required_ruby_version` should be specified.'
|
48
56
|
|
49
57
|
def_node_search :required_ruby_version, <<~PATTERN
|
50
|
-
(send _ :required_ruby_version= $
|
58
|
+
(send _ :required_ruby_version= $_)
|
51
59
|
PATTERN
|
52
60
|
|
61
|
+
def_node_matcher :string_version?, <<~PATTERN
|
62
|
+
{(str _) (array (str _))}
|
63
|
+
PATTERN
|
64
|
+
|
65
|
+
# rubocop:disable Metrics/AbcSize
|
53
66
|
def investigate(processed_source)
|
54
|
-
required_ruby_version(processed_source.ast)
|
67
|
+
version = required_ruby_version(processed_source.ast).first
|
68
|
+
|
69
|
+
if version
|
70
|
+
return unless string_version?(version)
|
71
|
+
|
55
72
|
ruby_version = extract_ruby_version(version)
|
56
73
|
|
57
74
|
return if ruby_version == target_ruby_version.to_s
|
@@ -59,10 +76,14 @@ module RuboCop
|
|
59
76
|
add_offense(
|
60
77
|
processed_source.ast,
|
61
78
|
location: version.loc.expression,
|
62
|
-
message:
|
79
|
+
message: not_equal_message(ruby_version, target_ruby_version)
|
63
80
|
)
|
81
|
+
else
|
82
|
+
range = source_range(processed_source.buffer, 1, 0)
|
83
|
+
add_offense(nil, location: range, message: MISSING_MSG)
|
64
84
|
end
|
65
85
|
end
|
86
|
+
# rubocop:enable Metrics/AbcSize
|
66
87
|
|
67
88
|
private
|
68
89
|
|
@@ -76,9 +97,9 @@ module RuboCop
|
|
76
97
|
required_ruby_version.str_content.scan(/\d/).first(2).join('.')
|
77
98
|
end
|
78
99
|
|
79
|
-
def
|
100
|
+
def not_equal_message(required_ruby_version, target_ruby_version)
|
80
101
|
format(
|
81
|
-
|
102
|
+
NOT_EQUAL_MSG,
|
82
103
|
required_ruby_version: required_ruby_version,
|
83
104
|
gemspec_filename: File.basename(processed_source.file_path),
|
84
105
|
target_ruby_version: target_ruby_version
|
@@ -25,9 +25,9 @@ module RuboCop
|
|
25
25
|
target_line = find_target_line
|
26
26
|
if target_line
|
27
27
|
configuration_entries.insert(target_line,
|
28
|
-
new_configuration_entry
|
28
|
+
"#{new_configuration_entry}\n")
|
29
29
|
else
|
30
|
-
configuration_entries.push("\n"
|
30
|
+
configuration_entries.push("\n#{new_configuration_entry}")
|
31
31
|
end
|
32
32
|
|
33
33
|
File.write(configuration_file_path, configuration_entries.join)
|
@@ -12,8 +12,9 @@ module RuboCop
|
|
12
12
|
# # good
|
13
13
|
# node.method?(:do_something)
|
14
14
|
#
|
15
|
-
class MethodNameEqual <
|
15
|
+
class MethodNameEqual < Base
|
16
16
|
include RangeHelp
|
17
|
+
extend AutoCorrector
|
17
18
|
|
18
19
|
MSG = 'Use `method?(%<method_name>s)` instead of ' \
|
19
20
|
'`method_name == %<method_name>s`.'
|
@@ -31,17 +32,8 @@ module RuboCop
|
|
31
32
|
|
32
33
|
range = range(method_name_node, node)
|
33
34
|
|
34
|
-
add_offense(
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
def autocorrect(node)
|
39
|
-
lambda do |corrector|
|
40
|
-
method_name?(node) do |method_name_node, method_name_arg|
|
41
|
-
corrector.replace(
|
42
|
-
range(method_name_node, node),
|
43
|
-
"method?(#{method_name_arg.first.source})"
|
44
|
-
)
|
35
|
+
add_offense(range, message: message) do |corrector|
|
36
|
+
corrector.replace(range, "method?(#{method_name_arg.first.source})")
|
45
37
|
end
|
46
38
|
end
|
47
39
|
end
|
@@ -13,24 +13,24 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# add_offense(node, location: :selector)
|
16
|
-
class OffenseLocationKeyword <
|
16
|
+
class OffenseLocationKeyword < Base
|
17
|
+
extend AutoCorrector
|
18
|
+
|
17
19
|
MSG = 'Use `:%<keyword>s` as the location argument to ' \
|
18
20
|
'`#add_offense`.'
|
19
21
|
|
20
22
|
def on_send(node)
|
21
23
|
node_type_check(node) do |node_arg, kwargs|
|
22
24
|
find_offending_argument(node_arg, kwargs) do |location, keyword|
|
23
|
-
add_offense(location, message: format(MSG, keyword: keyword))
|
25
|
+
add_offense(location, message: format(MSG, keyword: keyword)) do |corrector|
|
26
|
+
(*, keyword) = offending_location_argument(location.parent)
|
27
|
+
|
28
|
+
corrector.replace(location, ":#{keyword}")
|
29
|
+
end
|
24
30
|
end
|
25
31
|
end
|
26
32
|
end
|
27
33
|
|
28
|
-
def autocorrect(node)
|
29
|
-
(*, keyword) = offending_location_argument(node.parent)
|
30
|
-
|
31
|
-
->(corrector) { corrector.replace(node, ":#{keyword}") }
|
32
|
-
end
|
33
|
-
|
34
34
|
private
|
35
35
|
|
36
36
|
def_node_matcher :node_type_check, <<~PATTERN
|