rubocop 0.85.1 → 0.89.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 +16 -4
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +227 -26
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +3 -3
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +2 -4
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +21 -4
- data/lib/rubocop/config_loader.rb +41 -69
- data/lib/rubocop/config_loader_resolver.rb +4 -4
- data/lib/rubocop/config_obsoletion.rb +6 -2
- data/lib/rubocop/config_store.rb +4 -0
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +14 -24
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +407 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +47 -50
- data/lib/rubocop/cop/cop.rb +85 -236
- data/lib/rubocop/cop/corrector.rb +38 -115
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +39 -13
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +3 -3
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
- data/lib/rubocop/cop/layout/class_structure.rb +5 -44
- data/lib/rubocop/cop/layout/comment_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +2 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +17 -7
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +4 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -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 +10 -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_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +21 -17
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_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_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 +11 -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 +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -5
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +21 -5
- data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -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 +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +15 -21
- 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 +84 -13
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +12 -13
- data/lib/rubocop/cop/lint/percent_string_array.rb +14 -13
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +14 -13
- data/lib/rubocop/cop/lint/raise_exception.rb +15 -5
- data/lib/rubocop/cop/lint/rand_one.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +43 -40
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -11
- 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 +6 -2
- 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 -8
- 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 +10 -2
- 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 +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/syntax.rb +11 -26
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -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 +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +9 -4
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +26 -16
- 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_setter_call.rb +4 -6
- 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 +24 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +26 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +37 -4
- data/lib/rubocop/cop/metrics/method_length.rb +25 -2
- data/lib/rubocop/cop/metrics/module_length.rb +26 -3
- 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 +47 -4
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
- 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 +2 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +26 -5
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- 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_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +19 -5
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +27 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -27
- data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -5
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +12 -17
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -6
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +4 -4
- 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 -6
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -3
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -10
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
- data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
- data/lib/rubocop/cop/style/alias.rb +41 -36
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_coercion.rb +63 -0
- data/lib/rubocop/cop/style/array_join.rb +6 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +11 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
- data/lib/rubocop/cop/style/bare_percent_literals.rb +11 -13
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +141 -0
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +25 -27
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +220 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +15 -12
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +24 -7
- 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/command_literal.rb +24 -25
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +12 -3
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +15 -15
- data/lib/rubocop/cop/style/date_time.rb +2 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +9 -12
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +8 -10
- data/lib/rubocop/cop/style/documentation.rb +8 -10
- 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 +2 -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_case_condition.rb +27 -26
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +20 -21
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +6 -10
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -22
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +9 -11
- data/lib/rubocop/cop/style/float_division.rb +8 -11
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +21 -19
- data/lib/rubocop/cop/style/format_string_token.rb +10 -12
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +20 -42
- 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 +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +11 -3
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -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 +23 -33
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- 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_with_args_parentheses.rb +2 -1
- 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 +2 -2
- 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 +11 -21
- 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 +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +5 -11
- 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 -8
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +27 -24
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +5 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +18 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -2
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +4 -3
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +23 -32
- data/lib/rubocop/cop/style/redundant_self.rb +6 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +3 -1
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +23 -2
- data/lib/rubocop/cop/style/symbol_array.rb +6 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -8
- data/lib/rubocop/cop/team.rb +98 -82
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +5 -15
- data/lib/rubocop/cop/utils/format_string.rb +2 -3
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +7 -5
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/file_finder.rb +12 -12
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -3
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +7 -3
- data/lib/rubocop/options.rb +18 -11
- data/lib/rubocop/path_util.rb +19 -19
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/rake_task.rb +7 -9
- data/lib/rubocop/result_cache.rb +12 -8
- data/lib/rubocop/rspec/cop_helper.rb +4 -4
- data/lib/rubocop/rspec/expect_offense.rb +63 -22
- data/lib/rubocop/rspec/shared_contexts.rb +16 -17
- data/lib/rubocop/runner.rb +35 -34
- data/lib/rubocop/target_finder.rb +14 -11
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +2 -2
- data/lib/rubocop.rb +33 -5
- metadata +49 -11
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -35
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
|
27
27
|
# RuboCop will start looking for the configuration file in the directory
|
|
28
28
|
# where the inspected file is and continue its way up to the root directory.
|
|
29
29
|
#
|
|
30
|
-
# See https://
|
|
30
|
+
# See https://docs.rubocop.org/rubocop/configuration
|
|
31
31
|
DESC
|
|
32
32
|
|
|
33
33
|
File.open(DOTFILE, 'w') do |f|
|
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
|
22
22
|
private
|
|
23
23
|
|
|
24
24
|
def print_available_cops
|
|
25
|
-
registry = Cop::
|
|
25
|
+
registry = Cop::Registry.global
|
|
26
26
|
show_all = @options[:show_cops].empty?
|
|
27
27
|
|
|
28
28
|
if show_all
|
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
|
49
49
|
|
|
50
50
|
def print_cop_details(cops)
|
|
51
51
|
cops.each do |cop|
|
|
52
|
-
puts '# Supports --auto-correct' if cop.
|
|
52
|
+
puts '# Supports --auto-correct' if cop.support_autocorrect?
|
|
53
53
|
puts "#{cop.cop_name}:"
|
|
54
54
|
puts config_lines(cop)
|
|
55
55
|
puts
|
|
@@ -68,7 +68,7 @@ module RuboCop
|
|
|
68
68
|
|
|
69
69
|
def config_lines(cop)
|
|
70
70
|
cnf = @config.for_cop(cop)
|
|
71
|
-
cnf.to_yaml.lines.to_a.drop(1).map { |line|
|
|
71
|
+
cnf.to_yaml.lines.to_a.drop(1).map { |line| " #{line}" }
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -8,8 +8,8 @@ module RuboCop
|
|
|
8
8
|
self.command_name = :version
|
|
9
9
|
|
|
10
10
|
def run
|
|
11
|
-
puts RuboCop::Version.version(false) if @options[:version]
|
|
12
|
-
puts RuboCop::Version.version(true) if @options[:verbose_version]
|
|
11
|
+
puts RuboCop::Version.version(debug: false) if @options[:version]
|
|
12
|
+
puts RuboCop::Version.version(debug: true) if @options[:verbose_version]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
end
|
data/lib/rubocop/cli.rb
CHANGED
|
@@ -75,7 +75,7 @@ module RuboCop
|
|
|
75
75
|
|
|
76
76
|
def validate_options_vs_config
|
|
77
77
|
if @options[:parallel] &&
|
|
78
|
-
!@config_store.
|
|
78
|
+
!@config_store.for_pwd.for_all_cops['UseCache']
|
|
79
79
|
raise OptionArgumentError, '-P/--parallel uses caching to speed up ' \
|
|
80
80
|
'execution, so combining with AllCops: ' \
|
|
81
81
|
'UseCache: false is not allowed.'
|
|
@@ -101,11 +101,9 @@ module RuboCop
|
|
|
101
101
|
|
|
102
102
|
def set_options_to_config_loader
|
|
103
103
|
ConfigLoader.debug = @options[:debug]
|
|
104
|
-
ConfigLoader.auto_gen_config = @options[:auto_gen_config]
|
|
105
104
|
ConfigLoader.disable_pending_cops = @options[:disable_pending_cops]
|
|
106
105
|
ConfigLoader.enable_pending_cops = @options[:enable_pending_cops]
|
|
107
106
|
ConfigLoader.ignore_parent_exclusion = @options[:ignore_parent_exclusion]
|
|
108
|
-
ConfigLoader.options_config = @options[:config]
|
|
109
107
|
end
|
|
110
108
|
|
|
111
109
|
def handle_exiting_options
|
|
@@ -123,7 +121,7 @@ module RuboCop
|
|
|
123
121
|
if @options[:auto_gen_config]
|
|
124
122
|
formatter = 'autogenconf'
|
|
125
123
|
else
|
|
126
|
-
cfg = @config_store.
|
|
124
|
+
cfg = @config_store.for_pwd.for_all_cops
|
|
127
125
|
formatter = cfg['DefaultFormatter'] || 'progress'
|
|
128
126
|
end
|
|
129
127
|
[[formatter, @options[:output_path]]]
|
|
@@ -11,7 +11,7 @@ module RuboCop
|
|
|
11
11
|
COPS_PATTERN = "(all|#{COP_NAMES_PATTERN})"
|
|
12
12
|
|
|
13
13
|
COMMENT_DIRECTIVE_REGEXP = Regexp.new(
|
|
14
|
-
|
|
14
|
+
"# rubocop : ((?:disable|enable|todo))\\b #{COPS_PATTERN}"
|
|
15
15
|
.gsub(' ', '\s*')
|
|
16
16
|
)
|
|
17
17
|
|
|
@@ -55,7 +55,7 @@ module RuboCop
|
|
|
55
55
|
extras
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
def analyze
|
|
58
|
+
def analyze # rubocop:todo Metrics/AbcSize
|
|
59
59
|
analyses = Hash.new { |hash, key| hash[key] = CopAnalysis.new([], nil) }
|
|
60
60
|
|
|
61
61
|
each_mentioned_cop do |cop_name, disabled, line, single_line|
|
|
@@ -128,9 +128,7 @@ module RuboCop
|
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
def each_directive
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
processed_source.each_comment do |comment|
|
|
131
|
+
processed_source.comments.each do |comment|
|
|
134
132
|
directive = directive_parts(comment)
|
|
135
133
|
next unless directive
|
|
136
134
|
|
|
@@ -153,11 +151,11 @@ module RuboCop
|
|
|
153
151
|
end
|
|
154
152
|
|
|
155
153
|
def qualified_cop_name(cop_name)
|
|
156
|
-
Cop::
|
|
154
|
+
Cop::Registry.qualified_cop_name(cop_name.strip, processed_source.file_path)
|
|
157
155
|
end
|
|
158
156
|
|
|
159
157
|
def all_cop_names
|
|
160
|
-
@all_cop_names ||= Cop::
|
|
158
|
+
@all_cop_names ||= Cop::Registry.global.names - [REDUNDANT_DISABLE]
|
|
161
159
|
end
|
|
162
160
|
|
|
163
161
|
def comment_only_line?(line_number)
|
data/lib/rubocop/config.rb
CHANGED
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
|
24
24
|
def initialize(hash = {}, loaded_path = nil)
|
|
25
25
|
@loaded_path = loaded_path
|
|
26
26
|
@for_cop = Hash.new do |h, cop|
|
|
27
|
-
qualified_cop_name = Cop::
|
|
27
|
+
qualified_cop_name = Cop::Registry.qualified_cop_name(cop, loaded_path)
|
|
28
28
|
cop_options = self[qualified_cop_name] || {}
|
|
29
29
|
cop_options['Enabled'] = enable_cop?(qualified_cop_name, cop_options)
|
|
30
30
|
h[cop] = cop_options
|
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def_delegators :@hash, :[], :[]=, :delete, :each, :key?, :keys, :each_key,
|
|
50
|
-
:map, :merge, :to_h, :to_hash, :transform_values
|
|
50
|
+
:fetch, :map, :merge, :to_h, :to_hash, :transform_values
|
|
51
51
|
def_delegators :@validator, :validate, :target_ruby_version
|
|
52
52
|
|
|
53
53
|
def to_s
|
|
@@ -104,12 +104,29 @@ module RuboCop
|
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
+
# @return [Config] for the given cop / cop name.
|
|
108
|
+
# Note: the 'Enabled' attribute is calculated according to the department's
|
|
109
|
+
# and 'AllCops' configuration; other attributes are not inherited.
|
|
107
110
|
def for_cop(cop)
|
|
108
111
|
@for_cop[cop.respond_to?(:cop_name) ? cop.cop_name : cop]
|
|
109
112
|
end
|
|
110
113
|
|
|
114
|
+
# @return [Config] for the given cop merged with that of its department (if any)
|
|
115
|
+
# Note: the 'Enabled' attribute is same as that returned by `for_cop`
|
|
116
|
+
def for_badge(badge)
|
|
117
|
+
cop_config = for_cop(badge.to_s)
|
|
118
|
+
fetch(badge.department.to_s) { return cop_config }
|
|
119
|
+
.merge(cop_config)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# @return [Config] for the given department name.
|
|
123
|
+
# Note: the 'Enabled' attribute will be present only if specified
|
|
124
|
+
# at the department's level
|
|
111
125
|
def for_department(department_name)
|
|
112
|
-
@
|
|
126
|
+
@for_department ||= Hash.new do |h, dept|
|
|
127
|
+
h[dept] = self[dept] || {}
|
|
128
|
+
end
|
|
129
|
+
@for_department[department_name.to_s]
|
|
113
130
|
end
|
|
114
131
|
|
|
115
132
|
def for_all_cops
|
|
@@ -152,7 +169,7 @@ module RuboCop
|
|
|
152
169
|
return true if File.extname(file) == '.gemspec'
|
|
153
170
|
|
|
154
171
|
file_to_include?(file) do |pattern, relative_path, absolute_path|
|
|
155
|
-
|
|
172
|
+
/[A-Z]/.match?(pattern.to_s) &&
|
|
156
173
|
(match_path?(pattern, relative_path) ||
|
|
157
174
|
match_path?(pattern, absolute_path))
|
|
158
175
|
end
|
|
@@ -18,25 +18,23 @@ module RuboCop
|
|
|
18
18
|
XDG_CONFIG = 'config.yml'
|
|
19
19
|
RUBOCOP_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..'))
|
|
20
20
|
DEFAULT_FILE = File.join(RUBOCOP_HOME, 'config', 'default.yml')
|
|
21
|
-
AUTO_GENERATED_FILE = '.rubocop_todo.yml'
|
|
22
21
|
|
|
23
22
|
class << self
|
|
24
23
|
include FileFinder
|
|
25
24
|
|
|
26
|
-
attr_accessor :debug, :
|
|
27
|
-
:
|
|
28
|
-
attr_writer :default_configuration
|
|
25
|
+
attr_accessor :debug, :ignore_parent_exclusion,
|
|
26
|
+
:disable_pending_cops, :enable_pending_cops
|
|
27
|
+
attr_writer :default_configuration, :project_root
|
|
29
28
|
|
|
30
29
|
alias debug? debug
|
|
31
|
-
alias auto_gen_config? auto_gen_config
|
|
32
30
|
alias ignore_parent_exclusion? ignore_parent_exclusion
|
|
33
31
|
|
|
34
32
|
def clear_options
|
|
35
|
-
@debug =
|
|
33
|
+
@debug = nil
|
|
36
34
|
FileFinder.root_level = nil
|
|
37
35
|
end
|
|
38
36
|
|
|
39
|
-
def load_file(file)
|
|
37
|
+
def load_file(file)
|
|
40
38
|
path = File.absolute_path(file.is_a?(RemoteConfig) ? file.file : file)
|
|
41
39
|
|
|
42
40
|
hash = load_yaml_configuration(path)
|
|
@@ -55,12 +53,27 @@ module RuboCop
|
|
|
55
53
|
Config.create(hash, path)
|
|
56
54
|
end
|
|
57
55
|
|
|
56
|
+
def load_yaml_configuration(absolute_path)
|
|
57
|
+
file_contents = read_file(absolute_path)
|
|
58
|
+
yaml_code = Dir.chdir(File.dirname(absolute_path)) do
|
|
59
|
+
ERB.new(file_contents).result
|
|
60
|
+
end
|
|
61
|
+
check_duplication(yaml_code, absolute_path)
|
|
62
|
+
hash = yaml_safe_load(yaml_code, absolute_path) || {}
|
|
63
|
+
|
|
64
|
+
puts "configuration from #{absolute_path}" if debug?
|
|
65
|
+
|
|
66
|
+
raise(TypeError, "Malformed configuration in #{absolute_path}") unless hash.is_a?(Hash)
|
|
67
|
+
|
|
68
|
+
hash
|
|
69
|
+
end
|
|
70
|
+
|
|
58
71
|
def add_missing_namespaces(path, hash)
|
|
59
72
|
# Using `hash.each_key` will cause the
|
|
60
73
|
# `can't add a new key into hash during iteration` error
|
|
61
74
|
hash_keys = hash.keys
|
|
62
75
|
hash_keys.each do |key|
|
|
63
|
-
q = Cop::
|
|
76
|
+
q = Cop::Registry.qualified_cop_name(key, path)
|
|
64
77
|
next if q == key
|
|
65
78
|
|
|
66
79
|
hash[q] = hash.delete(key)
|
|
@@ -85,7 +98,7 @@ module RuboCop
|
|
|
85
98
|
end
|
|
86
99
|
|
|
87
100
|
def configuration_from_file(config_file)
|
|
88
|
-
return
|
|
101
|
+
return default_configuration if config_file == DEFAULT_FILE
|
|
89
102
|
|
|
90
103
|
config = load_file(config_file)
|
|
91
104
|
if ignore_parent_exclusion?
|
|
@@ -105,15 +118,13 @@ module RuboCop
|
|
|
105
118
|
end
|
|
106
119
|
|
|
107
120
|
def add_excludes_from_files(config, config_file)
|
|
108
|
-
|
|
109
|
-
[find_user_dotfile, find_user_xdg_config].compact
|
|
121
|
+
exclusion_file = find_last_file_upwards(DOTFILE, config_file, project_root)
|
|
110
122
|
|
|
111
|
-
return
|
|
112
|
-
return if PathUtil.relative_path(
|
|
113
|
-
PathUtil.relative_path(config_file)
|
|
123
|
+
return unless exclusion_file
|
|
124
|
+
return if PathUtil.relative_path(exclusion_file) == PathUtil.relative_path(config_file)
|
|
114
125
|
|
|
115
126
|
print 'AllCops/Exclude ' if debug?
|
|
116
|
-
config.add_excludes_from_higher_level(load_file(
|
|
127
|
+
config.add_excludes_from_higher_level(load_file(exclusion_file))
|
|
117
128
|
end
|
|
118
129
|
|
|
119
130
|
def default_configuration
|
|
@@ -123,6 +134,12 @@ module RuboCop
|
|
|
123
134
|
end
|
|
124
135
|
end
|
|
125
136
|
|
|
137
|
+
# Returns the path rubocop inferred as the root of the project. No file
|
|
138
|
+
# searches will go past this directory.
|
|
139
|
+
def project_root
|
|
140
|
+
@project_root ||= find_project_root
|
|
141
|
+
end
|
|
142
|
+
|
|
126
143
|
def warn_on_pending_cops(pending_cops)
|
|
127
144
|
return if pending_cops.empty?
|
|
128
145
|
|
|
@@ -139,40 +156,23 @@ module RuboCop
|
|
|
139
156
|
warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
|
|
140
157
|
end
|
|
141
158
|
|
|
142
|
-
# Merges the given configuration with the default one.
|
|
143
|
-
# AllCops:DisabledByDefault is true, it changes the Enabled params so
|
|
144
|
-
# that only cops from user configuration are enabled.
|
|
145
|
-
# If AllCops::EnabledByDefault is true, it changes the Enabled params
|
|
146
|
-
# so that only cops explicitly disabled in user configuration are
|
|
147
|
-
# disabled.
|
|
159
|
+
# Merges the given configuration with the default one.
|
|
148
160
|
def merge_with_default(config, config_file, unset_nil: true)
|
|
149
161
|
resolver.merge_with_default(config, config_file, unset_nil: unset_nil)
|
|
150
162
|
end
|
|
151
163
|
|
|
152
|
-
|
|
153
|
-
file_string = " #{AUTO_GENERATED_FILE}"
|
|
154
|
-
|
|
155
|
-
config_file = options_config || DOTFILE
|
|
156
|
-
|
|
157
|
-
if File.exist?(config_file)
|
|
158
|
-
files = Array(load_yaml_configuration(config_file)['inherit_from'])
|
|
159
|
-
|
|
160
|
-
return if files.include?(AUTO_GENERATED_FILE)
|
|
161
|
-
|
|
162
|
-
files.unshift(AUTO_GENERATED_FILE)
|
|
163
|
-
file_string = "\n - " + files.join("\n - ") if files.size > 1
|
|
164
|
-
rubocop_yml_contents = existing_configuration(config_file)
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
write_config_file(config_file, file_string, rubocop_yml_contents)
|
|
164
|
+
private
|
|
168
165
|
|
|
169
|
-
|
|
166
|
+
def find_project_dotfile(target_dir)
|
|
167
|
+
find_file_upwards(DOTFILE, target_dir, project_root)
|
|
170
168
|
end
|
|
171
169
|
|
|
172
|
-
|
|
170
|
+
def find_project_root
|
|
171
|
+
pwd = Dir.pwd
|
|
172
|
+
gems_file = find_last_file_upwards('Gemfile', pwd) || find_last_file_upwards('gems.rb', pwd)
|
|
173
|
+
return unless gems_file
|
|
173
174
|
|
|
174
|
-
|
|
175
|
-
find_file_upwards(DOTFILE, target_dir)
|
|
175
|
+
File.dirname(gems_file)
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
def find_user_dotfile
|
|
@@ -196,38 +196,10 @@ module RuboCop
|
|
|
196
196
|
path
|
|
197
197
|
end
|
|
198
198
|
|
|
199
|
-
def existing_configuration(config_file)
|
|
200
|
-
IO.read(config_file, encoding: Encoding::UTF_8)
|
|
201
|
-
.sub(/^inherit_from: *[^\n]+/, '')
|
|
202
|
-
.sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
def write_config_file(file_name, file_string, rubocop_yml_contents)
|
|
206
|
-
File.open(file_name, 'w') do |f|
|
|
207
|
-
f.write "inherit_from:#{file_string}\n"
|
|
208
|
-
f.write "\n#{rubocop_yml_contents}" if /\S/.match?(rubocop_yml_contents)
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
199
|
def resolver
|
|
213
200
|
@resolver ||= ConfigLoaderResolver.new
|
|
214
201
|
end
|
|
215
202
|
|
|
216
|
-
def load_yaml_configuration(absolute_path)
|
|
217
|
-
file_contents = read_file(absolute_path)
|
|
218
|
-
yaml_code = Dir.chdir(File.dirname(absolute_path)) do
|
|
219
|
-
ERB.new(file_contents).result
|
|
220
|
-
end
|
|
221
|
-
check_duplication(yaml_code, absolute_path)
|
|
222
|
-
hash = yaml_safe_load(yaml_code, absolute_path) || {}
|
|
223
|
-
|
|
224
|
-
puts "configuration from #{absolute_path}" if debug?
|
|
225
|
-
|
|
226
|
-
raise(TypeError, "Malformed configuration in #{absolute_path}") unless hash.is_a?(Hash)
|
|
227
|
-
|
|
228
|
-
hash
|
|
229
|
-
end
|
|
230
|
-
|
|
231
203
|
def check_duplication(yaml_code, absolute_path)
|
|
232
204
|
smart_path = PathUtil.smart_path(absolute_path)
|
|
233
205
|
YAMLDuplicationChecker.check(yaml_code, absolute_path) do |key1, key2|
|
|
@@ -192,7 +192,7 @@ module RuboCop
|
|
|
192
192
|
|
|
193
193
|
def remote_file?(uri)
|
|
194
194
|
regex = URI::DEFAULT_PARSER.make_regexp(%w[http https])
|
|
195
|
-
|
|
195
|
+
/\A#{regex}\z/.match?(uri)
|
|
196
196
|
end
|
|
197
197
|
|
|
198
198
|
def handle_disabled_by_default(config, new_default_configuration)
|
|
@@ -201,7 +201,7 @@ module RuboCop
|
|
|
201
201
|
next unless dept_params['Enabled']
|
|
202
202
|
|
|
203
203
|
new_default_configuration.each do |cop, params|
|
|
204
|
-
next unless cop.start_with?(dept
|
|
204
|
+
next unless cop.start_with?("#{dept}/")
|
|
205
205
|
|
|
206
206
|
# Retain original default configuration for cops in the department.
|
|
207
207
|
params['Enabled'] = ConfigLoader.default_configuration[cop]['Enabled']
|
|
@@ -213,8 +213,8 @@ module RuboCop
|
|
|
213
213
|
end
|
|
214
214
|
end
|
|
215
215
|
|
|
216
|
-
def transform(config)
|
|
217
|
-
config.transform_values
|
|
216
|
+
def transform(config, &block)
|
|
217
|
+
config.transform_values(&block)
|
|
218
218
|
end
|
|
219
219
|
|
|
220
220
|
def gem_config_path(gem_name, relative_config_path)
|
|
@@ -63,7 +63,6 @@ module RuboCop
|
|
|
63
63
|
'Layout/SpaceAfterControlKeyword' => 'Layout/SpaceAroundKeyword',
|
|
64
64
|
'Layout/SpaceBeforeModifierKeyword' => 'Layout/SpaceAroundKeyword',
|
|
65
65
|
'Lint/RescueWithoutErrorClass' => 'Style/RescueStandardError',
|
|
66
|
-
'Rails/DefaultScope' => nil,
|
|
67
66
|
'Style/SpaceAfterControlKeyword' => 'Layout/SpaceAroundKeyword',
|
|
68
67
|
'Style/SpaceBeforeModifierKeyword' => 'Layout/SpaceAroundKeyword',
|
|
69
68
|
'Style/TrailingComma' => 'Style/TrailingCommaInArguments, ' \
|
|
@@ -85,7 +84,12 @@ module RuboCop
|
|
|
85
84
|
'Lint/InvalidCharacterLiteral' => 'it was never being actually triggered',
|
|
86
85
|
'Lint/SpaceBeforeFirstArg' =>
|
|
87
86
|
'it was a duplicate of `Layout/SpaceBeforeFirstArg`. Please use ' \
|
|
88
|
-
'`Layout/SpaceBeforeFirstArg` instead'
|
|
87
|
+
'`Layout/SpaceBeforeFirstArg` instead',
|
|
88
|
+
'Style/MethodMissingSuper' => 'it has been superseded by `Lint/MissingSuper`. Please use ' \
|
|
89
|
+
'`Lint/MissingSuper` instead',
|
|
90
|
+
'Lint/UselessComparison' => 'it has been superseded by '\
|
|
91
|
+
'`Lint/BinaryOperatorWithIdenticalOperands`. Please use '\
|
|
92
|
+
'`Lint/BinaryOperatorWithIdenticalOperands` instead'
|
|
89
93
|
}.map do |cop_name, reason|
|
|
90
94
|
[cop_name, "The `#{cop_name}` cop has been removed since #{reason}."]
|
|
91
95
|
end
|
data/lib/rubocop/config_store.rb
CHANGED
|
@@ -23,7 +23,6 @@ module RuboCop
|
|
|
23
23
|
@target_ruby = TargetRuby.new(config)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
# rubocop:disable Metrics/AbcSize
|
|
27
26
|
def validate
|
|
28
27
|
check_cop_config_value(@config)
|
|
29
28
|
reject_conflicting_safe_settings
|
|
@@ -45,7 +44,6 @@ module RuboCop
|
|
|
45
44
|
validate_syntax_cop
|
|
46
45
|
reject_mutually_exclusive_defaults
|
|
47
46
|
end
|
|
48
|
-
# rubocop:enable Metrics/AbcSize
|
|
49
47
|
|
|
50
48
|
def target_ruby_version
|
|
51
49
|
target_ruby.version
|
|
@@ -86,7 +84,7 @@ module RuboCop
|
|
|
86
84
|
unknown_cops = []
|
|
87
85
|
invalid_cop_names.each do |name|
|
|
88
86
|
# There could be a custom cop with this name. If so, don't warn
|
|
89
|
-
next if Cop::
|
|
87
|
+
next if Cop::Registry.global.contains_cop_matching?([name])
|
|
90
88
|
|
|
91
89
|
# Special case for inherit_mode, which is a directive that we keep in
|
|
92
90
|
# the configuration (even though it's not a cop), because it's easier
|
|
@@ -150,7 +148,7 @@ module RuboCop
|
|
|
150
148
|
end
|
|
151
149
|
end
|
|
152
150
|
|
|
153
|
-
def validate_enforced_styles(valid_cop_names)
|
|
151
|
+
def validate_enforced_styles(valid_cop_names) # rubocop:todo Metrics/AbcSize
|
|
154
152
|
valid_cop_names.each do |name|
|
|
155
153
|
styles = @config[name].select { |key, _| key.start_with?('Enforced') }
|
|
156
154
|
|
|
@@ -13,11 +13,7 @@ module RuboCop
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def correctable?
|
|
16
|
-
support_autocorrect? || disable_uncorrectable?
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def support_autocorrect?
|
|
20
|
-
respond_to?(:autocorrect)
|
|
16
|
+
self.class.support_autocorrect? || disable_uncorrectable?
|
|
21
17
|
end
|
|
22
18
|
|
|
23
19
|
def disable_uncorrectable?
|
|
@@ -40,8 +36,9 @@ module RuboCop
|
|
|
40
36
|
true
|
|
41
37
|
end
|
|
42
38
|
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def disable_offense(range)
|
|
45
42
|
eol_comment = " # rubocop:todo #{cop_name}"
|
|
46
43
|
needed_line_length = (range.source_line + eol_comment).length
|
|
47
44
|
if needed_line_length <= max_line_length
|
|
@@ -52,8 +49,6 @@ module RuboCop
|
|
|
52
49
|
end
|
|
53
50
|
end
|
|
54
51
|
|
|
55
|
-
private
|
|
56
|
-
|
|
57
52
|
def range_of_first_line(range)
|
|
58
53
|
begin_of_first_line = range.begin_pos - range.column
|
|
59
54
|
end_of_first_line = begin_of_first_line + range.source_line.length
|
|
@@ -78,27 +73,22 @@ module RuboCop
|
|
|
78
73
|
end
|
|
79
74
|
|
|
80
75
|
def max_line_length
|
|
81
|
-
config.for_cop('Layout/LineLength')['Max'] ||
|
|
76
|
+
config.for_cop('Layout/LineLength')['Max'] || 120
|
|
82
77
|
end
|
|
83
78
|
|
|
84
79
|
def disable_offense_at_end_of_line(range, eol_comment)
|
|
85
|
-
|
|
80
|
+
Corrector.new(range).insert_after(range, eol_comment)
|
|
86
81
|
end
|
|
87
82
|
|
|
88
83
|
def disable_offense_before_and_after(range_by_lines)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
corrector.insert_after(
|
|
98
|
-
range_with_newline,
|
|
99
|
-
"#{leading_whitespace}# rubocop:enable #{cop_name}\n"
|
|
100
|
-
)
|
|
101
|
-
end
|
|
84
|
+
range_with_newline = range_by_lines.resize(range_by_lines.size + 1)
|
|
85
|
+
leading_whitespace = range_by_lines.source_line[/^\s*/]
|
|
86
|
+
|
|
87
|
+
Corrector.new(range_by_lines).wrap(
|
|
88
|
+
range_with_newline,
|
|
89
|
+
"#{leading_whitespace}# rubocop:todo #{cop_name}\n",
|
|
90
|
+
"#{leading_whitespace}# rubocop:enable #{cop_name}\n"
|
|
91
|
+
)
|
|
102
92
|
end
|
|
103
93
|
end
|
|
104
94
|
end
|