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
@@ -88,8 +88,9 @@ module RuboCop
|
|
88
88
|
# # good
|
89
89
|
# { a: 1,
|
90
90
|
# b: 2 }
|
91
|
-
class MultilineHashBraceLayout <
|
91
|
+
class MultilineHashBraceLayout < Base
|
92
92
|
include MultilineLiteralBraceLayout
|
93
|
+
extend AutoCorrector
|
93
94
|
|
94
95
|
SAME_LINE_MESSAGE = 'Closing hash brace must be on the same line as ' \
|
95
96
|
'the last hash element when opening brace is on the same line as ' \
|
@@ -108,10 +109,6 @@ module RuboCop
|
|
108
109
|
def on_hash(node)
|
109
110
|
check_brace_layout(node)
|
110
111
|
end
|
111
|
-
|
112
|
-
def autocorrect(node)
|
113
|
-
MultilineLiteralBraceCorrector.new(node, processed_source)
|
114
|
-
end
|
115
112
|
end
|
116
113
|
end
|
117
114
|
end
|
@@ -20,8 +20,9 @@ module RuboCop
|
|
20
20
|
# b: 2,
|
21
21
|
# c: 3
|
22
22
|
# }
|
23
|
-
class MultilineHashKeyLineBreaks <
|
23
|
+
class MultilineHashKeyLineBreaks < Base
|
24
24
|
include MultilineElementLineBreaks
|
25
|
+
extend AutoCorrector
|
25
26
|
|
26
27
|
MSG = 'Each key in a multi-line hash must start on a ' \
|
27
28
|
'separate line.'
|
@@ -35,10 +36,6 @@ module RuboCop
|
|
35
36
|
check_line_breaks(node, node.children) if node.loc.begin
|
36
37
|
end
|
37
38
|
|
38
|
-
def autocorrect(node)
|
39
|
-
EmptyLineCorrector.insert_before(node)
|
40
|
-
end
|
41
|
-
|
42
39
|
private
|
43
40
|
|
44
41
|
def starts_with_curly_brace?(node)
|
@@ -19,8 +19,9 @@ module RuboCop
|
|
19
19
|
# b,
|
20
20
|
# c
|
21
21
|
# )
|
22
|
-
class MultilineMethodArgumentLineBreaks <
|
23
|
-
include
|
22
|
+
class MultilineMethodArgumentLineBreaks < Base
|
23
|
+
include MultilineElementLineBreaks
|
24
|
+
extend AutoCorrector
|
24
25
|
|
25
26
|
MSG = 'Each argument in a multi-line method call must start ' \
|
26
27
|
'on a separate line.'
|
@@ -36,16 +37,11 @@ module RuboCop
|
|
36
37
|
#
|
37
38
|
# ...then each key/value pair is treated as a method 'argument'
|
38
39
|
# when determining where line breaks should appear.
|
39
|
-
|
40
|
-
|
41
|
-
end
|
40
|
+
last_arg = args.last
|
41
|
+
args = args[0...-1] + last_arg.children if last_arg&.hash_type? && !last_arg&.braces?
|
42
42
|
|
43
43
|
check_line_breaks(node, args)
|
44
44
|
end
|
45
|
-
|
46
|
-
def autocorrect(node)
|
47
|
-
EmptyLineCorrector.insert_before(node)
|
48
|
-
end
|
49
45
|
end
|
50
46
|
end
|
51
47
|
end
|
@@ -88,8 +88,9 @@ module RuboCop
|
|
88
88
|
# # good
|
89
89
|
# foo(a,
|
90
90
|
# b)
|
91
|
-
class MultilineMethodCallBraceLayout <
|
91
|
+
class MultilineMethodCallBraceLayout < Base
|
92
92
|
include MultilineLiteralBraceLayout
|
93
|
+
extend AutoCorrector
|
93
94
|
|
94
95
|
SAME_LINE_MESSAGE = 'Closing method call brace must be on the ' \
|
95
96
|
'same line as the last argument when opening brace is on the same ' \
|
@@ -109,10 +110,6 @@ module RuboCop
|
|
109
110
|
check_brace_layout(node)
|
110
111
|
end
|
111
112
|
|
112
|
-
def autocorrect(node)
|
113
|
-
MultilineLiteralBraceCorrector.new(node, processed_source)
|
114
|
-
end
|
115
|
-
|
116
113
|
private
|
117
114
|
|
118
115
|
def children(node)
|
@@ -100,8 +100,9 @@ module RuboCop
|
|
100
100
|
# def foo(a,
|
101
101
|
# b)
|
102
102
|
# end
|
103
|
-
class MultilineMethodDefinitionBraceLayout <
|
103
|
+
class MultilineMethodDefinitionBraceLayout < Base
|
104
104
|
include MultilineLiteralBraceLayout
|
105
|
+
extend AutoCorrector
|
105
106
|
|
106
107
|
SAME_LINE_MESSAGE = 'Closing method definition brace must be on the ' \
|
107
108
|
'same line as the last parameter when opening brace is on the same ' \
|
@@ -121,10 +122,6 @@ module RuboCop
|
|
121
122
|
check_brace_layout(node.arguments)
|
122
123
|
end
|
123
124
|
alias on_defs on_def
|
124
|
-
|
125
|
-
def autocorrect(node)
|
126
|
-
MultilineLiteralBraceCorrector.new(node, processed_source)
|
127
|
-
end
|
128
125
|
end
|
129
126
|
end
|
130
127
|
end
|
@@ -21,8 +21,9 @@ module RuboCop
|
|
21
21
|
# rescue
|
22
22
|
# puts 'error'
|
23
23
|
# end
|
24
|
-
class RescueEnsureAlignment <
|
24
|
+
class RescueEnsureAlignment < Base
|
25
25
|
include RangeHelp
|
26
|
+
extend AutoCorrector
|
26
27
|
|
27
28
|
MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
|
28
29
|
'aligned with `%<beginning>s` at ' \
|
@@ -41,19 +42,7 @@ module RuboCop
|
|
41
42
|
check(node)
|
42
43
|
end
|
43
44
|
|
44
|
-
def
|
45
|
-
whitespace = whitespace_range(node)
|
46
|
-
# Some inline node is sitting before current node.
|
47
|
-
return nil unless whitespace.source.strip.empty?
|
48
|
-
|
49
|
-
alignment_node = alignment_node(node)
|
50
|
-
return false if alignment_node.nil?
|
51
|
-
|
52
|
-
new_column = alignment_node.loc.column
|
53
|
-
->(corrector) { corrector.replace(whitespace, ' ' * new_column) }
|
54
|
-
end
|
55
|
-
|
56
|
-
def investigate(processed_source)
|
45
|
+
def on_new_investigation
|
57
46
|
@modifier_locations =
|
58
47
|
processed_source.tokens.each_with_object([]) do |token, locations|
|
59
48
|
next unless token.rescue_modifier?
|
@@ -73,15 +62,23 @@ module RuboCop
|
|
73
62
|
alignment_loc = alignment_node.loc.expression
|
74
63
|
kw_loc = node.loc.keyword
|
75
64
|
|
76
|
-
return if
|
77
|
-
alignment_loc.column == kw_loc.column ||
|
78
|
-
alignment_loc.line == kw_loc.line
|
65
|
+
return if alignment_loc.column == kw_loc.column || alignment_loc.line == kw_loc.line
|
79
66
|
|
80
67
|
add_offense(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
68
|
+
kw_loc, message: format_message(alignment_node, alignment_loc, kw_loc)
|
69
|
+
) do |corrector|
|
70
|
+
autocorrect(corrector, node, alignment_node)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def autocorrect(corrector, node, alignment_node)
|
75
|
+
whitespace = whitespace_range(node)
|
76
|
+
# Some inline node is sitting before current node.
|
77
|
+
return nil unless whitespace.source.strip.empty?
|
78
|
+
|
79
|
+
new_column = alignment_node.loc.column
|
80
|
+
|
81
|
+
corrector.replace(whitespace, ' ' * new_column)
|
85
82
|
end
|
86
83
|
|
87
84
|
def format_message(alignment_node, alignment_loc, kw_loc)
|
@@ -13,7 +13,9 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# def f(a:, b: 2); {a: 3}; end
|
16
|
-
class SpaceAfterColon <
|
16
|
+
class SpaceAfterColon < Base
|
17
|
+
extend AutoCorrector
|
18
|
+
|
17
19
|
MSG = 'Space missing after colon.'
|
18
20
|
|
19
21
|
def on_pair(node)
|
@@ -21,7 +23,7 @@ module RuboCop
|
|
21
23
|
|
22
24
|
colon = node.loc.operator
|
23
25
|
|
24
|
-
|
26
|
+
register_offense(colon) unless followed_by_space?(colon)
|
25
27
|
end
|
26
28
|
|
27
29
|
def on_kwoptarg(node)
|
@@ -29,15 +31,17 @@ module RuboCop
|
|
29
31
|
# optional keyword argument's name, so must construct one.
|
30
32
|
colon = node.loc.name.end.resize(1)
|
31
33
|
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
def autocorrect(range)
|
36
|
-
->(corrector) { corrector.insert_after(range, ' ') }
|
34
|
+
register_offense(colon) unless followed_by_space?(colon)
|
37
35
|
end
|
38
36
|
|
39
37
|
private
|
40
38
|
|
39
|
+
def register_offense(colon)
|
40
|
+
add_offense(colon) do |corrector|
|
41
|
+
corrector.insert_after(colon, ' ')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
41
45
|
def followed_by_space?(colon)
|
42
46
|
/\s/.match?(colon.source_buffer.source[colon.end_pos])
|
43
47
|
end
|
@@ -14,12 +14,9 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# [1, 2]
|
16
16
|
# { foo:bar, }
|
17
|
-
class SpaceAfterComma <
|
17
|
+
class SpaceAfterComma < Base
|
18
18
|
include SpaceAfterPunctuation
|
19
|
-
|
20
|
-
def autocorrect(comma)
|
21
|
-
PunctuationCorrector.add_space(comma)
|
22
|
-
end
|
19
|
+
extend AutoCorrector
|
23
20
|
|
24
21
|
def space_style_before_rcurly
|
25
22
|
cfg = config.for_cop('Layout/SpaceInsideHashLiteralBraces')
|
@@ -14,8 +14,9 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# def func(x) end
|
16
16
|
# def method=(y) end
|
17
|
-
class SpaceAfterMethodName <
|
17
|
+
class SpaceAfterMethodName < Base
|
18
18
|
include RangeHelp
|
19
|
+
extend AutoCorrector
|
19
20
|
|
20
21
|
MSG = 'Do not put a space between a method name and the opening ' \
|
21
22
|
'parenthesis.'
|
@@ -29,13 +30,11 @@ module RuboCop
|
|
29
30
|
expr.begin_pos)
|
30
31
|
return unless pos_before_left_paren.source.start_with?(' ')
|
31
32
|
|
32
|
-
add_offense(pos_before_left_paren
|
33
|
+
add_offense(pos_before_left_paren) do |corrector|
|
34
|
+
corrector.remove(pos_before_left_paren)
|
35
|
+
end
|
33
36
|
end
|
34
37
|
alias on_defs on_def
|
35
|
-
|
36
|
-
def autocorrect(pos_before_left_paren)
|
37
|
-
->(corrector) { corrector.remove(pos_before_left_paren) }
|
38
|
-
end
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
@@ -11,29 +11,27 @@ module RuboCop
|
|
11
11
|
#
|
12
12
|
# # good
|
13
13
|
# !something
|
14
|
-
class SpaceAfterNot <
|
14
|
+
class SpaceAfterNot < Base
|
15
15
|
include RangeHelp
|
16
|
+
extend AutoCorrector
|
16
17
|
|
17
18
|
MSG = 'Do not leave space between `!` and its argument.'
|
18
19
|
|
19
20
|
def on_send(node)
|
20
21
|
return unless node.prefix_bang? && whitespace_after_operator?(node)
|
21
22
|
|
22
|
-
add_offense(node)
|
23
|
+
add_offense(node) do |corrector|
|
24
|
+
corrector.remove(
|
25
|
+
range_between(node.loc.selector.end_pos, node.receiver.source_range.begin_pos)
|
26
|
+
)
|
27
|
+
end
|
23
28
|
end
|
24
29
|
|
30
|
+
private
|
31
|
+
|
25
32
|
def whitespace_after_operator?(node)
|
26
33
|
node.receiver.loc.column - node.loc.column > 1
|
27
34
|
end
|
28
|
-
|
29
|
-
def autocorrect(node)
|
30
|
-
lambda do |corrector|
|
31
|
-
corrector.remove(
|
32
|
-
range_between(node.loc.selector.end_pos,
|
33
|
-
node.receiver.source_range.begin_pos)
|
34
|
-
)
|
35
|
-
end
|
36
|
-
end
|
37
35
|
end
|
38
36
|
end
|
39
37
|
end
|
@@ -11,12 +11,9 @@ module RuboCop
|
|
11
11
|
#
|
12
12
|
# # good
|
13
13
|
# x = 1; y = 2
|
14
|
-
class SpaceAfterSemicolon <
|
14
|
+
class SpaceAfterSemicolon < Base
|
15
15
|
include SpaceAfterPunctuation
|
16
|
-
|
17
|
-
def autocorrect(semicolon)
|
18
|
-
PunctuationCorrector.add_space(semicolon)
|
19
|
-
end
|
16
|
+
extend AutoCorrector
|
20
17
|
|
21
18
|
def space_style_before_rcurly
|
22
19
|
cfg = config.for_cop('Layout/SpaceInsideBlockBraces')
|
@@ -27,10 +27,11 @@ module RuboCop
|
|
27
27
|
# def some_method(arg1=:default, arg2=nil, arg3=[])
|
28
28
|
# # do something...
|
29
29
|
# end
|
30
|
-
class SpaceAroundEqualsInParameterDefault <
|
30
|
+
class SpaceAroundEqualsInParameterDefault < Base
|
31
31
|
include SurroundingSpace
|
32
32
|
include ConfigurableEnforcedStyle
|
33
33
|
include RangeHelp
|
34
|
+
extend AutoCorrector
|
34
35
|
|
35
36
|
MSG = 'Surrounding space %<type>s in default value assignment.'
|
36
37
|
|
@@ -40,13 +41,6 @@ module RuboCop
|
|
40
41
|
check_optarg(arg, equals, value)
|
41
42
|
end
|
42
43
|
|
43
|
-
def autocorrect(range)
|
44
|
-
m = range.source.match(/=\s*(\S+)/)
|
45
|
-
rest = m ? m.captures[0] : ''
|
46
|
-
replacement = style == :space ? ' = ' : '='
|
47
|
-
->(corrector) { corrector.replace(range, replacement + rest) }
|
48
|
-
end
|
49
|
-
|
50
44
|
private
|
51
45
|
|
52
46
|
def check_optarg(arg, equals, value)
|
@@ -65,14 +59,25 @@ module RuboCop
|
|
65
59
|
def incorrect_style_detected(arg, value, space_on_both_sides,
|
66
60
|
no_surrounding_space)
|
67
61
|
range = range_between(arg.end_pos, value.begin_pos)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
62
|
+
|
63
|
+
if style == :space && no_surrounding_space ||
|
64
|
+
style == :no_space && space_on_both_sides
|
65
|
+
return unless opposite_style_detected
|
66
|
+
else
|
67
|
+
return unless unrecognized_style_detected
|
75
68
|
end
|
69
|
+
|
70
|
+
add_offense(range) do |corrector|
|
71
|
+
autocorrect(corrector, range)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def autocorrect(corrector, range)
|
76
|
+
m = range.source.match(/=\s*(\S+)/)
|
77
|
+
rest = m ? m.captures[0] : ''
|
78
|
+
replacement = style == :space ? ' = ' : '='
|
79
|
+
|
80
|
+
corrector.replace(range, replacement + rest)
|
76
81
|
end
|
77
82
|
|
78
83
|
def space_on_both_sides?(arg, equals)
|
@@ -24,7 +24,9 @@ module RuboCop
|
|
24
24
|
# end
|
25
25
|
#
|
26
26
|
# something = 123 if test
|
27
|
-
class SpaceAroundKeyword <
|
27
|
+
class SpaceAroundKeyword < Base
|
28
|
+
extend AutoCorrector
|
29
|
+
|
28
30
|
MSG_BEFORE = 'Space before keyword `%<range>s` is missing.'
|
29
31
|
MSG_AFTER = 'Space after keyword `%<range>s` is missing.'
|
30
32
|
|
@@ -129,14 +131,6 @@ module RuboCop
|
|
129
131
|
check(node, [:keyword].freeze)
|
130
132
|
end
|
131
133
|
|
132
|
-
def autocorrect(range)
|
133
|
-
if space_before_missing?(range)
|
134
|
-
->(corrector) { corrector.insert_before(range, ' ') }
|
135
|
-
else
|
136
|
-
->(corrector) { corrector.insert_after(range, ' ') }
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
134
|
private
|
141
135
|
|
142
136
|
def check(node, locations, begin_keyword = DO)
|
@@ -162,8 +156,11 @@ module RuboCop
|
|
162
156
|
|
163
157
|
def check_end(node, range, begin_keyword)
|
164
158
|
return if begin_keyword == DO && !do?(node)
|
159
|
+
return unless space_before_missing?(range)
|
165
160
|
|
166
|
-
|
161
|
+
add_offense(range, message: format(MSG_BEFORE, range: range.source)) do |corrector|
|
162
|
+
corrector.insert_before(range, ' ')
|
163
|
+
end
|
167
164
|
end
|
168
165
|
|
169
166
|
def do?(node)
|
@@ -171,15 +168,17 @@ module RuboCop
|
|
171
168
|
end
|
172
169
|
|
173
170
|
def check_keyword(node, range)
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
171
|
+
if space_before_missing?(range) && !preceded_by_operator?(node, range)
|
172
|
+
add_offense(range, message: format(MSG_BEFORE, range: range.source)) do |corrector|
|
173
|
+
corrector.insert_before(range, ' ')
|
174
|
+
end
|
175
|
+
end
|
178
176
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
177
|
+
return unless space_after_missing?(range)
|
178
|
+
|
179
|
+
add_offense(range, message: format(MSG_AFTER, range: range.source)) do |corrector|
|
180
|
+
corrector.insert_after(range, ' ')
|
181
|
+
end
|
183
182
|
end
|
184
183
|
|
185
184
|
def space_before_missing?(range)
|
@@ -48,10 +48,11 @@ module RuboCop
|
|
48
48
|
#
|
49
49
|
# # good
|
50
50
|
# a ** b
|
51
|
-
class SpaceAroundOperators <
|
51
|
+
class SpaceAroundOperators < Base
|
52
52
|
include PrecedingFollowingAlignment
|
53
53
|
include RangeHelp
|
54
54
|
include RationalLiteral
|
55
|
+
extend AutoCorrector
|
55
56
|
|
56
57
|
IRREGULAR_METHODS = %i[[] ! []=].freeze
|
57
58
|
EXCESSIVE_SPACE = ' '
|
@@ -132,18 +133,6 @@ module RuboCop
|
|
132
133
|
alias on_and_asgn on_assignment
|
133
134
|
alias on_op_asgn on_special_asgn
|
134
135
|
|
135
|
-
def autocorrect(range)
|
136
|
-
lambda do |corrector|
|
137
|
-
if /\*\*/.match?(range.source) && !space_around_exponent_operator?
|
138
|
-
corrector.replace(range, '**')
|
139
|
-
elsif range.source.end_with?("\n")
|
140
|
-
corrector.replace(range, " #{range.source.strip}\n")
|
141
|
-
else
|
142
|
-
enclose_operator_with_space(corrector, range)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
136
|
private
|
148
137
|
|
149
138
|
def regular_operator?(send_node)
|
@@ -161,7 +150,9 @@ module RuboCop
|
|
161
150
|
return if with_space.source.start_with?("\n")
|
162
151
|
|
163
152
|
offense(type, operator, with_space, right_operand) do |msg|
|
164
|
-
add_offense(
|
153
|
+
add_offense(operator, message: msg) do |corrector|
|
154
|
+
autocorrect(corrector, with_space)
|
155
|
+
end
|
165
156
|
end
|
166
157
|
end
|
167
158
|
|
@@ -170,14 +161,24 @@ module RuboCop
|
|
170
161
|
yield msg if msg
|
171
162
|
end
|
172
163
|
|
164
|
+
def autocorrect(corrector, range)
|
165
|
+
if /\*\*/.match?(range.source) && !space_around_exponent_operator?
|
166
|
+
corrector.replace(range, '**')
|
167
|
+
elsif range.source.end_with?("\n")
|
168
|
+
corrector.replace(range, " #{range.source.strip}\n")
|
169
|
+
else
|
170
|
+
enclose_operator_with_space(corrector, range)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
173
174
|
def enclose_operator_with_space(corrector, range)
|
174
175
|
operator = range.source
|
175
176
|
|
176
177
|
# If `ForceEqualSignAlignment` is true, `Layout/ExtraSpacing` cop
|
177
178
|
# inserts spaces before operator. If `Layout/SpaceAroundOperators` cop
|
178
179
|
# inserts a space, it collides and raises the infinite loop error.
|
179
|
-
if force_equal_sign_alignment?
|
180
|
-
corrector.insert_after(range, ' ')
|
180
|
+
if force_equal_sign_alignment? && !operator.end_with?(' ')
|
181
|
+
corrector.insert_after(range, ' ')
|
181
182
|
else
|
182
183
|
corrector.replace(range, " #{operator.strip} ")
|
183
184
|
end
|