rubocop 0.70.0 → 0.75.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 +6 -10
- data/bin/console +1 -0
- data/config/default.yml +91 -494
- data/lib/rubocop.rb +16 -54
- data/lib/rubocop/ast/builder.rb +2 -0
- data/lib/rubocop/ast/node.rb +9 -15
- data/lib/rubocop/ast/node/float_node.rb +12 -0
- data/lib/rubocop/ast/node/int_node.rb +12 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +4 -4
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -0
- data/lib/rubocop/ast/node/resbody_node.rb +1 -6
- data/lib/rubocop/ast/traversal.rb +3 -3
- data/lib/rubocop/cached_data.rb +1 -1
- data/lib/rubocop/comment_config.rb +3 -2
- data/lib/rubocop/config.rb +21 -508
- data/lib/rubocop/config_loader.rb +22 -4
- data/lib/rubocop/config_loader_resolver.rb +2 -8
- data/lib/rubocop/config_obsoletion.rb +213 -0
- data/lib/rubocop/config_validator.rb +239 -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 +3 -9
- data/lib/rubocop/cop/cop.rb +39 -12
- data/lib/rubocop/cop/corrector.rb +2 -3
- 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/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 +55 -0
- 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/block_alignment.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +2 -2
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +3 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +14 -59
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -0
- data/lib/rubocop/cop/layout/indent_assignment.rb +9 -1
- data/lib/rubocop/cop/layout/indent_first_argument.rb +7 -3
- data/lib/rubocop/cop/layout/indent_first_parameter.rb +7 -3
- data/lib/rubocop/cop/layout/indent_heredoc.rb +4 -4
- data/lib/rubocop/cop/layout/indentation_consistency.rb +13 -12
- data/lib/rubocop/cop/layout/indentation_width.rb +28 -10
- data/lib/rubocop/cop/layout/leading_comment_space.rb +28 -0
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +24 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +2 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -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_inside_array_literal_brackets.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +21 -2
- 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/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 +57 -1
- 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/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 +4 -4
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- 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 +5 -5
- 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/unneeded_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +7 -2
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- 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/message_annotator.rb +16 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -1
- data/lib/rubocop/cop/metrics/line_length.rb +6 -0
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
- 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/hash_alignment.rb +4 -0
- data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
- 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/surrounding_space.rb +7 -5
- 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/method_name.rb +12 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +20 -22
- 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/block_delimiters.rb +2 -1
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +29 -10
- 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/commented_keyword.rb +16 -30
- data/lib/rubocop/cop/style/conditional_assignment.rb +8 -9
- data/lib/rubocop/cop/style/constant_visibility.rb +14 -3
- 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 +1 -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/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 +3 -3
- data/lib/rubocop/cop/style/float_division.rb +94 -0
- data/lib/rubocop/cop/style/format_string.rb +13 -9
- data/lib/rubocop/cop/style/format_string_token.rb +10 -40
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +18 -33
- data/lib/rubocop/cop/style/guard_clause.rb +39 -10
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +42 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +51 -15
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +0 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +12 -6
- 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 +18 -2
- 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/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/redundant_parentheses.rb +15 -6
- data/lib/rubocop/cop/style/redundant_self.rb +18 -1
- 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 +11 -2
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +8 -1
- 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 +32 -3
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -0
- 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/unneeded_sort.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/word_array.rb +2 -2
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -6
- data/lib/rubocop/cop/team.rb +15 -14
- data/lib/rubocop/cop/utils/format_string.rb +128 -0
- 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/emacs_style_formatter.rb +8 -5
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +9 -1
- data/lib/rubocop/formatter/tap_formatter.rb +9 -1
- data/lib/rubocop/magic_comment.rb +4 -0
- data/lib/rubocop/node_pattern.rb +86 -7
- data/lib/rubocop/options.rb +18 -2
- data/lib/rubocop/path_util.rb +1 -1
- data/lib/rubocop/processed_source.rb +9 -1
- data/lib/rubocop/rspec/cop_helper.rb +0 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -1
- data/lib/rubocop/rspec/shared_contexts.rb +12 -17
- data/lib/rubocop/rspec/support.rb +0 -1
- data/lib/rubocop/runner.rb +20 -15
- data/lib/rubocop/target_finder.rb +6 -4
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop/yaml_duplication_checker.rb +8 -2
- metadata +16 -70
- data/lib/rubocop/cop/mixin/ignored_method_patterns.rb +0 -19
- data/lib/rubocop/cop/mixin/target_rails_version.rb +0 -16
- data/lib/rubocop/cop/rails/action_filter.rb +0 -117
- data/lib/rubocop/cop/rails/active_record_aliases.rb +0 -48
- data/lib/rubocop/cop/rails/active_record_override.rb +0 -82
- data/lib/rubocop/cop/rails/active_support_aliases.rb +0 -69
- data/lib/rubocop/cop/rails/application_job.rb +0 -40
- data/lib/rubocop/cop/rails/application_record.rb +0 -40
- data/lib/rubocop/cop/rails/assert_not.rb +0 -44
- data/lib/rubocop/cop/rails/belongs_to.rb +0 -102
- data/lib/rubocop/cop/rails/blank.rb +0 -164
- data/lib/rubocop/cop/rails/bulk_change_table.rb +0 -289
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +0 -91
- data/lib/rubocop/cop/rails/date.rb +0 -161
- data/lib/rubocop/cop/rails/delegate.rb +0 -132
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +0 -37
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +0 -91
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +0 -45
- data/lib/rubocop/cop/rails/environment_comparison.rb +0 -68
- data/lib/rubocop/cop/rails/exit.rb +0 -67
- data/lib/rubocop/cop/rails/file_path.rb +0 -108
- data/lib/rubocop/cop/rails/find_by.rb +0 -55
- data/lib/rubocop/cop/rails/find_each.rb +0 -51
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +0 -25
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +0 -106
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +0 -117
- data/lib/rubocop/cop/rails/http_status.rb +0 -179
- data/lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb +0 -94
- data/lib/rubocop/cop/rails/inverse_of.rb +0 -246
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +0 -175
- data/lib/rubocop/cop/rails/link_to_blank.rb +0 -98
- data/lib/rubocop/cop/rails/not_null_column.rb +0 -67
- data/lib/rubocop/cop/rails/output.rb +0 -49
- data/lib/rubocop/cop/rails/output_safety.rb +0 -99
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +0 -107
- data/lib/rubocop/cop/rails/presence.rb +0 -124
- data/lib/rubocop/cop/rails/present.rb +0 -153
- data/lib/rubocop/cop/rails/read_write_attribute.rb +0 -74
- data/lib/rubocop/cop/rails/redundant_allow_nil.rb +0 -111
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +0 -136
- data/lib/rubocop/cop/rails/reflection_class_name.rb +0 -37
- data/lib/rubocop/cop/rails/refute_methods.rb +0 -76
- data/lib/rubocop/cop/rails/relative_date_constant.rb +0 -93
- data/lib/rubocop/cop/rails/request_referer.rb +0 -56
- data/lib/rubocop/cop/rails/reversible_migration.rb +0 -286
- data/lib/rubocop/cop/rails/safe_navigation.rb +0 -87
- data/lib/rubocop/cop/rails/save_bang.rb +0 -316
- data/lib/rubocop/cop/rails/scope_args.rb +0 -29
- data/lib/rubocop/cop/rails/skips_model_validations.rb +0 -87
- data/lib/rubocop/cop/rails/time_zone.rb +0 -238
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +0 -105
- data/lib/rubocop/cop/rails/unknown_env.rb +0 -63
- data/lib/rubocop/cop/rails/validation.rb +0 -109
- data/lib/rubocop/rspec/shared_examples.rb +0 -59
@@ -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(find_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
|
|
@@ -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
|
@@ -129,7 +129,7 @@ module RuboCop
|
|
129
129
|
# end
|
130
130
|
# end
|
131
131
|
#
|
132
|
-
# @see https://
|
132
|
+
# @see https://rubystyle.guide#consistent-classes
|
133
133
|
class ClassStructure < Cop
|
134
134
|
HUMANIZED_NODE_TYPE = {
|
135
135
|
casgn: :constants,
|
@@ -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
|
|
@@ -41,12 +41,7 @@ module RuboCop
|
|
41
41
|
def investigate(processed_source)
|
42
42
|
return if processed_source.blank?
|
43
43
|
|
44
|
-
if force_equal_sign_alignment?
|
45
|
-
@asgn_tokens = assignment_tokens
|
46
|
-
@asgn_lines = @asgn_tokens.map(&:line)
|
47
|
-
# Don't attempt to correct the same = more than once
|
48
|
-
@corrected = Set.new
|
49
|
-
end
|
44
|
+
@corrected = Set.new if force_equal_sign_alignment?
|
50
45
|
|
51
46
|
processed_source.tokens.each_cons(2) do |token1, token2|
|
52
47
|
check_tokens(processed_source.ast, token1, token2)
|
@@ -65,24 +60,10 @@ module RuboCop
|
|
65
60
|
|
66
61
|
private
|
67
62
|
|
68
|
-
def assignment_tokens
|
69
|
-
tokens = processed_source.tokens.select(&:equal_sign?)
|
70
|
-
# we don't want to operate on equals signs which are part of an
|
71
|
-
# optarg in a method definition
|
72
|
-
# e.g.: def method(optarg = default_val); end
|
73
|
-
tokens = remove_optarg_equals(tokens, processed_source)
|
74
|
-
|
75
|
-
# Only attempt to align the first = on each line
|
76
|
-
Set.new(tokens.uniq(&:line))
|
77
|
-
end
|
78
|
-
|
79
63
|
def check_tokens(ast, token1, token2)
|
80
64
|
return if token2.type == :tNL
|
81
65
|
|
82
|
-
if force_equal_sign_alignment? &&
|
83
|
-
@asgn_tokens.include?(token2) &&
|
84
|
-
(@asgn_lines.include?(token2.line - 1) ||
|
85
|
-
@asgn_lines.include?(token2.line + 1))
|
66
|
+
if force_equal_sign_alignment? && assignment_tokens.include?(token2)
|
86
67
|
check_assignment(token2)
|
87
68
|
else
|
88
69
|
check_other(token1, token2, ast)
|
@@ -90,32 +71,18 @@ module RuboCop
|
|
90
71
|
end
|
91
72
|
|
92
73
|
def check_assignment(token)
|
93
|
-
|
94
|
-
message = ''
|
95
|
-
if should_aligned_with_preceding_line?(token)
|
96
|
-
assignment_line = processed_source.preceding_line(token)
|
97
|
-
message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
|
98
|
-
else
|
99
|
-
assignment_line = processed_source.following_line(token)
|
100
|
-
message = format(MSG_UNALIGNED_ASGN, location: 'following')
|
101
|
-
end
|
102
|
-
return if aligned_assignment?(token.pos, assignment_line)
|
74
|
+
return unless aligned_with_preceding_assignment(token) == :no
|
103
75
|
|
76
|
+
message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
|
104
77
|
add_offense(token.pos, location: token.pos, message: message)
|
105
78
|
end
|
106
79
|
|
107
|
-
def should_aligned_with_preceding_line?(token)
|
108
|
-
@asgn_lines.include?(token.line - 1)
|
109
|
-
end
|
110
|
-
|
111
80
|
def check_other(token1, token2, ast)
|
112
81
|
return false if allow_for_trailing_comments? &&
|
113
82
|
token2.text.start_with?('#')
|
114
83
|
|
115
84
|
extra_space_range(token1, token2) do |range|
|
116
|
-
# Unary + doesn't appear as a token and needs special handling.
|
117
85
|
next if ignored_range?(ast, range.begin_pos)
|
118
|
-
next if unary_plus_non_offense?(range)
|
119
86
|
|
120
87
|
add_offense(range, location: range, message: MSG_UNNECESSARY)
|
121
88
|
end
|
@@ -145,10 +112,6 @@ module RuboCop
|
|
145
112
|
ignored_ranges(ast).any? { |r| r.include?(start_pos) }
|
146
113
|
end
|
147
114
|
|
148
|
-
def unary_plus_non_offense?(range)
|
149
|
-
range.resize(range.size + 1).source =~ /^ ?\+$/
|
150
|
-
end
|
151
|
-
|
152
115
|
# Returns an array of ranges that should not be reported. It's the
|
153
116
|
# extra spaces between the keys and values in a multiline hash,
|
154
117
|
# since those are handled by the Style/AlignHash cop.
|
@@ -188,8 +151,8 @@ module RuboCop
|
|
188
151
|
end
|
189
152
|
|
190
153
|
def align_equal_signs(range, corrector)
|
191
|
-
lines =
|
192
|
-
tokens =
|
154
|
+
lines = all_relevant_assignment_lines(range.line)
|
155
|
+
tokens = assignment_tokens.select { |t| lines.include?(t.line) }
|
193
156
|
|
194
157
|
columns = tokens.map { |t| align_column(t) }
|
195
158
|
align_to = columns.max
|
@@ -209,17 +172,15 @@ module RuboCop
|
|
209
172
|
end
|
210
173
|
end
|
211
174
|
|
212
|
-
def
|
213
|
-
|
175
|
+
def all_relevant_assignment_lines(line_number)
|
176
|
+
last_line_number = processed_source.lines.size
|
214
177
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
result.sort!
|
178
|
+
(
|
179
|
+
relevant_assignment_lines(line_number.downto(1)) +
|
180
|
+
relevant_assignment_lines(line_number.upto(last_line_number))
|
181
|
+
)
|
182
|
+
.uniq
|
183
|
+
.sort
|
223
184
|
end
|
224
185
|
|
225
186
|
def align_column(asgn_token)
|
@@ -231,12 +192,6 @@ module RuboCop
|
|
231
192
|
asgn_token.pos.last_column - spaces + 1
|
232
193
|
end
|
233
194
|
|
234
|
-
def remove_optarg_equals(asgn_tokens, processed_source)
|
235
|
-
optargs = processed_source.ast.each_node(:optarg)
|
236
|
-
optarg_eql = optargs.map { |o| o.loc.operator.begin_pos }.to_set
|
237
|
-
asgn_tokens.reject { |t| optarg_eql.include?(t.begin_pos) }
|
238
|
-
end
|
239
|
-
|
240
195
|
def allow_for_trailing_comments?
|
241
196
|
cop_config['AllowBeforeTrailingComments']
|
242
197
|
end
|
@@ -33,13 +33,21 @@ module RuboCop
|
|
33
33
|
return unless node.loc.operator
|
34
34
|
return if node.loc.operator.line == rhs.first_line
|
35
35
|
|
36
|
-
base = display_column(node.source_range)
|
36
|
+
base = display_column(leftmost_multiple_assignment(node).source_range)
|
37
37
|
check_alignment([rhs], base + configured_indentation_width)
|
38
38
|
end
|
39
39
|
|
40
40
|
def autocorrect(node)
|
41
41
|
AlignmentCorrector.correct(processed_source, node, column_delta)
|
42
42
|
end
|
43
|
+
|
44
|
+
def leftmost_multiple_assignment(node)
|
45
|
+
return node unless node.parent&.assignment?
|
46
|
+
|
47
|
+
leftmost_multiple_assignment(node.parent)
|
48
|
+
|
49
|
+
node.parent
|
50
|
+
end
|
43
51
|
end
|
44
52
|
end
|
45
53
|
end
|
@@ -4,8 +4,12 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
# rubocop:disable Metrics/LineLength
|
6
6
|
module Layout
|
7
|
-
# This cop checks the indentation of the first argument in a method call
|
8
|
-
#
|
7
|
+
# This cop checks the indentation of the first argument in a method call.
|
8
|
+
# Arguments after the first one are checked by Layout/AlignArguments,
|
9
|
+
# not by this cop.
|
10
|
+
#
|
11
|
+
# For indenting the first parameter of method *definitions*, check out
|
12
|
+
# Layout/IndentFirstParameter.
|
9
13
|
#
|
10
14
|
# @example
|
11
15
|
#
|
@@ -200,7 +204,7 @@ module RuboCop
|
|
200
204
|
node.source_range.begin_pos > parent.source_range.begin_pos
|
201
205
|
end
|
202
206
|
|
203
|
-
def_node_matcher :eligible_method_call?,
|
207
|
+
def_node_matcher :eligible_method_call?, <<~PATTERN
|
204
208
|
(send _ !:[]= ...)
|
205
209
|
PATTERN
|
206
210
|
|
@@ -3,9 +3,13 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
# This cop checks the indentation of the first parameter in a method
|
7
|
-
# Parameters after the first one are checked by
|
8
|
-
# not by this cop.
|
6
|
+
# This cop checks the indentation of the first parameter in a method
|
7
|
+
# definition. Parameters after the first one are checked by
|
8
|
+
# Layout/AlignParameters, not by this cop.
|
9
|
+
#
|
10
|
+
# For indenting the first argument of method *calls*, check out
|
11
|
+
# Layout/IndentFirstArgument, which supports options related to
|
12
|
+
# nesting that are irrelevant for method *definitions*.
|
9
13
|
#
|
10
14
|
# @example
|
11
15
|
#
|
@@ -37,7 +37,7 @@ module RuboCop
|
|
37
37
|
# # good
|
38
38
|
# # When EnforcedStyle is powerpack, bad code is auto-corrected to
|
39
39
|
# # the following code.
|
40
|
-
#
|
40
|
+
# <<-RUBY.strip_indent
|
41
41
|
# something
|
42
42
|
# RUBY
|
43
43
|
#
|
@@ -52,7 +52,6 @@ module RuboCop
|
|
52
52
|
class IndentHeredoc < Cop
|
53
53
|
include Heredoc
|
54
54
|
include ConfigurableEnforcedStyle
|
55
|
-
include SafeMode
|
56
55
|
|
57
56
|
RUBY23_TYPE_MSG = 'Use %<indentation_width>d spaces for indentation ' \
|
58
57
|
'in a heredoc by using `<<~` instead of ' \
|
@@ -207,7 +206,8 @@ module RuboCop
|
|
207
206
|
body = heredoc_body(node)
|
208
207
|
body_indent_level = indent_level(body)
|
209
208
|
correct_indent_level = base_indent_level(node) + indentation_width
|
210
|
-
body.gsub(
|
209
|
+
body.gsub(/^[^\S\r\n]{#{body_indent_level}}/,
|
210
|
+
' ' * correct_indent_level)
|
211
211
|
end
|
212
212
|
|
213
213
|
def indented_end(node)
|
@@ -240,7 +240,7 @@ module RuboCop
|
|
240
240
|
end
|
241
241
|
|
242
242
|
def indentation_width
|
243
|
-
@config.for_cop('IndentationWidth')['Width'] || 2
|
243
|
+
@config.for_cop('Layout/IndentationWidth')['Width'] || 2
|
244
244
|
end
|
245
245
|
|
246
246
|
def heredoc_body(node)
|