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
@@ -15,28 +15,25 @@ module RuboCop
|
|
15
15
|
# "His name is #{$name}"
|
16
16
|
# /check #{$pattern}/
|
17
17
|
# "Let's go to the #{@store}"
|
18
|
-
class VariableInterpolation <
|
18
|
+
class VariableInterpolation < Base
|
19
19
|
include Interpolation
|
20
|
+
extend AutoCorrector
|
20
21
|
|
21
22
|
MSG = 'Replace interpolated variable `%<variable>s` ' \
|
22
23
|
'with expression `#{%<variable>s}`.'
|
23
24
|
|
24
25
|
def on_node_with_interpolations(node)
|
25
26
|
var_nodes(node.children).each do |var_node|
|
26
|
-
add_offense(var_node)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
32
|
-
corrector.replace(node, "{#{node.source}}")
|
27
|
+
add_offense(var_node) do |corrector|
|
28
|
+
corrector.replace(var_node, "{#{var_node.source}}")
|
29
|
+
end
|
33
30
|
end
|
34
31
|
end
|
35
32
|
|
36
33
|
private
|
37
34
|
|
38
|
-
def message(
|
39
|
-
format(MSG, variable:
|
35
|
+
def message(range)
|
36
|
+
format(MSG, variable: range.source)
|
40
37
|
end
|
41
38
|
|
42
39
|
def var_nodes(nodes)
|
@@ -17,17 +17,15 @@ module RuboCop
|
|
17
17
|
# when 1 then 'baz'
|
18
18
|
# when 2 then 'bar'
|
19
19
|
# end
|
20
|
-
class WhenThen <
|
20
|
+
class WhenThen < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = 'Do not use `when x;`. Use `when x then` instead.'
|
22
24
|
|
23
25
|
def on_when(node)
|
24
26
|
return if node.multiline? || node.then? || !node.body
|
25
27
|
|
26
|
-
add_offense(node
|
27
|
-
end
|
28
|
-
|
29
|
-
def autocorrect(node)
|
30
|
-
lambda do |corrector|
|
28
|
+
add_offense(node.loc.begin) do |corrector|
|
31
29
|
corrector.replace(node.loc.begin, ' then')
|
32
30
|
end
|
33
31
|
end
|
@@ -28,31 +28,21 @@ module RuboCop
|
|
28
28
|
# until x.empty?
|
29
29
|
# do_something(x.pop)
|
30
30
|
# end
|
31
|
-
class WhileUntilDo <
|
31
|
+
class WhileUntilDo < Base
|
32
|
+
extend AutoCorrector
|
33
|
+
|
32
34
|
MSG = 'Do not use `do` with multi-line `%<keyword>s`.'
|
33
35
|
|
34
36
|
def on_while(node)
|
35
|
-
handle(node)
|
36
|
-
end
|
37
|
-
|
38
|
-
def on_until(node)
|
39
|
-
handle(node)
|
40
|
-
end
|
41
|
-
|
42
|
-
def handle(node)
|
43
37
|
return unless node.multiline? && node.do?
|
44
38
|
|
45
|
-
add_offense(node,
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
def autocorrect(node)
|
50
|
-
do_range = node.condition.source_range.end.join(node.loc.begin)
|
39
|
+
add_offense(node.loc.begin, message: format(MSG, keyword: node.keyword)) do |corrector|
|
40
|
+
do_range = node.condition.source_range.end.join(node.loc.begin)
|
51
41
|
|
52
|
-
lambda do |corrector|
|
53
42
|
corrector.remove(do_range)
|
54
43
|
end
|
55
44
|
end
|
45
|
+
alias on_until on_while
|
56
46
|
end
|
57
47
|
end
|
58
48
|
end
|
@@ -24,37 +24,23 @@ module RuboCop
|
|
24
24
|
#
|
25
25
|
# # good
|
26
26
|
# x += 1 until x > 10
|
27
|
-
class WhileUntilModifier <
|
27
|
+
class WhileUntilModifier < Base
|
28
28
|
include StatementModifier
|
29
|
+
extend AutoCorrector
|
29
30
|
|
30
31
|
MSG = 'Favor modifier `%<keyword>s` usage when ' \
|
31
32
|
'having a single-line body.'
|
32
33
|
|
33
34
|
def on_while(node)
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
def on_until(node)
|
38
|
-
check(node)
|
39
|
-
end
|
35
|
+
return unless node.multiline? && single_line_as_modifier?(node)
|
40
36
|
|
41
|
-
|
42
|
-
|
43
|
-
"#{node.condition.source}"
|
37
|
+
add_offense(node.loc.keyword, message: format(MSG, keyword: node.keyword)) do |corrector|
|
38
|
+
oneline = "#{node.body.source} #{node.keyword} #{node.condition.source}"
|
44
39
|
|
45
|
-
lambda do |corrector|
|
46
40
|
corrector.replace(node, oneline)
|
47
41
|
end
|
48
42
|
end
|
49
|
-
|
50
|
-
private
|
51
|
-
|
52
|
-
def check(node)
|
53
|
-
return unless node.multiline? && single_line_as_modifier?(node)
|
54
|
-
|
55
|
-
add_offense(node, location: :keyword,
|
56
|
-
message: format(MSG, keyword: node.keyword))
|
57
|
-
end
|
43
|
+
alias on_until on_while
|
58
44
|
end
|
59
45
|
end
|
60
46
|
end
|
@@ -27,11 +27,12 @@ module RuboCop
|
|
27
27
|
#
|
28
28
|
# # bad
|
29
29
|
# %w[foo bar baz]
|
30
|
-
class WordArray <
|
30
|
+
class WordArray < 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 `%w` or `%W` for an array of words.'
|
37
38
|
ARRAY_MSG = 'Use `[]` for an array of words.'
|
@@ -44,31 +45,14 @@ module RuboCop
|
|
44
45
|
if bracketed_array_of?(:str, node)
|
45
46
|
return if complex_content?(node.values)
|
46
47
|
|
47
|
-
check_bracketed_array(node)
|
48
|
+
check_bracketed_array(node, 'w')
|
48
49
|
elsif node.percent_literal?(:string)
|
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, 'w')
|
58
|
-
else
|
59
|
-
correct_bracketed(node)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
54
|
private
|
64
55
|
|
65
|
-
def check_bracketed_array(node)
|
66
|
-
return if allowed_bracket_array?(node)
|
67
|
-
|
68
|
-
array_style_detected(:brackets, node.values.size)
|
69
|
-
add_offense(node) if style == :percent
|
70
|
-
end
|
71
|
-
|
72
56
|
def complex_content?(strings)
|
73
57
|
strings.any? do |s|
|
74
58
|
string = s.str_content.dup.force_encoding(::Encoding::UTF_8)
|
@@ -81,7 +65,7 @@ module RuboCop
|
|
81
65
|
Regexp.new(cop_config['WordRegex'])
|
82
66
|
end
|
83
67
|
|
84
|
-
def correct_bracketed(node)
|
68
|
+
def correct_bracketed(corrector, node)
|
85
69
|
words = node.children.map do |word|
|
86
70
|
if word.dstr_type?
|
87
71
|
string_literal = to_string_literal(word.source)
|
@@ -92,9 +76,7 @@ module RuboCop
|
|
92
76
|
end
|
93
77
|
end
|
94
78
|
|
95
|
-
|
96
|
-
corrector.replace(node, "[#{words.join(', ')}]")
|
97
|
-
end
|
79
|
+
corrector.replace(node, "[#{words.join(', ')}]")
|
98
80
|
end
|
99
81
|
end
|
100
82
|
end
|
@@ -52,9 +52,10 @@ module RuboCop
|
|
52
52
|
# # good
|
53
53
|
# 99 == foo
|
54
54
|
# "bar" != foo
|
55
|
-
class YodaCondition <
|
55
|
+
class YodaCondition < Base
|
56
56
|
include ConfigurableEnforcedStyle
|
57
57
|
include RangeHelp
|
58
|
+
extend AutoCorrector
|
58
59
|
|
59
60
|
MSG = 'Reverse the order of the operands `%<source>s`.'
|
60
61
|
|
@@ -80,11 +81,7 @@ module RuboCop
|
|
80
81
|
return if equality_only? && non_equality_operator?(node) ||
|
81
82
|
file_constant_equal_program_name?(node)
|
82
83
|
|
83
|
-
valid_yoda?(node) || add_offense(node)
|
84
|
-
end
|
85
|
-
|
86
|
-
def autocorrect(node)
|
87
|
-
lambda do |corrector|
|
84
|
+
valid_yoda?(node) || add_offense(node) do |corrector|
|
88
85
|
corrector.replace(actual_code_range(node), corrected_code(node))
|
89
86
|
end
|
90
87
|
end
|
@@ -157,15 +154,7 @@ module RuboCop
|
|
157
154
|
def interpolation?(node)
|
158
155
|
return true if node.dstr_type?
|
159
156
|
|
160
|
-
|
161
|
-
# https://github.com/rubocop-hq/rubocop-ast/pull/18
|
162
|
-
if node.regexp_type?
|
163
|
-
return true if node.children.any? do |child|
|
164
|
-
child.respond_to?(:begin_type?) && child.begin_type?
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
false
|
157
|
+
node.regexp_type? && node.interpolation?
|
169
158
|
end
|
170
159
|
end
|
171
160
|
end
|
@@ -25,7 +25,9 @@ module RuboCop
|
|
25
25
|
# !{a: 1, b: 2}.empty?
|
26
26
|
# !string.empty?
|
27
27
|
# !hash.empty?
|
28
|
-
class ZeroLengthPredicate <
|
28
|
+
class ZeroLengthPredicate < Base
|
29
|
+
extend AutoCorrector
|
30
|
+
|
29
31
|
ZERO_MSG = 'Use `empty?` instead of `%<lhs>s %<opr>s %<rhs>s`.'
|
30
32
|
NONZERO_MSG = 'Use `!empty?` instead of ' \
|
31
33
|
'`%<lhs>s %<opr>s %<rhs>s`.'
|
@@ -37,12 +39,6 @@ module RuboCop
|
|
37
39
|
check_nonzero_length_predicate(node)
|
38
40
|
end
|
39
41
|
|
40
|
-
def autocorrect(node)
|
41
|
-
lambda do |corrector|
|
42
|
-
corrector.replace(node, replacement(node))
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
42
|
private
|
47
43
|
|
48
44
|
def check_zero_length_predicate(node)
|
@@ -56,9 +52,10 @@ module RuboCop
|
|
56
52
|
return if non_polymorphic_collection?(node.parent)
|
57
53
|
|
58
54
|
add_offense(
|
59
|
-
node.parent,
|
60
|
-
|
61
|
-
|
55
|
+
node.parent, message: format(ZERO_MSG, lhs: lhs, opr: opr, rhs: rhs)
|
56
|
+
) do |corrector|
|
57
|
+
corrector.replace(node.parent, replacement(node.parent))
|
58
|
+
end
|
62
59
|
end
|
63
60
|
|
64
61
|
def check_nonzero_length_predicate(node)
|
@@ -72,9 +69,10 @@ module RuboCop
|
|
72
69
|
return if non_polymorphic_collection?(node.parent)
|
73
70
|
|
74
71
|
add_offense(
|
75
|
-
node.parent,
|
76
|
-
|
77
|
-
|
72
|
+
node.parent, message: format(NONZERO_MSG, lhs: lhs, opr: opr, rhs: rhs)
|
73
|
+
) do |corrector|
|
74
|
+
corrector.replace(node.parent, replacement(node.parent))
|
75
|
+
end
|
78
76
|
end
|
79
77
|
|
80
78
|
def_node_matcher :zero_length_predicate, <<~PATTERN
|
data/lib/rubocop/cop/team.rb
CHANGED
data/lib/rubocop/cop/util.rb
CHANGED
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
/^\s*#/.match?(line_source)
|
20
20
|
end
|
21
21
|
|
22
|
-
# @deprecated Use `ProcessedSource#line_with_comment?`, `contains_comment
|
22
|
+
# @deprecated Use `ProcessedSource#line_with_comment?`, `contains_comment?` or similar
|
23
23
|
def comment_lines?(node)
|
24
24
|
processed_source[line_range(node)].any? { |line| comment_line?(line) }
|
25
25
|
end
|
@@ -111,11 +111,9 @@ module RuboCop
|
|
111
111
|
private
|
112
112
|
|
113
113
|
def parse
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
)
|
118
|
-
end
|
114
|
+
matches = []
|
115
|
+
@source.scan(SEQUENCE) { matches << FormatSequence.new(Regexp.last_match) }
|
116
|
+
matches
|
119
117
|
end
|
120
118
|
|
121
119
|
def mixed_formats?
|
@@ -22,6 +22,8 @@ module RuboCop
|
|
22
22
|
#
|
23
23
|
# def after_declaring_variable(variable, variable_table)
|
24
24
|
# end
|
25
|
+
#
|
26
|
+
# @api private
|
25
27
|
class VariableForce < Force # rubocop:disable Metrics/ClassLength
|
26
28
|
VARIABLE_ASSIGNMENT_TYPE = :lvasgn
|
27
29
|
REGEXP_NAMED_CAPTURE_TYPE = :match_with_lvasgn
|
@@ -1,7 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Class for generating documentation of all cops departments
|
4
|
+
# @api private
|
4
5
|
class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
6
|
+
include ::RuboCop::Cop::Documentation
|
5
7
|
# This class will only generate documentation for cops that belong to one of
|
6
8
|
# the departments given in the `departments` array. E.g. if we only wanted
|
7
9
|
# documentation for Lint cops:
|
@@ -210,7 +212,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
210
212
|
selected_cops.each do |cop|
|
211
213
|
content << print_cop_with_doc(cop)
|
212
214
|
end
|
213
|
-
file_name = "#{Dir.pwd}/docs/modules/ROOT/pages
|
215
|
+
file_name = "#{Dir.pwd}/docs/modules/ROOT/pages/#{department_to_basename(department)}.adoc"
|
214
216
|
File.open(file_name, 'w') do |file|
|
215
217
|
puts "* generated #{file_name}"
|
216
218
|
file.write("#{content.strip}\n")
|
@@ -243,7 +245,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
243
245
|
|
244
246
|
def table_of_content_for_department(department)
|
245
247
|
type_title = department[0].upcase + department[1..-1]
|
246
|
-
filename = "
|
248
|
+
filename = "#{department_to_basename(department)}.adoc"
|
247
249
|
content = +"=== Department xref:#{filename}[#{type_title}]\n\n"
|
248
250
|
cops_of_department(department).each do |cop|
|
249
251
|
anchor = cop.cop_name.sub('/', '').downcase
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Ext
|
5
|
+
# Extensions to AST::RegexpNode for our cached parsed regexp info
|
6
|
+
module RegexpNode
|
7
|
+
ANY = Object.new
|
8
|
+
def ANY.==(_)
|
9
|
+
true
|
10
|
+
end
|
11
|
+
private_constant :ANY
|
12
|
+
|
13
|
+
class << self
|
14
|
+
attr_reader :parsed_cache
|
15
|
+
end
|
16
|
+
@parsed_cache = {}
|
17
|
+
|
18
|
+
# @return [Regexp::Expression::Root, nil]
|
19
|
+
def parsed_tree
|
20
|
+
return if interpolation?
|
21
|
+
|
22
|
+
str = content
|
23
|
+
Ext::RegexpNode.parsed_cache[str] ||= begin
|
24
|
+
Regexp::Parser.parse(str)
|
25
|
+
rescue StandardError
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def each_capture(named: ANY)
|
31
|
+
return enum_for(__method__, named: named) unless block_given?
|
32
|
+
|
33
|
+
parsed_tree&.traverse do |event, exp, _index|
|
34
|
+
yield(exp) if event == :enter &&
|
35
|
+
named == exp.respond_to?(:name) &&
|
36
|
+
exp.respond_to?(:capturing?) &&
|
37
|
+
exp.capturing?
|
38
|
+
end
|
39
|
+
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
AST::RegexpNode.include self
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/rubocop/file_finder.rb
CHANGED