rubocop 0.89.1 → 0.90.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 +79 -11
- data/lib/rubocop.rb +13 -0
- data/lib/rubocop/cached_data.rb +1 -0
- data/lib/rubocop/cli/command.rb +1 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
- data/lib/rubocop/cli/command/show_cops.rb +1 -0
- data/lib/rubocop/cli/command/version.rb +1 -0
- data/lib/rubocop/cli/environment.rb +1 -0
- data/lib/rubocop/comment_config.rb +5 -0
- data/lib/rubocop/config_loader.rb +17 -6
- data/lib/rubocop/config_loader_resolver.rb +1 -0
- data/lib/rubocop/config_obsoletion.rb +1 -0
- data/lib/rubocop/config_validator.rb +3 -0
- data/lib/rubocop/cop/base.rb +23 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +7 -3
- data/lib/rubocop/cop/commissioner.rb +47 -7
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +4 -9
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
- data/lib/rubocop/cop/documentation.rb +22 -0
- data/lib/rubocop/cop/generator.rb +1 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
- data/lib/rubocop/cop/layout/class_structure.rb +10 -9
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
- data/lib/rubocop/cop/layout/condition_position.rb +13 -15
- data/lib/rubocop/cop/layout/def_end_alignment.rb +7 -4
- data/lib/rubocop/cop/layout/dot_position.rb +21 -17
- data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +19 -16
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +144 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
- data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +4 -6
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -6
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +6 -7
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
- data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +11 -9
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -21
- data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +20 -15
- data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
- data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
- data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +13 -16
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +16 -19
- data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +13 -16
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +10 -11
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_require.rb +41 -0
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +0 -11
- data/lib/rubocop/cop/lint/empty_file.rb +53 -0
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +9 -19
- data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
- data/lib/rubocop/cop/lint/useless_method_definition.rb +77 -0
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -0
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
- data/lib/rubocop/cop/mixin/alignment.rb +3 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +16 -7
- data/lib/rubocop/cop/mixin/comments_help.rb +54 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +3 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +17 -0
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +12 -10
- data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +14 -3
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
- data/lib/rubocop/cop/mixin/rescue_node.rb +10 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
- data/lib/rubocop/cop/mixin/trailing_comma.rb +7 -7
- data/lib/rubocop/cop/offense.rb +1 -0
- data/lib/rubocop/cop/severity.rb +0 -8
- data/lib/rubocop/cop/style/case_equality.rb +8 -3
- data/lib/rubocop/cop/style/case_like_if.rb +20 -4
- data/lib/rubocop/cop/style/class_methods_definitions.rb +131 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +89 -0
- data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
- data/lib/rubocop/cop/style/guard_clause.rb +1 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -5
- data/lib/rubocop/cop/style/hash_transform_keys.rb +14 -1
- data/lib/rubocop/cop/style/hash_transform_values.rb +14 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -2
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +58 -0
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +10 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +2 -2
- data/lib/rubocop/cop/style/negated_if.rb +6 -6
- data/lib/rubocop/cop/style/negated_unless.rb +6 -6
- data/lib/rubocop/cop/style/negated_while.rb +7 -15
- data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -11
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
- data/lib/rubocop/cop/style/next.rb +10 -14
- data/lib/rubocop/cop/style/nil_comparison.rb +11 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +32 -26
- data/lib/rubocop/cop/style/not.rb +19 -26
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -11
- data/lib/rubocop/cop/style/one_line_conditional.rb +71 -23
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +13 -10
- data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
- data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +9 -14
- data/lib/rubocop/cop/style/proc.rb +6 -6
- data/lib/rubocop/cop/style/raise_args.rb +13 -24
- data/lib/rubocop/cop/style/random_with_offset.rb +15 -16
- data/lib/rubocop/cop/style/redundant_assignment.rb +8 -10
- data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
- data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +8 -8
- data/lib/rubocop/cop/style/redundant_freeze.rb +3 -6
- data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
- data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -9
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
- data/lib/rubocop/cop/style/redundant_self.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
- data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
- data/lib/rubocop/cop/style/return_nil.rb +5 -5
- data/lib/rubocop/cop/style/safe_navigation.rb +13 -12
- data/lib/rubocop/cop/style/sample.rb +10 -13
- data/lib/rubocop/cop/style/self_assignment.rb +26 -22
- data/lib/rubocop/cop/style/semicolon.rb +6 -9
- data/lib/rubocop/cop/style/send.rb +2 -2
- data/lib/rubocop/cop/style/signal_exception.rb +21 -19
- data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +17 -16
- data/lib/rubocop/cop/style/slicing_with_range.rb +4 -7
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +4 -6
- data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
- data/lib/rubocop/cop/style/string_methods.rb +7 -17
- data/lib/rubocop/cop/style/strip.rb +8 -14
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
- data/lib/rubocop/cop/style/symbol_array.rb +5 -16
- data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
- data/lib/rubocop/cop/style/ternary_parentheses.rb +21 -20
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +7 -6
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
- data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
- data/lib/rubocop/cop/style/unless_else.rb +5 -8
- data/lib/rubocop/cop/style/unpack_first.rb +4 -8
- data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
- data/lib/rubocop/cop/style/when_then.rb +4 -6
- data/lib/rubocop/cop/style/while_until_do.rb +6 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
- data/lib/rubocop/cop/style/word_array.rb +5 -23
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
- data/lib/rubocop/cop/style/zero_length_predicate.rb +11 -13
- data/lib/rubocop/cop/team.rb +1 -0
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/format_string.rb +3 -5
- data/lib/rubocop/cop/variable_force.rb +2 -0
- data/lib/rubocop/cops_documentation_generator.rb +4 -2
- data/lib/rubocop/core_ext/string.rb +1 -1
- data/lib/rubocop/ext/regexp_node.rb +46 -0
- data/lib/rubocop/file_finder.rb +1 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/html_formatter.rb +2 -0
- data/lib/rubocop/formatter/progress_formatter.rb +2 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
- data/lib/rubocop/name_similarity.rb +1 -0
- data/lib/rubocop/options.rb +3 -0
- data/lib/rubocop/remote_config.rb +1 -0
- data/lib/rubocop/result_cache.rb +1 -0
- data/lib/rubocop/rspec/cop_helper.rb +4 -1
- data/lib/rubocop/rspec/expect_offense.rb +10 -5
- data/lib/rubocop/rspec/shared_contexts.rb +12 -0
- data/lib/rubocop/runner.rb +1 -0
- data/lib/rubocop/string_interpreter.rb +3 -0
- data/lib/rubocop/target_finder.rb +1 -0
- data/lib/rubocop/target_ruby.rb +6 -0
- data/lib/rubocop/version.rb +2 -1
- data/lib/rubocop/yaml_duplication_checker.rb +1 -0
- metadata +15 -2
@@ -25,9 +25,10 @@ module RuboCop
|
|
25
25
|
# # good
|
26
26
|
# %Q/Mix the foo into the baz./
|
27
27
|
# %Q{They all said: 'Hooray!'}
|
28
|
-
class PercentQLiterals <
|
28
|
+
class PercentQLiterals < Base
|
29
29
|
include PercentLiteral
|
30
30
|
include ConfigurableEnforcedStyle
|
31
|
+
extend AutoCorrector
|
31
32
|
|
32
33
|
LOWER_CASE_Q_MSG = 'Do not use `%Q` unless interpolation is ' \
|
33
34
|
'needed. Use `%q`.'
|
@@ -37,12 +38,6 @@ module RuboCop
|
|
37
38
|
process(node, '%Q', '%q')
|
38
39
|
end
|
39
40
|
|
40
|
-
def autocorrect(node)
|
41
|
-
lambda do |corrector|
|
42
|
-
corrector.replace(node, corrected(node.source))
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
41
|
private
|
47
42
|
|
48
43
|
def on_percent_literal(node)
|
@@ -50,9 +45,12 @@ module RuboCop
|
|
50
45
|
|
51
46
|
# Report offense only if changing case doesn't change semantics,
|
52
47
|
# i.e., if the string would become dynamic or has special characters.
|
53
|
-
|
48
|
+
ast = ProcessedSource.new(corrected(node.source), target_ruby_version).ast
|
49
|
+
return if node.children != ast.children
|
54
50
|
|
55
|
-
add_offense(node
|
51
|
+
add_offense(node.loc.begin) do |corrector|
|
52
|
+
corrector.replace(node, corrected(node.source))
|
53
|
+
end
|
56
54
|
end
|
57
55
|
|
58
56
|
def correct_literal_style?(node)
|
@@ -60,7 +58,7 @@ module RuboCop
|
|
60
58
|
style == :upper_case_q && type(node) == '%Q'
|
61
59
|
end
|
62
60
|
|
63
|
-
def message(
|
61
|
+
def message(_range)
|
64
62
|
style == :lower_case_q ? LOWER_CASE_Q_MSG : UPPER_CASE_Q_MSG
|
65
63
|
end
|
66
64
|
|
@@ -12,23 +12,21 @@ module RuboCop
|
|
12
12
|
#
|
13
13
|
# # good
|
14
14
|
# puts Regexp.last_match(1)
|
15
|
-
class PerlBackrefs <
|
15
|
+
class PerlBackrefs < Base
|
16
|
+
extend AutoCorrector
|
17
|
+
|
16
18
|
MSG = 'Avoid the use of Perl-style backrefs.'
|
17
19
|
|
18
20
|
def on_nth_ref(node)
|
19
|
-
add_offense(node)
|
20
|
-
end
|
21
|
-
|
22
|
-
def autocorrect(node)
|
23
|
-
lambda do |corrector|
|
21
|
+
add_offense(node) do |corrector|
|
24
22
|
backref, = *node
|
25
23
|
parent_type = node.parent ? node.parent.type : nil
|
24
|
+
|
26
25
|
if %i[dstr xstr regexp].include?(parent_type)
|
27
|
-
corrector.replace(node,
|
28
|
-
|
26
|
+
corrector.replace(node, "{Regexp.last_match(#{backref})}")
|
27
|
+
|
29
28
|
else
|
30
|
-
corrector.replace(node,
|
31
|
-
"Regexp.last_match(#{backref})")
|
29
|
+
corrector.replace(node, "Regexp.last_match(#{backref})")
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -25,8 +25,9 @@ module RuboCop
|
|
25
25
|
# # good
|
26
26
|
# Hash#has_key?
|
27
27
|
# Hash#has_value?
|
28
|
-
class PreferredHashMethods <
|
28
|
+
class PreferredHashMethods < Base
|
29
29
|
include ConfigurableEnforcedStyle
|
30
|
+
extend AutoCorrector
|
30
31
|
|
31
32
|
MSG = 'Use `Hash#%<prefer>s` instead of `Hash#%<current>s`.'
|
32
33
|
|
@@ -36,26 +37,20 @@ module RuboCop
|
|
36
37
|
}.freeze
|
37
38
|
|
38
39
|
def on_send(node)
|
39
|
-
return unless node.arguments.one? &&
|
40
|
-
offending_selector?(node.method_name)
|
40
|
+
return unless node.arguments.one? && offending_selector?(node.method_name)
|
41
41
|
|
42
|
-
|
43
|
-
end
|
44
|
-
alias on_csend on_send
|
42
|
+
message = message(node.method_name)
|
45
43
|
|
46
|
-
|
47
|
-
|
48
|
-
corrector.replace(node.loc.selector,
|
49
|
-
proper_method_name(node.loc.selector.source))
|
44
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
45
|
+
corrector.replace(node.loc.selector, proper_method_name(node.loc.selector.source))
|
50
46
|
end
|
51
47
|
end
|
48
|
+
alias on_csend on_send
|
52
49
|
|
53
50
|
private
|
54
51
|
|
55
|
-
def message(
|
56
|
-
format(MSG,
|
57
|
-
prefer: proper_method_name(node.method_name),
|
58
|
-
current: node.method_name)
|
52
|
+
def message(method_name)
|
53
|
+
format(MSG, prefer: proper_method_name(method_name), current: method_name)
|
59
54
|
end
|
60
55
|
|
61
56
|
def proper_method_name(method_name)
|
@@ -13,7 +13,9 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# p = proc { |n| puts n }
|
15
15
|
#
|
16
|
-
class Proc <
|
16
|
+
class Proc < Base
|
17
|
+
extend AutoCorrector
|
18
|
+
|
17
19
|
MSG = 'Use `proc` instead of `Proc.new`.'
|
18
20
|
|
19
21
|
def_node_matcher :proc_new?,
|
@@ -21,13 +23,11 @@ module RuboCop
|
|
21
23
|
|
22
24
|
def on_block(node)
|
23
25
|
proc_new?(node) do |block_method|
|
24
|
-
add_offense(block_method)
|
26
|
+
add_offense(block_method) do |corrector|
|
27
|
+
corrector.replace(block_method, 'proc')
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
27
|
-
|
28
|
-
def autocorrect(node)
|
29
|
-
->(corrector) { corrector.replace(node, 'proc') }
|
30
|
-
end
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -32,8 +32,9 @@ module RuboCop
|
|
32
32
|
# raise StandardError.new("message")
|
33
33
|
# raise MyCustomError.new(arg1, arg2, arg3)
|
34
34
|
# fail "message"
|
35
|
-
class RaiseArgs <
|
35
|
+
class RaiseArgs < Base
|
36
36
|
include ConfigurableEnforcedStyle
|
37
|
+
extend AutoCorrector
|
37
38
|
|
38
39
|
EXPLODED_MSG = 'Provide an exception class and message ' \
|
39
40
|
'as arguments to `%<method>s`.'
|
@@ -51,16 +52,6 @@ module RuboCop
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
|
-
def autocorrect(node)
|
55
|
-
replacement = if style == :compact
|
56
|
-
correction_exploded_to_compact(node)
|
57
|
-
else
|
58
|
-
correction_compact_to_exploded(node)
|
59
|
-
end
|
60
|
-
|
61
|
-
->(corrector) { corrector.replace(node, replacement) }
|
62
|
-
end
|
63
|
-
|
64
55
|
private
|
65
56
|
|
66
57
|
def correction_compact_to_exploded(node)
|
@@ -91,8 +82,12 @@ module RuboCop
|
|
91
82
|
|
92
83
|
def check_compact(node)
|
93
84
|
if node.arguments.size > 1
|
94
|
-
|
95
|
-
|
85
|
+
return unless opposite_style_detected
|
86
|
+
|
87
|
+
add_offense(node, message: format(COMPACT_MSG, method: node.method_name)) do |corrector|
|
88
|
+
replacement = correction_exploded_to_compact(node)
|
89
|
+
|
90
|
+
corrector.replace(node, replacement)
|
96
91
|
end
|
97
92
|
else
|
98
93
|
correct_style_detected
|
@@ -105,11 +100,13 @@ module RuboCop
|
|
105
100
|
first_arg = node.first_argument
|
106
101
|
|
107
102
|
return unless first_arg.send_type? && first_arg.method?(:new)
|
108
|
-
|
109
103
|
return if acceptable_exploded_args?(first_arg.arguments)
|
104
|
+
return unless opposite_style_detected
|
110
105
|
|
111
|
-
add_offense(node) do
|
112
|
-
|
106
|
+
add_offense(node, message: format(EXPLODED_MSG, method: node.method_name)) do |corrector|
|
107
|
+
replacement = correction_compact_to_exploded(node)
|
108
|
+
|
109
|
+
corrector.replace(node, replacement)
|
113
110
|
end
|
114
111
|
end
|
115
112
|
|
@@ -131,14 +128,6 @@ module RuboCop
|
|
131
128
|
parent.and_type? || parent.or_type? ||
|
132
129
|
parent.if_type? && parent.ternary?
|
133
130
|
end
|
134
|
-
|
135
|
-
def message(node)
|
136
|
-
if style == :compact
|
137
|
-
format(COMPACT_MSG, method: node.method_name)
|
138
|
-
else
|
139
|
-
format(EXPLODED_MSG, method: node.method_name)
|
140
|
-
end
|
141
|
-
end
|
142
131
|
end
|
143
132
|
end
|
144
133
|
end
|
@@ -23,7 +23,9 @@ module RuboCop
|
|
23
23
|
# # good
|
24
24
|
# rand(1..6)
|
25
25
|
# rand(1...7)
|
26
|
-
class RandomWithOffset <
|
26
|
+
class RandomWithOffset < Base
|
27
|
+
extend AutoCorrector
|
28
|
+
|
27
29
|
MSG = 'Prefer ranges when generating random numbers instead of ' \
|
28
30
|
'integers with offsets.'
|
29
31
|
|
@@ -61,21 +63,8 @@ module RuboCop
|
|
61
63
|
rand_op_integer?(node) ||
|
62
64
|
rand_modified?(node)
|
63
65
|
|
64
|
-
add_offense(node)
|
65
|
-
|
66
|
-
|
67
|
-
def autocorrect(node)
|
68
|
-
lambda do |corrector|
|
69
|
-
if integer_op_rand?(node)
|
70
|
-
corrector.replace(node,
|
71
|
-
corrected_integer_op_rand(node))
|
72
|
-
elsif rand_op_integer?(node)
|
73
|
-
corrector.replace(node,
|
74
|
-
corrected_rand_op_integer(node))
|
75
|
-
elsif rand_modified?(node)
|
76
|
-
corrector.replace(node,
|
77
|
-
corrected_rand_modified(node))
|
78
|
-
end
|
66
|
+
add_offense(node) do |corrector|
|
67
|
+
autocorrect(corrector, node)
|
79
68
|
end
|
80
69
|
end
|
81
70
|
|
@@ -86,6 +75,16 @@ module RuboCop
|
|
86
75
|
(send _ _ (send $_ _ $_))}
|
87
76
|
PATTERN
|
88
77
|
|
78
|
+
def autocorrect(corrector, node)
|
79
|
+
if integer_op_rand?(node)
|
80
|
+
corrector.replace(node, corrected_integer_op_rand(node))
|
81
|
+
elsif rand_op_integer?(node)
|
82
|
+
corrector.replace(node, corrected_rand_op_integer(node))
|
83
|
+
elsif rand_modified?(node)
|
84
|
+
corrector.replace(node, corrected_rand_modified(node))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
89
88
|
def corrected_integer_op_rand(node)
|
90
89
|
random_call(node) do |prefix_node, random_node|
|
91
90
|
prefix = prefix_from_prefix_node(prefix_node)
|
@@ -37,7 +37,9 @@ module RuboCop
|
|
37
37
|
# end
|
38
38
|
# end
|
39
39
|
#
|
40
|
-
class RedundantAssignment <
|
40
|
+
class RedundantAssignment < Base
|
41
|
+
extend AutoCorrector
|
42
|
+
|
41
43
|
MSG = 'Redundant assignment before returning detected.'
|
42
44
|
|
43
45
|
def_node_matcher :redundant_assignment?, <<~PATTERN
|
@@ -49,14 +51,6 @@ module RuboCop
|
|
49
51
|
end
|
50
52
|
alias on_defs on_def
|
51
53
|
|
52
|
-
def autocorrect(node)
|
53
|
-
lambda do |corrector|
|
54
|
-
expression = node.children[1]
|
55
|
-
corrector.replace(node, expression.source)
|
56
|
-
corrector.remove(right_sibling_of(node))
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
54
|
private
|
61
55
|
|
62
56
|
def check_branch(node)
|
@@ -97,7 +91,11 @@ module RuboCop
|
|
97
91
|
|
98
92
|
def check_begin_node(node)
|
99
93
|
if (assignment = redundant_assignment?(node))
|
100
|
-
add_offense(assignment)
|
94
|
+
add_offense(assignment) do |corrector|
|
95
|
+
expression = assignment.children[1]
|
96
|
+
corrector.replace(assignment, expression.source)
|
97
|
+
corrector.remove(right_sibling_of(assignment))
|
98
|
+
end
|
101
99
|
else
|
102
100
|
last_expr = node.children.last
|
103
101
|
check_branch(last_expr)
|
@@ -54,7 +54,9 @@ module RuboCop
|
|
54
54
|
# baz
|
55
55
|
# end
|
56
56
|
# end
|
57
|
-
class RedundantBegin <
|
57
|
+
class RedundantBegin < Base
|
58
|
+
extend AutoCorrector
|
59
|
+
|
58
60
|
MSG = 'Redundant `begin` block detected.'
|
59
61
|
|
60
62
|
def on_def(node)
|
@@ -71,19 +73,15 @@ module RuboCop
|
|
71
73
|
check(node)
|
72
74
|
end
|
73
75
|
|
74
|
-
def autocorrect(node)
|
75
|
-
lambda do |corrector|
|
76
|
-
corrector.remove(node.loc.begin)
|
77
|
-
corrector.remove(node.loc.end)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
76
|
private
|
82
77
|
|
83
78
|
def check(node)
|
84
79
|
return unless node.body&.kwbegin_type?
|
85
80
|
|
86
|
-
add_offense(node.body
|
81
|
+
add_offense(node.body.loc.begin) do |corrector|
|
82
|
+
corrector.remove(node.body.loc.begin)
|
83
|
+
corrector.remove(node.body.loc.end)
|
84
|
+
end
|
87
85
|
end
|
88
86
|
end
|
89
87
|
end
|
@@ -14,8 +14,9 @@ module RuboCop
|
|
14
14
|
# %w/swim run bike/
|
15
15
|
# %w[shirt pants shoes]
|
16
16
|
# %W(apple #{fruit} grape)
|
17
|
-
class RedundantCapitalW <
|
17
|
+
class RedundantCapitalW < Base
|
18
18
|
include PercentLiteral
|
19
|
+
extend AutoCorrector
|
19
20
|
|
20
21
|
MSG = 'Do not use `%W` unless interpolation is needed. ' \
|
21
22
|
'If not, use `%w`.'
|
@@ -24,19 +25,15 @@ module RuboCop
|
|
24
25
|
process(node, '%W')
|
25
26
|
end
|
26
27
|
|
27
|
-
def autocorrect(node)
|
28
|
-
lambda do |corrector|
|
29
|
-
src = node.loc.begin.source
|
30
|
-
corrector.replace(node.loc.begin, src.tr('W', 'w'))
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
28
|
private
|
35
29
|
|
36
30
|
def on_percent_literal(node)
|
37
31
|
return if requires_interpolation?(node)
|
38
32
|
|
39
|
-
add_offense(node)
|
33
|
+
add_offense(node) do |corrector|
|
34
|
+
src = node.loc.begin.source
|
35
|
+
corrector.replace(node.loc.begin, src.tr('W', 'w'))
|
36
|
+
end
|
40
37
|
end
|
41
38
|
|
42
39
|
def requires_interpolation?(node)
|
@@ -30,8 +30,9 @@ module RuboCop
|
|
30
30
|
# c
|
31
31
|
# end
|
32
32
|
#
|
33
|
-
class RedundantCondition <
|
33
|
+
class RedundantCondition < Base
|
34
34
|
include RangeHelp
|
35
|
+
extend AutoCorrector
|
35
36
|
|
36
37
|
MSG = 'Use double pipes `||` instead.'
|
37
38
|
REDUNDANT_CONDITION = 'This condition is not needed.'
|
@@ -40,11 +41,9 @@ module RuboCop
|
|
40
41
|
return if node.elsif_conditional?
|
41
42
|
return unless offense?(node)
|
42
43
|
|
43
|
-
|
44
|
-
end
|
44
|
+
message = message(node)
|
45
45
|
|
46
|
-
|
47
|
-
lambda do |corrector|
|
46
|
+
add_offense(range_of_offense(node), message: message) do |corrector|
|
48
47
|
if node.ternary?
|
49
48
|
correct_ternary(corrector, node)
|
50
49
|
elsif node.modifier_form? || !node.else_branch
|
@@ -68,7 +67,7 @@ module RuboCop
|
|
68
67
|
end
|
69
68
|
|
70
69
|
def range_of_offense(node)
|
71
|
-
return
|
70
|
+
return node.loc.expression unless node.ternary?
|
72
71
|
|
73
72
|
range_between(node.loc.question.begin_pos, node.loc.colon.end_pos)
|
74
73
|
end
|
@@ -31,9 +31,10 @@ module RuboCop
|
|
31
31
|
# # good
|
32
32
|
# ENV.fetch(:key, VALUE)
|
33
33
|
#
|
34
|
-
class RedundantFetchBlock <
|
34
|
+
class RedundantFetchBlock < Base
|
35
35
|
include FrozenStringLiteral
|
36
36
|
include RangeHelp
|
37
|
+
extend AutoCorrector
|
37
38
|
|
38
39
|
MSG = 'Use `%<good>s` instead of `%<bad>s`.'
|
39
40
|
|
@@ -52,17 +53,7 @@ module RuboCop
|
|
52
53
|
good = build_good_method(send, body)
|
53
54
|
bad = build_bad_method(send, body)
|
54
55
|
|
55
|
-
add_offense(
|
56
|
-
node,
|
57
|
-
location: range,
|
58
|
-
message: format(MSG, good: good, bad: bad)
|
59
|
-
)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def autocorrect(node)
|
64
|
-
redundant_fetch_block_candidate?(node) do |send, body|
|
65
|
-
lambda do |corrector|
|
56
|
+
add_offense(range, message: format(MSG, good: good, bad: bad)) do |corrector|
|
66
57
|
receiver, _, key = send.children
|
67
58
|
default_value = body ? body.source : 'nil'
|
68
59
|
|