rubocop 0.75.0 → 0.79.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 +2 -2
- data/config/default.yml +341 -316
- data/lib/rubocop.rb +48 -31
- data/lib/rubocop/ast/builder.rb +43 -41
- data/lib/rubocop/ast/node.rb +5 -1
- data/lib/rubocop/ast/node/block_node.rb +2 -0
- data/lib/rubocop/ast/node/def_node.rb +11 -0
- data/lib/rubocop/ast/node/forward_args_node.rb +18 -0
- data/lib/rubocop/ast/node/return_node.rb +24 -0
- data/lib/rubocop/ast/traversal.rb +11 -3
- data/lib/rubocop/cli.rb +11 -227
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -0
- data/lib/rubocop/cli/command/base.rb +33 -0
- data/lib/rubocop/cli/command/execute_runner.rb +76 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
- data/lib/rubocop/cli/command/show_cops.rb +80 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +8 -1
- data/lib/rubocop/config_loader.rb +20 -20
- data/lib/rubocop/config_loader_resolver.rb +2 -1
- data/lib/rubocop/config_obsoletion.rb +73 -11
- data/lib/rubocop/config_validator.rb +77 -110
- data/lib/rubocop/cop/autocorrect_logic.rb +7 -4
- data/lib/rubocop/cop/bundler/gem_comment.rb +4 -4
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +15 -7
- data/lib/rubocop/cop/cop.rb +31 -6
- data/lib/rubocop/cop/corrector.rb +8 -7
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/generator.rb +3 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
- data/lib/rubocop/cop/layout/{align_arguments.rb → argument_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/{align_array.rb → array_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/{indent_assignment.rb → assignment_indentation.rb} +3 -2
- data/lib/rubocop/cop/layout/comment_indentation.rb +10 -13
- data/lib/rubocop/cop/layout/empty_comment.rb +7 -16
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -7
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +8 -3
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/{indent_first_argument.rb → first_argument_indentation.rb} +14 -12
- data/lib/rubocop/cop/layout/{indent_first_array_element.rb → first_array_element_indentation.rb} +4 -4
- data/lib/rubocop/cop/layout/{indent_first_hash_element.rb → first_hash_element_indentation.rb} +4 -4
- data/lib/rubocop/cop/layout/{indent_first_parameter.rb → first_parameter_indentation.rb} +3 -3
- data/lib/rubocop/cop/layout/{align_hash.rb → hash_alignment.rb} +16 -8
- data/lib/rubocop/cop/layout/{indent_heredoc.rb → heredoc_indentation.rb} +5 -5
- data/lib/rubocop/cop/layout/{leading_blank_lines.rb → leading_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/{metrics → layout}/line_length.rb +41 -114
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +14 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/{align_parameters.rb → parameter_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +2 -0
- data/lib/rubocop/cop/layout/space_around_keyword.rb +12 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +32 -7
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +17 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -7
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +7 -4
- data/lib/rubocop/cop/layout/space_inside_parens.rb +6 -6
- data/lib/rubocop/cop/layout/{trailing_blank_lines.rb → trailing_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +18 -2
- data/lib/rubocop/cop/lint/debugger.rb +2 -2
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
- data/lib/rubocop/cop/lint/{duplicated_key.rb → duplicate_hash_key.rb} +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +9 -8
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/{multiple_compare.rb → multiple_comparison.rb} +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
- data/lib/rubocop/cop/lint/{unneeded_cop_disable_directive.rb → redundant_cop_disable_directive.rb} +26 -26
- data/lib/rubocop/cop/lint/{unneeded_cop_enable_directive.rb → redundant_cop_enable_directive.rb} +10 -12
- data/lib/rubocop/cop/lint/{unneeded_require_statement.rb → redundant_require_statement.rb} +1 -1
- data/lib/rubocop/cop/lint/{unneeded_splat_expansion.rb → redundant_splat_expansion.rb} +6 -6
- data/lib/rubocop/cop/lint/{string_conversion_in_interpolation.rb → redundant_string_coercion.rb} +1 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +5 -6
- data/lib/rubocop/cop/lint/{handle_exceptions.rb → suppressed_exception.rb} +1 -1
- data/lib/rubocop/cop/lint/unused_block_argument.rb +22 -6
- data/lib/rubocop/cop/lint/unused_method_argument.rb +23 -5
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +57 -23
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/lint/void.rb +7 -26
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +23 -6
- data/lib/rubocop/cop/migration/department_name.rb +16 -1
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -7
- data/lib/rubocop/cop/mixin/{hash_alignment.rb → hash_alignment_styles.rb} +1 -1
- data/lib/rubocop/cop/mixin/line_length_help.rb +88 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/nil_methods.rb +4 -4
- data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -4
- data/lib/rubocop/cop/mixin/trailing_comma.rb +14 -9
- data/lib/rubocop/cop/naming/{uncommunicative_block_param_name.rb → block_parameter_name.rb} +3 -3
- data/lib/rubocop/cop/naming/file_name.rb +12 -5
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +5 -5
- data/lib/rubocop/cop/naming/{uncommunicative_method_param_name.rb → method_parameter_name.rb} +4 -4
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -6
- data/lib/rubocop/cop/offense.rb +11 -0
- data/lib/rubocop/cop/registry.rb +8 -3
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +10 -2
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +6 -6
- data/lib/rubocop/cop/style/comment_annotation.rb +5 -5
- data/lib/rubocop/cop/style/conditional_assignment.rb +2 -2
- data/lib/rubocop/cop/style/copyright.rb +11 -7
- data/lib/rubocop/cop/style/documentation_method.rb +44 -0
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +2 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +2 -2
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
- data/lib/rubocop/cop/style/format_string.rb +10 -7
- data/lib/rubocop/cop/style/format_string_token.rb +15 -34
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +10 -0
- data/lib/rubocop/cop/style/guard_clause.rb +3 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +45 -3
- data/lib/rubocop/cop/style/infinite_loop.rb +5 -4
- data/lib/rubocop/cop/style/inverse_methods.rb +19 -13
- data/lib/rubocop/cop/style/ip_addresses.rb +4 -4
- data/lib/rubocop/cop/style/line_end_concatenation.rb +14 -10
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +24 -227
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +168 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +54 -0
- data/lib/rubocop/cop/style/method_def_parentheses.rb +17 -9
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +6 -2
- data/lib/rubocop/cop/style/nested_modifier.rb +4 -2
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -5
- data/lib/rubocop/cop/style/next.rb +5 -5
- data/lib/rubocop/cop/style/non_nil_check.rb +21 -9
- data/lib/rubocop/cop/style/numeric_literals.rb +7 -3
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -3
- data/lib/rubocop/cop/style/option_hash.rb +3 -3
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +7 -7
- data/lib/rubocop/cop/style/{unneeded_capital_w.rb → redundant_capital_w.rb} +1 -1
- data/lib/rubocop/cop/style/{unneeded_condition.rb → redundant_condition.rb} +3 -3
- data/lib/rubocop/cop/style/{unneeded_interpolation.rb → redundant_interpolation.rb} +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +3 -3
- data/lib/rubocop/cop/style/{unneeded_percent_q.rb → redundant_percent_q.rb} +1 -1
- data/lib/rubocop/cop/style/redundant_return.rb +39 -29
- data/lib/rubocop/cop/style/{unneeded_sort.rb → redundant_sort.rb} +5 -5
- data/lib/rubocop/cop/style/safe_navigation.rb +19 -8
- data/lib/rubocop/cop/style/semicolon.rb +13 -2
- data/lib/rubocop/cop/style/special_global_vars.rb +5 -7
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +7 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +5 -5
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +16 -1
- data/lib/rubocop/cop/team.rb +5 -0
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/format_string.rb +10 -18
- data/lib/rubocop/cop/variable_force.rb +7 -5
- data/lib/rubocop/formatter/base_formatter.rb +2 -2
- data/lib/rubocop/formatter/clang_style_formatter.rb +9 -6
- data/lib/rubocop/formatter/emacs_style_formatter.rb +22 -12
- data/lib/rubocop/formatter/file_list_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +16 -16
- data/lib/rubocop/formatter/json_formatter.rb +6 -5
- data/lib/rubocop/formatter/pacman_formatter.rb +3 -3
- data/lib/rubocop/formatter/simple_text_formatter.rb +7 -3
- data/lib/rubocop/formatter/tap_formatter.rb +9 -6
- data/lib/rubocop/node_pattern.rb +4 -2
- data/lib/rubocop/options.rb +20 -26
- data/lib/rubocop/processed_source.rb +1 -1
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/result_cache.rb +24 -8
- data/lib/rubocop/rspec/shared_contexts.rb +5 -0
- data/lib/rubocop/runner.rb +50 -29
- data/lib/rubocop/target_finder.rb +12 -6
- data/lib/rubocop/target_ruby.rb +151 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +50 -34
- data/lib/rubocop/cop/mixin/safe_mode.rb +0 -24
@@ -32,13 +32,14 @@ module RuboCop
|
|
32
32
|
return unless node.body
|
33
33
|
|
34
34
|
max = cop_config['Max']
|
35
|
-
complexity = complexity(node.body)
|
35
|
+
complexity, abc_vector = complexity(node.body)
|
36
36
|
|
37
37
|
return unless complexity > max
|
38
38
|
|
39
39
|
msg = format(self.class::MSG,
|
40
40
|
method: method_name,
|
41
41
|
complexity: complexity,
|
42
|
+
abc_vector: abc_vector,
|
42
43
|
max: max)
|
43
44
|
|
44
45
|
add_offense(node, message: msg) do
|
@@ -5,20 +5,20 @@ module RuboCop
|
|
5
5
|
# This module provides a list of methods that are:
|
6
6
|
# 1. In the NilClass by default
|
7
7
|
# 2. Added to NilClass by explicitly requiring any standard libraries
|
8
|
-
# 3. Cop's configuration parameter
|
8
|
+
# 3. Cop's configuration parameter AllowedMethods.
|
9
9
|
module NilMethods
|
10
10
|
private
|
11
11
|
|
12
12
|
def nil_methods
|
13
|
-
nil.methods + other_stdlib_methods +
|
13
|
+
nil.methods + other_stdlib_methods + allowed_methods
|
14
14
|
end
|
15
15
|
|
16
16
|
def other_stdlib_methods
|
17
17
|
[:to_d]
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
cop_config['
|
20
|
+
def allowed_methods
|
21
|
+
cop_config['AllowedMethods'].map(&:to_sym)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
# Common functionality for handling Rational literals.
|
6
|
+
module RationalLiteral
|
7
|
+
extend NodePattern::Macros
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def_node_matcher :rational_literal?, <<~PATTERN
|
12
|
+
(send
|
13
|
+
(int _) :/
|
14
|
+
(rational _))
|
15
|
+
PATTERN
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -41,17 +41,20 @@ module RuboCop
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def length_in_modifier_form(node, cond, body_length)
|
44
|
-
|
45
|
-
|
44
|
+
keyword = node.loc.keyword
|
45
|
+
|
46
|
+
indentation = keyword.column * indentation_multiplier
|
47
|
+
kw_length = keyword.size
|
46
48
|
cond_length = cond.source_range.size
|
47
49
|
space = 1
|
50
|
+
|
48
51
|
indentation + body_length + space + kw_length + space + cond_length
|
49
52
|
end
|
50
53
|
|
51
54
|
def max_line_length
|
52
|
-
return unless config.for_cop('
|
55
|
+
return unless config.for_cop('Layout/LineLength')['Enabled']
|
53
56
|
|
54
|
-
config.for_cop('
|
57
|
+
config.for_cop('Layout/LineLength')['Max']
|
55
58
|
end
|
56
59
|
|
57
60
|
def indentation_multiplier
|
@@ -18,12 +18,7 @@ module RuboCop
|
|
18
18
|
|
19
19
|
def check(node, items, kind, begin_pos, end_pos)
|
20
20
|
after_last_item = range_between(begin_pos, end_pos)
|
21
|
-
|
22
|
-
# If there is any heredoc in items, then match the comma succeeding
|
23
|
-
# any whitespace (except newlines), otherwise allow for newlines
|
24
|
-
comma_regex = any_heredoc?(items) ? /\A[^\S\n]*,/ : /\A\s*,/
|
25
|
-
comma_offset = after_last_item.source =~ comma_regex &&
|
26
|
-
after_last_item.source.index(',')
|
21
|
+
comma_offset = comma_offset(items, after_last_item)
|
27
22
|
|
28
23
|
if comma_offset && !inside_comment?(after_last_item, comma_offset)
|
29
24
|
check_comma(node, kind, after_last_item.begin_pos + comma_offset)
|
@@ -32,6 +27,13 @@ module RuboCop
|
|
32
27
|
end
|
33
28
|
end
|
34
29
|
|
30
|
+
def comma_offset(items, range)
|
31
|
+
# If there is any heredoc in items, then match the comma succeeding
|
32
|
+
# any whitespace (except newlines), otherwise allow for newlines
|
33
|
+
comma_regex = any_heredoc?(items) ? /\A[^\S\n]*,/ : /\A\s*,/
|
34
|
+
range.source =~ comma_regex && range.source.index(',')
|
35
|
+
end
|
36
|
+
|
35
37
|
def check_comma(node, kind, comma_pos)
|
36
38
|
return if should_have_comma?(style, node)
|
37
39
|
|
@@ -91,9 +93,12 @@ module RuboCop
|
|
91
93
|
end
|
92
94
|
|
93
95
|
def method_name_and_arguments_on_same_line?(node)
|
94
|
-
|
95
|
-
|
96
|
-
|
96
|
+
return false unless node.call_type?
|
97
|
+
|
98
|
+
line = node.loc.selector.nil? ? node.loc.line : node.loc.selector.line
|
99
|
+
|
100
|
+
line == node.last_argument.last_line &&
|
101
|
+
node.last_line == node.last_argument.last_line
|
97
102
|
end
|
98
103
|
|
99
104
|
# A single argument with the closing bracket on the same line as the end
|
@@ -11,9 +11,9 @@ module RuboCop
|
|
11
11
|
# The `AllowNamesEndingInNumbers` config option takes a boolean. When
|
12
12
|
# set to false, this cop will register offenses for names ending with
|
13
13
|
# numbers. Its default is false. The `AllowedNames` config option
|
14
|
-
# takes an array of
|
14
|
+
# takes an array of permitted names that will never register an
|
15
15
|
# offense. The `ForbiddenNames` config option takes an array of
|
16
|
-
#
|
16
|
+
# restricted names that will always register an offense.
|
17
17
|
#
|
18
18
|
# @example
|
19
19
|
# # bad
|
@@ -35,7 +35,7 @@ module RuboCop
|
|
35
35
|
# foo { |speed, distance| speed * distance }
|
36
36
|
#
|
37
37
|
# baz { |age, height, gender| do_stuff(age, height, gender) }
|
38
|
-
class
|
38
|
+
class BlockParameterName < Cop
|
39
39
|
include UncommunicativeName
|
40
40
|
|
41
41
|
def on_block(node)
|
@@ -50,14 +50,11 @@ module RuboCop
|
|
50
50
|
def for_bad_filename(file_path)
|
51
51
|
basename = File.basename(file_path)
|
52
52
|
msg = if filename_good?(basename)
|
53
|
-
return
|
54
|
-
return if find_class_or_module(processed_source.ast,
|
55
|
-
to_namespace(file_path))
|
53
|
+
return if matching_definition?(file_path)
|
56
54
|
|
57
55
|
no_definition_message(basename, file_path)
|
58
56
|
else
|
59
|
-
return if
|
60
|
-
processed_source.start_with?('#!')
|
57
|
+
return if bad_filename_allowed?
|
61
58
|
|
62
59
|
other_message(basename)
|
63
60
|
end
|
@@ -65,6 +62,16 @@ module RuboCop
|
|
65
62
|
yield source_range(processed_source.buffer, 1, 0), msg
|
66
63
|
end
|
67
64
|
|
65
|
+
def matching_definition?(file_path)
|
66
|
+
return true unless expect_matching_definition?
|
67
|
+
|
68
|
+
find_class_or_module(processed_source.ast, to_namespace(file_path))
|
69
|
+
end
|
70
|
+
|
71
|
+
def bad_filename_allowed?
|
72
|
+
ignore_executable_scripts? && processed_source.start_with?('#!')
|
73
|
+
end
|
74
|
+
|
68
75
|
def no_definition_message(basename, file_path)
|
69
76
|
format(MSG_NO_DEFINITION,
|
70
77
|
basename: basename,
|
@@ -5,7 +5,7 @@ module RuboCop
|
|
5
5
|
module Naming
|
6
6
|
# This cop checks that your heredocs are using meaningful delimiters.
|
7
7
|
# By default it disallows `END` and `EO*`, and can be configured through
|
8
|
-
#
|
8
|
+
# forbidden listing additional delimiters.
|
9
9
|
#
|
10
10
|
# @example
|
11
11
|
#
|
@@ -41,13 +41,13 @@ module RuboCop
|
|
41
41
|
|
42
42
|
return false unless delimiters =~ /\w/
|
43
43
|
|
44
|
-
|
45
|
-
delimiters =~ Regexp.new(
|
44
|
+
forbidden_delimiters.none? do |forbidden_delimiter|
|
45
|
+
delimiters =~ Regexp.new(forbidden_delimiter)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
cop_config['
|
49
|
+
def forbidden_delimiters
|
50
|
+
cop_config['ForbiddenDelimiters'] || []
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
data/lib/rubocop/cop/naming/{uncommunicative_method_param_name.rb → method_parameter_name.rb}
RENAMED
@@ -11,9 +11,9 @@ module RuboCop
|
|
11
11
|
# The `AllowNamesEndingInNumbers` config option takes a boolean. When
|
12
12
|
# set to false, this cop will register offenses for names ending with
|
13
13
|
# numbers. Its default is false. The `AllowedNames` config option
|
14
|
-
# takes an array of
|
14
|
+
# takes an array of permitted names that will never register an
|
15
15
|
# offense. The `ForbiddenNames` config option takes an array of
|
16
|
-
#
|
16
|
+
# restricted names that will always register an offense.
|
17
17
|
#
|
18
18
|
# @example
|
19
19
|
# # bad
|
@@ -43,13 +43,13 @@ module RuboCop
|
|
43
43
|
# def baz(age_a, height_b, gender_c)
|
44
44
|
# do_stuff(age_a, height_b, gender_c)
|
45
45
|
# end
|
46
|
-
class
|
46
|
+
class MethodParameterName < Cop
|
47
47
|
include UncommunicativeName
|
48
48
|
|
49
49
|
def on_def(node)
|
50
50
|
return unless node.arguments?
|
51
51
|
|
52
|
-
check(node, node.arguments)
|
52
|
+
check(node, node.arguments.reject(&:forward_args_type?))
|
53
53
|
end
|
54
54
|
alias on_defs on_def
|
55
55
|
end
|
@@ -70,11 +70,11 @@ module RuboCop
|
|
70
70
|
!method_name.match(/^#{prefix}[^0-9]/) ||
|
71
71
|
method_name == expected_name(method_name, prefix) ||
|
72
72
|
method_name.end_with?('=') ||
|
73
|
-
|
73
|
+
allowed_methods.include?(method_name)
|
74
74
|
end
|
75
75
|
|
76
76
|
def expected_name(method_name, prefix)
|
77
|
-
new_name = if
|
77
|
+
new_name = if forbidden_prefixes.include?(prefix)
|
78
78
|
method_name.sub(prefix, '')
|
79
79
|
else
|
80
80
|
method_name.dup
|
@@ -87,16 +87,16 @@ module RuboCop
|
|
87
87
|
"Rename `#{method_name}` to `#{new_name}`."
|
88
88
|
end
|
89
89
|
|
90
|
-
def
|
91
|
-
cop_config['
|
90
|
+
def forbidden_prefixes
|
91
|
+
cop_config['ForbiddenPrefixes']
|
92
92
|
end
|
93
93
|
|
94
94
|
def predicate_prefixes
|
95
95
|
cop_config['NamePrefix']
|
96
96
|
end
|
97
97
|
|
98
|
-
def
|
99
|
-
cop_config['
|
98
|
+
def allowed_methods
|
99
|
+
cop_config['AllowedMethods']
|
100
100
|
end
|
101
101
|
|
102
102
|
def method_definition_macros(macro_name)
|
data/lib/rubocop/cop/offense.rb
CHANGED
@@ -65,6 +65,17 @@ module RuboCop
|
|
65
65
|
freeze
|
66
66
|
end
|
67
67
|
|
68
|
+
# @api public
|
69
|
+
#
|
70
|
+
# @!attribute [r] correctable?
|
71
|
+
#
|
72
|
+
# @return [Boolean]
|
73
|
+
# whether this offense can be automatically corrected via
|
74
|
+
# autocorrect or a todo.
|
75
|
+
def correctable?
|
76
|
+
@status != :unsupported
|
77
|
+
end
|
78
|
+
|
68
79
|
# @api public
|
69
80
|
#
|
70
81
|
# @!attribute [r] corrected?
|
data/lib/rubocop/cop/registry.rb
CHANGED
@@ -122,7 +122,7 @@ module RuboCop
|
|
122
122
|
def unqualified_cop_names
|
123
123
|
@unqualified_cop_names ||=
|
124
124
|
Set.new(@cops_by_cop_name.keys.map { |qn| File.basename(qn) }) <<
|
125
|
-
'
|
125
|
+
'RedundantCopDisableDirective'
|
126
126
|
end
|
127
127
|
|
128
128
|
# @return [Hash{String => Array<Class>}]
|
@@ -146,10 +146,15 @@ module RuboCop
|
|
146
146
|
|
147
147
|
def enabled?(cop, config, only_safe)
|
148
148
|
cfg = config.for_cop(cop)
|
149
|
+
|
150
|
+
# cfg['Enabled'] might be a string `pending`, which is considered
|
151
|
+
# disabled
|
152
|
+
cop_enabled = cfg.fetch('Enabled') == true
|
153
|
+
|
149
154
|
if only_safe
|
150
|
-
|
155
|
+
cop_enabled && cfg.fetch('Safe', true)
|
151
156
|
else
|
152
|
-
|
157
|
+
cop_enabled
|
153
158
|
end
|
154
159
|
end
|
155
160
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
# This cop checks for uses of "
|
6
|
+
# This cop checks for uses of "\*" as a substitute for *join*.
|
7
7
|
#
|
8
8
|
# Not all cases can reliably checked, due to Ruby's dynamic
|
9
9
|
# types, so we consider only cases when the first argument is an
|
@@ -21,6 +21,10 @@ module RuboCop
|
|
21
21
|
|
22
22
|
def on_send(node)
|
23
23
|
return unless node.command?(:attr) && node.arguments?
|
24
|
+
# check only for method definitions in class/module body
|
25
|
+
return if node.parent &&
|
26
|
+
!node.parent.class_type? &&
|
27
|
+
!class_eval?(node.parent)
|
24
28
|
|
25
29
|
add_offense(node, location: :selector)
|
26
30
|
end
|
@@ -31,7 +35,7 @@ module RuboCop
|
|
31
35
|
node_expr = node.source_range
|
32
36
|
attr_expr = attr_name.source_range
|
33
37
|
|
34
|
-
if setter
|
38
|
+
if setter&.boolean_type?
|
35
39
|
remove = range_between(attr_expr.end_pos, node_expr.end_pos)
|
36
40
|
end
|
37
41
|
|
@@ -50,12 +54,16 @@ module RuboCop
|
|
50
54
|
def replacement_method(node)
|
51
55
|
setter = node.last_argument
|
52
56
|
|
53
|
-
if setter
|
57
|
+
if setter&.boolean_type?
|
54
58
|
setter.true_type? ? 'attr_accessor' : 'attr_reader'
|
55
59
|
else
|
56
60
|
'attr_reader'
|
57
61
|
end
|
58
62
|
end
|
63
|
+
|
64
|
+
def_node_matcher :class_eval?, <<~PATTERN
|
65
|
+
(block (send _ {:class_eval :module_eval}) ...)
|
66
|
+
PATTERN
|
59
67
|
end
|
60
68
|
end
|
61
69
|
end
|
@@ -147,16 +147,16 @@ module RuboCop
|
|
147
147
|
end
|
148
148
|
|
149
149
|
def remove_braces_with_whitespace(corrector, node, space)
|
150
|
+
loc = node.loc
|
151
|
+
|
150
152
|
if node.multiline?
|
151
153
|
remove_braces_with_range(corrector,
|
152
|
-
left_whole_line_range(
|
153
|
-
right_whole_line_range(
|
154
|
+
left_whole_line_range(loc.begin),
|
155
|
+
right_whole_line_range(loc.end))
|
154
156
|
else
|
155
|
-
right_brace_and_space = right_brace_and_space(node.loc.end, space)
|
156
|
-
left_brace_and_space = left_brace_and_space(node.loc.begin, space)
|
157
157
|
remove_braces_with_range(corrector,
|
158
|
-
left_brace_and_space,
|
159
|
-
right_brace_and_space)
|
158
|
+
left_brace_and_space(loc.begin, space),
|
159
|
+
right_brace_and_space(loc.end, space))
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
@@ -49,10 +49,10 @@ module RuboCop
|
|
49
49
|
next unless annotation?(comment) &&
|
50
50
|
!correct_annotation?(first_word, colon, space, note)
|
51
51
|
|
52
|
-
length = concat_length(first_word, colon, space)
|
53
52
|
add_offense(
|
54
53
|
comment,
|
55
|
-
location: annotation_range(comment, margin,
|
54
|
+
location: annotation_range(comment, margin,
|
55
|
+
first_word, colon, space),
|
56
56
|
message: format(note ? MSG : MISSING_NOTE, keyword: first_word)
|
57
57
|
)
|
58
58
|
end
|
@@ -62,8 +62,7 @@ module RuboCop
|
|
62
62
|
margin, first_word, colon, space, note = split_comment(comment)
|
63
63
|
return if note.nil?
|
64
64
|
|
65
|
-
|
66
|
-
range = annotation_range(comment, margin, length)
|
65
|
+
range = annotation_range(comment, margin, first_word, colon, space)
|
67
66
|
|
68
67
|
->(corrector) { corrector.replace(range, "#{first_word.upcase}: ") }
|
69
68
|
end
|
@@ -79,8 +78,9 @@ module RuboCop
|
|
79
78
|
!comment_line?(comment.loc.expression.source_line)
|
80
79
|
end
|
81
80
|
|
82
|
-
def annotation_range(comment, margin,
|
81
|
+
def annotation_range(comment, margin, first_word, colon, space)
|
83
82
|
start = comment.loc.expression.begin_pos + margin.length
|
83
|
+
length = concat_length(first_word, colon, space)
|
84
84
|
range_between(start, start + length)
|
85
85
|
end
|
86
86
|
|
@@ -212,7 +212,7 @@ module RuboCop
|
|
212
212
|
%i[casgn cvasgn gvasgn ivasgn lvasgn].freeze
|
213
213
|
ASSIGNMENT_TYPES = VARIABLE_ASSIGNMENT_TYPES +
|
214
214
|
%i[and_asgn or_asgn op_asgn masgn].freeze
|
215
|
-
LINE_LENGTH = '
|
215
|
+
LINE_LENGTH = 'Layout/LineLength'
|
216
216
|
INDENTATION_WIDTH = 'Layout/IndentationWidth'
|
217
217
|
ENABLED = 'Enabled'
|
218
218
|
MAX = 'Max'
|
@@ -376,7 +376,7 @@ module RuboCop
|
|
376
376
|
assignment_types_match?(*statements)
|
377
377
|
end
|
378
378
|
|
379
|
-
# If `
|
379
|
+
# If `Layout/LineLength` is enabled, we do not want to introduce an
|
380
380
|
# offense by auto-correcting this cop. Find the max configured line
|
381
381
|
# length. Find the longest line of condition. Remove the assignment
|
382
382
|
# from lines that contain the offending assignment because after
|