rubocop 0.49.1 → 0.50.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 +5 -3
- data/bin/rubocop +1 -1
- data/config/default.yml +160 -99
- data/config/disabled.yml +4 -5
- data/config/enabled.yml +149 -47
- data/lib/rubocop.rb +41 -14
- data/lib/rubocop/ast/builder.rb +4 -1
- data/lib/rubocop/ast/node.rb +36 -42
- data/lib/rubocop/ast/node/args_node.rb +1 -13
- data/lib/rubocop/ast/node/array_node.rb +9 -0
- data/lib/rubocop/ast/node/block_node.rb +9 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/for_node.rb +8 -0
- data/lib/rubocop/ast/node/if_node.rb +10 -2
- data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +18 -31
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/send_node.rb +1 -154
- data/lib/rubocop/ast/node/super_node.rb +3 -24
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/traversal.rb +6 -6
- data/lib/rubocop/cli.rb +7 -3
- data/lib/rubocop/config.rb +45 -8
- data/lib/rubocop/config_loader.rb +7 -5
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -3
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +64 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +12 -12
- data/lib/rubocop/cop/commissioner.rb +8 -2
- data/lib/rubocop/cop/cop.rb +3 -1
- data/lib/rubocop/cop/generator.rb +94 -21
- data/lib/rubocop/cop/internal_affairs.rb +3 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +14 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +43 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +49 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -1
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +2 -3
- data/lib/rubocop/cop/layout/align_array.rb +2 -2
- data/lib/rubocop/cop/layout/align_hash.rb +2 -2
- data/lib/rubocop/cop/layout/align_parameters.rb +5 -11
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +9 -0
- data/lib/rubocop/cop/layout/else_alignment.rb +30 -13
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +4 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +20 -4
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -3
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +3 -3
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +3 -3
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +5 -2
- data/lib/rubocop/cop/layout/indent_heredoc.rb +19 -24
- data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +12 -8
- data/lib/rubocop/cop/layout/leading_comment_space.rb +33 -18
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +20 -17
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +3 -3
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +7 -0
- data/lib/rubocop/cop/layout/space_after_comma.rb +10 -0
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -3
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +13 -4
- data/lib/rubocop/cop/layout/space_around_keyword.rb +9 -5
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +54 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +7 -0
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +7 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +8 -4
- data/lib/rubocop/cop/layout/tab.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +4 -2
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +15 -1
- data/lib/rubocop/cop/lint/block_alignment.rb +15 -6
- data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
- data/lib/rubocop/cop/lint/condition_position.rb +5 -1
- data/lib/rubocop/cop/lint/debugger.rb +16 -9
- data/lib/rubocop/cop/lint/def_end_alignment.rb +4 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +3 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +73 -5
- data/lib/rubocop/cop/lint/duplicated_key.rb +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +1 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +5 -5
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +35 -40
- data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +18 -13
- data/lib/rubocop/cop/lint/inherit_exception.rb +8 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +36 -0
- data/lib/rubocop/cop/lint/literal_in_condition.rb +3 -3
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +5 -7
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/percent_string_array.rb +3 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
- data/lib/rubocop/cop/lint/rand_one.rb +7 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +77 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +13 -6
- data/lib/rubocop/cop/lint/rescue_without_error_class.rb +38 -0
- data/lib/rubocop/cop/lint/return_in_void_context.rb +63 -0
- data/lib/rubocop/cop/lint/script_permission.rb +6 -0
- data/lib/rubocop/cop/lint/syntax.rb +17 -20
- data/lib/rubocop/cop/lint/unified_integer.rb +3 -2
- data/lib/rubocop/cop/lint/unneeded_disable.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +53 -8
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +74 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -8
- data/lib/rubocop/cop/lint/useless_setter_call.rb +10 -11
- data/lib/rubocop/cop/lint/void.rb +29 -23
- data/lib/rubocop/cop/metrics/line_length.rb +2 -2
- data/lib/rubocop/cop/metrics/method_length.rb +8 -3
- data/lib/rubocop/cop/metrics/parameter_lists.rb +5 -2
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -2
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +12 -3
- data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +9 -6
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +68 -31
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +18 -0
- data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/accessor_method_name.rb +11 -12
- data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +1 -1
- data/lib/rubocop/cop/{style/op_method.rb → naming/binary_operator_parameter_name.rb} +2 -2
- data/lib/rubocop/cop/{style → naming}/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/constant_name.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/file_name.rb +8 -4
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +68 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +58 -0
- data/lib/rubocop/cop/{style → naming}/method_name.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/predicate_name.rb +6 -7
- data/lib/rubocop/cop/{style → naming}/variable_name.rb +11 -15
- data/lib/rubocop/cop/{style → naming}/variable_number.rb +1 -1
- data/lib/rubocop/cop/performance/caller.rb +39 -11
- data/lib/rubocop/cop/performance/casecmp.rb +4 -4
- data/lib/rubocop/cop/performance/compare_with_block.rb +4 -4
- data/lib/rubocop/cop/performance/double_start_end_with.rb +4 -4
- data/lib/rubocop/cop/performance/end_with.rb +3 -3
- data/lib/rubocop/cop/performance/fixed_size.rb +1 -1
- data/lib/rubocop/cop/performance/hash_each_methods.rb +66 -25
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +2 -2
- data/lib/rubocop/cop/performance/range_include.rb +2 -2
- data/lib/rubocop/cop/performance/redundant_block_call.rb +6 -6
- data/lib/rubocop/cop/performance/redundant_match.rb +5 -5
- data/lib/rubocop/cop/performance/redundant_merge.rb +39 -23
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +2 -2
- data/lib/rubocop/cop/performance/regexp_match.rb +13 -5
- data/lib/rubocop/cop/performance/size.rb +1 -1
- data/lib/rubocop/cop/performance/start_with.rb +3 -3
- data/lib/rubocop/cop/performance/times_map.rb +23 -12
- data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
- data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
- data/lib/rubocop/cop/rails/active_support_aliases.rb +1 -1
- data/lib/rubocop/cop/rails/delegate.rb +36 -7
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +1 -1
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +2 -2
- data/lib/rubocop/cop/rails/file_path.rb +3 -4
- data/lib/rubocop/cop/rails/find_each.rb +1 -1
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +48 -0
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +5 -5
- data/lib/rubocop/cop/rails/not_null_column.rb +1 -1
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +2 -2
- data/lib/rubocop/cop/rails/relative_date_constant.rb +1 -1
- data/lib/rubocop/cop/rails/request_referer.rb +2 -2
- data/lib/rubocop/cop/rails/reversible_migration.rb +12 -12
- data/lib/rubocop/cop/rails/save_bang.rb +8 -6
- data/lib/rubocop/cop/rails/scope_args.rb +1 -1
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +2 -2
- data/lib/rubocop/cop/security/marshal_load.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +2 -2
- data/lib/rubocop/cop/style/alias.rb +44 -20
- data/lib/rubocop/cop/style/and_or.rb +48 -34
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +3 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
- data/lib/rubocop/cop/style/command_literal.rb +20 -9
- data/lib/rubocop/cop/style/conditional_assignment.rb +30 -28
- data/lib/rubocop/cop/style/copyright.rb +10 -10
- data/lib/rubocop/cop/style/def_with_parentheses.rb +6 -5
- data/lib/rubocop/cop/style/dir.rb +52 -0
- data/lib/rubocop/cop/style/documentation_method.rb +2 -6
- data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
- data/lib/rubocop/cop/style/empty_else.rb +3 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -2
- data/lib/rubocop/cop/style/empty_method.rb +27 -17
- data/lib/rubocop/cop/style/flip_flop.rb +2 -2
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
- data/lib/rubocop/cop/style/guard_clause.rb +4 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +10 -10
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +5 -1
- data/lib/rubocop/cop/style/if_with_semicolon.rb +1 -1
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +4 -3
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +20 -8
- data/lib/rubocop/cop/style/lambda.rb +19 -9
- data/lib/rubocop/cop/style/lambda_call.rb +22 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +4 -20
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +6 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +18 -26
- data/lib/rubocop/cop/style/method_missing.rb +5 -18
- data/lib/rubocop/cop/style/min_max.rb +67 -0
- data/lib/rubocop/cop/style/missing_else.rb +16 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +2 -2
- data/lib/rubocop/cop/style/module_function.rb +8 -4
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +5 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +25 -3
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +2 -6
- data/lib/rubocop/cop/style/negated_if.rb +8 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +8 -8
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +14 -14
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +6 -2
- data/lib/rubocop/cop/style/numeric_literals.rb +2 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +8 -4
- data/lib/rubocop/cop/style/one_line_conditional.rb +8 -3
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -2
- data/lib/rubocop/cop/style/or_assignment.rb +88 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +12 -11
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +2 -2
- data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +16 -17
- data/lib/rubocop/cop/style/redundant_begin.rb +6 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +95 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +13 -11
- data/lib/rubocop/cop/style/redundant_return.rb +23 -11
- data/lib/rubocop/cop/style/redundant_self.rb +18 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +12 -4
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/return_nil.rb +98 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +80 -43
- data/lib/rubocop/cop/style/single_line_block_params.rb +14 -13
- data/lib/rubocop/cop/style/single_line_methods.rb +9 -13
- data/lib/rubocop/cop/style/special_global_vars.rb +3 -3
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -39
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +22 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +5 -25
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +3 -18
- data/lib/rubocop/cop/style/ternary_parentheses.rb +14 -10
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +28 -9
- data/lib/rubocop/cop/style/trivial_accessors.rb +39 -56
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/variable_interpolation.rb +8 -3
- data/lib/rubocop/cop/style/word_array.rb +7 -24
- data/lib/rubocop/cop/style/yoda_condition.rb +49 -14
- data/lib/rubocop/cop/style/zero_length_predicate.rb +25 -18
- data/lib/rubocop/cop/team.rb +16 -8
- data/lib/rubocop/cop/util.rb +11 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/offense_count_formatter.rb +2 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +1 -1
- data/lib/rubocop/formatter/tap_formatter.rb +71 -0
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -0
- data/lib/rubocop/node_pattern.rb +44 -26
- data/lib/rubocop/options.rb +1 -0
- data/lib/rubocop/processed_source.rb +3 -1
- data/lib/rubocop/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +1 -0
- data/lib/rubocop/rspec/cop_helper.rb +10 -10
- data/lib/rubocop/rspec/expect_offense.rb +6 -8
- data/lib/rubocop/rspec/shared_examples.rb +8 -8
- data/lib/rubocop/string_util.rb +2 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +51 -18
- data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -41
- data/lib/rubocop/cop/mixin/on_method_def.rb +0 -44
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InternalAffairs
|
6
|
+
# Checks for redundant message arguments to `#add_offense`. This method
|
7
|
+
# will automatically use `#message` or `MSG` (in that order of priority)
|
8
|
+
# if they are defined.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# add_offense(node, :expression, MSG)
|
14
|
+
# add_offense(node, :expression, message)
|
15
|
+
# add_offense(node, :expression, message(node))
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# add_offense(node, :expression)
|
19
|
+
# add_offense(node, :expression, CUSTOM_MSG)
|
20
|
+
# add_offense(node, :expression, message(other_node))
|
21
|
+
#
|
22
|
+
class RedundantMessageArgument < Cop
|
23
|
+
MSG = 'Redundant message argument to `#add_offense`.'.freeze
|
24
|
+
|
25
|
+
def_node_matcher :node_type_check, <<-PATTERN
|
26
|
+
(send nil :add_offense _offender _
|
27
|
+
{(const nil :MSG) (send nil :message) (send nil :message _offender)})
|
28
|
+
PATTERN
|
29
|
+
|
30
|
+
def on_send(node)
|
31
|
+
node_type_check(node) do
|
32
|
+
add_offense(node.last_argument)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def autocorrect(node)
|
37
|
+
parent = node.parent
|
38
|
+
arguments = parent.arguments
|
39
|
+
range =
|
40
|
+
Parser::Source::Range.new(parent.source_range.source_buffer,
|
41
|
+
arguments[-2].loc.expression.end_pos,
|
42
|
+
arguments.last.loc.expression.end_pos)
|
43
|
+
|
44
|
+
->(corrector) { corrector.remove(range) }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -37,7 +37,6 @@ module RuboCop
|
|
37
37
|
class AccessModifierIndentation < Cop
|
38
38
|
include AutocorrectAlignment
|
39
39
|
include ConfigurableEnforcedStyle
|
40
|
-
include AccessModifierNode
|
41
40
|
|
42
41
|
MSG = '%s access modifiers like `%s`.'.freeze
|
43
42
|
|
@@ -67,7 +66,7 @@ module RuboCop
|
|
67
66
|
def check_body(body, node)
|
68
67
|
return if body.nil? # Empty class etc.
|
69
68
|
|
70
|
-
modifiers = body.each_child_node.select
|
69
|
+
modifiers = body.each_child_node(:send).select(&:access_modifier?)
|
71
70
|
class_column = node.source_range.column
|
72
71
|
|
73
72
|
modifiers.each { |modifier| check_modifier(modifier, class_column) }
|
@@ -81,7 +80,7 @@ module RuboCop
|
|
81
80
|
if @column_delta.zero?
|
82
81
|
correct_style_detected
|
83
82
|
else
|
84
|
-
add_offense(send_node
|
83
|
+
add_offense(send_node) do
|
85
84
|
if offset == unexpected_indent_offset
|
86
85
|
opposite_style_detected
|
87
86
|
else
|
@@ -8,14 +8,14 @@ module RuboCop
|
|
8
8
|
#
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
|
-
# a = [1, 2, 3
|
11
|
+
# a = [1, 2, 3,
|
12
12
|
# 4, 5, 6]
|
13
13
|
# array = ['run',
|
14
14
|
# 'forrest',
|
15
15
|
# 'run']
|
16
16
|
#
|
17
17
|
# # good
|
18
|
-
# a = [1, 2, 3
|
18
|
+
# a = [1, 2, 3,
|
19
19
|
# 4, 5, 6]
|
20
20
|
# a = ['run',
|
21
21
|
# 'forrest',
|
@@ -136,12 +136,12 @@ module RuboCop
|
|
136
136
|
first_pair = node.pairs.first
|
137
137
|
self.column_deltas = alignment_for(first_pair)
|
138
138
|
.deltas_for_first_pair(first_pair, node)
|
139
|
-
add_offense(first_pair
|
139
|
+
add_offense(first_pair) unless good_alignment?
|
140
140
|
|
141
141
|
node.children.each do |current|
|
142
142
|
self.column_deltas = alignment_for(current)
|
143
143
|
.deltas(first_pair, current)
|
144
|
-
add_offense(current
|
144
|
+
add_offense(current) unless good_alignment?
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
@@ -35,7 +35,6 @@ module RuboCop
|
|
35
35
|
# :baz
|
36
36
|
class AlignParameters < Cop
|
37
37
|
include AutocorrectAlignment
|
38
|
-
include OnMethodDef
|
39
38
|
|
40
39
|
ALIGN_PARAMS_MSG = 'Align the parameters of a method %s if they span ' \
|
41
40
|
'more than one line.'.freeze
|
@@ -44,18 +43,15 @@ module RuboCop
|
|
44
43
|
'following the first line of a multi-line method %s.'.freeze
|
45
44
|
|
46
45
|
def on_send(node)
|
47
|
-
return if node.arguments.size < 2 ||
|
46
|
+
return if node.arguments.size < 2 ||
|
47
|
+
node.send_type? && node.method?(:[]=)
|
48
48
|
|
49
49
|
check_alignment(node.arguments, base_column(node, node.arguments))
|
50
50
|
end
|
51
|
+
alias on_def on_send
|
52
|
+
alias on_defs on_send
|
51
53
|
|
52
|
-
|
53
|
-
args = args.children
|
54
|
-
|
55
|
-
return if args.size < 2
|
56
|
-
|
57
|
-
check_alignment(args, base_column(node, args))
|
58
|
-
end
|
54
|
+
private
|
59
55
|
|
60
56
|
def message(node)
|
61
57
|
type = node && node.parent.send_type? ? 'call' : 'definition'
|
@@ -64,8 +60,6 @@ module RuboCop
|
|
64
60
|
format(msg, type)
|
65
61
|
end
|
66
62
|
|
67
|
-
private
|
68
|
-
|
69
63
|
def fixed_indentation?
|
70
64
|
cop_config['EnforcedStyle'] == 'with_fixed_indentation'
|
71
65
|
end
|
@@ -27,7 +27,6 @@ module RuboCop
|
|
27
27
|
# )
|
28
28
|
class ClosingParenthesisIndentation < Cop
|
29
29
|
include AutocorrectAlignment
|
30
|
-
include OnMethodDef
|
31
30
|
|
32
31
|
MSG_INDENT =
|
33
32
|
'Indent `)` the same as the start of the line where `(` is.'.freeze
|
@@ -41,11 +40,12 @@ module RuboCop
|
|
41
40
|
check(node, node.children)
|
42
41
|
end
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
def on_method_def(_node, _method_name, args, _body)
|
47
|
-
check(args, args.children)
|
43
|
+
def on_def(node)
|
44
|
+
check(node.arguments, node.arguments)
|
48
45
|
end
|
46
|
+
alias on_defs on_def
|
47
|
+
|
48
|
+
private
|
49
49
|
|
50
50
|
def check(node, elements)
|
51
51
|
right_paren = node.loc.end
|
@@ -4,6 +4,15 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
6
|
# This cop checks the . position in multi-line method calls.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# something.
|
11
|
+
# mehod
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# something
|
15
|
+
# .method
|
7
16
|
class DotPosition < Cop
|
8
17
|
include ConfigurableEnforcedStyle
|
9
18
|
|
@@ -7,6 +7,28 @@ module RuboCop
|
|
7
7
|
# be aligned with an if/unless/while/until/begin/def keyword, but there
|
8
8
|
# are special cases when they should follow the same rules as the
|
9
9
|
# alignment of end.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# # bad
|
13
|
+
# if something
|
14
|
+
# code
|
15
|
+
# else
|
16
|
+
# code
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # bad
|
20
|
+
# if something
|
21
|
+
# code
|
22
|
+
# elsif something
|
23
|
+
# code
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# if something
|
28
|
+
# code
|
29
|
+
# else
|
30
|
+
# code
|
31
|
+
# end
|
10
32
|
class ElseAlignment < Cop
|
11
33
|
include EndKeywordAlignment
|
12
34
|
include AutocorrectAlignment
|
@@ -20,18 +42,9 @@ module RuboCop
|
|
20
42
|
|
21
43
|
check_alignment(base_range(node, base), node.loc.else)
|
22
44
|
|
23
|
-
|
45
|
+
return unless node.elsif_conditional?
|
24
46
|
|
25
|
-
|
26
|
-
else_branch.elsif?
|
27
|
-
|
28
|
-
# If the `else` part is actually an `elsif`, we check the `elsif`
|
29
|
-
# node in case it contains an `else` within, because that `else`
|
30
|
-
# should have the same alignment (base).
|
31
|
-
on_if(else_branch, base)
|
32
|
-
# The `elsif` node will get an `on_if` call from the framework later,
|
33
|
-
# but we're done here, so we set it to ignored.
|
34
|
-
ignore_node(else_branch)
|
47
|
+
check_nested(node.else_branch, base)
|
35
48
|
end
|
36
49
|
|
37
50
|
def on_rescue(node)
|
@@ -55,6 +68,11 @@ module RuboCop
|
|
55
68
|
|
56
69
|
private
|
57
70
|
|
71
|
+
def check_nested(node, base)
|
72
|
+
on_if(node, base)
|
73
|
+
ignore_node(node)
|
74
|
+
end
|
75
|
+
|
58
76
|
def base_range(node, base)
|
59
77
|
if base
|
60
78
|
base.source_range
|
@@ -86,8 +104,7 @@ module RuboCop
|
|
86
104
|
|
87
105
|
return unless rhs.if_type?
|
88
106
|
|
89
|
-
|
90
|
-
ignore_node(rhs)
|
107
|
+
check_nested(rhs, base)
|
91
108
|
end
|
92
109
|
|
93
110
|
def check_alignment(base_range, else_range)
|
@@ -32,6 +32,10 @@ module RuboCop
|
|
32
32
|
class EmptyLineBetweenDefs < Cop
|
33
33
|
MSG = 'Use empty lines between method definitions.'.freeze
|
34
34
|
|
35
|
+
def self.autocorrect_incompatible_with
|
36
|
+
[Layout::EmptyLines]
|
37
|
+
end
|
38
|
+
|
35
39
|
# We operate on `begin` nodes, instead of using `OnMethodDef`,
|
36
40
|
# so that we can walk over pairs of consecutive nodes and
|
37
41
|
# efficiently access a node's predecessor; #prev_node ends up
|
@@ -4,18 +4,34 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
6
|
# Access modifiers should be surrounded by blank lines.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
#
|
10
|
+
# # bad
|
11
|
+
# class Foo
|
12
|
+
# def bar; end
|
13
|
+
# private
|
14
|
+
# def baz; end
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# class Foo
|
19
|
+
# def bar; end
|
20
|
+
#
|
21
|
+
# private
|
22
|
+
#
|
23
|
+
# def baz; end
|
24
|
+
# end
|
7
25
|
class EmptyLinesAroundAccessModifier < Cop
|
8
|
-
include AccessModifierNode
|
9
|
-
|
10
26
|
MSG_AFTER = 'Keep a blank line after `%s`.'.freeze
|
11
27
|
MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after `%s`.'.freeze
|
12
28
|
|
13
29
|
def on_send(node)
|
14
|
-
return unless
|
30
|
+
return unless node.access_modifier?
|
15
31
|
|
16
32
|
return if empty_lines_around?(node)
|
17
33
|
|
18
|
-
add_offense(node
|
34
|
+
add_offense(node)
|
19
35
|
end
|
20
36
|
|
21
37
|
def autocorrect(node)
|
@@ -60,13 +60,13 @@ module RuboCop
|
|
60
60
|
# end
|
61
61
|
class EmptyLinesAroundExceptionHandlingKeywords < Cop
|
62
62
|
include EmptyLinesAroundBody
|
63
|
-
include OnMethodDef
|
64
63
|
|
65
64
|
MSG = 'Extra empty line detected %s the `%s`.'.freeze
|
66
65
|
|
67
|
-
def
|
68
|
-
check_body(body)
|
66
|
+
def on_def(node)
|
67
|
+
check_body(node.body)
|
69
68
|
end
|
69
|
+
alias on_defs on_def
|
70
70
|
|
71
71
|
def on_kwbegin(node)
|
72
72
|
body, = *node
|
@@ -22,13 +22,13 @@ module RuboCop
|
|
22
22
|
# end
|
23
23
|
class EmptyLinesAroundMethodBody < Cop
|
24
24
|
include EmptyLinesAroundBody
|
25
|
-
include OnMethodDef
|
26
25
|
|
27
26
|
KIND = 'method'.freeze
|
28
27
|
|
29
|
-
def
|
30
|
-
check(node, body)
|
28
|
+
def on_def(node)
|
29
|
+
check(node, node.body)
|
31
30
|
end
|
31
|
+
alias on_defs on_def
|
32
32
|
|
33
33
|
private
|
34
34
|
|
@@ -27,15 +27,15 @@ module RuboCop
|
|
27
27
|
# do_something
|
28
28
|
# end
|
29
29
|
class FirstMethodParameterLineBreak < Cop
|
30
|
-
include OnMethodDef
|
31
30
|
include FirstElementLineBreak
|
32
31
|
|
33
32
|
MSG = 'Add a line break before the first parameter of a ' \
|
34
33
|
'multi-line method parameter list.'.freeze
|
35
34
|
|
36
|
-
def
|
37
|
-
check_method_line_break(node,
|
35
|
+
def on_def(node)
|
36
|
+
check_method_line_break(node, node.arguments)
|
38
37
|
end
|
38
|
+
alias on_defs on_def
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -60,8 +60,7 @@ module RuboCop
|
|
60
60
|
|
61
61
|
parent = node.parent
|
62
62
|
|
63
|
-
return false unless parent
|
64
|
-
!parent.method?(:[]=)
|
63
|
+
return false unless eligible_method_call?(parent)
|
65
64
|
return false if !parent.parenthesized? &&
|
66
65
|
style == :special_for_inner_method_call_in_parentheses
|
67
66
|
|
@@ -70,6 +69,10 @@ module RuboCop
|
|
70
69
|
node.source_range.begin_pos > parent.source_range.begin_pos
|
71
70
|
end
|
72
71
|
|
72
|
+
def_node_matcher :eligible_method_call?, <<-PATTERN
|
73
|
+
(send _ !:[]= ...)
|
74
|
+
PATTERN
|
75
|
+
|
73
76
|
def base_range(send_node, arg_node)
|
74
77
|
range_between(send_node.source_range.begin_pos,
|
75
78
|
arg_node.source_range.begin_pos)
|
@@ -12,24 +12,25 @@ module RuboCop
|
|
12
12
|
# @example
|
13
13
|
#
|
14
14
|
# # bad
|
15
|
-
# <<-
|
15
|
+
# <<-RUBY
|
16
16
|
# something
|
17
|
-
#
|
17
|
+
# RUBY
|
18
18
|
#
|
19
19
|
# # good
|
20
20
|
# # When EnforcedStyle is squiggly, bad code is auto-corrected to the
|
21
21
|
# # following code.
|
22
|
-
# <<~
|
22
|
+
# <<~RUBY
|
23
23
|
# something
|
24
|
-
#
|
24
|
+
# RUBY
|
25
25
|
#
|
26
26
|
# # good
|
27
27
|
# # When EnforcedStyle is active_support, bad code is auto-corrected to
|
28
28
|
# # the following code.
|
29
|
-
# <<-
|
29
|
+
# <<-RUBY.strip_heredoc
|
30
30
|
# something
|
31
|
-
#
|
31
|
+
# RUBY
|
32
32
|
class IndentHeredoc < Cop
|
33
|
+
include Heredoc
|
33
34
|
include ConfigurableEnforcedStyle
|
34
35
|
include SafeMode
|
35
36
|
|
@@ -43,10 +44,11 @@ module RuboCop
|
|
43
44
|
powerpack: 'strip_indent'
|
44
45
|
}.freeze
|
45
46
|
|
46
|
-
def
|
47
|
-
|
47
|
+
def on_heredoc(node)
|
48
|
+
body = heredoc_body(node)
|
49
|
+
return if body =~ /\A\s*\z/
|
48
50
|
|
49
|
-
body_indent_level =
|
51
|
+
body_indent_level = indent_level(body)
|
50
52
|
|
51
53
|
if heredoc_indent_type(node) == '~'
|
52
54
|
expected_indent_level = base_indent_level(node) + indentation_width
|
@@ -58,9 +60,6 @@ module RuboCop
|
|
58
60
|
add_offense(node, :heredoc_body)
|
59
61
|
end
|
60
62
|
|
61
|
-
alias on_dstr on_str
|
62
|
-
alias on_xstr on_str
|
63
|
-
|
64
63
|
def autocorrect(node)
|
65
64
|
check_style!
|
66
65
|
|
@@ -133,22 +132,13 @@ module RuboCop
|
|
133
132
|
end
|
134
133
|
end
|
135
134
|
|
136
|
-
def heredoc?(node)
|
137
|
-
node.loc.is_a?(Parser::Source::Map::Heredoc)
|
138
|
-
end
|
139
|
-
|
140
135
|
def indented_body(node)
|
141
|
-
body = node
|
142
|
-
body_indent_level =
|
136
|
+
body = heredoc_body(node)
|
137
|
+
body_indent_level = indent_level(body)
|
143
138
|
correct_indent_level = base_indent_level(node) + indentation_width
|
144
139
|
body.gsub(/^\s{#{body_indent_level}}/, ' ' * correct_indent_level)
|
145
140
|
end
|
146
141
|
|
147
|
-
def body_indent_level(node)
|
148
|
-
body = node.loc.heredoc_body.source
|
149
|
-
indent_level(body)
|
150
|
-
end
|
151
|
-
|
152
142
|
def base_indent_level(node)
|
153
143
|
base_line_num = node.loc.expression.line
|
154
144
|
base_line = processed_source.lines[base_line_num - 1]
|
@@ -156,7 +146,8 @@ module RuboCop
|
|
156
146
|
end
|
157
147
|
|
158
148
|
def indent_level(str)
|
159
|
-
str.scan(/^\s*/).reject { |line| line == "\n" }
|
149
|
+
indentations = str.scan(/^\s*/).reject { |line| line == "\n" }
|
150
|
+
indentations.empty? ? 0 : indentations.min_by(&:size).size
|
160
151
|
end
|
161
152
|
|
162
153
|
# Returns '~', '-' or nil
|
@@ -167,6 +158,10 @@ module RuboCop
|
|
167
158
|
def indentation_width
|
168
159
|
@config.for_cop('IndentationWidth')['Width'] || 2
|
169
160
|
end
|
161
|
+
|
162
|
+
def heredoc_body(node)
|
163
|
+
scrub_string(node.loc.heredoc_body.source)
|
164
|
+
end
|
170
165
|
end
|
171
166
|
end
|
172
167
|
end
|