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
@@ -54,10 +54,11 @@ module RuboCop
|
|
54
54
|
# # bad
|
55
55
|
# foo = (bar = baz) ? a : b
|
56
56
|
#
|
57
|
-
class TernaryParentheses <
|
57
|
+
class TernaryParentheses < Base
|
58
58
|
include SafeAssignment
|
59
59
|
include ConfigurableEnforcedStyle
|
60
60
|
include SurroundingSpace
|
61
|
+
extend AutoCorrector
|
61
62
|
|
62
63
|
VARIABLE_TYPES = AST::Node::VARIABLES
|
63
64
|
NON_COMPLEX_TYPES = [*VARIABLE_TYPES, :const, :defined?, :yield].freeze
|
@@ -70,14 +71,20 @@ module RuboCop
|
|
70
71
|
return if only_closing_parenthesis_is_last_line?(node.condition)
|
71
72
|
return unless node.ternary? && !infinite_loop? && offense?(node)
|
72
73
|
|
73
|
-
|
74
|
+
message = message(node)
|
75
|
+
|
76
|
+
add_offense(node.source_range, message: message) do |corrector|
|
77
|
+
autocorrect(corrector, node)
|
78
|
+
end
|
74
79
|
end
|
75
80
|
|
76
81
|
def only_closing_parenthesis_is_last_line?(condition)
|
77
82
|
condition.source.split("\n").last == ')'
|
78
83
|
end
|
79
84
|
|
80
|
-
|
85
|
+
private
|
86
|
+
|
87
|
+
def autocorrect(corrector, node)
|
81
88
|
condition = node.condition
|
82
89
|
|
83
90
|
return nil if parenthesized?(condition) &&
|
@@ -85,14 +92,12 @@ module RuboCop
|
|
85
92
|
unsafe_autocorrect?(condition))
|
86
93
|
|
87
94
|
if parenthesized?(condition)
|
88
|
-
correct_parenthesized(condition)
|
95
|
+
correct_parenthesized(corrector, condition)
|
89
96
|
else
|
90
|
-
correct_unparenthesized(condition)
|
97
|
+
correct_unparenthesized(corrector, condition)
|
91
98
|
end
|
92
99
|
end
|
93
100
|
|
94
|
-
private
|
95
|
-
|
96
101
|
def offense?(node)
|
97
102
|
condition = node.condition
|
98
103
|
|
@@ -191,22 +196,18 @@ module RuboCop
|
|
191
196
|
(send {_ nil?} $_ _ ...)}
|
192
197
|
PATTERN
|
193
198
|
|
194
|
-
def correct_parenthesized(condition)
|
195
|
-
|
196
|
-
|
197
|
-
corrector.remove(condition.loc.end)
|
199
|
+
def correct_parenthesized(corrector, condition)
|
200
|
+
corrector.remove(condition.loc.begin)
|
201
|
+
corrector.remove(condition.loc.end)
|
198
202
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
end
|
203
|
+
# Ruby allows no space between the question mark and parentheses.
|
204
|
+
# If we remove the parentheses, we need to add a space or we'll
|
205
|
+
# generate invalid code.
|
206
|
+
corrector.insert_after(condition.loc.end, ' ') unless whitespace_after?(condition)
|
204
207
|
end
|
205
208
|
|
206
|
-
def correct_unparenthesized(condition)
|
207
|
-
|
208
|
-
corrector.wrap(condition, '(', ')')
|
209
|
-
end
|
209
|
+
def correct_unparenthesized(corrector, condition)
|
210
|
+
corrector.wrap(condition, '(', ')')
|
210
211
|
end
|
211
212
|
|
212
213
|
def whitespace_after?(node)
|
@@ -15,20 +15,17 @@ module RuboCop
|
|
15
15
|
# def foo; end
|
16
16
|
# end
|
17
17
|
#
|
18
|
-
class TrailingBodyOnClass <
|
18
|
+
class TrailingBodyOnClass < Base
|
19
19
|
include Alignment
|
20
20
|
include TrailingBody
|
21
|
+
extend AutoCorrector
|
21
22
|
|
22
23
|
MSG = 'Place the first line of class body on its own line.'
|
23
24
|
|
24
25
|
def on_class(node)
|
25
26
|
return unless trailing_body?(node)
|
26
27
|
|
27
|
-
add_offense(
|
28
|
-
end
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
28
|
+
add_offense(first_part_of(node.to_a.last)) do |corrector|
|
32
29
|
LineBreakCorrector.correct_trailing_body(
|
33
30
|
configured_width: configured_indentation_width,
|
34
31
|
corrector: corrector,
|
@@ -24,9 +24,10 @@ module RuboCop
|
|
24
24
|
# b[c: x]
|
25
25
|
# end
|
26
26
|
#
|
27
|
-
class TrailingBodyOnMethodDefinition <
|
27
|
+
class TrailingBodyOnMethodDefinition < Base
|
28
28
|
include Alignment
|
29
29
|
include TrailingBody
|
30
|
+
extend AutoCorrector
|
30
31
|
|
31
32
|
MSG = "Place the first line of a multi-line method definition's " \
|
32
33
|
'body on its own line.'
|
@@ -34,12 +35,7 @@ module RuboCop
|
|
34
35
|
def on_def(node)
|
35
36
|
return unless trailing_body?(node)
|
36
37
|
|
37
|
-
add_offense(
|
38
|
-
end
|
39
|
-
alias on_defs on_def
|
40
|
-
|
41
|
-
def autocorrect(node)
|
42
|
-
lambda do |corrector|
|
38
|
+
add_offense(first_part_of(node.body)) do |corrector|
|
43
39
|
LineBreakCorrector.correct_trailing_body(
|
44
40
|
configured_width: configured_indentation_width,
|
45
41
|
corrector: corrector,
|
@@ -48,6 +44,7 @@ module RuboCop
|
|
48
44
|
)
|
49
45
|
end
|
50
46
|
end
|
47
|
+
alias on_defs on_def
|
51
48
|
end
|
52
49
|
end
|
53
50
|
end
|
@@ -15,20 +15,17 @@ module RuboCop
|
|
15
15
|
# extend self
|
16
16
|
# end
|
17
17
|
#
|
18
|
-
class TrailingBodyOnModule <
|
18
|
+
class TrailingBodyOnModule < Base
|
19
19
|
include Alignment
|
20
20
|
include TrailingBody
|
21
|
+
extend AutoCorrector
|
21
22
|
|
22
23
|
MSG = 'Place the first line of module body on its own line.'
|
23
24
|
|
24
25
|
def on_module(node)
|
25
26
|
return unless trailing_body?(node)
|
26
27
|
|
27
|
-
add_offense(
|
28
|
-
end
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
28
|
+
add_offense(first_part_of(node.to_a.last)) do |corrector|
|
32
29
|
LineBreakCorrector.correct_trailing_body(
|
33
30
|
configured_width: configured_indentation_width,
|
34
31
|
corrector: corrector,
|
@@ -84,8 +84,9 @@ module RuboCop
|
|
84
84
|
# 1,
|
85
85
|
# 2
|
86
86
|
# )
|
87
|
-
class TrailingCommaInArguments <
|
87
|
+
class TrailingCommaInArguments < Base
|
88
88
|
include TrailingComma
|
89
|
+
extend AutoCorrector
|
89
90
|
|
90
91
|
def on_send(node)
|
91
92
|
return unless node.arguments? && node.parenthesized?
|
@@ -96,10 +97,6 @@ module RuboCop
|
|
96
97
|
end
|
97
98
|
alias on_csend on_send
|
98
99
|
|
99
|
-
def autocorrect(range)
|
100
|
-
PunctuationCorrector.swap_comma(range)
|
101
|
-
end
|
102
|
-
|
103
100
|
def self.autocorrect_incompatible_with
|
104
101
|
[Layout::HeredocArgumentClosingParenthesis]
|
105
102
|
end
|
@@ -81,18 +81,15 @@ module RuboCop
|
|
81
81
|
# 1,
|
82
82
|
# 2
|
83
83
|
# ]
|
84
|
-
class TrailingCommaInArrayLiteral <
|
84
|
+
class TrailingCommaInArrayLiteral < Base
|
85
85
|
include TrailingComma
|
86
|
+
extend AutoCorrector
|
86
87
|
|
87
88
|
def on_array(node)
|
88
89
|
return unless node.square_brackets?
|
89
90
|
|
90
91
|
check_literal(node, 'item of %<article>s array')
|
91
92
|
end
|
92
|
-
|
93
|
-
def autocorrect(range)
|
94
|
-
PunctuationCorrector.swap_comma(range)
|
95
|
-
end
|
96
93
|
end
|
97
94
|
end
|
98
95
|
end
|
@@ -40,20 +40,21 @@ module RuboCop
|
|
40
40
|
# add do
|
41
41
|
# foo + bar
|
42
42
|
# end
|
43
|
-
class TrailingCommaInBlockArgs <
|
43
|
+
class TrailingCommaInBlockArgs < Base
|
44
|
+
extend AutoCorrector
|
45
|
+
|
44
46
|
MSG = 'Useless trailing comma present in block arguments.'
|
45
47
|
|
46
48
|
def on_block(node)
|
47
49
|
# lambda literal (`->`) never has block arguments.
|
48
50
|
return if node.send_node.lambda_literal?
|
49
|
-
|
50
51
|
return unless useless_trailing_comma?(node)
|
51
52
|
|
52
|
-
|
53
|
-
end
|
53
|
+
last_comma_pos = last_comma(node).pos
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
add_offense(last_comma_pos) do |corrector|
|
56
|
+
corrector.replace(last_comma_pos, '')
|
57
|
+
end
|
57
58
|
end
|
58
59
|
|
59
60
|
private
|
@@ -84,16 +84,13 @@ module RuboCop
|
|
84
84
|
# foo: 1,
|
85
85
|
# bar: 2
|
86
86
|
# }
|
87
|
-
class TrailingCommaInHashLiteral <
|
87
|
+
class TrailingCommaInHashLiteral < Base
|
88
88
|
include TrailingComma
|
89
|
+
extend AutoCorrector
|
89
90
|
|
90
91
|
def on_hash(node)
|
91
92
|
check_literal(node, 'item of %<article>s hash')
|
92
93
|
end
|
93
|
-
|
94
|
-
def autocorrect(range)
|
95
|
-
PunctuationCorrector.swap_comma(range)
|
96
|
-
end
|
97
94
|
end
|
98
95
|
end
|
99
96
|
end
|
@@ -28,9 +28,10 @@ module RuboCop
|
|
28
28
|
# # bad
|
29
29
|
# a, b, _something = foo()
|
30
30
|
#
|
31
|
-
class TrailingUnderscoreVariable <
|
31
|
+
class TrailingUnderscoreVariable < Base
|
32
32
|
include SurroundingSpace
|
33
33
|
include RangeHelp
|
34
|
+
extend AutoCorrector
|
34
35
|
|
35
36
|
MSG = 'Do not use trailing `_`s in parallel assignment. ' \
|
36
37
|
'Prefer `%<code>s`.'
|
@@ -44,17 +45,9 @@ module RuboCop
|
|
44
45
|
offset = range.begin_pos - node.source_range.begin_pos
|
45
46
|
good_code[offset, range.size] = ''
|
46
47
|
|
47
|
-
add_offense(
|
48
|
-
|
49
|
-
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def autocorrect(node)
|
54
|
-
ranges = unneeded_ranges(node)
|
55
|
-
|
56
|
-
lambda do |corrector|
|
57
|
-
ranges.each { |range| corrector.remove(range) if range }
|
48
|
+
add_offense(range, message: format(MSG, code: good_code)) do |corrector|
|
49
|
+
corrector.remove(range)
|
50
|
+
end
|
58
51
|
end
|
59
52
|
end
|
60
53
|
|
@@ -75,11 +68,9 @@ module RuboCop
|
|
75
68
|
|
76
69
|
var, = *variable
|
77
70
|
var, = *var
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
break offense unless var.to_s.start_with?(UNDERSCORE)
|
82
|
-
end
|
71
|
+
|
72
|
+
break offense if (allow_named_underscore_variables && var != :_) ||
|
73
|
+
!var.to_s.start_with?(UNDERSCORE)
|
83
74
|
|
84
75
|
variable
|
85
76
|
end
|
@@ -27,8 +27,9 @@ module RuboCop
|
|
27
27
|
# class << self
|
28
28
|
# attr_reader :baz
|
29
29
|
# end
|
30
|
-
class TrivialAccessors <
|
30
|
+
class TrivialAccessors < Base
|
31
31
|
include AllowedMethods
|
32
|
+
extend AutoCorrector
|
32
33
|
|
33
34
|
MSG = 'Use `attr_%<kind>s` to define trivial %<kind>s methods.'
|
34
35
|
|
@@ -41,17 +42,6 @@ module RuboCop
|
|
41
42
|
end
|
42
43
|
alias on_defs on_def
|
43
44
|
|
44
|
-
def autocorrect(node)
|
45
|
-
parent = node.parent
|
46
|
-
return if parent&.send_type?
|
47
|
-
|
48
|
-
if node.def_type?
|
49
|
-
autocorrect_instance(node)
|
50
|
-
elsif node.defs_type? && node.children.first.self_type?
|
51
|
-
autocorrect_class(node)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
45
|
private
|
56
46
|
|
57
47
|
def in_module_or_instance_eval?(node)
|
@@ -76,9 +66,20 @@ module RuboCop
|
|
76
66
|
end
|
77
67
|
return unless kind
|
78
68
|
|
79
|
-
add_offense(node,
|
80
|
-
|
81
|
-
|
69
|
+
add_offense(node.loc.keyword, message: format(MSG, kind: kind)) do |corrector|
|
70
|
+
autocorrect(corrector, node)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def autocorrect(corrector, node)
|
75
|
+
parent = node.parent
|
76
|
+
return if parent&.send_type?
|
77
|
+
|
78
|
+
if node.def_type?
|
79
|
+
autocorrect_instance(corrector, node)
|
80
|
+
elsif node.defs_type? && node.children.first.self_type?
|
81
|
+
autocorrect_class(corrector, node)
|
82
|
+
end
|
82
83
|
end
|
83
84
|
|
84
85
|
def exact_name_match?
|
@@ -156,31 +157,26 @@ module RuboCop
|
|
156
157
|
"attr_#{kind} :#{method_name.to_s.chomp('=')}"
|
157
158
|
end
|
158
159
|
|
159
|
-
def autocorrect_instance(node)
|
160
|
+
def autocorrect_instance(corrector, node)
|
160
161
|
kind = trivial_accessor_kind(node)
|
161
162
|
|
162
163
|
return unless names_match?(node) && !node.predicate_method? && kind
|
163
164
|
|
164
|
-
|
165
|
-
corrector.replace(node,
|
166
|
-
accessor(kind, node.method_name))
|
167
|
-
end
|
165
|
+
corrector.replace(node, accessor(kind, node.method_name))
|
168
166
|
end
|
169
167
|
|
170
|
-
def autocorrect_class(node)
|
168
|
+
def autocorrect_class(corrector, node)
|
171
169
|
kind = trivial_accessor_kind(node)
|
172
170
|
|
173
171
|
return unless names_match?(node) && kind
|
174
172
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
)
|
183
|
-
end
|
173
|
+
indent = ' ' * node.loc.column
|
174
|
+
corrector.replace(
|
175
|
+
node.source_range,
|
176
|
+
['class << self',
|
177
|
+
"#{indent} #{accessor(kind, node.method_name)}",
|
178
|
+
"#{indent}end"].join("\n")
|
179
|
+
)
|
184
180
|
end
|
185
181
|
|
186
182
|
def top_level_node?(node)
|
@@ -19,8 +19,9 @@ module RuboCop
|
|
19
19
|
# else
|
20
20
|
# # do a different thing...
|
21
21
|
# end
|
22
|
-
class UnlessElse <
|
22
|
+
class UnlessElse < Base
|
23
23
|
include RangeHelp
|
24
|
+
extend AutoCorrector
|
24
25
|
|
25
26
|
MSG = 'Do not use `unless` with `else`. Rewrite these with the ' \
|
26
27
|
'positive case first.'
|
@@ -28,14 +29,10 @@ module RuboCop
|
|
28
29
|
def on_if(node)
|
29
30
|
return unless node.unless? && node.else?
|
30
31
|
|
31
|
-
add_offense(node)
|
32
|
-
|
33
|
-
|
34
|
-
def autocorrect(node)
|
35
|
-
body_range = range_between_condition_and_else(node, node.condition)
|
36
|
-
else_range = range_between_else_and_end(node)
|
32
|
+
add_offense(node) do |corrector|
|
33
|
+
body_range = range_between_condition_and_else(node, node.condition)
|
34
|
+
else_range = range_between_else_and_end(node)
|
37
35
|
|
38
|
-
lambda do |corrector|
|
39
36
|
corrector.replace(node.loc.keyword, 'if')
|
40
37
|
corrector.replace(body_range, else_range.source)
|
41
38
|
corrector.replace(else_range, body_range.source)
|
@@ -17,7 +17,9 @@ module RuboCop
|
|
17
17
|
# # good
|
18
18
|
# 'foo'.unpack1('h*')
|
19
19
|
#
|
20
|
-
class UnpackFirst <
|
20
|
+
class UnpackFirst < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = 'Use `%<receiver>s.unpack1(%<format>s)` instead of '\
|
22
24
|
'`%<receiver>s.unpack(%<format>s)%<method>s`.'
|
23
25
|
|
@@ -35,13 +37,7 @@ module RuboCop
|
|
35
37
|
receiver: unpack_call.receiver.source,
|
36
38
|
format: unpack_arg.source,
|
37
39
|
method: range.source)
|
38
|
-
add_offense(node, message: message)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def autocorrect(node)
|
43
|
-
unpack_and_first_element?(node) do |unpack_call, _unpack_arg|
|
44
|
-
lambda do |corrector|
|
40
|
+
add_offense(node, message: message) do |corrector|
|
45
41
|
corrector.remove(first_element_range(node, unpack_call))
|
46
42
|
corrector.replace(unpack_call.loc.selector, 'unpack1')
|
47
43
|
end
|