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
@@ -12,7 +12,8 @@ module RuboCop
|
|
12
12
|
#
|
13
13
|
# # good
|
14
14
|
# items[1..]
|
15
|
-
class SlicingWithRange <
|
15
|
+
class SlicingWithRange < Base
|
16
|
+
extend AutoCorrector
|
16
17
|
extend TargetRubyVersion
|
17
18
|
|
18
19
|
minimum_target_ruby_version 2.6
|
@@ -25,12 +26,8 @@ module RuboCop
|
|
25
26
|
return unless node.method?(:[]) && node.arguments.count == 1
|
26
27
|
return unless range_till_minus_one?(node.arguments.first)
|
27
28
|
|
28
|
-
add_offense(node.
|
29
|
-
|
30
|
-
|
31
|
-
def autocorrect(node)
|
32
|
-
lambda do |corrector|
|
33
|
-
corrector.remove(node.end)
|
29
|
+
add_offense(node.first_argument) do |corrector|
|
30
|
+
corrector.remove(node.first_argument.end)
|
34
31
|
end
|
35
32
|
end
|
36
33
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# If the branch of a conditional consists solely of a conditional node,
|
7
|
+
# its conditions can be combined with the conditions of the outer branch.
|
8
|
+
# This helps to keep the nesting level from getting too deep.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# # bad
|
12
|
+
# if condition_a
|
13
|
+
# if condition_b
|
14
|
+
# do_something
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# if condition_a && condition_b
|
20
|
+
# do_something
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# @example AllowModifier: false (default)
|
24
|
+
# # bad
|
25
|
+
# if condition_a
|
26
|
+
# do_something if condition_b
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# @example AllowModifier: true
|
30
|
+
# # good
|
31
|
+
# if condition_a
|
32
|
+
# do_something if condition_b
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
class SoleNestedConditional < Base
|
36
|
+
MSG = 'Consider merging nested conditions into '\
|
37
|
+
'outer `%<conditional_type>s` conditions.'
|
38
|
+
|
39
|
+
def on_if(node)
|
40
|
+
return if node.ternary? || node.else? || node.elsif?
|
41
|
+
|
42
|
+
branch = node.if_branch
|
43
|
+
return unless offending_branch?(branch)
|
44
|
+
|
45
|
+
message = format(MSG, conditional_type: node.keyword)
|
46
|
+
add_offense(branch.loc.keyword, message: message)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def offending_branch?(branch)
|
52
|
+
return false unless branch
|
53
|
+
|
54
|
+
branch.if_type? &&
|
55
|
+
!branch.else? &&
|
56
|
+
!branch.ternary? &&
|
57
|
+
!(branch.modifier_form? && allow_modifier?)
|
58
|
+
end
|
59
|
+
|
60
|
+
def allow_modifier?
|
61
|
+
cop_config['AllowModifier']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -56,8 +56,9 @@ module RuboCop
|
|
56
56
|
# puts $'
|
57
57
|
# puts $+
|
58
58
|
#
|
59
|
-
class SpecialGlobalVars <
|
59
|
+
class SpecialGlobalVars < Base
|
60
60
|
include ConfigurableEnforcedStyle
|
61
|
+
extend AutoCorrector
|
61
62
|
|
62
63
|
MSG_BOTH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
|
63
64
|
'module (don\'t forget to require it) or `%<regular>s` over ' \
|
@@ -120,13 +121,14 @@ module RuboCop
|
|
120
121
|
correct_style_detected
|
121
122
|
else
|
122
123
|
opposite_style_detected
|
123
|
-
|
124
|
+
|
125
|
+
add_offense(node, message: message(global_var)) do |corrector|
|
126
|
+
autocorrect(corrector, node, global_var)
|
127
|
+
end
|
124
128
|
end
|
125
129
|
end
|
126
130
|
|
127
|
-
def message(
|
128
|
-
global_var, = *node
|
129
|
-
|
131
|
+
def message(global_var)
|
130
132
|
if style == :use_english_names
|
131
133
|
format_english_message(global_var)
|
132
134
|
else
|
@@ -136,17 +138,10 @@ module RuboCop
|
|
136
138
|
end
|
137
139
|
end
|
138
140
|
|
139
|
-
def autocorrect(node)
|
140
|
-
|
141
|
-
global_var, = *node
|
141
|
+
def autocorrect(corrector, node, global_var)
|
142
|
+
node = node.parent while node.parent&.begin_type? && node.parent.children.one?
|
142
143
|
|
143
|
-
|
144
|
-
node.parent.children.one?
|
145
|
-
node = node.parent
|
146
|
-
end
|
147
|
-
|
148
|
-
corrector.replace(node, replacement(node, global_var))
|
149
|
-
end
|
144
|
+
corrector.replace(node, replacement(node, global_var))
|
150
145
|
end
|
151
146
|
|
152
147
|
private
|
@@ -19,26 +19,26 @@ module RuboCop
|
|
19
19
|
#
|
20
20
|
# # good
|
21
21
|
# ->a,b,c { a + b + c}
|
22
|
-
class StabbyLambdaParentheses <
|
22
|
+
class StabbyLambdaParentheses < Base
|
23
23
|
include ConfigurableEnforcedStyle
|
24
|
+
extend AutoCorrector
|
24
25
|
|
25
26
|
MSG_REQUIRE = 'Wrap stabby lambda arguments with parentheses.'
|
26
27
|
MSG_NO_REQUIRE = 'Do not wrap stabby lambda arguments ' \
|
27
28
|
'with parentheses.'
|
28
29
|
def on_send(node)
|
29
30
|
return unless stabby_lambda_with_args?(node)
|
30
|
-
return unless redundant_parentheses?(node) ||
|
31
|
-
missing_parentheses?(node)
|
31
|
+
return unless redundant_parentheses?(node) || missing_parentheses?(node)
|
32
32
|
|
33
|
-
|
34
|
-
end
|
33
|
+
arguments = node.block_node.arguments
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
add_offense(arguments) do |corrector|
|
36
|
+
case style
|
37
|
+
when :require_parentheses
|
38
|
+
missing_parentheses_corrector(corrector, arguments)
|
39
|
+
when :require_no_parentheses
|
40
|
+
unwanted_parentheses_corrector(corrector, arguments)
|
41
|
+
end
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -56,19 +56,15 @@ module RuboCop
|
|
56
56
|
style == :require_parentheses ? MSG_REQUIRE : MSG_NO_REQUIRE
|
57
57
|
end
|
58
58
|
|
59
|
-
def missing_parentheses_corrector(node)
|
60
|
-
|
61
|
-
corrector.wrap(node, '(', ')')
|
62
|
-
end
|
59
|
+
def missing_parentheses_corrector(corrector, node)
|
60
|
+
corrector.wrap(node, '(', ')')
|
63
61
|
end
|
64
62
|
|
65
|
-
def unwanted_parentheses_corrector(node)
|
66
|
-
|
67
|
-
args_loc = node.loc
|
63
|
+
def unwanted_parentheses_corrector(corrector, node)
|
64
|
+
args_loc = node.loc
|
68
65
|
|
69
|
-
|
70
|
-
|
71
|
-
end
|
66
|
+
corrector.replace(args_loc.begin, '')
|
67
|
+
corrector.remove(args_loc.end)
|
72
68
|
end
|
73
69
|
|
74
70
|
def stabby_lambda_with_args?(node)
|
@@ -14,8 +14,9 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# warn('hello')
|
16
16
|
#
|
17
|
-
class StderrPuts <
|
17
|
+
class StderrPuts < Base
|
18
18
|
include RangeHelp
|
19
|
+
extend AutoCorrector
|
19
20
|
|
20
21
|
MSG =
|
21
22
|
'Use `warn` instead of `%<bad>s` to allow such output to be disabled.'
|
@@ -30,11 +31,8 @@ module RuboCop
|
|
30
31
|
def on_send(node)
|
31
32
|
return unless stderr_puts?(node)
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
def autocorrect(node)
|
37
|
-
lambda do |corrector|
|
34
|
+
message = message(node)
|
35
|
+
add_offense(stderr_puts_range(node), message: message) do |corrector|
|
38
36
|
corrector.replace(stderr_puts_range(node), 'warn')
|
39
37
|
end
|
40
38
|
end
|
@@ -12,7 +12,9 @@ module RuboCop
|
|
12
12
|
#
|
13
13
|
# # good
|
14
14
|
# { one: 1, two: 2, three: 3 }
|
15
|
-
class StringHashKeys <
|
15
|
+
class StringHashKeys < Base
|
16
|
+
extend AutoCorrector
|
17
|
+
|
16
18
|
MSG = 'Prefer symbols instead of strings as hash keys.'
|
17
19
|
|
18
20
|
def_node_matcher :string_hash_key?, <<~PATTERN
|
@@ -35,13 +37,10 @@ module RuboCop
|
|
35
37
|
return unless string_hash_key?(node)
|
36
38
|
return if receive_environments_method?(node)
|
37
39
|
|
38
|
-
add_offense(node.key)
|
39
|
-
|
40
|
+
add_offense(node.key) do |corrector|
|
41
|
+
symbol_content = node.key.str_content.to_sym.inspect
|
40
42
|
|
41
|
-
|
42
|
-
lambda do |corrector|
|
43
|
-
symbol_content = node.str_content.to_sym.inspect
|
44
|
-
corrector.replace(node, symbol_content)
|
43
|
+
corrector.replace(node.key, symbol_content)
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|
@@ -14,32 +14,22 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# 'name'.to_sym
|
16
16
|
# 'var'.preferred_method
|
17
|
-
class StringMethods <
|
17
|
+
class StringMethods < Base
|
18
18
|
include MethodPreference
|
19
|
+
extend AutoCorrector
|
19
20
|
|
20
21
|
MSG = 'Prefer `%<prefer>s` over `%<current>s`.'
|
21
22
|
|
22
23
|
def on_send(node)
|
23
|
-
return unless preferred_method(node.method_name)
|
24
|
+
return unless (preferred_method = preferred_method(node.method_name))
|
24
25
|
|
25
|
-
|
26
|
-
end
|
27
|
-
alias on_csend on_send
|
26
|
+
message = format(MSG, prefer: preferred_method, current: node.method_name)
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
corrector.replace(node.loc.selector,
|
32
|
-
preferred_method(node.method_name))
|
28
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
29
|
+
corrector.replace(node.loc.selector, preferred_method(node.method_name))
|
33
30
|
end
|
34
31
|
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def message(node)
|
39
|
-
format(MSG,
|
40
|
-
prefer: preferred_method(node.method_name),
|
41
|
-
current: node.method_name)
|
42
|
-
end
|
32
|
+
alias on_csend on_send
|
43
33
|
end
|
44
34
|
end
|
45
35
|
end
|
@@ -13,8 +13,9 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# 'abc'.strip
|
16
|
-
class Strip <
|
16
|
+
class Strip < Base
|
17
17
|
include RangeHelp
|
18
|
+
extend AutoCorrector
|
18
19
|
|
19
20
|
MSG = 'Use `strip` instead of `%<methods>s`.'
|
20
21
|
|
@@ -25,20 +26,13 @@ module RuboCop
|
|
25
26
|
|
26
27
|
def on_send(node)
|
27
28
|
lstrip_rstrip(node) do |first_send, method_one, method_two|
|
28
|
-
range = range_between(first_send.loc.selector.begin_pos,
|
29
|
-
|
30
|
-
add_offense(node,
|
31
|
-
location: range,
|
32
|
-
message: format(MSG,
|
33
|
-
methods: "#{method_one}.#{method_two}"))
|
34
|
-
end
|
35
|
-
end
|
29
|
+
range = range_between(first_send.loc.selector.begin_pos, node.source_range.end_pos)
|
30
|
+
message = format(MSG, methods: "#{method_one}.#{method_two}")
|
36
31
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
->(corrector) { corrector.replace(range, 'strip') }
|
32
|
+
add_offense(range, message: message) do |corrector|
|
33
|
+
corrector.replace(range, 'strip')
|
34
|
+
end
|
35
|
+
end
|
42
36
|
end
|
43
37
|
end
|
44
38
|
end
|
@@ -19,8 +19,9 @@ module RuboCop
|
|
19
19
|
# 42
|
20
20
|
# end
|
21
21
|
# end
|
22
|
-
class StructInheritance <
|
22
|
+
class StructInheritance < Base
|
23
23
|
include RangeHelp
|
24
|
+
extend AutoCorrector
|
24
25
|
|
25
26
|
MSG = "Don't extend an instance initialized by `Struct.new`. " \
|
26
27
|
'Use a block to customize the struct.'
|
@@ -28,11 +29,7 @@ module RuboCop
|
|
28
29
|
def on_class(node)
|
29
30
|
return unless struct_constructor?(node.parent_class)
|
30
31
|
|
31
|
-
add_offense(node
|
32
|
-
end
|
33
|
-
|
34
|
-
def autocorrect(node)
|
35
|
-
lambda do |corrector|
|
32
|
+
add_offense(node.parent_class.source_range) do |corrector|
|
36
33
|
corrector.remove(range_with_surrounding_space(range: node.loc.keyword, newlines: false))
|
37
34
|
corrector.replace(node.loc.operator, '=')
|
38
35
|
|
@@ -27,11 +27,12 @@ module RuboCop
|
|
27
27
|
#
|
28
28
|
# # bad
|
29
29
|
# %i[foo bar baz]
|
30
|
-
class SymbolArray <
|
30
|
+
class SymbolArray < Base
|
31
31
|
include ArrayMinSize
|
32
32
|
include ArraySyntax
|
33
33
|
include ConfigurableEnforcedStyle
|
34
34
|
include PercentArray
|
35
|
+
extend AutoCorrector
|
35
36
|
|
36
37
|
PERCENT_MSG = 'Use `%i` or `%I` for an array of symbols.'
|
37
38
|
ARRAY_MSG = 'Use `[]` for an array of symbols.'
|
@@ -44,22 +45,12 @@ module RuboCop
|
|
44
45
|
if bracketed_array_of?(:sym, node)
|
45
46
|
return if symbols_contain_spaces?(node)
|
46
47
|
|
47
|
-
check_bracketed_array(node)
|
48
|
+
check_bracketed_array(node, 'i')
|
48
49
|
elsif node.percent_literal?(:symbol)
|
49
50
|
check_percent_array(node)
|
50
51
|
end
|
51
52
|
end
|
52
53
|
|
53
|
-
def autocorrect(node)
|
54
|
-
if style == :percent
|
55
|
-
PercentLiteralCorrector
|
56
|
-
.new(@config, @preferred_delimiters)
|
57
|
-
.correct(node, 'i')
|
58
|
-
else
|
59
|
-
correct_bracketed(node)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
54
|
private
|
64
55
|
|
65
56
|
def symbols_contain_spaces?(node)
|
@@ -69,7 +60,7 @@ module RuboCop
|
|
69
60
|
end
|
70
61
|
end
|
71
62
|
|
72
|
-
def correct_bracketed(node)
|
63
|
+
def correct_bracketed(corrector, node)
|
73
64
|
syms = node.children.map do |c|
|
74
65
|
if c.dsym_type?
|
75
66
|
string_literal = to_string_literal(c.source)
|
@@ -80,9 +71,7 @@ module RuboCop
|
|
80
71
|
end
|
81
72
|
end
|
82
73
|
|
83
|
-
|
84
|
-
corrector.replace(node, "[#{syms.join(', ')}]")
|
85
|
-
end
|
74
|
+
corrector.replace(node, "[#{syms.join(', ')}]")
|
86
75
|
end
|
87
76
|
|
88
77
|
def to_symbol_literal(string)
|
@@ -12,17 +12,15 @@ module RuboCop
|
|
12
12
|
#
|
13
13
|
# # good
|
14
14
|
# :symbol
|
15
|
-
class SymbolLiteral <
|
15
|
+
class SymbolLiteral < Base
|
16
|
+
extend AutoCorrector
|
17
|
+
|
16
18
|
MSG = 'Do not use strings for word-like symbol literals.'
|
17
19
|
|
18
20
|
def on_sym(node)
|
19
21
|
return unless /\A:["'][A-Za-z_]\w*["']\z/.match?(node.source)
|
20
22
|
|
21
|
-
add_offense(node)
|
22
|
-
end
|
23
|
-
|
24
|
-
def autocorrect(node)
|
25
|
-
lambda do |corrector|
|
23
|
+
add_offense(node) do |corrector|
|
26
24
|
corrector.replace(node, node.source.delete(%q('")))
|
27
25
|
end
|
28
26
|
end
|
@@ -11,9 +11,10 @@ module RuboCop
|
|
11
11
|
#
|
12
12
|
# # good
|
13
13
|
# something.map(&:upcase)
|
14
|
-
class SymbolProc <
|
14
|
+
class SymbolProc < Base
|
15
15
|
include RangeHelp
|
16
16
|
include IgnoredMethods
|
17
|
+
extend AutoCorrector
|
17
18
|
|
18
19
|
MSG = 'Pass `&:%<method>s` as an argument to `%<block_method>s` ' \
|
19
20
|
'instead of a block.'
|
@@ -49,30 +50,25 @@ module RuboCop
|
|
49
50
|
argument_node.one? && argument_node.source.include?(',')
|
50
51
|
end
|
51
52
|
|
52
|
-
def autocorrect(node)
|
53
|
-
lambda do |corrector|
|
54
|
-
if node.send_node.arguments?
|
55
|
-
autocorrect_with_args(corrector, node,
|
56
|
-
node.send_node.arguments,
|
57
|
-
node.body.method_name)
|
58
|
-
else
|
59
|
-
autocorrect_without_args(corrector, node)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
53
|
private
|
65
54
|
|
66
55
|
def register_offense(node, method_name, block_method_name)
|
67
56
|
block_start = node.loc.begin.begin_pos
|
68
57
|
block_end = node.loc.end.end_pos
|
69
58
|
range = range_between(block_start, block_end)
|
59
|
+
message = format(MSG, method: method_name, block_method: block_method_name)
|
60
|
+
|
61
|
+
add_offense(range, message: message) do |corrector|
|
62
|
+
autocorrect(corrector, node)
|
63
|
+
end
|
64
|
+
end
|
70
65
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
66
|
+
def autocorrect(corrector, node)
|
67
|
+
if node.send_node.arguments?
|
68
|
+
autocorrect_with_args(corrector, node, node.send_node.arguments, node.body.method_name)
|
69
|
+
else
|
70
|
+
autocorrect_without_args(corrector, node)
|
71
|
+
end
|
76
72
|
end
|
77
73
|
|
78
74
|
def autocorrect_without_args(corrector, node)
|