rubocop 0.35.1 → 0.36.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.
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,11 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
5
6
|
# Common code for ordinary arrays with [] that can be written with %
|
6
7
|
# syntax.
|
7
8
|
module ArraySyntax
|
8
|
-
def
|
9
|
+
def bracketed_array_of?(element_type, node)
|
9
10
|
return false unless square_brackets?(node)
|
10
11
|
|
11
12
|
array_elems = node.children
|
@@ -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,7 +10,8 @@ module RuboCop
|
|
9
10
|
SPACE = ' '.freeze
|
10
11
|
|
11
12
|
def configured_indentation_width
|
12
|
-
|
13
|
+
cop_config['IndentationWidth'] ||
|
14
|
+
config.for_cop('IndentationWidth')['Width']
|
13
15
|
end
|
14
16
|
|
15
17
|
def indentation(node)
|
@@ -24,10 +26,11 @@ module RuboCop
|
|
24
26
|
base_column ||= items.first.loc.column unless items.empty?
|
25
27
|
prev_line = -1
|
26
28
|
items.each do |current|
|
27
|
-
if current.loc.line > prev_line &&
|
29
|
+
if current.loc.line > prev_line &&
|
30
|
+
begins_its_line?(current.source_range)
|
28
31
|
@column_delta = base_column - current.loc.column
|
29
32
|
if @column_delta != 0
|
30
|
-
expr = current.
|
33
|
+
expr = current.source_range
|
31
34
|
if offenses.any? { |o| within?(expr, o.location) }
|
32
35
|
# If this offense is within a line range that is already being
|
33
36
|
# realigned by autocorrect, we report the offense without
|
@@ -44,10 +47,6 @@ module RuboCop
|
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
47
|
-
def start_of_line?(loc)
|
48
|
-
loc.expression.source_line[0...loc.column].blank?
|
49
|
-
end
|
50
|
-
|
51
50
|
def autocorrect(arg)
|
52
51
|
return unless arg
|
53
52
|
|
@@ -74,28 +73,24 @@ module RuboCop
|
|
74
73
|
def autocorrect_line(corrector, line_begin_pos, expr, column_delta,
|
75
74
|
heredoc_ranges)
|
76
75
|
range = calculate_range(expr, line_begin_pos, column_delta)
|
77
|
-
# We must not change indentation of heredoc
|
76
|
+
# We must not change indentation of heredoc strings.
|
78
77
|
return if heredoc_ranges.any? { |h| within?(range, h) }
|
79
78
|
|
80
79
|
if column_delta > 0
|
81
80
|
unless range.source == "\n"
|
82
81
|
corrector.insert_before(range, ' ' * column_delta)
|
83
82
|
end
|
84
|
-
|
85
|
-
remove(range, corrector)
|
83
|
+
elsif range.source =~ /\A[ \t]+\z/
|
84
|
+
remove(range, corrector)
|
86
85
|
end
|
87
86
|
end
|
88
87
|
|
89
88
|
def heredoc_ranges(arg)
|
90
89
|
return [] unless arg.is_a?(Parser::AST::Node)
|
91
90
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
heredoc_ranges << n.loc.heredoc_body.join(n.loc.heredoc_end)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
heredoc_ranges
|
91
|
+
arg.each_node(:dstr)
|
92
|
+
.select { |n| n.loc.respond_to?(:heredoc_body) }
|
93
|
+
.map { |n| n.loc.heredoc_body.join(n.loc.heredoc_end) }
|
99
94
|
end
|
100
95
|
|
101
96
|
def block_comment_within?(expr)
|
@@ -133,11 +128,10 @@ module RuboCop
|
|
133
128
|
end
|
134
129
|
|
135
130
|
def each_line(expr)
|
136
|
-
|
131
|
+
line_begin_pos = expr.begin_pos
|
137
132
|
expr.source.each_line do |line|
|
138
|
-
line_begin_pos = expr.begin_pos + offset
|
139
133
|
yield line_begin_pos
|
140
|
-
|
134
|
+
line_begin_pos += line.length
|
141
135
|
end
|
142
136
|
end
|
143
137
|
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
|
@@ -12,11 +13,11 @@ module RuboCop
|
|
12
13
|
module AutocorrectUnlessChangingAST
|
13
14
|
def autocorrect(node)
|
14
15
|
current_buffer_src = processed_source.buffer.source
|
15
|
-
replaced_range = node.
|
16
|
+
replaced_range = node.source_range
|
16
17
|
pre = current_buffer_src[0...replaced_range.begin_pos]
|
17
18
|
post = current_buffer_src[replaced_range.end_pos..-1]
|
18
19
|
new_buffer_src = pre + rewrite_node(node) + post
|
19
|
-
new_processed_src =
|
20
|
+
new_processed_src = parse(new_buffer_src, processed_source.buffer.name)
|
20
21
|
|
21
22
|
# Make the correction only if it doesn't change the AST for the buffer.
|
22
23
|
return if !new_processed_src.ast ||
|
@@ -29,7 +30,7 @@ module RuboCop
|
|
29
30
|
private
|
30
31
|
|
31
32
|
def rewrite_node(node)
|
32
|
-
ps =
|
33
|
+
ps = parse(node.source)
|
33
34
|
c = correction(ps.ast)
|
34
35
|
Corrector.new(ps.buffer, [c]).rewrite
|
35
36
|
end
|
@@ -46,7 +47,7 @@ module RuboCop
|
|
46
47
|
#
|
47
48
|
class InlineBeginNodes < Parser::AST::Processor
|
48
49
|
def on_begin(node)
|
49
|
-
node.children.one? ? node.children[0] :
|
50
|
+
node.children.one? ? process(node.children[0]) : super
|
50
51
|
end
|
51
52
|
end
|
52
53
|
|
@@ -1,36 +1,41 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
5
6
|
# Common functionality for checking assignment nodes.
|
6
7
|
module CheckAssignment
|
7
|
-
|
8
|
-
TYPES.each do |type|
|
8
|
+
Util::ASGN_NODES.each do |type|
|
9
9
|
define_method("on_#{type}") do |node|
|
10
|
-
|
11
|
-
check_assignment(node, rhs)
|
10
|
+
check_assignment(node, extract_rhs(node))
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
15
|
-
def on_casgn(node)
|
16
|
-
_scope, _lhs, rhs = *node
|
17
|
-
check_assignment(node, rhs)
|
18
|
-
end
|
19
|
-
|
20
|
-
def on_op_asgn(node)
|
21
|
-
_lhs, _op, rhs = *node
|
22
|
-
check_assignment(node, rhs)
|
23
|
-
end
|
24
|
-
|
25
14
|
def on_send(node)
|
26
15
|
# we only want to indent relative to the receiver
|
27
16
|
# when the method called looks like a setter
|
28
17
|
return unless node.asgn_method_call?
|
29
18
|
|
30
19
|
# This will match if, case, begin, blocks, etc.
|
31
|
-
rhs = node
|
20
|
+
rhs = extract_rhs(node)
|
32
21
|
check_assignment(node, rhs) if rhs.is_a?(AST::Node)
|
33
22
|
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def extract_rhs(node)
|
27
|
+
if node.casgn_type?
|
28
|
+
_scope, _lhs, rhs = *node
|
29
|
+
elsif node.op_asgn_type?
|
30
|
+
_lhs, _op, rhs = *node
|
31
|
+
elsif Util::ASGN_NODES.include?(node.type)
|
32
|
+
_lhs, rhs = *node
|
33
|
+
elsif node.send_type?
|
34
|
+
rhs = node.children.last
|
35
|
+
end
|
36
|
+
|
37
|
+
rhs
|
38
|
+
end
|
34
39
|
end
|
35
40
|
end
|
36
41
|
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
|
@@ -49,47 +50,48 @@ module RuboCop
|
|
49
50
|
|
50
51
|
def no_acceptable_style!
|
51
52
|
self.config_to_allow_offenses = { 'Enabled' => false }
|
53
|
+
Formatter::DisabledConfigFormatter.detected_styles[cop_name] = []
|
52
54
|
end
|
53
55
|
|
54
56
|
def detected_style
|
55
|
-
|
57
|
+
Formatter::DisabledConfigFormatter.detected_styles[cop_name] ||= nil
|
56
58
|
end
|
57
59
|
|
58
60
|
def detected_style=(style)
|
61
|
+
Formatter::DisabledConfigFormatter.detected_styles[cop_name] = style
|
62
|
+
|
59
63
|
if style.nil?
|
60
64
|
no_acceptable_style!
|
61
65
|
elsif style.is_a?(Array)
|
62
66
|
if style.empty?
|
63
67
|
no_acceptable_style!
|
64
|
-
elsif style.one?
|
65
|
-
config_to_allow_offenses[parameter_name] = style[0]
|
66
68
|
else
|
67
|
-
config_to_allow_offenses[parameter_name] = style
|
69
|
+
config_to_allow_offenses[parameter_name] = style[0]
|
68
70
|
end
|
69
71
|
else
|
70
72
|
config_to_allow_offenses[parameter_name] = style
|
71
73
|
end
|
72
74
|
end
|
73
75
|
|
74
|
-
|
75
|
-
|
76
|
+
alias conflicting_styles_detected no_acceptable_style!
|
77
|
+
alias unrecognized_style_detected no_acceptable_style!
|
76
78
|
|
77
79
|
def style
|
78
|
-
s = cop_config[parameter_name]
|
79
|
-
if
|
80
|
-
|
81
|
-
else
|
82
|
-
fail "Unknown style #{s} selected!"
|
83
|
-
end
|
80
|
+
s = cop_config[parameter_name].to_sym
|
81
|
+
return s if supported_styles.include?(s)
|
82
|
+
fail "Unknown style #{s} selected!"
|
84
83
|
end
|
85
84
|
|
86
85
|
def alternative_style
|
87
|
-
|
88
|
-
if a.size != 2
|
86
|
+
if supported_styles.size != 2
|
89
87
|
fail 'alternative_style can only be used when there are exactly ' \
|
90
88
|
'2 SupportedStyles'
|
91
89
|
end
|
92
|
-
|
90
|
+
(supported_styles - [style]).first
|
91
|
+
end
|
92
|
+
|
93
|
+
def supported_styles
|
94
|
+
@supported_styles ||= cop_config['SupportedStyles'].map(&:to_sym)
|
93
95
|
end
|
94
96
|
|
95
97
|
def parameter_name
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module RuboCop
|
4
5
|
module Cop
|
@@ -31,6 +32,9 @@ module RuboCop
|
|
31
32
|
# the method has the same name as a class defined in the class/module.
|
32
33
|
def class_emitter_method?(node, name)
|
33
34
|
return false unless node.defs_type?
|
35
|
+
# a class emitter method may be defined inside `def self.included`,
|
36
|
+
# `def self.extended`, etc.
|
37
|
+
node = node.parent while node.parent && node.parent.defs_type?
|
34
38
|
return false unless node.parent
|
35
39
|
|
36
40
|
node.parent.children.compact.any? do |c|
|
@@ -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,8 +9,8 @@ module RuboCop
|
|
8
9
|
module EmptyLinesAroundBody
|
9
10
|
include ConfigurableEnforcedStyle
|
10
11
|
|
11
|
-
MSG_EXTRA = 'Extra empty line detected at %s body %s.'
|
12
|
-
MSG_MISSING = 'Empty line missing at %s body %s.'
|
12
|
+
MSG_EXTRA = 'Extra empty line detected at %s body %s.'.freeze
|
13
|
+
MSG_MISSING = 'Empty line missing at %s body %s.'.freeze
|
13
14
|
|
14
15
|
def autocorrect(range)
|
15
16
|
lambda do |corrector|
|
@@ -22,10 +23,14 @@ module RuboCop
|
|
22
23
|
|
23
24
|
private
|
24
25
|
|
25
|
-
def check(node)
|
26
|
+
def check(node, body)
|
27
|
+
# When style is `empty_lines`, if the body is empty, we don't enforce
|
28
|
+
# the presence OR absence of an empty line
|
29
|
+
# But if style is `no_empty_lines`, there must not be an empty line
|
30
|
+
return unless body || style == :no_empty_lines
|
31
|
+
|
26
32
|
start_line = node.loc.keyword.line
|
27
33
|
end_line = node.loc.end.line
|
28
|
-
|
29
34
|
return if start_line == end_line
|
30
35
|
|
31
36
|
check_source(start_line, end_line)
|
@@ -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,31 +7,32 @@ module RuboCop
|
|
6
7
|
module EndKeywordAlignment
|
7
8
|
include ConfigurableEnforcedStyle
|
8
9
|
|
9
|
-
MSG = '`end` at %d, %d is not aligned with `%s` at %d, %d.'
|
10
|
+
MSG = '`end` at %d, %d is not aligned with `%s` at %d, %d.'.freeze
|
10
11
|
|
11
12
|
private
|
12
13
|
|
13
|
-
def
|
14
|
-
|
14
|
+
def check_end_kw_in_node(node)
|
15
|
+
check_end_kw_alignment(node, style => node.loc.keyword)
|
15
16
|
end
|
16
17
|
|
17
|
-
def
|
18
|
+
def check_end_kw_alignment(node, align_ranges)
|
18
19
|
return if ignored_node?(node)
|
19
20
|
|
20
21
|
end_loc = node.loc.end
|
21
22
|
return unless end_loc # Discard modifier forms of if/while/until.
|
22
23
|
|
23
|
-
|
24
|
+
matching = align_ranges.select do |_, range|
|
25
|
+
range.line == end_loc.line || range.column == end_loc.column
|
26
|
+
end
|
24
27
|
|
25
|
-
if
|
26
|
-
kw_loc.column != end_loc.column + offset
|
27
|
-
add_offense(node, end_loc,
|
28
|
-
format(MSG, end_loc.line, end_loc.column,
|
29
|
-
alignment_base, kw_loc.line, kw_loc.column)) do
|
30
|
-
opposite_style_detected
|
31
|
-
end
|
32
|
-
else
|
28
|
+
if matching.key?(style)
|
33
29
|
correct_style_detected
|
30
|
+
else
|
31
|
+
align_with = align_ranges[style]
|
32
|
+
msg = format(MSG, end_loc.line, end_loc.column, align_with.source,
|
33
|
+
align_with.line, align_with.column)
|
34
|
+
add_offense(node, end_loc, msg)
|
35
|
+
style_detected(matching.keys)
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -47,15 +49,21 @@ module RuboCop
|
|
47
49
|
rhs.loc.line > whole_expression.line
|
48
50
|
end
|
49
51
|
|
50
|
-
def align(node,
|
51
|
-
source_buffer = node.
|
52
|
+
def align(node, align_to)
|
53
|
+
source_buffer = node.source_range.source_buffer
|
52
54
|
begin_pos = node.loc.end.begin_pos
|
53
55
|
whitespace = Parser::Source::Range.new(source_buffer,
|
54
56
|
begin_pos - node.loc.end.column,
|
55
57
|
begin_pos)
|
56
58
|
return false unless whitespace.source.strip.empty?
|
57
59
|
|
58
|
-
column =
|
60
|
+
column = if !align_to
|
61
|
+
0
|
62
|
+
elsif align_to.respond_to?(:loc)
|
63
|
+
align_to.source_range.column
|
64
|
+
else
|
65
|
+
align_to.column
|
66
|
+
end
|
59
67
|
|
60
68
|
->(corrector) { corrector.replace(whitespace, ' ' * column) }
|
61
69
|
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
|
# element in a multi-line collection.
|
7
8
|
module FirstElementLineBreak
|
8
9
|
def autocorrect(node)
|
9
|
-
->(corrector) { corrector.insert_before(node.
|
10
|
+
->(corrector) { corrector.insert_before(node.source_range, "\n") }
|
10
11
|
end
|
11
12
|
|
12
13
|
private
|
@@ -20,7 +21,7 @@ module RuboCop
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def method_uses_parens?(node, limit)
|
23
|
-
source = node.
|
24
|
+
source = node.source_range.source_line[0...limit.loc.column]
|
24
25
|
source =~ /\s*\(\s*$/
|
25
26
|
end
|
26
27
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module RuboCop
|
5
|
+
module Cop
|
6
|
+
# Common functionality for checking hash nodes.
|
7
|
+
module HashNode
|
8
|
+
def any_pairs_on_the_same_line?(node)
|
9
|
+
node.children.butfirst.any? do |pair|
|
10
|
+
!Util.begins_its_line?(pair.loc.expression)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|