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
@@ -98,7 +98,7 @@ module RuboCop
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def fix_escaped_content(word_node, escape, delimiters)
|
101
|
-
content = word_node.children.first.to_s
|
101
|
+
content = +word_node.children.first.to_s
|
102
102
|
content = escape_string(content) if escape
|
103
103
|
substitute_escaped_delimiters(content, delimiters)
|
104
104
|
content
|
@@ -40,7 +40,7 @@ module RuboCop
|
|
40
40
|
MSG = '`%<assignment>s` method calls already given on line '\
|
41
41
|
'%<line_of_first_occurrence>d of the gemspec.'
|
42
42
|
|
43
|
-
def_node_search :gem_specification,
|
43
|
+
def_node_search :gem_specification, <<~PATTERN
|
44
44
|
(block
|
45
45
|
(send
|
46
46
|
(const
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
49
49
|
(arg $_)) ...)
|
50
50
|
PATTERN
|
51
51
|
|
52
|
-
def_node_search :assignment_method_declarations,
|
52
|
+
def_node_search :assignment_method_declarations, <<~PATTERN
|
53
53
|
(send
|
54
54
|
(lvar #match_block_variable_name?) #assignment_method? ...)
|
55
55
|
PATTERN
|
@@ -97,7 +97,7 @@ module RuboCop
|
|
97
97
|
node.method_name
|
98
98
|
end
|
99
99
|
|
100
|
-
def_node_search :dependency_declarations,
|
100
|
+
def_node_search :dependency_declarations, <<~PATTERN
|
101
101
|
(send (lvar _) {:add_dependency :add_runtime_dependency :add_development_dependency} ...)
|
102
102
|
PATTERN
|
103
103
|
end
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
41
41
|
'(%<target_ruby_version>s, which may be specified in ' \
|
42
42
|
'.rubocop.yml) should be equal.'
|
43
43
|
|
44
|
-
def_node_search :required_ruby_version,
|
44
|
+
def_node_search :required_ruby_version, <<~PATTERN
|
45
45
|
(send _ :required_ruby_version= ${(str _) (array (str _))})
|
46
46
|
PATTERN
|
47
47
|
|
@@ -10,10 +10,10 @@ module RuboCop
|
|
10
10
|
# Note: RDoc 5.1.0 or lower has the following issue.
|
11
11
|
# https://github.com/rubocop-hq/rubocop/issues/7043
|
12
12
|
#
|
13
|
-
# The following `String#
|
13
|
+
# The following `String#gsub` can be replaced with
|
14
14
|
# squiggly heredoc when RuboCop supports Ruby 2.5 or higher
|
15
15
|
# (RDoc 6.0 or higher).
|
16
|
-
SOURCE_TEMPLATE = <<-RUBY.
|
16
|
+
SOURCE_TEMPLATE = <<-RUBY.gsub(/^ {8}/, '')
|
17
17
|
# frozen_string_literal: true
|
18
18
|
|
19
19
|
# TODO: when finished, run `rake generate_cops_documentation` to update the docs
|
@@ -61,9 +61,9 @@ module RuboCop
|
|
61
61
|
# See https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/node_pattern.rb
|
62
62
|
#
|
63
63
|
# For example
|
64
|
-
MSG = 'Use `#good_method` instead of `#bad_method`.'
|
64
|
+
MSG = 'Use `#good_method` instead of `#bad_method`.'
|
65
65
|
|
66
|
-
def_node_matcher :bad_method?,
|
66
|
+
def_node_matcher :bad_method?, <<~PATTERN
|
67
67
|
(send nil? :bad_method ...)
|
68
68
|
PATTERN
|
69
69
|
|
@@ -12,7 +12,6 @@ module RuboCop
|
|
12
12
|
Description: 'TODO: Write a description of the cop.'
|
13
13
|
Enabled: true
|
14
14
|
VersionAdded: '%<version_added>s'
|
15
|
-
|
16
15
|
YAML
|
17
16
|
|
18
17
|
def initialize(configuration_file_path:, badge:, version_added:)
|
@@ -23,8 +22,13 @@ module RuboCop
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def inject
|
26
|
-
|
27
|
-
|
25
|
+
target_line = find_target_line
|
26
|
+
if target_line
|
27
|
+
configuration_entries.insert(target_line,
|
28
|
+
new_configuration_entry + "\n")
|
29
|
+
else
|
30
|
+
configuration_entries.push("\n" + new_configuration_entry)
|
31
|
+
end
|
28
32
|
|
29
33
|
File.write(configuration_file_path, configuration_entries.join)
|
30
34
|
|
@@ -49,7 +53,8 @@ module RuboCop
|
|
49
53
|
|
50
54
|
return index if badge.to_s < line
|
51
55
|
end
|
52
|
-
|
56
|
+
|
57
|
+
nil
|
53
58
|
end
|
54
59
|
|
55
60
|
def cop_name_line?(yaml)
|
@@ -19,11 +19,11 @@ module RuboCop
|
|
19
19
|
MSG = 'Use the methods provided with the node extensions instead ' \
|
20
20
|
'of manually destructuring nodes.'
|
21
21
|
|
22
|
-
def_node_matcher :node_variable?,
|
22
|
+
def_node_matcher :node_variable?, <<~PATTERN
|
23
23
|
{(lvar [#node_suffix? _]) (send nil? [#node_suffix? _])}
|
24
24
|
PATTERN
|
25
25
|
|
26
|
-
def_node_matcher :node_destructuring?,
|
26
|
+
def_node_matcher :node_destructuring?, <<~PATTERN
|
27
27
|
{(masgn (mlhs ...) {(send #node_variable? :children) (array (splat #node_variable?))})}
|
28
28
|
PATTERN
|
29
29
|
|
@@ -33,11 +33,11 @@ module RuboCop
|
|
33
33
|
|
34
34
|
private
|
35
35
|
|
36
|
-
def_node_matcher :node_type_check,
|
36
|
+
def_node_matcher :node_type_check, <<~PATTERN
|
37
37
|
(send nil? :add_offense $_node $hash)
|
38
38
|
PATTERN
|
39
39
|
|
40
|
-
def_node_matcher :offending_location_argument,
|
40
|
+
def_node_matcher :offending_location_argument, <<~PATTERN
|
41
41
|
(pair (sym :location) $(send (send $_node :loc) $_keyword))
|
42
42
|
PATTERN
|
43
43
|
|
@@ -21,7 +21,7 @@ module RuboCop
|
|
21
21
|
|
22
22
|
MSG = 'Redundant location argument to `#add_offense`.'
|
23
23
|
|
24
|
-
def_node_matcher :redundant_location_argument,
|
24
|
+
def_node_matcher :redundant_location_argument, <<~PATTERN
|
25
25
|
(send nil? :add_offense _
|
26
26
|
(hash <$(pair (sym :location) (sym :expression)) ...>)
|
27
27
|
)
|
@@ -24,11 +24,11 @@ module RuboCop
|
|
24
24
|
|
25
25
|
MSG = 'Redundant message argument to `#add_offense`.'
|
26
26
|
|
27
|
-
def_node_matcher :node_type_check,
|
27
|
+
def_node_matcher :node_type_check, <<~PATTERN
|
28
28
|
(send nil? :add_offense $_node $hash)
|
29
29
|
PATTERN
|
30
30
|
|
31
|
-
def_node_matcher :redundant_message_argument,
|
31
|
+
def_node_matcher :redundant_message_argument, <<~PATTERN
|
32
32
|
(pair
|
33
33
|
(sym :message)
|
34
34
|
${(const nil? :MSG) (send nil? :message) (send nil? :message _)})
|
@@ -16,11 +16,11 @@ module RuboCop
|
|
16
16
|
class UselessMessageAssertion < Cop
|
17
17
|
MSG = 'Do not specify cop behavior using `described_class::MSG`.'
|
18
18
|
|
19
|
-
def_node_search :described_class_msg,
|
19
|
+
def_node_search :described_class_msg, <<~PATTERN
|
20
20
|
(const (send nil? :described_class) :MSG)
|
21
21
|
PATTERN
|
22
22
|
|
23
|
-
def_node_matcher :rspec_expectation_on_msg?,
|
23
|
+
def_node_matcher :rspec_expectation_on_msg?, <<~PATTERN
|
24
24
|
(send (send nil? :expect #contains_described_class_msg?) :to ...)
|
25
25
|
PATTERN
|
26
26
|
|
@@ -220,14 +220,18 @@ module RuboCop
|
|
220
220
|
|
221
221
|
private
|
222
222
|
|
223
|
+
def reset!
|
224
|
+
self.offences_by = {}
|
225
|
+
self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
|
226
|
+
end
|
227
|
+
|
223
228
|
def double_splat?(node)
|
224
229
|
node.children.last.is_a?(Symbol)
|
225
230
|
end
|
226
231
|
|
227
232
|
def check_pairs(node)
|
228
233
|
first_pair = node.pairs.first
|
229
|
-
|
230
|
-
self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
|
234
|
+
reset!
|
231
235
|
|
232
236
|
alignment_for(first_pair).each do |alignment|
|
233
237
|
delta = alignment.deltas_for_first_pair(first_pair, node)
|
@@ -44,8 +44,8 @@ module RuboCop
|
|
44
44
|
#
|
45
45
|
# foo.bar
|
46
46
|
# .each do
|
47
|
-
#
|
48
|
-
#
|
47
|
+
# baz
|
48
|
+
# end
|
49
49
|
#
|
50
50
|
# @example EnforcedStyleAlignWith: start_of_line
|
51
51
|
# # bad
|
@@ -67,7 +67,7 @@ module RuboCop
|
|
67
67
|
|
68
68
|
MSG = '%<current>s is not aligned with %<prefer>s%<alt_prefer>s.'
|
69
69
|
|
70
|
-
def_node_matcher :block_end_align_target?,
|
70
|
+
def_node_matcher :block_end_align_target?, <<~PATTERN
|
71
71
|
{assignment?
|
72
72
|
splat
|
73
73
|
and
|
@@ -142,7 +142,7 @@ module RuboCop
|
|
142
142
|
MSG = '`%<category>s` is supposed to appear before ' \
|
143
143
|
'`%<previous>s`.'
|
144
144
|
|
145
|
-
def_node_matcher :visibility_block?,
|
145
|
+
def_node_matcher :visibility_block?, <<~PATTERN
|
146
146
|
(send nil? { :private :protected :public })
|
147
147
|
PATTERN
|
148
148
|
|
@@ -55,23 +55,20 @@ module RuboCop
|
|
55
55
|
# of correcting, saving the file, parsing and inspecting again, and
|
56
56
|
# then correcting one more line, and so on.
|
57
57
|
def autocorrect_preceding_comments(comment)
|
58
|
-
corrections = []
|
59
|
-
line_no = comment.loc.line
|
60
|
-
column = comment.loc.column
|
61
58
|
comments = processed_source.comments
|
62
|
-
|
63
|
-
previous_comment = comments[ix]
|
64
|
-
break unless should_correct?(previous_comment, column, line_no - 1)
|
59
|
+
index = comments.index(comment)
|
65
60
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
61
|
+
comments[0..index]
|
62
|
+
.reverse_each
|
63
|
+
.each_cons(2)
|
64
|
+
.take_while { |below, above| should_correct?(above, below) }
|
65
|
+
.map { |_, above| autocorrect_one(above) }
|
70
66
|
end
|
71
67
|
|
72
|
-
def should_correct?(
|
73
|
-
loc =
|
74
|
-
|
68
|
+
def should_correct?(preceding_comment, reference_comment)
|
69
|
+
loc = preceding_comment.loc
|
70
|
+
ref_loc = reference_comment.loc
|
71
|
+
loc.line == ref_loc.line - 1 && loc.column == ref_loc.column
|
75
72
|
end
|
76
73
|
|
77
74
|
def autocorrect_one(comment)
|
@@ -103,19 +103,12 @@ module RuboCop
|
|
103
103
|
private
|
104
104
|
|
105
105
|
def concat_consecutive_comments(comments)
|
106
|
-
|
106
|
+
consecutive_comments =
|
107
|
+
comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
|
107
108
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
last_concatenated_comment[0] << comment_text(comment)
|
113
|
-
last_concatenated_comment[1] << comment
|
114
|
-
else
|
115
|
-
concatenated_comments << [comment_text(comment).dup, [comment]]
|
116
|
-
end
|
117
|
-
|
118
|
-
prev_line = comment.loc.line
|
109
|
+
consecutive_comments.map do |chunk|
|
110
|
+
joined_text = chunk.map { |c| comment_text(c) }.join
|
111
|
+
[joined_text, chunk]
|
119
112
|
end
|
120
113
|
end
|
121
114
|
|
@@ -141,11 +134,9 @@ module RuboCop
|
|
141
134
|
cop_config['AllowMarginComment']
|
142
135
|
end
|
143
136
|
|
144
|
-
def current_token(
|
137
|
+
def current_token(comment)
|
145
138
|
processed_source.find_token do |token|
|
146
|
-
token.pos
|
147
|
-
token.pos.last_column == node.loc.last_column &&
|
148
|
-
token.line == node.loc.line
|
139
|
+
token.pos == comment.loc.expression
|
149
140
|
end
|
150
141
|
end
|
151
142
|
|
@@ -45,7 +45,7 @@ module RuboCop
|
|
45
45
|
return if correct_style?(node)
|
46
46
|
|
47
47
|
if node.modifier_form? && last_argument_is_heredoc?(node)
|
48
|
-
heredoc_node =
|
48
|
+
heredoc_node = last_heredoc_argument(node)
|
49
49
|
|
50
50
|
return if next_line_empty?(heredoc_line(node, heredoc_node))
|
51
51
|
|
@@ -109,16 +109,27 @@ module RuboCop
|
|
109
109
|
|
110
110
|
def last_argument_is_heredoc?(node)
|
111
111
|
last_children = node.if_branch
|
112
|
-
|
113
112
|
return false unless last_children&.send_type?
|
114
113
|
|
115
|
-
|
116
|
-
|
117
|
-
last_argument.respond_to?(:heredoc?) && last_argument.heredoc?
|
114
|
+
heredoc?(last_heredoc_argument(node))
|
118
115
|
end
|
119
116
|
|
120
|
-
def
|
121
|
-
node.if_branch
|
117
|
+
def last_heredoc_argument(node)
|
118
|
+
n = if node.respond_to?(:if_branch)
|
119
|
+
node.if_branch.children.last
|
120
|
+
else
|
121
|
+
node
|
122
|
+
end
|
123
|
+
|
124
|
+
return n if heredoc?(n)
|
125
|
+
return unless n.respond_to?(:arguments)
|
126
|
+
|
127
|
+
n.arguments.each do |argument|
|
128
|
+
node = last_heredoc_argument(argument)
|
129
|
+
return node if node
|
130
|
+
end
|
131
|
+
|
132
|
+
return last_heredoc_argument(n.receiver) if n.respond_to?(:receiver)
|
122
133
|
end
|
123
134
|
|
124
135
|
def heredoc_line(node, heredoc_node)
|
@@ -129,6 +140,10 @@ module RuboCop
|
|
129
140
|
node.last_line + num_of_heredoc_lines + END_OF_HEREDOC_LINE
|
130
141
|
end
|
131
142
|
|
143
|
+
def heredoc?(node)
|
144
|
+
node.respond_to?(:heredoc?) && node.heredoc?
|
145
|
+
end
|
146
|
+
|
132
147
|
def offense_location(node)
|
133
148
|
if node.loc.respond_to?(:end) && node.loc.end
|
134
149
|
:end
|
@@ -55,8 +55,8 @@ module RuboCop
|
|
55
55
|
source
|
56
56
|
.comments
|
57
57
|
.take_while { |comment| comment.loc.line < source.ast.loc.line }
|
58
|
-
.
|
59
|
-
.
|
58
|
+
.reverse
|
59
|
+
.find { |comment| MagicComment.parse(comment.text).any? }
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
36
36
|
#
|
37
37
|
# end
|
38
38
|
#
|
39
|
-
# @example
|
39
|
+
# @example EnforcedStyle: beginning_only
|
40
40
|
# # good
|
41
41
|
#
|
42
42
|
# class Foo
|
@@ -46,7 +46,7 @@ module RuboCop
|
|
46
46
|
# end
|
47
47
|
# end
|
48
48
|
#
|
49
|
-
# @example
|
49
|
+
# @example EnforcedStyle: ending_only
|
50
50
|
# # good
|
51
51
|
#
|
52
52
|
# class Foo
|
@@ -45,9 +45,7 @@ module RuboCop
|
|
45
45
|
MSG_MISSING = 'Carriage return character missing.'
|
46
46
|
|
47
47
|
def investigate(processed_source)
|
48
|
-
|
49
|
-
last_line =
|
50
|
-
last_token ? last_token.line : processed_source.lines.length
|
48
|
+
last_line = last_line(processed_source)
|
51
49
|
|
52
50
|
processed_source.raw_source.each_line.with_index do |line, index|
|
53
51
|
break if index >= last_line
|
@@ -81,6 +79,13 @@ module RuboCop
|
|
81
79
|
else MSG_MISSING if line !~ /\r$/
|
82
80
|
end
|
83
81
|
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def last_line(processed_source)
|
86
|
+
last_token = processed_source.tokens.last
|
87
|
+
last_token ? last_token.line : processed_source.lines.length
|
88
|
+
end
|
84
89
|
end
|
85
90
|
end
|
86
91
|
end
|