rubocop 0.35.1 → 0.36.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +164 -0
- data/LICENSE.txt +1 -1
- data/README.md +72 -21
- data/bin/rubocop +1 -0
- data/config/default.yml +167 -18
- data/config/disabled.yml +19 -6
- data/config/enabled.yml +159 -14
- data/lib/rubocop.rb +67 -26
- data/lib/rubocop/ast_node.rb +488 -14
- data/lib/rubocop/ast_node/builder.rb +24 -0
- data/lib/rubocop/ast_node/sexp.rb +13 -0
- data/lib/rubocop/cached_data.rb +58 -0
- data/lib/rubocop/cli.rb +47 -10
- data/lib/rubocop/comment_config.rb +9 -2
- data/lib/rubocop/config.rb +99 -31
- data/lib/rubocop/config_loader.rb +23 -14
- data/lib/rubocop/config_store.rb +1 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +2 -1
- data/lib/rubocop/cop/commissioner.rb +3 -5
- data/lib/rubocop/cop/cop.rb +23 -17
- data/lib/rubocop/cop/corrector.rb +25 -0
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/ignored_node.rb +3 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +2 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +4 -3
- data/lib/rubocop/cop/lint/block_alignment.rb +29 -91
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +2 -1
- data/lib/rubocop/cop/lint/condition_position.rb +2 -1
- data/lib/rubocop/cop/lint/debugger.rb +29 -12
- data/lib/rubocop/cop/lint/def_end_alignment.rb +16 -18
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +6 -6
- data/lib/rubocop/cop/lint/duplicate_methods.rb +98 -74
- data/lib/rubocop/cop/lint/duplicated_key.rb +3 -2
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +3 -2
- data/lib/rubocop/cop/lint/else_layout.rb +2 -1
- data/lib/rubocop/cop/lint/empty_ensure.rb +2 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +2 -1
- data/lib/rubocop/cop/lint/end_alignment.rb +77 -39
- data/lib/rubocop/cop/lint/end_in_method.rb +2 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +2 -1
- data/lib/rubocop/cop/lint/eval.rb +2 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +31 -0
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +14 -30
- data/lib/rubocop/cop/lint/handle_exceptions.rb +2 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +85 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +120 -0
- data/lib/rubocop/cop/lint/invalid_character_literal.rb +3 -1
- data/lib/rubocop/cop/lint/literal_in_condition.rb +6 -9
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +6 -9
- data/lib/rubocop/cop/lint/loop.rb +2 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +19 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +38 -0
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +5 -8
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +8 -6
- data/lib/rubocop/cop/lint/rand_one.rb +36 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +6 -5
- data/lib/rubocop/cop/lint/rescue_exception.rb +3 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +2 -1
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +6 -4
- data/lib/rubocop/cop/lint/syntax.rb +9 -5
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +3 -2
- data/lib/rubocop/cop/lint/unneeded_disable.rb +121 -18
- data/lib/rubocop/cop/lint/unreachable_code.rb +5 -4
- data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +56 -29
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -16
- data/lib/rubocop/cop/lint/useless_comparison.rb +3 -2
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +2 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -20
- data/lib/rubocop/cop/lint/void.rb +10 -11
- data/lib/rubocop/cop/metrics/abc_size.rb +3 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -1
- data/lib/rubocop/cop/metrics/class_length.rb +1 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -2
- data/lib/rubocop/cop/metrics/line_length.rb +35 -13
- data/lib/rubocop/cop/metrics/method_length.rb +2 -1
- data/lib/rubocop/cop/metrics/module_length.rb +1 -0
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +4 -2
- data/lib/rubocop/cop/mixin/access_modifier_node.rb +3 -10
- data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -0
- data/lib/rubocop/cop/mixin/array_hash_indentation.rb +80 -0
- data/lib/rubocop/cop/mixin/array_syntax.rb +2 -1
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +14 -20
- data/lib/rubocop/cop/mixin/autocorrect_unless_changing_ast.rb +5 -4
- data/lib/rubocop/cop/mixin/check_assignment.rb +20 -15
- data/lib/rubocop/cop/mixin/classish_length.rb +1 -0
- data/lib/rubocop/cop/mixin/code_length.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +17 -15
- data/lib/rubocop/cop/mixin/configurable_max.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +4 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +9 -4
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +24 -16
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -2
- data/lib/rubocop/cop/mixin/hash_node.rb +15 -0
- data/lib/rubocop/cop/mixin/if_node.rb +1 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -0
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -0
- data/lib/rubocop/cop/mixin/min_body_length.rb +1 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +177 -0
- data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -0
- data/lib/rubocop/cop/mixin/on_method_def.rb +6 -5
- data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +1 -0
- data/lib/rubocop/cop/mixin/parentheses.rb +22 -0
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -0
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -0
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +79 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -1
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +2 -1
- data/lib/rubocop/cop/mixin/space_inside.rb +2 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +6 -5
- data/lib/rubocop/cop/mixin/string_help.rb +2 -9
- data/lib/rubocop/cop/mixin/string_literals_help.rb +13 -7
- data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +134 -0
- data/lib/rubocop/cop/mixin/unused_argument.rb +1 -0
- data/lib/rubocop/cop/offense.rb +19 -14
- data/lib/rubocop/cop/performance/case_when_splat.rb +8 -8
- data/lib/rubocop/cop/performance/casecmp.rb +54 -0
- data/lib/rubocop/cop/performance/count.rb +10 -9
- data/lib/rubocop/cop/performance/detect.rb +6 -5
- data/lib/rubocop/cop/performance/double_start_end_with.rb +65 -0
- data/lib/rubocop/cop/performance/end_with.rb +55 -0
- data/lib/rubocop/cop/performance/fixed_size.rb +1 -0
- data/lib/rubocop/cop/performance/flat_map.rb +9 -8
- data/lib/rubocop/cop/performance/hash_each.rb +86 -0
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +44 -0
- data/lib/rubocop/cop/performance/range_include.rb +40 -0
- data/lib/rubocop/cop/performance/redundant_block_call.rb +57 -0
- data/lib/rubocop/cop/performance/redundant_match.rb +51 -0
- data/lib/rubocop/cop/performance/redundant_merge.rb +85 -0
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +45 -0
- data/lib/rubocop/cop/performance/reverse_each.rb +3 -2
- data/lib/rubocop/cop/performance/sample.rb +6 -5
- data/lib/rubocop/cop/performance/size.rb +2 -1
- data/lib/rubocop/cop/performance/start_with.rb +58 -0
- data/lib/rubocop/cop/performance/string_replacement.rb +18 -23
- data/lib/rubocop/cop/performance/times_map.rb +49 -0
- data/lib/rubocop/cop/rails/action_filter.rb +4 -3
- data/lib/rubocop/cop/rails/date.rb +5 -4
- data/lib/rubocop/cop/rails/delegate.rb +3 -2
- data/lib/rubocop/cop/rails/find_by.rb +20 -14
- data/lib/rubocop/cop/rails/find_each.rb +23 -2
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +3 -2
- data/lib/rubocop/cop/rails/output.rb +4 -2
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +3 -2
- data/lib/rubocop/cop/rails/read_write_attribute.rb +5 -7
- data/lib/rubocop/cop/rails/scope_args.rb +3 -2
- data/lib/rubocop/cop/rails/time_zone.rb +14 -10
- data/lib/rubocop/cop/rails/validation.rb +4 -3
- data/lib/rubocop/cop/severity.rb +8 -7
- data/lib/rubocop/cop/style/access_modifier_indentation.rb +5 -4
- data/lib/rubocop/cop/style/accessor_method_name.rb +1 -0
- data/lib/rubocop/cop/style/alias.rb +84 -24
- data/lib/rubocop/cop/style/align_array.rb +2 -1
- data/lib/rubocop/cop/style/align_hash.rb +13 -14
- data/lib/rubocop/cop/style/align_parameters.rb +3 -2
- data/lib/rubocop/cop/style/and_or.rb +9 -7
- data/lib/rubocop/cop/style/array_join.rb +5 -5
- data/lib/rubocop/cop/style/ascii_comments.rb +2 -1
- data/lib/rubocop/cop/style/ascii_identifiers.rb +2 -1
- data/lib/rubocop/cop/style/attr.rb +30 -5
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +3 -3
- data/lib/rubocop/cop/style/bare_percent_literals.rb +2 -1
- data/lib/rubocop/cop/style/begin_block.rb +2 -1
- data/lib/rubocop/cop/style/block_comments.rb +2 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +10 -9
- data/lib/rubocop/cop/style/block_end_newline.rb +3 -2
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +9 -8
- data/lib/rubocop/cop/style/case_equality.rb +2 -1
- data/lib/rubocop/cop/style/case_indentation.rb +2 -1
- data/lib/rubocop/cop/style/character_literal.rb +11 -7
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +2 -1
- data/lib/rubocop/cop/style/class_and_module_children.rb +3 -2
- data/lib/rubocop/cop/style/class_check.rb +2 -1
- data/lib/rubocop/cop/style/class_methods.rb +2 -1
- data/lib/rubocop/cop/style/class_vars.rb +2 -1
- data/lib/rubocop/cop/style/closing_parenthesis_indentation.rb +3 -2
- data/lib/rubocop/cop/style/collection_methods.rb +2 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +8 -7
- data/lib/rubocop/cop/style/comment_annotation.rb +3 -2
- data/lib/rubocop/cop/style/comment_indentation.rb +4 -6
- data/lib/rubocop/cop/style/conditional_assignment.rb +362 -0
- data/lib/rubocop/cop/style/constant_name.rb +2 -1
- data/lib/rubocop/cop/style/copyright.rb +7 -6
- data/lib/rubocop/cop/style/def_with_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/deprecated_hash_methods.rb +3 -2
- data/lib/rubocop/cop/style/documentation.rb +7 -11
- data/lib/rubocop/cop/style/dot_position.rb +3 -2
- data/lib/rubocop/cop/style/double_negation.rb +2 -1
- data/lib/rubocop/cop/style/each_with_object.rb +4 -3
- data/lib/rubocop/cop/style/else_alignment.rb +3 -2
- data/lib/rubocop/cop/style/empty_else.rb +4 -3
- data/lib/rubocop/cop/style/empty_line_between_defs.rb +2 -1
- data/lib/rubocop/cop/style/empty_lines.rb +10 -4
- data/lib/rubocop/cop/style/empty_lines_around_access_modifier.rb +13 -5
- data/lib/rubocop/cop/style/empty_lines_around_block_body.rb +7 -3
- data/lib/rubocop/cop/style/empty_lines_around_class_body.rb +6 -3
- data/lib/rubocop/cop/style/empty_lines_around_method_body.rb +4 -3
- data/lib/rubocop/cop/style/empty_lines_around_module_body.rb +4 -2
- data/lib/rubocop/cop/style/empty_literal.rb +20 -5
- data/lib/rubocop/cop/style/encoding.rb +8 -11
- data/lib/rubocop/cop/style/end_block.rb +3 -1
- data/lib/rubocop/cop/style/end_of_line.rb +2 -1
- data/lib/rubocop/cop/style/even_odd.rb +4 -3
- data/lib/rubocop/cop/style/extra_spacing.rb +110 -74
- data/lib/rubocop/cop/style/file_name.rb +103 -6
- data/lib/rubocop/cop/style/first_array_element_line_break.rb +3 -2
- data/lib/rubocop/cop/style/first_hash_element_line_break.rb +5 -6
- data/lib/rubocop/cop/style/first_method_argument_line_break.rb +14 -1
- data/lib/rubocop/cop/style/first_method_parameter_line_break.rb +2 -1
- data/lib/rubocop/cop/style/first_parameter_indentation.rb +6 -4
- data/lib/rubocop/cop/style/flip_flop.rb +2 -1
- data/lib/rubocop/cop/style/for.rb +2 -1
- data/lib/rubocop/cop/style/format_string.rb +1 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +89 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -1
- data/lib/rubocop/cop/style/guard_clause.rb +63 -11
- data/lib/rubocop/cop/style/hash_syntax.rb +10 -10
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +93 -0
- data/lib/rubocop/cop/style/if_inside_else.rb +49 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +6 -5
- data/lib/rubocop/cop/style/if_with_semicolon.rb +2 -1
- data/lib/rubocop/cop/style/indent_array.rb +89 -38
- data/lib/rubocop/cop/style/indent_assignment.rb +43 -0
- data/lib/rubocop/cop/style/indent_hash.rb +16 -77
- data/lib/rubocop/cop/style/indentation_consistency.rb +2 -1
- data/lib/rubocop/cop/style/indentation_width.rb +11 -11
- data/lib/rubocop/cop/style/infinite_loop.rb +5 -9
- data/lib/rubocop/cop/style/initial_indentation.rb +2 -1
- data/lib/rubocop/cop/style/inline_comment.rb +2 -1
- data/lib/rubocop/cop/style/lambda.rb +14 -11
- data/lib/rubocop/cop/style/lambda_call.rb +4 -4
- data/lib/rubocop/cop/style/leading_comment_space.rb +2 -1
- data/lib/rubocop/cop/style/line_end_concatenation.rb +3 -1
- data/lib/rubocop/cop/style/method_call_parentheses.rb +9 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -4
- data/lib/rubocop/cop/style/method_name.rb +1 -0
- data/lib/rubocop/cop/style/missing_else.rb +5 -3
- data/lib/rubocop/cop/style/module_function.rb +2 -1
- data/lib/rubocop/cop/style/multiline_array_brace_layout.rb +95 -0
- data/lib/rubocop/cop/style/multiline_assignment_layout.rb +91 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
- data/lib/rubocop/cop/style/multiline_block_layout.rb +11 -9
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -0
- data/lib/rubocop/cop/style/multiline_method_call_indentation.rb +137 -0
- data/lib/rubocop/cop/style/multiline_operation_indentation.rb +25 -135
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +2 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -5
- data/lib/rubocop/cop/style/negated_if.rb +3 -3
- data/lib/rubocop/cop/style/negated_while.rb +3 -3
- data/lib/rubocop/cop/style/nested_modifier.rb +6 -5
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +48 -0
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -1
- data/lib/rubocop/cop/style/next.rb +79 -15
- data/lib/rubocop/cop/style/nil_comparison.rb +5 -5
- data/lib/rubocop/cop/style/non_nil_check.rb +5 -5
- data/lib/rubocop/cop/style/not.rb +5 -9
- data/lib/rubocop/cop/style/numeric_literals.rb +5 -4
- data/lib/rubocop/cop/style/one_line_conditional.rb +3 -2
- data/lib/rubocop/cop/style/op_method.rb +7 -4
- data/lib/rubocop/cop/style/option_hash.rb +13 -7
- data/lib/rubocop/cop/style/optional_arguments.rb +3 -2
- data/lib/rubocop/cop/style/parallel_assignment.rb +40 -16
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +3 -16
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +3 -2
- data/lib/rubocop/cop/style/percent_q_literals.rb +3 -6
- data/lib/rubocop/cop/style/perl_backrefs.rb +4 -3
- data/lib/rubocop/cop/style/predicate_name.rb +1 -0
- data/lib/rubocop/cop/style/proc.rb +3 -2
- data/lib/rubocop/cop/style/raise_args.rb +2 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +2 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +5 -5
- data/lib/rubocop/cop/style/redundant_freeze.rb +5 -4
- data/lib/rubocop/cop/style/redundant_parentheses.rb +80 -0
- data/lib/rubocop/cop/style/redundant_return.rb +5 -4
- data/lib/rubocop/cop/style/redundant_self.rb +7 -8
- data/lib/rubocop/cop/style/regexp_literal.rb +9 -8
- data/lib/rubocop/cop/style/rescue_ensure_alignment.rb +3 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +11 -9
- data/lib/rubocop/cop/style/self_assignment.rb +4 -5
- data/lib/rubocop/cop/style/semicolon.rb +3 -2
- data/lib/rubocop/cop/style/send.rb +3 -1
- data/lib/rubocop/cop/style/signal_exception.rb +5 -3
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +7 -7
- data/lib/rubocop/cop/style/space_after_colon.rb +2 -1
- data/lib/rubocop/cop/style/space_after_comma.rb +1 -0
- data/lib/rubocop/cop/style/space_after_control_keyword.rb +5 -5
- data/lib/rubocop/cop/style/space_after_method_name.rb +3 -2
- data/lib/rubocop/cop/style/space_after_not.rb +4 -3
- data/lib/rubocop/cop/style/space_after_semicolon.rb +1 -0
- data/lib/rubocop/cop/style/space_around_block_parameters.rb +8 -7
- data/lib/rubocop/cop/style/space_around_equals_in_parameter_default.rb +1 -0
- data/lib/rubocop/cop/style/space_around_operators.rb +72 -32
- data/lib/rubocop/cop/style/space_before_block_braces.rb +2 -1
- data/lib/rubocop/cop/style/space_before_comma.rb +1 -0
- data/lib/rubocop/cop/style/space_before_comment.rb +2 -1
- data/lib/rubocop/cop/style/{single_space_before_first_arg.rb → space_before_first_arg.rb} +13 -4
- data/lib/rubocop/cop/style/space_before_modifier_keyword.rb +4 -3
- data/lib/rubocop/cop/style/space_before_semicolon.rb +1 -0
- data/lib/rubocop/cop/style/space_inside_block_braces.rb +3 -2
- data/lib/rubocop/cop/style/space_inside_brackets.rb +1 -0
- data/lib/rubocop/cop/style/space_inside_hash_literal_braces.rb +4 -1
- data/lib/rubocop/cop/style/space_inside_parens.rb +1 -0
- data/lib/rubocop/cop/style/space_inside_range_literal.rb +5 -4
- data/lib/rubocop/cop/style/space_inside_string_interpolation.rb +8 -17
- data/lib/rubocop/cop/style/special_global_vars.rb +97 -52
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +16 -9
- data/lib/rubocop/cop/style/string_literals.rb +41 -1
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +2 -1
- data/lib/rubocop/cop/style/string_methods.rb +2 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -2
- data/lib/rubocop/cop/style/symbol_array.rb +74 -7
- data/lib/rubocop/cop/style/symbol_literal.rb +4 -7
- data/lib/rubocop/cop/style/symbol_proc.rb +11 -7
- data/lib/rubocop/cop/style/tab.rb +25 -2
- data/lib/rubocop/cop/style/trailing_blank_lines.rb +1 -2
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +45 -0
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +56 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -7
- data/lib/rubocop/cop/style/trailing_whitespace.rb +2 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +18 -9
- data/lib/rubocop/cop/style/unless_else.rb +2 -1
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +4 -3
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +87 -0
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +23 -7
- data/lib/rubocop/cop/style/variable_interpolation.rb +8 -6
- data/lib/rubocop/cop/style/variable_name.rb +1 -0
- data/lib/rubocop/cop/style/when_then.rb +2 -1
- data/lib/rubocop/cop/style/while_until_do.rb +3 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +3 -4
- data/lib/rubocop/cop/style/word_array.rb +74 -51
- data/lib/rubocop/cop/team.rb +21 -15
- data/lib/rubocop/cop/util.rb +102 -69
- data/lib/rubocop/cop/variable_force.rb +2 -1
- data/lib/rubocop/cop/variable_force/assignment.rb +2 -1
- data/lib/rubocop/cop/variable_force/locatable.rb +1 -0
- data/lib/rubocop/cop/variable_force/reference.rb +1 -0
- data/lib/rubocop/cop/variable_force/scope.rb +2 -1
- data/lib/rubocop/cop/variable_force/variable.rb +2 -1
- data/lib/rubocop/cop/variable_force/variable_table.rb +2 -1
- data/lib/rubocop/error.rb +12 -0
- data/lib/rubocop/formatter/base_formatter.rb +10 -1
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -0
- data/lib/rubocop/formatter/colorizable.rb +6 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +29 -15
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +3 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +7 -3
- data/lib/rubocop/formatter/file_list_formatter.rb +1 -0
- data/lib/rubocop/formatter/formatter_set.rb +10 -19
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +2 -1
- data/lib/rubocop/formatter/html_formatter.rb +15 -14
- data/lib/rubocop/formatter/json_formatter.rb +2 -1
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -0
- data/lib/rubocop/formatter/progress_formatter.rb +3 -3
- data/lib/rubocop/formatter/simple_text_formatter.rb +50 -17
- data/lib/rubocop/formatter/text_util.rb +8 -10
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +61 -0
- data/lib/rubocop/name_similarity.rb +22 -0
- data/lib/rubocop/node_pattern.rb +126 -35
- data/lib/rubocop/options.rb +28 -19
- data/lib/rubocop/path_util.rb +1 -0
- data/lib/rubocop/processed_source.rb +41 -16
- data/lib/rubocop/rake_task.rb +6 -9
- data/lib/rubocop/remote_config.rb +1 -0
- data/lib/rubocop/result_cache.rb +60 -43
- data/lib/rubocop/runner.rb +48 -45
- data/lib/rubocop/string_util.rb +1 -0
- data/lib/rubocop/target_finder.rb +2 -1
- data/lib/rubocop/token.rb +1 -0
- data/lib/rubocop/version.rb +3 -2
- data/lib/rubocop/warning.rb +1 -0
- data/relnotes/v0.36.0.md +306 -0
- data/rubocop.gemspec +3 -9
- metadata +48 -92
- data/lib/rubocop/cop/lint/space_before_first_arg.rb +0 -44
- data/lib/rubocop/cop/rails/default_scope.rb +0 -33
- data/lib/rubocop/cop/style/trailing_comma.rb +0 -182
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -9,10 +10,10 @@ module RuboCop
|
|
9
10
|
include OnNormalIfUnless
|
10
11
|
|
11
12
|
MSG = 'Favor the ternary operator (`?:`) ' \
|
12
|
-
'over `%s/then/else/end` constructs.'
|
13
|
+
'over `%s/then/else/end` constructs.'.freeze
|
13
14
|
|
14
15
|
def on_normal_if_unless(node)
|
15
|
-
exp = node.
|
16
|
+
exp = node.source
|
16
17
|
return if exp.include?("\n")
|
17
18
|
return unless node.loc.respond_to?(:else) && node.loc.else
|
18
19
|
condition = exp.include?('if') ? 'if' : 'unless'
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -6,13 +7,15 @@ module RuboCop
|
|
6
7
|
# This cop makes sure that certain operator methods have their sole
|
7
8
|
# parameter named `other`.
|
8
9
|
class OpMethod < Cop
|
9
|
-
MSG = 'When defining the `%s` operator,
|
10
|
+
MSG = 'When defining the `%s` operator, ' \
|
11
|
+
'name its argument `other`.'.freeze
|
10
12
|
|
11
|
-
OP_LIKE_METHODS = [:eql?, :equal?]
|
13
|
+
OP_LIKE_METHODS = [:eql?, :equal?].freeze
|
12
14
|
|
13
|
-
BLACKLISTED = [:+@, :-@, :[], :[]=, :<<]
|
15
|
+
BLACKLISTED = [:+@, :-@, :[], :[]=, :<<].freeze
|
14
16
|
|
15
|
-
TARGET_ARGS = [s(:args, s(:arg, :other)),
|
17
|
+
TARGET_ARGS = [s(:args, s(:arg, :other)),
|
18
|
+
s(:args, s(:arg, :_other))].freeze
|
16
19
|
|
17
20
|
def on_def(node)
|
18
21
|
name, args, _body = *node
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -20,11 +21,9 @@ module RuboCop
|
|
20
21
|
# ...
|
21
22
|
# end
|
22
23
|
class OptionHash < Cop
|
23
|
-
MSG = 'Prefer keyword arguments to options hashes.'
|
24
|
+
MSG = 'Prefer keyword arguments to options hashes.'.freeze
|
24
25
|
|
25
26
|
def on_args(node)
|
26
|
-
return unless supports_keyword_arguments?
|
27
|
-
|
28
27
|
*_but_last, last_arg = *node
|
29
28
|
|
30
29
|
# asserting that there was an argument at all
|
@@ -48,12 +47,19 @@ module RuboCop
|
|
48
47
|
add_offense(last_arg, :expression, MSG)
|
49
48
|
end
|
50
49
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
50
|
+
def validate_config
|
51
|
+
if target_ruby_version < 2.0
|
52
|
+
fail ValidationError, 'The `Style/OptionHash` cop is only ' \
|
53
|
+
'compatible with Ruby 2.0 and up, but the ' \
|
54
|
+
'target Ruby version for your project is ' \
|
55
|
+
"1.9.\nPlease disable this cop or adjust " \
|
56
|
+
'the `TargetRubyVersion` parameter in your ' \
|
57
|
+
'configuration.'
|
58
|
+
end
|
55
59
|
end
|
56
60
|
|
61
|
+
private
|
62
|
+
|
57
63
|
def name_in_suspicious_param_names?(arg_name)
|
58
64
|
cop_config.key?('SuspiciousParamNames') &&
|
59
65
|
cop_config['SuspiciousParamNames'].include?(arg_name.to_s)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -18,8 +19,8 @@ module RuboCop
|
|
18
19
|
# def foobar(a = 1, b = 2, c = 3)
|
19
20
|
# end
|
20
21
|
class OptionalArguments < Cop
|
21
|
-
MSG =
|
22
|
-
|
22
|
+
MSG = 'Optional arguments should appear at the end ' \
|
23
|
+
'of the argument list.'.freeze
|
23
24
|
|
24
25
|
def on_def(node)
|
25
26
|
_method, arguments, = *node
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'tsort'
|
4
5
|
|
@@ -25,7 +26,7 @@ module RuboCop
|
|
25
26
|
class ParallelAssignment < Cop
|
26
27
|
include IfNode
|
27
28
|
|
28
|
-
MSG = 'Do not use parallel assignment.'
|
29
|
+
MSG = 'Do not use parallel assignment.'.freeze
|
29
30
|
|
30
31
|
def on_masgn(node)
|
31
32
|
left, right = *node
|
@@ -99,6 +100,7 @@ module RuboCop
|
|
99
100
|
|
100
101
|
def_node_matcher :var_name, '{(casgn _ $_) (_ $_)}'
|
101
102
|
def_node_search :uses_var?, '{({lvar ivar cvar gvar} %) (const _ %)}'
|
103
|
+
def_node_search :matching_calls, '(send %1 %2 $...)'
|
102
104
|
|
103
105
|
def initialize(assignments)
|
104
106
|
@assignments = assignments
|
@@ -115,7 +117,23 @@ module RuboCop
|
|
115
117
|
|
116
118
|
@assignments.each do |other|
|
117
119
|
_other_lhs, other_rhs = *other
|
118
|
-
|
120
|
+
if ((var = var_name(my_lhs)) && uses_var?(other_rhs, var)) ||
|
121
|
+
(my_lhs.asgn_method_call? && accesses?(other_rhs, my_lhs))
|
122
|
+
yield other
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# `lhs` is an assignment method call like `obj.attr=` or `ary[idx]=`.
|
128
|
+
# Does `rhs` access the same value which is assigned by `lhs`?
|
129
|
+
def accesses?(rhs, lhs)
|
130
|
+
if lhs.method_name == :[]=
|
131
|
+
matching_calls(rhs, lhs.receiver, :[]).any? do |args|
|
132
|
+
args == lhs.method_args
|
133
|
+
end
|
134
|
+
else
|
135
|
+
access_method = lhs.method_name.to_s.chop.to_sym
|
136
|
+
matching_calls(rhs, lhs.receiver, access_method).any?
|
119
137
|
end
|
120
138
|
end
|
121
139
|
end
|
@@ -151,25 +169,29 @@ module RuboCop
|
|
151
169
|
end
|
152
170
|
|
153
171
|
def correction
|
154
|
-
|
172
|
+
assignment.join("\n#{offset(node)}")
|
155
173
|
end
|
156
174
|
|
157
175
|
def correction_range
|
158
|
-
node.
|
176
|
+
node.source_range
|
159
177
|
end
|
160
178
|
|
161
179
|
protected
|
162
180
|
|
163
181
|
def assignment
|
164
182
|
@new_elements.map do |lhs, rhs|
|
165
|
-
"#{lhs.
|
183
|
+
"#{lhs.source} = #{rhs.source}"
|
166
184
|
end
|
167
185
|
end
|
168
186
|
|
169
187
|
private
|
170
188
|
|
171
189
|
def extract_sources(node)
|
172
|
-
node.children.map
|
190
|
+
node.children.map(&:source)
|
191
|
+
end
|
192
|
+
|
193
|
+
def cop_config
|
194
|
+
@config.for_cop('Style/ParallelAssignment')
|
173
195
|
end
|
174
196
|
end
|
175
197
|
|
@@ -180,15 +202,16 @@ module RuboCop
|
|
180
202
|
_node, rescue_clause = *node.parent
|
181
203
|
_, _, rescue_result = *rescue_clause
|
182
204
|
|
183
|
-
"begin\n"
|
184
|
-
|
185
|
-
"\n#{
|
186
|
-
|
205
|
+
"begin\n" \
|
206
|
+
"#{indentation(node)}" \
|
207
|
+
"#{assignment.join("\n#{indentation(node)}")}" \
|
208
|
+
"\n#{offset(node)}rescue\n" \
|
209
|
+
"#{indentation(node)}#{rescue_result.source}" \
|
187
210
|
"\n#{offset(node)}end"
|
188
211
|
end
|
189
212
|
|
190
213
|
def correction_range
|
191
|
-
node.parent.
|
214
|
+
node.parent.source_range
|
192
215
|
end
|
193
216
|
end
|
194
217
|
|
@@ -199,17 +222,18 @@ module RuboCop
|
|
199
222
|
parent = node.parent
|
200
223
|
|
201
224
|
modifier_range =
|
202
|
-
Parser::Source::Range.new(parent.
|
225
|
+
Parser::Source::Range.new(parent.source_range.source_buffer,
|
203
226
|
parent.loc.keyword.begin_pos,
|
204
|
-
parent.
|
227
|
+
parent.source_range.end_pos)
|
205
228
|
|
206
|
-
"#{modifier_range.source}\n"
|
207
|
-
|
229
|
+
"#{modifier_range.source}\n" \
|
230
|
+
"#{indentation(node)}" \
|
231
|
+
"#{assignment.join("\n#{indentation(node)}")}" \
|
208
232
|
"\n#{offset(node)}end"
|
209
233
|
end
|
210
234
|
|
211
235
|
def correction_range
|
212
|
-
node.parent.
|
236
|
+
node.parent.source_range
|
213
237
|
end
|
214
238
|
end
|
215
239
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -8,6 +9,7 @@ module RuboCop
|
|
8
9
|
class ParenthesesAroundCondition < Cop
|
9
10
|
include IfNode
|
10
11
|
include SafeAssignment
|
12
|
+
include Parentheses
|
11
13
|
|
12
14
|
def on_if(node)
|
13
15
|
return if ternary_op?(node)
|
@@ -31,7 +33,7 @@ module RuboCop
|
|
31
33
|
# handle `if (something rescue something_else) ...`
|
32
34
|
return if modifier_op?(cond.children.first)
|
33
35
|
# check if there's any whitespace between the keyword and the cond
|
34
|
-
return if parens_required?(node)
|
36
|
+
return if parens_required?(node.children.first)
|
35
37
|
# allow safe assignment
|
36
38
|
return if safe_assignment?(cond) && safe_assignment_allowed?
|
37
39
|
|
@@ -46,26 +48,11 @@ module RuboCop
|
|
46
48
|
node.loc.end.nil?
|
47
49
|
end
|
48
50
|
|
49
|
-
def parens_required?(node)
|
50
|
-
exp = node.loc.expression
|
51
|
-
kw = node.loc.keyword
|
52
|
-
kw_offset = kw.begin_pos - exp.begin_pos
|
53
|
-
|
54
|
-
exp.source[kw_offset..-1].start_with?(kw.source + '(')
|
55
|
-
end
|
56
|
-
|
57
51
|
def message(node)
|
58
52
|
kw = node.loc.keyword.source
|
59
53
|
article = kw == 'while' ? 'a' : 'an'
|
60
54
|
"Don't use parentheses around the condition of #{article} `#{kw}`."
|
61
55
|
end
|
62
|
-
|
63
|
-
def autocorrect(node)
|
64
|
-
lambda do |corrector|
|
65
|
-
corrector.remove(node.loc.begin)
|
66
|
-
corrector.remove(node.loc.end)
|
67
|
-
end
|
68
|
-
end
|
69
56
|
end
|
70
57
|
end
|
71
58
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -18,7 +19,7 @@ module RuboCop
|
|
18
19
|
def on_str(node)
|
19
20
|
process(node, '%', '%Q', '%q')
|
20
21
|
end
|
21
|
-
|
22
|
+
alias on_dstr on_str
|
22
23
|
|
23
24
|
def on_sym(node)
|
24
25
|
process(node, '%s')
|
@@ -76,7 +77,7 @@ module RuboCop
|
|
76
77
|
if node.is_a?(String)
|
77
78
|
node
|
78
79
|
elsif node.respond_to?(:type) && node.type == :str
|
79
|
-
node.
|
80
|
+
node.source
|
80
81
|
end
|
81
82
|
end
|
82
83
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -27,20 +28,16 @@ module RuboCop
|
|
27
28
|
end
|
28
29
|
|
29
30
|
def check(node, msg)
|
30
|
-
src = node.loc.expression.source
|
31
31
|
# Report offense only if changing case doesn't change semantics,
|
32
32
|
# i.e., if the string would become dynamic or has special characters.
|
33
|
-
return if node.children !=
|
34
|
-
ProcessedSource.new(corrected(src)).ast.children
|
33
|
+
return if node.children != parse(corrected(node.source)).ast.children
|
35
34
|
|
36
35
|
add_offense(node, :begin, msg)
|
37
36
|
end
|
38
37
|
|
39
38
|
def autocorrect(node)
|
40
|
-
src = node.loc.expression.source
|
41
|
-
|
42
39
|
lambda do |corrector|
|
43
|
-
corrector.replace(node.
|
40
|
+
corrector.replace(node.source_range, corrected(node.source))
|
44
41
|
end
|
45
42
|
end
|
46
43
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -6,7 +7,7 @@ module RuboCop
|
|
6
7
|
# This cop looks for uses of Perl-style regexp match
|
7
8
|
# backreferences like $1, $2, etc.
|
8
9
|
class PerlBackrefs < Cop
|
9
|
-
MSG = 'Avoid the use of Perl-style backrefs.'
|
10
|
+
MSG = 'Avoid the use of Perl-style backrefs.'.freeze
|
10
11
|
|
11
12
|
def on_nth_ref(node)
|
12
13
|
add_offense(node, :expression)
|
@@ -17,10 +18,10 @@ module RuboCop
|
|
17
18
|
backref, = *node
|
18
19
|
parent_type = node.parent ? node.parent.type : nil
|
19
20
|
if [:dstr, :xstr, :regexp].include?(parent_type)
|
20
|
-
corrector.replace(node.
|
21
|
+
corrector.replace(node.source_range,
|
21
22
|
"{Regexp.last_match(#{backref})}")
|
22
23
|
else
|
23
|
-
corrector.replace(node.
|
24
|
+
corrector.replace(node.source_range,
|
24
25
|
"Regexp.last_match(#{backref})")
|
25
26
|
end
|
26
27
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -6,7 +7,7 @@ module RuboCop
|
|
6
7
|
# This cops checks for uses of Proc.new where Kernel#proc
|
7
8
|
# would be more appropriate.
|
8
9
|
class Proc < Cop
|
9
|
-
MSG = 'Use `proc` instead of `Proc.new`.'
|
10
|
+
MSG = 'Use `proc` instead of `Proc.new`.'.freeze
|
10
11
|
|
11
12
|
TARGET = s(:send, s(:const, nil, :Proc), :new)
|
12
13
|
|
@@ -22,7 +23,7 @@ module RuboCop
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def autocorrect(node)
|
25
|
-
->(corrector) { corrector.replace(node.
|
26
|
+
->(corrector) { corrector.replace(node.source_range, 'proc') }
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -8,7 +9,7 @@ module RuboCop
|
|
8
9
|
include ConfigurableEnforcedStyle
|
9
10
|
|
10
11
|
def on_send(node)
|
11
|
-
return unless command?(:raise
|
12
|
+
return unless node.command?(:raise) || node.command?(:fail)
|
12
13
|
|
13
14
|
case style
|
14
15
|
when :compact
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -27,7 +28,7 @@ module RuboCop
|
|
27
28
|
class RedundantBegin < Cop
|
28
29
|
include OnMethodDef
|
29
30
|
|
30
|
-
MSG = 'Redundant `begin` block detected.'
|
31
|
+
MSG = 'Redundant `begin` block detected.'.freeze
|
31
32
|
|
32
33
|
def on_method_def(_node, _method_name, _args, body)
|
33
34
|
return unless body && body.type == :kwbegin
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -11,12 +12,12 @@ module RuboCop
|
|
11
12
|
#
|
12
13
|
# raise RuntimeError, 'message'
|
13
14
|
class RedundantException < Cop
|
14
|
-
MSG = 'Redundant `RuntimeError` argument can be removed.'
|
15
|
+
MSG = 'Redundant `RuntimeError` argument can be removed.'.freeze
|
15
16
|
|
16
17
|
TARGET_NODE = s(:const, nil, :RuntimeError)
|
17
18
|
|
18
19
|
def on_send(node)
|
19
|
-
return unless command?(:raise
|
20
|
+
return unless node.command?(:raise) || node.command?(:fail)
|
20
21
|
|
21
22
|
_receiver, _selector, *args = *node
|
22
23
|
|
@@ -29,9 +30,8 @@ module RuboCop
|
|
29
30
|
|
30
31
|
# switch `raise RuntimeError, 'message'` to `raise 'message'`
|
31
32
|
def autocorrect(node)
|
32
|
-
start_range = node.
|
33
|
-
no_comma = range_with_surrounding_comma(node.
|
34
|
-
:right)
|
33
|
+
start_range = node.source_range.begin
|
34
|
+
no_comma = range_with_surrounding_comma(node.source_range.end, :right)
|
35
35
|
comma_range = start_range.join(no_comma)
|
36
36
|
final_range = range_with_surrounding_space(comma_range, :right)
|
37
37
|
->(corrector) { corrector.replace(final_range, '') }
|