rubocop 0.88.0 → 0.91.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/bin/rubocop-profile +1 -0
- data/config/default.yml +219 -28
- data/lib/rubocop.rb +39 -5
- data/lib/rubocop/cached_data.rb +1 -0
- data/lib/rubocop/cli/command.rb +1 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -1
- data/lib/rubocop/cli/command/base.rb +2 -0
- data/lib/rubocop/cli/command/execute_runner.rb +10 -1
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
- data/lib/rubocop/cli/command/show_cops.rb +3 -2
- data/lib/rubocop/cli/command/version.rb +3 -2
- data/lib/rubocop/cli/environment.rb +1 -0
- data/lib/rubocop/comment_config.rb +19 -12
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +22 -11
- data/lib/rubocop/config_loader_resolver.rb +4 -3
- data/lib/rubocop/config_obsoletion.rb +7 -1
- data/lib/rubocop/config_store.rb +3 -3
- data/lib/rubocop/config_validator.rb +5 -4
- data/lib/rubocop/cop/base.rb +25 -2
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
- data/lib/rubocop/cop/bundler/gem_comment.rb +8 -3
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
- data/lib/rubocop/cop/commissioner.rb +47 -8
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +7 -7
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +6 -11
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/documentation.rb +22 -0
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +32 -11
- data/lib/rubocop/cop/generator.rb +2 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +5 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +9 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +11 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +24 -20
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/class_structure.rb +14 -17
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +13 -15
- data/lib/rubocop/cop/layout/def_end_alignment.rb +8 -5
- data/lib/rubocop/cop/layout/dot_position.rb +21 -17
- data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +21 -18
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
- data/lib/rubocop/cop/layout/empty_lines.rb +6 -9
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +18 -14
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +4 -7
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -7
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +11 -17
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +5 -9
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +16 -13
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +12 -10
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +41 -24
- data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +22 -17
- data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +9 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
- data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +20 -23
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +19 -37
- data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -24
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +17 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +9 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
- data/lib/rubocop/cop/lint/debugger.rb +6 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +7 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +5 -4
- data/lib/rubocop/cop/lint/duplicate_require.rb +46 -0
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +47 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +2 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_file.rb +50 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +13 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +4 -3
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +2 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +10 -13
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +4 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +3 -36
- data/lib/rubocop/cop/lint/multiple_comparison.rb +9 -10
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +27 -23
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +7 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +79 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
- data/lib/rubocop/cop/lint/percent_string_array.rb +3 -6
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +13 -10
- data/lib/rubocop/cop/lint/rand_one.rb +2 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +38 -31
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +20 -14
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +5 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -9
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +8 -12
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +8 -8
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +7 -7
- data/lib/rubocop/cop/lint/struct_new_override.rb +2 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/to_json.rb +20 -11
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +171 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +4 -2
- data/lib/rubocop/cop/lint/uri_regexp.rb +12 -47
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +27 -23
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_method_definition.rb +70 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/useless_times.rb +106 -0
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +59 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +53 -24
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +14 -16
- data/lib/rubocop/cop/mixin/alignment.rb +5 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +17 -8
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/comments_help.rb +48 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +12 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +31 -12
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +13 -12
- data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +16 -9
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
- data/lib/rubocop/cop/mixin/rescue_node.rb +11 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/statement_modifier.rb +43 -8
- data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -29
- data/lib/rubocop/cop/mixin/trailing_comma.rb +9 -11
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +4 -4
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/offense.rb +1 -0
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +3 -2
- data/lib/rubocop/cop/security/json_load.rb +7 -8
- data/lib/rubocop/cop/security/marshal_load.rb +3 -4
- data/lib/rubocop/cop/security/open.rb +3 -2
- data/lib/rubocop/cop/security/yaml_load.rb +7 -6
- data/lib/rubocop/cop/severity.rb +0 -8
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +7 -8
- data/lib/rubocop/cop/style/accessor_grouping.rb +23 -21
- data/lib/rubocop/cop/style/alias.rb +43 -36
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_join.rb +7 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +12 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +4 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -14
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_equality.rb +32 -5
- data/lib/rubocop/cop/style/case_like_if.rb +38 -19
- data/lib/rubocop/cop/style/class_and_module_children.rb +16 -11
- data/lib/rubocop/cop/style/class_check.rb +6 -11
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
- data/lib/rubocop/cop/style/class_vars.rb +7 -12
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/combinable_loops.rb +84 -0
- data/lib/rubocop/cop/style/command_literal.rb +23 -24
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +8 -9
- data/lib/rubocop/cop/style/conditional_assignment.rb +61 -63
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +12 -12
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +8 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +6 -8
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +3 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -19
- data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_literal.rb +18 -17
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +5 -9
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +7 -7
- data/lib/rubocop/cop/style/even_odd.rb +8 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +22 -21
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +3 -1
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +18 -19
- data/lib/rubocop/cop/style/format_string_token.rb +5 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +6 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +27 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_syntax.rb +10 -8
- data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -11
- data/lib/rubocop/cop/style/hash_transform_values.rb +18 -10
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +11 -37
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +2 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +53 -0
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +17 -14
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +12 -3
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +13 -13
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +2 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
- data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +10 -11
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/negated_if.rb +6 -6
- data/lib/rubocop/cop/style/negated_unless.rb +6 -6
- data/lib/rubocop/cop/style/negated_while.rb +7 -15
- data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +14 -12
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
- data/lib/rubocop/cop/style/next.rb +10 -14
- data/lib/rubocop/cop/style/nil_comparison.rb +13 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +34 -26
- data/lib/rubocop/cop/style/not.rb +20 -26
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +6 -11
- data/lib/rubocop/cop/style/one_line_conditional.rb +73 -23
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +45 -0
- data/lib/rubocop/cop/style/or_assignment.rb +13 -10
- data/lib/rubocop/cop/style/parallel_assignment.rb +16 -16
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +15 -21
- data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -14
- data/lib/rubocop/cop/style/proc.rb +6 -6
- data/lib/rubocop/cop/style/raise_args.rb +15 -24
- data/lib/rubocop/cop/style/random_with_offset.rb +20 -19
- data/lib/rubocop/cop/style/redundant_assignment.rb +8 -18
- data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
- data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +20 -9
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -0
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -8
- data/lib/rubocop/cop/style/redundant_freeze.rb +5 -7
- data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -15
- data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +14 -23
- data/lib/rubocop/cop/style/redundant_return.rb +17 -17
- data/lib/rubocop/cop/style/redundant_self.rb +9 -11
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +24 -28
- data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
- data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
- data/lib/rubocop/cop/style/return_nil.rb +5 -5
- data/lib/rubocop/cop/style/safe_navigation.rb +22 -16
- data/lib/rubocop/cop/style/sample.rb +12 -14
- data/lib/rubocop/cop/style/self_assignment.rb +26 -22
- data/lib/rubocop/cop/style/semicolon.rb +6 -9
- data/lib/rubocop/cop/style/send.rb +4 -5
- data/lib/rubocop/cop/style/signal_exception.rb +25 -19
- data/lib/rubocop/cop/style/single_argument_dig.rb +55 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +18 -17
- data/lib/rubocop/cop/style/slicing_with_range.rb +6 -8
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +5 -6
- data/lib/rubocop/cop/style/string_concatenation.rb +106 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
- data/lib/rubocop/cop/style/string_methods.rb +7 -17
- data/lib/rubocop/cop/style/strip.rb +9 -14
- data/lib/rubocop/cop/style/struct_inheritance.rb +4 -7
- data/lib/rubocop/cop/style/symbol_array.rb +6 -17
- data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +15 -19
- data/lib/rubocop/cop/style/ternary_parentheses.rb +22 -22
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +11 -9
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
- data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
- data/lib/rubocop/cop/style/unless_else.rb +5 -8
- data/lib/rubocop/cop/style/unpack_first.rb +5 -8
- data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
- data/lib/rubocop/cop/style/when_then.rb +4 -6
- data/lib/rubocop/cop/style/while_until_do.rb +6 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
- data/lib/rubocop/cop/style/word_array.rb +5 -23
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
- data/lib/rubocop/cop/style/zero_length_predicate.rb +17 -19
- data/lib/rubocop/cop/team.rb +2 -1
- data/lib/rubocop/cop/util.rb +2 -13
- data/lib/rubocop/cop/utils/format_string.rb +3 -5
- data/lib/rubocop/cop/variable_force.rb +2 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +2 -2
- data/lib/rubocop/cops_documentation_generator.rb +284 -0
- data/lib/rubocop/core_ext/string.rb +2 -2
- data/lib/rubocop/directive_comment.rb +32 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/ext/regexp_node.rb +46 -0
- data/lib/rubocop/file_finder.rb +1 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/html_formatter.rb +2 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/formatter/progress_formatter.rb +2 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
- data/lib/rubocop/name_similarity.rb +1 -0
- data/lib/rubocop/options.rb +25 -4
- data/lib/rubocop/path_util.rb +19 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/remote_config.rb +1 -0
- data/lib/rubocop/result_cache.rb +31 -13
- data/lib/rubocop/rspec/cop_helper.rb +4 -1
- data/lib/rubocop/rspec/expect_offense.rb +11 -6
- data/lib/rubocop/rspec/shared_contexts.rb +13 -5
- data/lib/rubocop/runner.rb +31 -15
- data/lib/rubocop/string_interpreter.rb +3 -0
- data/lib/rubocop/target_finder.rb +13 -9
- data/lib/rubocop/target_ruby.rb +6 -0
- data/lib/rubocop/version.rb +3 -2
- data/lib/rubocop/yaml_duplication_checker.rb +1 -0
- metadata +38 -8
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Extensions to the core String class
|
4
4
|
class String
|
5
|
-
unless method_defined?
|
5
|
+
unless method_defined?(:blank?) && ' '.blank?
|
6
6
|
# Checks whether a string is blank. A string is considered blank if it
|
7
7
|
# is either empty or contains only whitespace characters.
|
8
8
|
#
|
@@ -17,7 +17,7 @@ class String
|
|
17
17
|
# @example
|
18
18
|
# ' test'.blank? #=> false
|
19
19
|
def blank?
|
20
|
-
empty? ||
|
20
|
+
empty? || lstrip.empty?
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
# This class wraps the `Parser::Source::Comment` object that represents a
|
5
|
+
# special `rubocop:disable` and `rubocop:enable` comment and exposes what
|
6
|
+
# cops it contains.
|
7
|
+
class DirectiveComment
|
8
|
+
attr_reader :comment
|
9
|
+
|
10
|
+
def initialize(comment)
|
11
|
+
@comment = comment
|
12
|
+
end
|
13
|
+
|
14
|
+
# Return all the cops specified in the directive
|
15
|
+
def cops
|
16
|
+
match = comment.text.match(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
|
17
|
+
return unless match
|
18
|
+
|
19
|
+
cops_string = match.captures[1]
|
20
|
+
cops_string.split(/,\s*/).uniq.sort
|
21
|
+
end
|
22
|
+
|
23
|
+
# Checks if this directive contains all the given cop names
|
24
|
+
def match?(cop_names)
|
25
|
+
cops == cop_names.uniq.sort
|
26
|
+
end
|
27
|
+
|
28
|
+
def range
|
29
|
+
comment.location.expression
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/rubocop/error.rb
CHANGED
@@ -12,6 +12,7 @@ module RuboCop
|
|
12
12
|
# A wrapper to display errored location of analyzed file.
|
13
13
|
class ErrorWithAnalyzedFileLocation < Error
|
14
14
|
def initialize(cause:, node:, cop:)
|
15
|
+
super()
|
15
16
|
@cause = cause
|
16
17
|
@cop = cop
|
17
18
|
@location = node.is_a?(RuboCop::AST::Node) ? node.loc : node
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Ext
|
5
|
+
# Extensions to AST::RegexpNode for our cached parsed regexp info
|
6
|
+
module RegexpNode
|
7
|
+
ANY = Object.new
|
8
|
+
def ANY.==(_)
|
9
|
+
true
|
10
|
+
end
|
11
|
+
private_constant :ANY
|
12
|
+
|
13
|
+
class << self
|
14
|
+
attr_reader :parsed_cache
|
15
|
+
end
|
16
|
+
@parsed_cache = {}
|
17
|
+
|
18
|
+
# @return [Regexp::Expression::Root, nil]
|
19
|
+
def parsed_tree
|
20
|
+
return if interpolation?
|
21
|
+
|
22
|
+
str = content
|
23
|
+
Ext::RegexpNode.parsed_cache[str] ||= begin
|
24
|
+
Regexp::Parser.parse(str)
|
25
|
+
rescue StandardError
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def each_capture(named: ANY)
|
31
|
+
return enum_for(__method__, named: named) unless block_given?
|
32
|
+
|
33
|
+
parsed_tree&.traverse do |event, exp, _index|
|
34
|
+
yield(exp) if event == :enter &&
|
35
|
+
named == exp.respond_to?(:name) &&
|
36
|
+
exp.respond_to?(:capturing?) &&
|
37
|
+
exp.capturing?
|
38
|
+
end
|
39
|
+
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
AST::RegexpNode.include self
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/rubocop/file_finder.rb
CHANGED
@@ -114,7 +114,7 @@ module RuboCop
|
|
114
114
|
def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
|
115
115
|
output_buffer.puts "# Offense count: #{offense_count}" if @show_offense_counts
|
116
116
|
|
117
|
-
cop_class = Cop::
|
117
|
+
cop_class = Cop::Registry.global.find_by_cop_name(cop_name)
|
118
118
|
output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.support_autocorrect?
|
119
119
|
|
120
120
|
default_cfg = default_config(cop_name)
|
@@ -90,9 +90,11 @@ module RuboCop
|
|
90
90
|
end
|
91
91
|
|
92
92
|
# Make Kernel#binding public.
|
93
|
+
# rubocop:disable Lint/UselessMethodDefinition
|
93
94
|
def binding
|
94
95
|
super
|
95
96
|
end
|
97
|
+
# rubocop:enable Lint/UselessMethodDefinition
|
96
98
|
|
97
99
|
def decorated_message(offense)
|
98
100
|
offense.message.gsub(/`(.+?)`/) do
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
# https://github.com/mikian/rubocop-junit-formatter/blob/v0.1.4/lib/rubocop/formatter/junit_formatter.rb#L9
|
35
35
|
#
|
36
36
|
# In the future, it would be preferable to return only enabled cops.
|
37
|
-
Cop::
|
37
|
+
Cop::Registry.all.each do |cop|
|
38
38
|
target_offenses = offenses_for_cop(offenses, cop)
|
39
39
|
|
40
40
|
next unless relevant_for_output?(options, target_offenses)
|
@@ -5,7 +5,7 @@ module RuboCop
|
|
5
5
|
# If no offenses are found, no output is displayed.
|
6
6
|
# Otherwise, SimpleTextFormatter's output is displayed.
|
7
7
|
class QuietFormatter < SimpleTextFormatter
|
8
|
-
def report_summary(file_count, offense_count, correction_count)
|
8
|
+
def report_summary(file_count, offense_count, correction_count, correctable_count)
|
9
9
|
super unless offense_count.zero?
|
10
10
|
end
|
11
11
|
end
|
@@ -23,6 +23,7 @@ module RuboCop
|
|
23
23
|
def started(_target_files)
|
24
24
|
@total_offense_count = 0
|
25
25
|
@total_correction_count = 0
|
26
|
+
@total_correctable_count = 0
|
26
27
|
end
|
27
28
|
|
28
29
|
def file_finished(file, offenses)
|
@@ -35,7 +36,8 @@ module RuboCop
|
|
35
36
|
def finished(inspected_files)
|
36
37
|
report_summary(inspected_files.count,
|
37
38
|
@total_offense_count,
|
38
|
-
@total_correction_count
|
39
|
+
@total_correction_count,
|
40
|
+
@total_correctable_count)
|
39
41
|
end
|
40
42
|
|
41
43
|
def report_file(file, offenses)
|
@@ -52,11 +54,13 @@ module RuboCop
|
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
|
-
def report_summary(file_count, offense_count, correction_count)
|
57
|
+
def report_summary(file_count, offense_count, correction_count, correctable_count)
|
56
58
|
report = Report.new(file_count,
|
57
59
|
offense_count,
|
58
60
|
correction_count,
|
59
|
-
|
61
|
+
correctable_count,
|
62
|
+
rainbow,
|
63
|
+
safe_auto_correct: @options[:safe_auto_correct])
|
60
64
|
|
61
65
|
output.puts
|
62
66
|
output.puts report.summary
|
@@ -66,7 +70,9 @@ module RuboCop
|
|
66
70
|
|
67
71
|
def count_stats(offenses)
|
68
72
|
@total_offense_count += offenses.count
|
69
|
-
|
73
|
+
corrected = offenses.count(&:corrected?)
|
74
|
+
@total_correction_count += corrected
|
75
|
+
@total_correctable_count += offenses.count(&:correctable?) - corrected
|
70
76
|
end
|
71
77
|
|
72
78
|
def colored_severity_code(offense)
|
@@ -96,16 +102,30 @@ module RuboCop
|
|
96
102
|
include Colorizable
|
97
103
|
include TextUtil
|
98
104
|
|
99
|
-
|
105
|
+
# rubocop:disable Metrics/ParameterLists
|
106
|
+
def initialize(
|
107
|
+
file_count, offense_count, correction_count, correctable_count, rainbow,
|
108
|
+
safe_auto_correct: false
|
109
|
+
)
|
100
110
|
@file_count = file_count
|
101
111
|
@offense_count = offense_count
|
102
112
|
@correction_count = correction_count
|
113
|
+
@correctable_count = correctable_count
|
103
114
|
@rainbow = rainbow
|
115
|
+
@safe_auto_correct = safe_auto_correct
|
104
116
|
end
|
117
|
+
# rubocop:enable Metrics/ParameterLists
|
105
118
|
|
106
119
|
def summary
|
107
120
|
if @correction_count.positive?
|
108
|
-
|
121
|
+
if @correctable_count.positive?
|
122
|
+
"#{files} inspected, #{offenses} detected, #{corrections} corrected,"\
|
123
|
+
" #{correctable}"
|
124
|
+
else
|
125
|
+
"#{files} inspected, #{offenses} detected, #{corrections} corrected"
|
126
|
+
end
|
127
|
+
elsif @correctable_count.positive?
|
128
|
+
"#{files} inspected, #{offenses} detected, #{correctable}"
|
109
129
|
else
|
110
130
|
"#{files} inspected, #{offenses} detected"
|
111
131
|
end
|
@@ -132,6 +152,16 @@ module RuboCop
|
|
132
152
|
|
133
153
|
colorize(text, color)
|
134
154
|
end
|
155
|
+
|
156
|
+
def correctable
|
157
|
+
if @safe_auto_correct
|
158
|
+
text = pluralize(@correctable_count, 'more offense')
|
159
|
+
"#{colorize(text, :yellow)} can be corrected with `rubocop -A`"
|
160
|
+
else
|
161
|
+
text = pluralize(@correctable_count, 'offense')
|
162
|
+
"#{colorize(text, :yellow)} auto-correctable"
|
163
|
+
end
|
164
|
+
end
|
135
165
|
end
|
136
166
|
end
|
137
167
|
end
|
data/lib/rubocop/options.rb
CHANGED
@@ -8,6 +8,7 @@ module RuboCop
|
|
8
8
|
class OptionArgumentError < StandardError; end
|
9
9
|
|
10
10
|
# This class handles command line options.
|
11
|
+
# @api private
|
11
12
|
class Options
|
12
13
|
E_STDIN_NO_PATH = '-s/--stdin requires exactly one path, relative to the ' \
|
13
14
|
'root of the project. RuboCop will use this path to determine which ' \
|
@@ -68,6 +69,7 @@ module RuboCop
|
|
68
69
|
|
69
70
|
add_severity_option(opts)
|
70
71
|
add_flags_with_optional_args(opts)
|
72
|
+
add_cache_options(opts)
|
71
73
|
add_boolean_flags(opts)
|
72
74
|
add_aliases(opts)
|
73
75
|
|
@@ -94,7 +96,7 @@ module RuboCop
|
|
94
96
|
['']
|
95
97
|
else
|
96
98
|
list.split(',').map do |c|
|
97
|
-
Cop::
|
99
|
+
Cop::Registry.qualified_cop_name(c, "--#{option} option")
|
98
100
|
end
|
99
101
|
end
|
100
102
|
end
|
@@ -163,10 +165,16 @@ module RuboCop
|
|
163
165
|
end
|
164
166
|
end
|
165
167
|
|
168
|
+
def add_cache_options(opts)
|
169
|
+
option(opts, '-C', '--cache FLAG')
|
170
|
+
option(opts, '--cache-root DIR') do
|
171
|
+
@validator.validate_cache_enabled_for_cache_root
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
166
175
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
167
176
|
def add_boolean_flags(opts)
|
168
177
|
option(opts, '-F', '--fail-fast')
|
169
|
-
option(opts, '-C', '--cache FLAG')
|
170
178
|
option(opts, '-d', '--debug')
|
171
179
|
option(opts, '-D', '--[no-]display-cop-names')
|
172
180
|
option(opts, '-E', '--extra-details')
|
@@ -232,6 +240,7 @@ module RuboCop
|
|
232
240
|
end
|
233
241
|
|
234
242
|
# Validates option arguments and the options' compatibility with each other.
|
243
|
+
# @api private
|
235
244
|
class OptionsValidator
|
236
245
|
class << self
|
237
246
|
# Cop name validation must be done later than option parsing, so it's not
|
@@ -239,8 +248,8 @@ module RuboCop
|
|
239
248
|
def validate_cop_list(names)
|
240
249
|
return unless names
|
241
250
|
|
242
|
-
cop_names = Cop::
|
243
|
-
departments = Cop::
|
251
|
+
cop_names = Cop::Registry.global.names
|
252
|
+
departments = Cop::Registry.global.departments.map(&:to_s)
|
244
253
|
|
245
254
|
names.each do |name|
|
246
255
|
next if cop_names.include?(name)
|
@@ -390,9 +399,17 @@ module RuboCop
|
|
390
399
|
# of option order.
|
391
400
|
raise OptionParser::MissingArgument
|
392
401
|
end
|
402
|
+
|
403
|
+
def validate_cache_enabled_for_cache_root
|
404
|
+
return unless @options[:cache] == 'false'
|
405
|
+
|
406
|
+
raise OptionArgumentError, '--cache-root can not be used with ' \
|
407
|
+
'--cache false'
|
408
|
+
end
|
393
409
|
end
|
394
410
|
|
395
411
|
# This module contains help texts for command line options.
|
412
|
+
# @api private
|
396
413
|
module OptionsHelp
|
397
414
|
MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
|
398
415
|
FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
|
@@ -461,6 +478,10 @@ module RuboCop
|
|
461
478
|
cache: ["Use result caching (FLAG=true) or don't",
|
462
479
|
'(FLAG=false), default determined by',
|
463
480
|
'configuration parameter AllCops: UseCache.'],
|
481
|
+
cache_root: ['Set the cache root directory.',
|
482
|
+
'Takes precedence over the configuration',
|
483
|
+
'parameter AllCops: CacheRootDirectory and',
|
484
|
+
'the $RUBOCOP_CACHE_ROOT environment variable.'],
|
464
485
|
debug: 'Display debug info.',
|
465
486
|
display_cop_names: ['Display cop names in offense messages.',
|
466
487
|
'Default is true.'],
|
data/lib/rubocop/path_util.rb
CHANGED
@@ -55,10 +55,25 @@ module RuboCop
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def hidden_file_in_not_hidden_dir?(pattern, path)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
hidden_file?(path) &&
|
59
|
+
File.fnmatch?(
|
60
|
+
pattern, path,
|
61
|
+
File::FNM_PATHNAME | File::FNM_EXTGLOB | File::FNM_DOTMATCH
|
62
|
+
) &&
|
63
|
+
!hidden_dir?(path)
|
64
|
+
end
|
65
|
+
|
66
|
+
def hidden_file?(path)
|
67
|
+
maybe_hidden_file?(path) && File.basename(path).start_with?('.')
|
68
|
+
end
|
69
|
+
|
70
|
+
# Loose check to reduce memory allocations
|
71
|
+
def maybe_hidden_file?(path)
|
72
|
+
separator_index = path.rindex(File::SEPARATOR)
|
73
|
+
return false unless separator_index
|
74
|
+
|
75
|
+
dot_index = path.index('.', separator_index + 1)
|
76
|
+
dot_index == separator_index + 1
|
62
77
|
end
|
63
78
|
|
64
79
|
def hidden_dir?(path)
|
data/lib/rubocop/rake_task.rb
CHANGED
@@ -15,6 +15,7 @@ module RuboCop
|
|
15
15
|
attr_accessor :name, :verbose, :fail_on_error, :patterns, :formatters, :requires, :options
|
16
16
|
|
17
17
|
def initialize(name = :rubocop, *args, &task_block)
|
18
|
+
super()
|
18
19
|
setup_ivars(name)
|
19
20
|
|
20
21
|
desc 'Run RuboCop' unless ::Rake.application.last_description
|
data/lib/rubocop/result_cache.rb
CHANGED
@@ -3,9 +3,11 @@
|
|
3
3
|
require 'digest/sha1'
|
4
4
|
require 'find'
|
5
5
|
require 'etc'
|
6
|
+
require 'zlib'
|
6
7
|
|
7
8
|
module RuboCop
|
8
9
|
# Provides functionality for caching rubocop runs.
|
10
|
+
# @api private
|
9
11
|
class ResultCache
|
10
12
|
NON_CHANGING = %i[color format formatters out debug fail_level auto_correct
|
11
13
|
cache fail_fast stdin parallel].freeze
|
@@ -29,6 +31,11 @@ module RuboCop
|
|
29
31
|
end
|
30
32
|
|
31
33
|
class << self
|
34
|
+
# @api private
|
35
|
+
attr_accessor :rubocop_required_features
|
36
|
+
|
37
|
+
ResultCache.rubocop_required_features = []
|
38
|
+
|
32
39
|
private
|
33
40
|
|
34
41
|
def requires_file_removal?(file_count, config_store)
|
@@ -60,7 +67,8 @@ module RuboCop
|
|
60
67
|
end
|
61
68
|
|
62
69
|
def self.cache_root(config_store)
|
63
|
-
root =
|
70
|
+
root = ENV['RUBOCOP_CACHE_ROOT']
|
71
|
+
root ||= config_store.for_pwd.for_all_cops['CacheRootDirectory']
|
64
72
|
root ||= if ENV.key?('XDG_CACHE_HOME')
|
65
73
|
# Include user ID in the path to make sure the user has write
|
66
74
|
# access.
|
@@ -75,7 +83,10 @@ module RuboCop
|
|
75
83
|
config_store.for_pwd.for_all_cops['AllowSymlinksInCacheRootDirectory']
|
76
84
|
end
|
77
85
|
|
86
|
+
attr :path
|
87
|
+
|
78
88
|
def initialize(file, team, options, config_store, cache_root = nil)
|
89
|
+
cache_root ||= options[:cache_root]
|
79
90
|
cache_root ||= ResultCache.cache_root(config_store)
|
80
91
|
@allow_symlinks_in_cache_location =
|
81
92
|
ResultCache.allow_symlinks_in_cache_location?(config_store)
|
@@ -158,27 +169,34 @@ module RuboCop
|
|
158
169
|
end
|
159
170
|
|
160
171
|
# The checksum of the rubocop program running the inspection.
|
161
|
-
# rubocop:disable Metrics/AbcSize
|
162
172
|
def rubocop_checksum
|
163
173
|
ResultCache.source_checksum ||=
|
164
174
|
begin
|
165
|
-
lib_root = File.join(File.dirname(__FILE__), '..')
|
166
|
-
exe_root = File.join(lib_root, '..', 'exe')
|
167
|
-
|
168
|
-
# These are all the files we have `require`d plus everything in the
|
169
|
-
# exe directory. A change to any of them could affect the cop output
|
170
|
-
# so we include them in the cache hash.
|
171
|
-
source_files = $LOADED_FEATURES + Find.find(exe_root).to_a
|
172
|
-
|
173
175
|
digest = Digest::SHA1.new
|
174
|
-
|
176
|
+
rubocop_extra_features
|
175
177
|
.select { |path| File.file?(path) }
|
176
178
|
.sort!
|
177
|
-
.each
|
179
|
+
.each do |path|
|
180
|
+
content = File.open(path, 'rb', &:read)
|
181
|
+
digest << Zlib.crc32(content).to_s # mtime not reliable
|
182
|
+
end
|
183
|
+
digest << RuboCop::Version::STRING << RuboCop::AST::Version::STRING
|
178
184
|
digest.hexdigest
|
179
185
|
end
|
180
186
|
end
|
181
|
-
|
187
|
+
|
188
|
+
def rubocop_extra_features
|
189
|
+
lib_root = File.join(File.dirname(__FILE__), '..')
|
190
|
+
exe_root = File.join(lib_root, '..', 'exe')
|
191
|
+
|
192
|
+
# These are all the files we have `require`d plus everything in the
|
193
|
+
# exe directory. A change to any of them could affect the cop output
|
194
|
+
# so we include them in the cache hash.
|
195
|
+
source_files = $LOADED_FEATURES + Find.find(exe_root).to_a
|
196
|
+
source_files -= ResultCache.rubocop_required_features # Rely on gem versions
|
197
|
+
|
198
|
+
source_files
|
199
|
+
end
|
182
200
|
|
183
201
|
# Return a hash of the options given at invocation, minus the ones that have
|
184
202
|
# no effect on which offenses and disabled line ranges are found, and thus
|