rubocop 0.72.0 → 0.76.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 -1
- data/bin/console +1 -0
- data/config/default.yml +93 -56
- data/lib/rubocop.rb +21 -10
- data/lib/rubocop/ast/builder.rb +1 -0
- data/lib/rubocop/ast/node.rb +12 -14
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +4 -4
- data/lib/rubocop/ast/node/return_node.rb +24 -0
- data/lib/rubocop/ast/traversal.rb +3 -3
- data/lib/rubocop/cli.rb +7 -4
- data/lib/rubocop/comment_config.rb +5 -4
- data/lib/rubocop/config.rb +28 -537
- data/lib/rubocop/config_loader.rb +21 -3
- data/lib/rubocop/config_loader_resolver.rb +4 -3
- data/lib/rubocop/config_obsoletion.rb +222 -0
- data/lib/rubocop/config_validator.rb +248 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +71 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/commissioner.rb +18 -16
- data/lib/rubocop/cop/cop.rb +49 -14
- data/lib/rubocop/cop/corrector.rb +10 -10
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +43 -17
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +4 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +9 -4
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/align_hash.rb +6 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +1 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- 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 +14 -59
- data/lib/rubocop/cop/layout/indent_assignment.rb +10 -1
- data/lib/rubocop/cop/layout/indent_first_argument.rb +10 -8
- data/lib/rubocop/cop/layout/indent_first_hash_element.rb +1 -1
- data/lib/rubocop/cop/layout/indent_heredoc.rb +4 -3
- data/lib/rubocop/cop/layout/indentation_width.rb +20 -6
- data/lib/rubocop/cop/layout/leading_comment_space.rb +28 -0
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +24 -2
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +20 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +5 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +42 -23
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -7
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +8 -5
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +21 -2
- data/lib/rubocop/cop/layout/space_inside_parens.rb +6 -6
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +24 -40
- data/lib/rubocop/cop/layout/tab.rb +10 -22
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +18 -2
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +17 -4
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +4 -6
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -3
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +4 -4
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +62 -5
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -37
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -8
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +3 -3
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/{unneeded_cop_disable_directive.rb → redundant_cop_disable_directive.rb} +24 -24
- data/lib/rubocop/cop/lint/{unneeded_cop_enable_directive.rb → redundant_cop_enable_directive.rb} +6 -8
- data/lib/rubocop/cop/lint/{unneeded_require_statement.rb → redundant_require_statement.rb} +2 -2
- data/lib/rubocop/cop/lint/{unneeded_splat_expansion.rb → redundant_splat_expansion.rb} +12 -7
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +10 -11
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +6 -6
- data/lib/rubocop/cop/lint/unified_integer.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.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/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +2 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -6
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/lint/void.rb +7 -26
- data/lib/rubocop/cop/message_annotator.rb +16 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +1 -1
- data/lib/rubocop/cop/metrics/line_length.rb +7 -4
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +23 -6
- data/lib/rubocop/cop/migration/department_name.rb +44 -0
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -4
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +3 -2
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -3
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +87 -0
- data/lib/rubocop/cop/mixin/safe_mode.rb +2 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +5 -2
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -5
- data/lib/rubocop/cop/mixin/trailing_comma.rb +8 -6
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +12 -5
- data/lib/rubocop/cop/naming/method_name.rb +12 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_name.rb +1 -0
- data/lib/rubocop/cop/offense.rb +18 -7
- data/lib/rubocop/cop/registry.rb +22 -1
- data/lib/rubocop/cop/security/eval.rb +1 -1
- data/lib/rubocop/cop/security/json_load.rb +1 -1
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -1
- data/lib/rubocop/cop/security/yaml_load.rb +1 -1
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -0
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +2 -2
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +35 -16
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/comment_annotation.rb +5 -5
- data/lib/rubocop/cop/style/commented_keyword.rb +16 -30
- data/lib/rubocop/cop/style/conditional_assignment.rb +6 -8
- data/lib/rubocop/cop/style/constant_visibility.rb +14 -3
- data/lib/rubocop/cop/style/copyright.rb +11 -7
- data/lib/rubocop/cop/style/date_time.rb +3 -3
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/documentation_method.rb +45 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +1 -1
- 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 +2 -2
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -4
- data/lib/rubocop/cop/style/float_division.rb +4 -4
- data/lib/rubocop/cop/style/format_string.rb +17 -14
- data/lib/rubocop/cop/style/format_string_token.rb +19 -68
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +28 -33
- data/lib/rubocop/cop/style/guard_clause.rb +39 -10
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -4
- data/lib/rubocop/cop/style/if_unless_modifier.rb +58 -15
- data/lib/rubocop/cop/style/infinite_loop.rb +5 -4
- data/lib/rubocop/cop/style/inverse_methods.rb +21 -15
- data/lib/rubocop/cop/style/lambda.rb +0 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +14 -10
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +25 -25
- data/lib/rubocop/cop/style/method_def_parentheses.rb +17 -9
- data/lib/rubocop/cop/style/min_max.rb +1 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +12 -2
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +3 -3
- data/lib/rubocop/cop/style/nested_modifier.rb +22 -4
- data/lib/rubocop/cop/style/non_nil_check.rb +21 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +3 -3
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +8 -3
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +15 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +6 -6
- 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/redundant_conditional.rb +2 -2
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/{unneeded_interpolation.rb → redundant_interpolation.rb} +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +15 -6
- data/lib/rubocop/cop/style/{unneeded_percent_q.rb → redundant_percent_q.rb} +1 -1
- data/lib/rubocop/cop/style/redundant_return.rb +37 -21
- data/lib/rubocop/cop/style/redundant_self.rb +18 -1
- data/lib/rubocop/cop/style/{unneeded_sort.rb → redundant_sort.rb} +4 -4
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +24 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +24 -4
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +13 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +8 -1
- data/lib/rubocop/cop/style/special_global_vars.rb +5 -7
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -2
- data/lib/rubocop/cop/style/strip.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +20 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +4 -6
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +1 -1
- data/lib/rubocop/cop/style/variable_interpolation.rb +6 -16
- data/lib/rubocop/cop/style/zero_length_predicate.rb +5 -5
- data/lib/rubocop/cop/team.rb +15 -14
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/format_string.rb +120 -0
- data/lib/rubocop/cop/variable_force.rb +7 -5
- data/lib/rubocop/cop/variable_force/variable.rb +15 -2
- data/lib/rubocop/core_ext/string.rb +0 -24
- data/lib/rubocop/error.rb +23 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +8 -3
- data/lib/rubocop/formatter/emacs_style_formatter.rb +22 -9
- data/lib/rubocop/formatter/file_list_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +16 -15
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +16 -4
- data/lib/rubocop/formatter/tap_formatter.rb +17 -4
- data/lib/rubocop/magic_comment.rb +4 -0
- data/lib/rubocop/node_pattern.rb +5 -3
- data/lib/rubocop/options.rb +33 -21
- data/lib/rubocop/path_util.rb +1 -1
- data/lib/rubocop/processed_source.rb +4 -0
- data/lib/rubocop/result_cache.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -1
- data/lib/rubocop/rspec/shared_contexts.rb +12 -0
- data/lib/rubocop/runner.rb +42 -31
- data/lib/rubocop/target_finder.rb +12 -4
- data/lib/rubocop/version.rb +1 -1
- metadata +21 -12
- data/lib/rubocop/cop/mixin/ignored_method_patterns.rb +0 -19
@@ -20,7 +20,7 @@ module RuboCop
|
|
20
20
|
class UnifiedInteger < Cop
|
21
21
|
MSG = 'Use `Integer` instead of `%<klass>s`.'
|
22
22
|
|
23
|
-
def_node_matcher :fixnum_or_bignum_const,
|
23
|
+
def_node_matcher :fixnum_or_bignum_const, <<~PATTERN
|
24
24
|
(:const {nil? (:cbase)} ${:Fixnum :Bignum})
|
25
25
|
PATTERN
|
26
26
|
|
@@ -6,9 +6,7 @@ module RuboCop
|
|
6
6
|
# This cop checks for unused block arguments.
|
7
7
|
#
|
8
8
|
# @example
|
9
|
-
#
|
10
9
|
# # bad
|
11
|
-
#
|
12
10
|
# do_something do |used, unused|
|
13
11
|
# puts used
|
14
12
|
# end
|
@@ -21,10 +19,7 @@ module RuboCop
|
|
21
19
|
# puts :baz
|
22
20
|
# end
|
23
21
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# #good
|
27
|
-
#
|
22
|
+
# # good
|
28
23
|
# do_something do |used, _unused|
|
29
24
|
# puts used
|
30
25
|
# end
|
@@ -36,6 +31,27 @@ module RuboCop
|
|
36
31
|
# define_method(:foo) do |_bar|
|
37
32
|
# puts :baz
|
38
33
|
# end
|
34
|
+
#
|
35
|
+
# @example IgnoreEmptyBlocks: true (default)
|
36
|
+
# # good
|
37
|
+
# do_something { |unused| }
|
38
|
+
#
|
39
|
+
# @example IgnoreEmptyBlocks: false
|
40
|
+
# # bad
|
41
|
+
# do_something { |unused| }
|
42
|
+
#
|
43
|
+
# @example AllowUnusedKeywordArguments: false (default)
|
44
|
+
# # bad
|
45
|
+
# do_something do |unused: 42|
|
46
|
+
# foo
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# @example AllowUnusedKeywordArguments: true
|
50
|
+
# # good
|
51
|
+
# do_something do |unused: 42|
|
52
|
+
# foo
|
53
|
+
# end
|
54
|
+
#
|
39
55
|
class UnusedBlockArgument < Cop
|
40
56
|
include UnusedArgument
|
41
57
|
|
@@ -6,20 +6,38 @@ module RuboCop
|
|
6
6
|
# This cop checks for unused method arguments.
|
7
7
|
#
|
8
8
|
# @example
|
9
|
-
#
|
10
9
|
# # bad
|
11
|
-
#
|
12
10
|
# def some_method(used, unused, _unused_but_allowed)
|
13
11
|
# puts used
|
14
12
|
# end
|
15
13
|
#
|
16
|
-
# @example
|
17
|
-
#
|
18
14
|
# # good
|
19
|
-
#
|
20
15
|
# def some_method(used, _unused, _unused_but_allowed)
|
21
16
|
# puts used
|
22
17
|
# end
|
18
|
+
#
|
19
|
+
# @example AllowUnusedKeywordArguments: false (default)
|
20
|
+
# # bad
|
21
|
+
# def do_something(used, unused: 42)
|
22
|
+
# used
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# @example AllowUnusedKeywordArguments: true
|
26
|
+
# # good
|
27
|
+
# def do_something(used, unused: 42)
|
28
|
+
# used
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# @example IgnoreEmptyMethods: true (default)
|
32
|
+
# # good
|
33
|
+
# def do_something(unused)
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# @example IgnoreEmptyMethods: false
|
37
|
+
# # bad
|
38
|
+
# def do_something(unused)
|
39
|
+
# end
|
40
|
+
#
|
23
41
|
class UnusedMethodArgument < Cop
|
24
42
|
include UnusedArgument
|
25
43
|
|
@@ -45,7 +45,7 @@ module RuboCop
|
|
45
45
|
'Instead, use %<replacements>s depending on your specific use ' \
|
46
46
|
'case.'
|
47
47
|
|
48
|
-
def_node_matcher :uri_escape_unescape?,
|
48
|
+
def_node_matcher :uri_escape_unescape?, <<~PATTERN
|
49
49
|
(send
|
50
50
|
(const ${nil? cbase} :URI) ${:escape :encode :unescape :decode}
|
51
51
|
...)
|
@@ -18,13 +18,13 @@ module RuboCop
|
|
18
18
|
'be used. Instead, use `%<top_level>sURI::DEFAULT_PARSER.' \
|
19
19
|
'make_regexp%<arg>s`.'
|
20
20
|
|
21
|
-
def_node_matcher :uri_regexp_with_argument?,
|
21
|
+
def_node_matcher :uri_regexp_with_argument?, <<~PATTERN
|
22
22
|
(send
|
23
23
|
(const ${nil? cbase} :URI) :regexp
|
24
24
|
(str $_))
|
25
25
|
PATTERN
|
26
26
|
|
27
|
-
def_node_matcher :uri_regexp_without_argument?,
|
27
|
+
def_node_matcher :uri_regexp_without_argument?, <<~PATTERN
|
28
28
|
(send
|
29
29
|
(const ${nil? cbase} :URI) :regexp)
|
30
30
|
PATTERN
|
@@ -113,19 +113,19 @@ module RuboCop
|
|
113
113
|
|
114
114
|
private
|
115
115
|
|
116
|
-
def_node_matcher :static_method_definition?,
|
116
|
+
def_node_matcher :static_method_definition?, <<~PATTERN
|
117
117
|
{def (send nil? {:attr :attr_reader :attr_writer :attr_accessor} ...)}
|
118
118
|
PATTERN
|
119
119
|
|
120
|
-
def_node_matcher :dynamic_method_definition?,
|
120
|
+
def_node_matcher :dynamic_method_definition?, <<~PATTERN
|
121
121
|
{(send nil? :define_method ...) (block (send nil? :define_method ...) ...)}
|
122
122
|
PATTERN
|
123
123
|
|
124
|
-
def_node_matcher :class_or_instance_eval?,
|
124
|
+
def_node_matcher :class_or_instance_eval?, <<~PATTERN
|
125
125
|
(block (send _ {:class_eval :instance_eval}) ...)
|
126
126
|
PATTERN
|
127
127
|
|
128
|
-
def_node_matcher :class_or_module_or_struct_new_call?,
|
128
|
+
def_node_matcher :class_or_module_or_struct_new_call?, <<~PATTERN
|
129
129
|
(block (send (const nil? {:Class :Module :Struct}) :new ...) ...)
|
130
130
|
PATTERN
|
131
131
|
|
@@ -202,7 +202,7 @@ module RuboCop
|
|
202
202
|
cop_config.fetch('MethodCreatingMethods', []).any? do |m|
|
203
203
|
matcher_name = "#{m}_method?".to_sym
|
204
204
|
unless respond_to?(matcher_name)
|
205
|
-
self.class.def_node_matcher matcher_name,
|
205
|
+
self.class.def_node_matcher matcher_name, <<~PATTERN
|
206
206
|
{def (send nil? :#{m} ...)}
|
207
207
|
PATTERN
|
208
208
|
end
|
@@ -226,7 +226,7 @@ module RuboCop
|
|
226
226
|
cop_config.fetch('ContextCreatingMethods', []).any? do |m|
|
227
227
|
matcher_name = "#{m}_block?".to_sym
|
228
228
|
unless respond_to?(matcher_name)
|
229
|
-
self.class.def_node_matcher matcher_name,
|
229
|
+
self.class.def_node_matcher matcher_name, <<~PATTERN
|
230
230
|
(block (send {nil? const} {:#{m}} ...) ...)
|
231
231
|
PATTERN
|
232
232
|
end
|
@@ -6,55 +6,36 @@ module RuboCop
|
|
6
6
|
# This cop checks for operators, variables, literals, and nonmutating
|
7
7
|
# methods used in void context.
|
8
8
|
#
|
9
|
-
# @example
|
10
|
-
#
|
9
|
+
# @example CheckForMethodsWithNoSideEffects: false (default)
|
11
10
|
# # bad
|
12
|
-
#
|
13
11
|
# def some_method
|
14
12
|
# some_num * 10
|
15
13
|
# do_something
|
16
14
|
# end
|
17
15
|
#
|
18
|
-
# @example
|
19
|
-
#
|
20
|
-
# # bad
|
21
|
-
#
|
22
16
|
# def some_method(some_var)
|
23
17
|
# some_var
|
24
18
|
# do_something
|
25
19
|
# end
|
26
20
|
#
|
27
|
-
# @example
|
28
|
-
#
|
29
|
-
# # bad, when CheckForMethodsWithNoSideEffects is set true
|
30
|
-
#
|
21
|
+
# @example CheckForMethodsWithNoSideEffects: true
|
22
|
+
# # bad
|
31
23
|
# def some_method(some_array)
|
32
24
|
# some_array.sort
|
33
25
|
# do_something(some_array)
|
34
26
|
# end
|
35
27
|
#
|
36
|
-
# @example
|
37
|
-
#
|
38
28
|
# # good
|
39
|
-
#
|
40
29
|
# def some_method
|
41
30
|
# do_something
|
42
31
|
# some_num * 10
|
43
32
|
# end
|
44
33
|
#
|
45
|
-
# @example
|
46
|
-
#
|
47
|
-
# # good
|
48
|
-
#
|
49
34
|
# def some_method(some_var)
|
50
35
|
# do_something
|
51
36
|
# some_var
|
52
37
|
# end
|
53
38
|
#
|
54
|
-
# @example
|
55
|
-
#
|
56
|
-
# # good, when CheckForMethodsWithNoSideEffects is set true
|
57
|
-
#
|
58
39
|
# def some_method(some_array)
|
59
40
|
# some_array.sort!
|
60
41
|
# do_something(some_array)
|
@@ -74,10 +55,10 @@ module RuboCop
|
|
74
55
|
VOID_CONTEXT_TYPES = %i[def for block].freeze
|
75
56
|
NONMUTATING_METHODS = %i[capitalize chomp chop collect compact
|
76
57
|
delete_prefix delete_suffix downcase
|
77
|
-
encode flatten gsub lstrip map next
|
78
|
-
reverse rotate rstrip scrub select
|
79
|
-
slice sort sort_by squeeze strip sub
|
80
|
-
swapcase tr tr_s transform_values
|
58
|
+
encode flatten gsub lstrip map merge next
|
59
|
+
reject reverse rotate rstrip scrub select
|
60
|
+
shuffle slice sort sort_by squeeze strip sub
|
61
|
+
succ swapcase tr tr_s transform_values
|
81
62
|
unicode_normalize uniq upcase].freeze
|
82
63
|
|
83
64
|
def on_block(node)
|
@@ -9,11 +9,11 @@ module RuboCop
|
|
9
9
|
#
|
10
10
|
# @example
|
11
11
|
# RuboCop::Cop::MessageAnnotator.new(
|
12
|
-
# config, cop_config, @options
|
13
|
-
# ).annotate('message'
|
12
|
+
# config, cop_name, cop_config, @options
|
13
|
+
# ).annotate('message')
|
14
14
|
# #=> 'Cop/CopName: message (http://example.org/styleguide)'
|
15
15
|
class MessageAnnotator
|
16
|
-
attr_reader :options, :config, :cop_config
|
16
|
+
attr_reader :options, :config, :cop_name, :cop_config
|
17
17
|
|
18
18
|
@style_guide_urls = {}
|
19
19
|
|
@@ -29,6 +29,7 @@ module RuboCop
|
|
29
29
|
# :ExtraDetails [Boolean] Include cop details
|
30
30
|
# :DisplayCopNames [Boolean] Include cop name
|
31
31
|
#
|
32
|
+
# @param [String] cop_name for specific cop name
|
32
33
|
# @param [Hash] cop_config configs for specific cop, from config#for_cop
|
33
34
|
# @option cop_config [String] :StyleGuide Extension of base styleguide URL
|
34
35
|
# @option cop_config [String] :Reference Full reference URL
|
@@ -43,8 +44,9 @@ module RuboCop
|
|
43
44
|
# Include debug output
|
44
45
|
# @option options [Boolean] :display_cop_names
|
45
46
|
# Include cop name
|
46
|
-
def initialize(config, cop_config, options)
|
47
|
+
def initialize(config, cop_name, cop_config, options)
|
47
48
|
@config = config
|
49
|
+
@cop_name = cop_name
|
48
50
|
@cop_config = cop_config || {}
|
49
51
|
@options = options
|
50
52
|
end
|
@@ -53,8 +55,8 @@ module RuboCop
|
|
53
55
|
# based on params passed into initializer
|
54
56
|
#
|
55
57
|
# @return [String] annotated message
|
56
|
-
def annotate(message
|
57
|
-
message = "#{
|
58
|
+
def annotate(message)
|
59
|
+
message = "#{cop_name}: #{message}" if display_cop_names?
|
58
60
|
message += " #{details}" if extra_details? && details
|
59
61
|
if display_style_guide?
|
60
62
|
links = urls.join(', ')
|
@@ -74,7 +76,7 @@ module RuboCop
|
|
74
76
|
return nil if url.nil? || url.empty?
|
75
77
|
|
76
78
|
self.class.style_guide_urls[url] ||= begin
|
77
|
-
base_url =
|
79
|
+
base_url = style_guide_base_url
|
78
80
|
if base_url.nil? || base_url.empty?
|
79
81
|
url
|
80
82
|
else
|
@@ -83,6 +85,13 @@ module RuboCop
|
|
83
85
|
end
|
84
86
|
end
|
85
87
|
|
88
|
+
def style_guide_base_url
|
89
|
+
department_name = cop_name.split('/').first
|
90
|
+
|
91
|
+
config.for_department(department_name)['StyleGuideBaseURL'] ||
|
92
|
+
config.for_all_cops['StyleGuideBaseURL']
|
93
|
+
end
|
94
|
+
|
86
95
|
def display_style_guide?
|
87
96
|
(options[:display_style_guide] ||
|
88
97
|
config.for_all_cops['DisplayStyleGuide']) &&
|
@@ -10,6 +10,7 @@ module RuboCop
|
|
10
10
|
# The maximum length is configurable.
|
11
11
|
# The tab size is configured in the `IndentationWidth`
|
12
12
|
# of the `Layout/Tab` cop.
|
13
|
+
# It also ignores a shebang line by default.
|
13
14
|
#
|
14
15
|
# This cop has some autocorrection capabilities.
|
15
16
|
# It can programmatically shorten certain long lines by
|
@@ -127,10 +128,7 @@ module RuboCop
|
|
127
128
|
return check_uri_line(line, line_index) if allow_uri?
|
128
129
|
|
129
130
|
register_offense(
|
130
|
-
|
131
|
-
processed_source.buffer, line_index,
|
132
|
-
highlight_start(line)...line_length(line)
|
133
|
-
),
|
131
|
+
excess_range(nil, line, line_index),
|
134
132
|
line,
|
135
133
|
line_index
|
136
134
|
)
|
@@ -138,9 +136,14 @@ module RuboCop
|
|
138
136
|
|
139
137
|
def ignored_line?(line, line_index)
|
140
138
|
matches_ignored_pattern?(line) ||
|
139
|
+
shebang?(line, line_index) ||
|
141
140
|
heredocs && line_in_permitted_heredoc?(line_index.succ)
|
142
141
|
end
|
143
142
|
|
143
|
+
def shebang?(line, line_index)
|
144
|
+
line_index.zero? && line.start_with?('#!')
|
145
|
+
end
|
146
|
+
|
144
147
|
def register_offense(loc, line, line_index)
|
145
148
|
message = format(MSG, length: line_length(line), max: max)
|
146
149
|
|
@@ -36,15 +36,17 @@ module RuboCop
|
|
36
36
|
@node.each_node do |child|
|
37
37
|
if child.assignment?
|
38
38
|
@assignment += 1
|
39
|
-
elsif
|
39
|
+
elsif branch?(child)
|
40
40
|
evaluate_branch_nodes(child)
|
41
|
-
elsif
|
42
|
-
|
43
|
-
@condition += 1
|
41
|
+
elsif condition?(child)
|
42
|
+
evaluate_condition_node(child)
|
44
43
|
end
|
45
44
|
end
|
46
45
|
|
47
|
-
|
46
|
+
[
|
47
|
+
Math.sqrt(@assignment**2 + @branch**2 + @condition**2).round(2),
|
48
|
+
"<#{@assignment}, #{@branch}, #{@condition}>"
|
49
|
+
]
|
48
50
|
end
|
49
51
|
|
50
52
|
def evaluate_branch_nodes(node)
|
@@ -55,11 +57,26 @@ module RuboCop
|
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
58
|
-
def
|
60
|
+
def evaluate_condition_node(node)
|
61
|
+
@condition += 1 if else_branch?(node)
|
62
|
+
@condition += 1
|
63
|
+
end
|
64
|
+
|
65
|
+
def else_branch?(node)
|
59
66
|
%i[case if].include?(node.type) &&
|
60
67
|
node.else? &&
|
61
68
|
node.loc.else.is?('else')
|
62
69
|
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def branch?(node)
|
74
|
+
BRANCH_NODES.include?(node.type)
|
75
|
+
end
|
76
|
+
|
77
|
+
def condition?(node)
|
78
|
+
CONDITION_NODES.include?(node.type)
|
79
|
+
end
|
63
80
|
end
|
64
81
|
end
|
65
82
|
end
|