rubocop 1.12.1 → 1.16.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 +5 -2
- data/config/default.yml +78 -8
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +10 -1
- data/lib/rubocop/cached_data.rb +1 -3
- data/lib/rubocop/cli.rb +4 -6
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
- data/lib/rubocop/cli/command/show_cops.rb +1 -4
- data/lib/rubocop/comment_config.rb +2 -7
- data/lib/rubocop/config.rb +11 -26
- data/lib/rubocop/config_loader.rb +5 -11
- data/lib/rubocop/config_loader_resolver.rb +22 -14
- data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
- data/lib/rubocop/config_store.rb +1 -2
- data/lib/rubocop/config_validator.rb +5 -10
- data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
- data/lib/rubocop/cop/badge.rb +1 -2
- data/lib/rubocop/cop/base.rb +8 -6
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
- data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
- data/lib/rubocop/cop/commissioner.rb +2 -8
- data/lib/rubocop/cop/cop.rb +4 -18
- data/lib/rubocop/cop/corrector.rb +1 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
- data/lib/rubocop/cop/generator.rb +1 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
- data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +30 -14
- data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
- data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
- data/lib/rubocop/cop/layout/case_indentation.rb +57 -11
- data/lib/rubocop/cop/layout/class_structure.rb +4 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
- data/lib/rubocop/cop/layout/dot_position.rb +1 -3
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
- data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +2 -5
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +14 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +36 -15
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
- data/lib/rubocop/cop/layout/indentation_width.rb +6 -4
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
- data/lib/rubocop/cop/layout/line_length.rb +4 -15
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -10
- data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +19 -6
- data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
- data/lib/rubocop/cop/legacy/corrector.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
- data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
- data/lib/rubocop/cop/lint/else_layout.rb +1 -3
- data/lib/rubocop/cop/lint/empty_block.rb +18 -2
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
- data/lib/rubocop/cop/lint/empty_file.rb +1 -3
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +62 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
- data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
- data/lib/rubocop/cop/lint/loop.rb +1 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
- data/lib/rubocop/cop/lint/missing_super.rb +1 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +2 -3
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rand_one.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +18 -27
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
- data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
- data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
- data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
- data/lib/rubocop/cop/lint/symbol_conversion.rb +4 -16
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/to_json.rb +1 -2
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
- data/lib/rubocop/cop/lint/void.rb +5 -12
- data/lib/rubocop/cop/message_annotator.rb +1 -3
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -6
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
- data/lib/rubocop/cop/migration/department_name.rb +3 -7
- data/lib/rubocop/cop/mixin/alignment.rb +2 -4
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +19 -3
- data/lib/rubocop/cop/mixin/code_length.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
- data/lib/rubocop/cop/mixin/def_node.rb +2 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
- data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
- data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
- data/lib/rubocop/cop/mixin/match_range.rb +2 -5
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -17
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
- data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
- data/lib/rubocop/cop/mixin/range_help.rb +10 -13
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
- data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -5
- data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
- data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
- data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
- data/lib/rubocop/cop/naming/file_name.rb +7 -16
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
- data/lib/rubocop/cop/naming/method_name.rb +1 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
- data/lib/rubocop/cop/offense.rb +3 -8
- data/lib/rubocop/cop/registry.rb +3 -11
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -3
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +5 -12
- data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
- data/lib/rubocop/cop/style/case_like_if.rb +1 -2
- data/lib/rubocop/cop/style/character_literal.rb +2 -4
- data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
- data/lib/rubocop/cop/style/class_methods.rb +1 -3
- data/lib/rubocop/cop/style/collection_compact.rb +1 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +3 -8
- data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
- data/lib/rubocop/cop/style/commented_keyword.rb +2 -8
- data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
- data/lib/rubocop/cop/style/copyright.rb +3 -6
- data/lib/rubocop/cop/style/date_time.rb +2 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
- data/lib/rubocop/cop/style/empty_else.rb +3 -9
- data/lib/rubocop/cop/style/empty_literal.rb +12 -9
- data/lib/rubocop/cop/style/empty_method.rb +3 -7
- data/lib/rubocop/cop/style/end_block.rb +1 -2
- data/lib/rubocop/cop/style/endless_method.rb +1 -3
- data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -8
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +28 -3
- data/lib/rubocop/cop/style/hash_each_methods.rb +19 -3
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +27 -8
- data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
- data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/lambda.rb +2 -4
- data/lib/rubocop/cop/style/lambda_call.rb +1 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +7 -12
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/min_max.rb +1 -2
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
- data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
- data/lib/rubocop/cop/style/module_function.rb +3 -6
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
- data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +62 -0
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -3
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
- data/lib/rubocop/cop/style/multiline_when_then.rb +2 -11
- data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
- data/lib/rubocop/cop/style/negated_if.rb +1 -2
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +17 -9
- data/lib/rubocop/cop/style/negated_unless.rb +1 -2
- data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
- data/lib/rubocop/cop/style/next.rb +4 -9
- data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
- data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
- data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
- data/lib/rubocop/cop/style/option_hash.rb +1 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
- data/lib/rubocop/cop/style/or_assignment.rb +2 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
- data/lib/rubocop/cop/style/proc.rb +1 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +110 -0
- data/lib/rubocop/cop/style/raise_args.rb +4 -8
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +4 -4
- data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
- data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
- data/lib/rubocop/cop/style/redundant_return.rb +3 -5
- data/lib/rubocop/cop/style/redundant_self.rb +25 -7
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
- data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
- data/lib/rubocop/cop/style/return_nil.rb +1 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
- data/lib/rubocop/cop/style/send.rb +1 -2
- data/lib/rubocop/cop/style/signal_exception.rb +3 -7
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +20 -4
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +15 -7
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
- data/lib/rubocop/cop/style/string_chars.rb +2 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
- data/lib/rubocop/cop/style/string_literals.rb +3 -5
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
- data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
- data/lib/rubocop/cop/style/top_level_method_definition.rb +83 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
- data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +4 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
- data/lib/rubocop/cop/style/word_array.rb +1 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
- data/lib/rubocop/cop/team.rb +2 -5
- data/lib/rubocop/cop/util.rb +4 -10
- data/lib/rubocop/cop/utils/format_string.rb +1 -3
- data/lib/rubocop/cop/variable_force.rb +6 -15
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
- data/lib/rubocop/cop/variable_force/branch.rb +16 -2
- data/lib/rubocop/cop/variable_force/reference.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +4 -8
- data/lib/rubocop/cop/variable_force/variable.rb +2 -4
- data/lib/rubocop/cops_documentation_generator.rb +7 -21
- data/lib/rubocop/directive_comment.rb +5 -1
- data/lib/rubocop/file_finder.rb +1 -3
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
- data/lib/rubocop/formatter/html_formatter.rb +4 -10
- data/lib/rubocop/formatter/json_formatter.rb +1 -5
- data/lib/rubocop/formatter/junit_formatter.rb +23 -14
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/options.rb +30 -50
- data/lib/rubocop/path_util.rb +1 -3
- data/lib/rubocop/rake_task.rb +3 -0
- data/lib/rubocop/remote_config.rb +4 -7
- data/lib/rubocop/result_cache.rb +5 -12
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -9
- data/lib/rubocop/rspec/shared_contexts.rb +8 -15
- data/lib/rubocop/runner.rb +7 -14
- data/lib/rubocop/target_finder.rb +18 -16
- data/lib/rubocop/target_ruby.rb +4 -8
- data/lib/rubocop/version.rb +1 -1
- metadata +16 -7
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -26,10 +26,7 @@ module RuboCop
|
|
26
26
|
registry = Cop::Registry.global
|
27
27
|
show_all = @options[:show_cops].empty?
|
28
28
|
|
29
|
-
if show_all
|
30
|
-
puts "# Available cops (#{registry.length}) " \
|
31
|
-
"+ config for #{Dir.pwd}: "
|
32
|
-
end
|
29
|
+
puts "# Available cops (#{registry.length}) + config for #{Dir.pwd}: " if show_all
|
33
30
|
|
34
31
|
registry.departments.sort!.each do |department|
|
35
32
|
print_cops_of_department(registry, department, show_all)
|
@@ -25,16 +25,11 @@ module RuboCop
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def extra_enabled_comments
|
28
|
-
extra_enabled_comments_with_names(
|
29
|
-
extras: Hash.new { |h, k| h[k] = [] },
|
30
|
-
names: Hash.new(0)
|
31
|
-
)
|
28
|
+
extra_enabled_comments_with_names(extras: Hash.new { |h, k| h[k] = [] }, names: Hash.new(0))
|
32
29
|
end
|
33
30
|
|
34
31
|
def comment_only_line?(line_number)
|
35
|
-
non_comment_token_line_numbers.none?
|
36
|
-
non_comment_line_number == line_number
|
37
|
-
end
|
32
|
+
non_comment_token_line_numbers.none?(line_number)
|
38
33
|
end
|
39
34
|
|
40
35
|
private
|
data/lib/rubocop/config.rb
CHANGED
@@ -45,9 +45,7 @@ module RuboCop
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def check
|
48
|
-
deprecation_check
|
49
|
-
warn("#{loaded_path} - #{deprecation_message}")
|
50
|
-
end
|
48
|
+
deprecation_check { |deprecation_message| warn("#{loaded_path} - #{deprecation_message}") }
|
51
49
|
@validator.validate
|
52
50
|
make_excludes_absolute
|
53
51
|
self
|
@@ -67,8 +65,7 @@ module RuboCop
|
|
67
65
|
|
68
66
|
# True if this is a config file that is shipped with RuboCop
|
69
67
|
def internal?
|
70
|
-
base_config_path = File.expand_path(File.join(ConfigLoader::RUBOCOP_HOME,
|
71
|
-
'config'))
|
68
|
+
base_config_path = File.expand_path(File.join(ConfigLoader::RUBOCOP_HOME, 'config'))
|
72
69
|
File.expand_path(loaded_path).start_with?(base_config_path)
|
73
70
|
end
|
74
71
|
|
@@ -79,8 +76,7 @@ module RuboCop
|
|
79
76
|
|
80
77
|
self[key]['Exclude'].map! do |exclude_elem|
|
81
78
|
if exclude_elem.is_a?(String) && !absolute?(exclude_elem)
|
82
|
-
File.expand_path(File.join(base_dir_for_path_parameters,
|
83
|
-
exclude_elem))
|
79
|
+
File.expand_path(File.join(base_dir_for_path_parameters, exclude_elem))
|
84
80
|
else
|
85
81
|
exclude_elem
|
86
82
|
end
|
@@ -122,17 +118,14 @@ module RuboCop
|
|
122
118
|
# Note: the 'Enabled' attribute is same as that returned by `for_cop`
|
123
119
|
def for_badge(badge)
|
124
120
|
cop_config = for_cop(badge.to_s)
|
125
|
-
fetch(badge.department.to_s) { return cop_config }
|
126
|
-
.merge(cop_config)
|
121
|
+
fetch(badge.department.to_s) { return cop_config }.merge(cop_config)
|
127
122
|
end
|
128
123
|
|
129
124
|
# @return [Config] for the given department name.
|
130
125
|
# Note: the 'Enabled' attribute will be present only if specified
|
131
126
|
# at the department's level
|
132
127
|
def for_department(department_name)
|
133
|
-
@for_department ||= Hash.new
|
134
|
-
h[dept] = self[dept] || {}
|
135
|
-
end
|
128
|
+
@for_department ||= Hash.new { |h, dept| h[dept] = self[dept] || {} }
|
136
129
|
@for_department[department_name.to_s]
|
137
130
|
end
|
138
131
|
|
@@ -153,8 +146,7 @@ module RuboCop
|
|
153
146
|
|
154
147
|
# Optimization to quickly decide if the given file is hidden (on the top
|
155
148
|
# level) and cannot be matched by any pattern.
|
156
|
-
is_hidden = relative_file_path.start_with?('.') &&
|
157
|
-
!relative_file_path.start_with?('..')
|
149
|
+
is_hidden = relative_file_path.start_with?('.') && !relative_file_path.start_with?('..')
|
158
150
|
return false if is_hidden && !possibly_include_hidden?
|
159
151
|
|
160
152
|
absolute_file_path = File.expand_path(file)
|
@@ -163,8 +155,7 @@ module RuboCop
|
|
163
155
|
if block_given?
|
164
156
|
yield pattern, relative_file_path, absolute_file_path
|
165
157
|
else
|
166
|
-
match_path?(pattern, relative_file_path) ||
|
167
|
-
match_path?(pattern, absolute_file_path)
|
158
|
+
match_path?(pattern, relative_file_path) || match_path?(pattern, absolute_file_path)
|
168
159
|
end
|
169
160
|
end
|
170
161
|
end
|
@@ -177,8 +168,7 @@ module RuboCop
|
|
177
168
|
|
178
169
|
file_to_include?(file) do |pattern, relative_path, absolute_path|
|
179
170
|
/[A-Z]/.match?(pattern.to_s) &&
|
180
|
-
(match_path?(pattern, relative_path) ||
|
181
|
-
match_path?(pattern, absolute_path))
|
171
|
+
(match_path?(pattern, relative_path) || match_path?(pattern, absolute_path))
|
182
172
|
end
|
183
173
|
end
|
184
174
|
|
@@ -194,9 +184,7 @@ module RuboCop
|
|
194
184
|
|
195
185
|
def file_to_exclude?(file)
|
196
186
|
file = File.expand_path(file)
|
197
|
-
patterns_to_exclude.any?
|
198
|
-
match_path?(pattern, file)
|
199
|
-
end
|
187
|
+
patterns_to_exclude.any? { |pattern| match_path?(pattern, file) }
|
200
188
|
end
|
201
189
|
|
202
190
|
def patterns_to_include
|
@@ -267,8 +255,7 @@ module RuboCop
|
|
267
255
|
private
|
268
256
|
|
269
257
|
def target_rails_version_from_bundler_lock_file
|
270
|
-
@target_rails_version_from_bundler_lock_file ||=
|
271
|
-
read_rails_version_from_bundler_lock_file
|
258
|
+
@target_rails_version_from_bundler_lock_file ||= read_rails_version_from_bundler_lock_file
|
272
259
|
end
|
273
260
|
|
274
261
|
def read_rails_version_from_bundler_lock_file
|
@@ -288,9 +275,7 @@ module RuboCop
|
|
288
275
|
return true if cop_options['Enabled'] == true
|
289
276
|
|
290
277
|
department = department_of(qualified_cop_name)
|
291
|
-
cop_enabled = cop_options.fetch('Enabled')
|
292
|
-
!for_all_cops['DisabledByDefault']
|
293
|
-
end
|
278
|
+
cop_enabled = cop_options.fetch('Enabled') { !for_all_cops['DisabledByDefault'] }
|
294
279
|
return true if cop_enabled == 'override_department'
|
295
280
|
return false if department && department['Enabled'] == false
|
296
281
|
|
@@ -22,8 +22,7 @@ module RuboCop
|
|
22
22
|
class << self
|
23
23
|
include FileFinder
|
24
24
|
|
25
|
-
attr_accessor :debug, :ignore_parent_exclusion,
|
26
|
-
:disable_pending_cops, :enable_pending_cops
|
25
|
+
attr_accessor :debug, :ignore_parent_exclusion, :disable_pending_cops, :enable_pending_cops
|
27
26
|
attr_writer :default_configuration, :project_root
|
28
27
|
attr_reader :loaded_features
|
29
28
|
|
@@ -58,9 +57,7 @@ module RuboCop
|
|
58
57
|
|
59
58
|
def load_yaml_configuration(absolute_path)
|
60
59
|
file_contents = read_file(absolute_path)
|
61
|
-
yaml_code = Dir.chdir(File.dirname(absolute_path))
|
62
|
-
ERB.new(file_contents).result
|
63
|
-
end
|
60
|
+
yaml_code = Dir.chdir(File.dirname(absolute_path)) { ERB.new(file_contents).result }
|
64
61
|
check_duplication(yaml_code, absolute_path)
|
65
62
|
hash = yaml_safe_load(yaml_code, absolute_path) || {}
|
66
63
|
|
@@ -156,9 +153,7 @@ module RuboCop
|
|
156
153
|
|
157
154
|
warn Rainbow(PENDING_BANNER).yellow
|
158
155
|
|
159
|
-
pending_cops.each
|
160
|
-
warn_pending_cop cop
|
161
|
-
end
|
156
|
+
pending_cops.each { |cop| warn_pending_cop cop }
|
162
157
|
|
163
158
|
warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
|
164
159
|
end
|
@@ -246,10 +241,9 @@ module RuboCop
|
|
246
241
|
# stderr. Care is taken to use the standard OS exit code for a "file not
|
247
242
|
# found" error.
|
248
243
|
def read_file(absolute_path)
|
249
|
-
|
244
|
+
File.read(absolute_path, encoding: Encoding::UTF_8)
|
250
245
|
rescue Errno::ENOENT
|
251
|
-
raise ConfigNotFoundError,
|
252
|
-
"Configuration file not found: #{absolute_path}"
|
246
|
+
raise ConfigNotFoundError, "Configuration file not found: #{absolute_path}"
|
253
247
|
end
|
254
248
|
|
255
249
|
def yaml_safe_load(yaml_code, filename)
|
@@ -37,16 +37,30 @@ module RuboCop
|
|
37
37
|
inherit_mode: determine_inherit_mode(hash, k))
|
38
38
|
end
|
39
39
|
hash[k] = v
|
40
|
+
fix_include_paths(base_config.loaded_path, hash, path, k, v) if v.key?('Include')
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
45
|
+
# When one .rubocop.yml file inherits from another .rubocop.yml file, the Include paths in the
|
46
|
+
# base configuration are relative to the directory where the base configuration file is. For the
|
47
|
+
# derived configuration, we need to make those paths relative to where the derived configuration
|
48
|
+
# file is.
|
49
|
+
def fix_include_paths(base_config_path, hash, path, key, value)
|
50
|
+
return unless File.basename(base_config_path).start_with?('.rubocop')
|
51
|
+
|
52
|
+
base_dir = File.dirname(base_config_path)
|
53
|
+
derived_dir = File.dirname(path)
|
54
|
+
hash[key]['Include'] = value['Include'].map do |include_path|
|
55
|
+
PathUtil.relative_path(File.join(base_dir, include_path), derived_dir)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
44
59
|
def resolve_inheritance_from_gems(hash)
|
45
60
|
gems = hash.delete('inherit_gem')
|
46
61
|
(gems || {}).each_pair do |gem_name, config_path|
|
47
62
|
if gem_name == 'rubocop'
|
48
|
-
raise ArgumentError,
|
49
|
-
"can't inherit configuration from the rubocop gem"
|
63
|
+
raise ArgumentError, "can't inherit configuration from the rubocop gem"
|
50
64
|
end
|
51
65
|
|
52
66
|
hash['inherit_from'] = Array(hash['inherit_from'])
|
@@ -77,8 +91,7 @@ module RuboCop
|
|
77
91
|
config = handle_disabled_by_default(config, default_configuration) if disabled_by_default
|
78
92
|
override_enabled_for_disabled_departments(default_configuration, config)
|
79
93
|
|
80
|
-
opts = { inherit_mode: config['inherit_mode'] || {},
|
81
|
-
unset_nil: unset_nil }
|
94
|
+
opts = { inherit_mode: config['inherit_mode'] || {}, unset_nil: unset_nil }
|
82
95
|
Config.new(merge(default_configuration, config, **opts), config_file)
|
83
96
|
end
|
84
97
|
|
@@ -112,8 +125,7 @@ module RuboCop
|
|
112
125
|
next unless key =~ %r{(.*)/.*}
|
113
126
|
|
114
127
|
department = Regexp.last_match(1)
|
115
|
-
next unless disabled?(derived_hash, department) ||
|
116
|
-
disabled?(base_hash, department)
|
128
|
+
next unless disabled?(derived_hash, department) || disabled?(base_hash, department)
|
117
129
|
|
118
130
|
# The `override_department` setting for the `Enabled` parameter is an
|
119
131
|
# internal setting that's not documented in the manual. It will cause a
|
@@ -155,13 +167,10 @@ module RuboCop
|
|
155
167
|
end
|
156
168
|
|
157
169
|
def warn_on_duplicate_setting(base_hash, derived_hash, key, **opts)
|
158
|
-
return unless duplicate_setting?(base_hash, derived_hash,
|
159
|
-
key, opts[:inherited_file])
|
170
|
+
return unless duplicate_setting?(base_hash, derived_hash, key, opts[:inherited_file])
|
160
171
|
|
161
|
-
inherit_mode = opts[:inherit_mode]['merge'] ||
|
162
|
-
|
163
|
-
return if base_hash[key].is_a?(Array) &&
|
164
|
-
inherit_mode && inherit_mode.include?(key)
|
172
|
+
inherit_mode = opts[:inherit_mode]['merge'] || opts[:inherit_mode]['override']
|
173
|
+
return if base_hash[key].is_a?(Array) && inherit_mode && inherit_mode.include?(key)
|
165
174
|
|
166
175
|
puts "#{PathUtil.smart_path(opts[:file])}: " \
|
167
176
|
"#{opts[:cop_name]}:#{key} overrides " \
|
@@ -251,8 +260,7 @@ module RuboCop
|
|
251
260
|
|
252
261
|
File.join(gem_path, relative_config_path)
|
253
262
|
rescue Gem::LoadError => e
|
254
|
-
raise Gem::LoadError,
|
255
|
-
"Unable to find gem #{gem_name}; is the gem installed? #{e}"
|
263
|
+
raise Gem::LoadError, "Unable to find gem #{gem_name}; is the gem installed? #{e}"
|
256
264
|
end
|
257
265
|
end
|
258
266
|
end
|
@@ -17,8 +17,7 @@ module RuboCop
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def message
|
20
|
-
rule_message + "\n(obsolete configuration found in "
|
21
|
-
"#{smart_loaded_path}, please update it)"
|
20
|
+
rule_message + "\n(obsolete configuration found in #{smart_loaded_path}, please update it)"
|
22
21
|
end
|
23
22
|
|
24
23
|
# Cop rules currently can only be failures, not warnings
|
data/lib/rubocop/config_store.rb
CHANGED
@@ -27,8 +27,7 @@ module RuboCop
|
|
27
27
|
|
28
28
|
def options_config=(options_config)
|
29
29
|
loaded_config = ConfigLoader.load_file(options_config)
|
30
|
-
@options_config = ConfigLoader.merge_with_default(loaded_config,
|
31
|
-
options_config)
|
30
|
+
@options_config = ConfigLoader.merge_with_default(loaded_config, options_config)
|
32
31
|
end
|
33
32
|
|
34
33
|
def force_default_config!
|
@@ -9,8 +9,7 @@ module RuboCop
|
|
9
9
|
extend Forwardable
|
10
10
|
|
11
11
|
# @api private
|
12
|
-
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode
|
13
|
-
AutoCorrect StyleGuide Details].freeze
|
12
|
+
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode AutoCorrect StyleGuide Details].freeze
|
14
13
|
# @api private
|
15
14
|
INTERNAL_PARAMS = %w[Description StyleGuide
|
16
15
|
VersionAdded VersionChanged VersionRemoved
|
@@ -60,8 +59,7 @@ module RuboCop
|
|
60
59
|
def validate_section_presence(name)
|
61
60
|
return unless @config.key?(name) && @config[name].nil?
|
62
61
|
|
63
|
-
raise ValidationError,
|
64
|
-
"empty section #{name} found in #{smart_loaded_path}"
|
62
|
+
raise ValidationError, "empty section #{name} found in #{smart_loaded_path}"
|
65
63
|
end
|
66
64
|
|
67
65
|
private
|
@@ -123,8 +121,7 @@ module RuboCop
|
|
123
121
|
syntax_config = @config['Lint/Syntax']
|
124
122
|
default_config = ConfigLoader.default_configuration['Lint/Syntax']
|
125
123
|
|
126
|
-
return unless syntax_config &&
|
127
|
-
default_config.merge(syntax_config) != default_config
|
124
|
+
return unless syntax_config && default_config.merge(syntax_config) != default_config
|
128
125
|
|
129
126
|
raise ValidationError,
|
130
127
|
"configuration for Syntax cop found in #{smart_loaded_path}\n" \
|
@@ -133,8 +130,7 @@ module RuboCop
|
|
133
130
|
|
134
131
|
def validate_new_cops_parameter
|
135
132
|
new_cop_parameter = @config.for_all_cops['NewCops']
|
136
|
-
return if new_cop_parameter.nil? ||
|
137
|
-
NEW_COPS_VALUES.include?(new_cop_parameter)
|
133
|
+
return if new_cop_parameter.nil? || NEW_COPS_VALUES.include?(new_cop_parameter)
|
138
134
|
|
139
135
|
message = "invalid #{new_cop_parameter} for `NewCops` found in" \
|
140
136
|
"#{smart_loaded_path}\n" \
|
@@ -208,8 +204,7 @@ module RuboCop
|
|
208
204
|
def reject_conflicting_safe_settings
|
209
205
|
@config.each do |name, cop_config|
|
210
206
|
next unless cop_config.is_a?(Hash)
|
211
|
-
next unless cop_config['Safe'] == false &&
|
212
|
-
cop_config['SafeAutoCorrect'] == true
|
207
|
+
next unless cop_config['Safe'] == false && cop_config['SafeAutoCorrect'] == true
|
213
208
|
|
214
209
|
msg = 'Unsafe cops cannot have a safe auto-correction ' \
|
215
210
|
"(section #{name} in #{smart_loaded_path})"
|
@@ -21,8 +21,7 @@ module RuboCop
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def safe_autocorrect?
|
24
|
-
cop_config.fetch('Safe', true) &&
|
25
|
-
cop_config.fetch('SafeAutoCorrect', true)
|
24
|
+
cop_config.fetch('Safe', true) && cop_config.fetch('SafeAutoCorrect', true)
|
26
25
|
end
|
27
26
|
|
28
27
|
def autocorrect_enabled?
|
@@ -68,9 +67,7 @@ module RuboCop
|
|
68
67
|
begin_of_first_line = range.begin_pos - range.column
|
69
68
|
end_of_first_line = begin_of_first_line + range.source_line.length
|
70
69
|
|
71
|
-
Parser::Source::Range.new(range.source_buffer,
|
72
|
-
begin_of_first_line,
|
73
|
-
end_of_first_line)
|
70
|
+
Parser::Source::Range.new(range.source_buffer, begin_of_first_line, end_of_first_line)
|
74
71
|
end
|
75
72
|
|
76
73
|
# Expand the given range to include all of any lines it covers. Does not
|
@@ -82,9 +79,7 @@ module RuboCop
|
|
82
79
|
last_line_offset = last_line.length - range.last_column
|
83
80
|
end_of_last_line = range.end_pos + last_line_offset
|
84
81
|
|
85
|
-
Parser::Source::Range.new(range.source_buffer,
|
86
|
-
begin_of_first_line,
|
87
|
-
end_of_last_line)
|
82
|
+
Parser::Source::Range.new(range.source_buffer, begin_of_first_line, end_of_last_line)
|
88
83
|
end
|
89
84
|
|
90
85
|
def max_line_length
|
data/lib/rubocop/cop/badge.rb
CHANGED
data/lib/rubocop/cop/base.rb
CHANGED
@@ -187,8 +187,7 @@ module RuboCop
|
|
187
187
|
def self.match?(given_names)
|
188
188
|
return false unless given_names
|
189
189
|
|
190
|
-
given_names.include?(cop_name) ||
|
191
|
-
given_names.include?(department.to_s)
|
190
|
+
given_names.include?(cop_name) || given_names.include?(department.to_s)
|
192
191
|
end
|
193
192
|
|
194
193
|
def cop_name
|
@@ -206,13 +205,11 @@ module RuboCop
|
|
206
205
|
end
|
207
206
|
|
208
207
|
def config_to_allow_offenses
|
209
|
-
Formatter::DisabledConfigFormatter
|
210
|
-
.config_to_allow_offenses[cop_name] ||= {}
|
208
|
+
Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name] ||= {}
|
211
209
|
end
|
212
210
|
|
213
211
|
def config_to_allow_offenses=(hash)
|
214
|
-
Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name] =
|
215
|
-
hash
|
212
|
+
Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name] = hash
|
216
213
|
end
|
217
214
|
|
218
215
|
def target_ruby_version
|
@@ -233,6 +230,11 @@ module RuboCop
|
|
233
230
|
!relevant_file?(file)
|
234
231
|
end
|
235
232
|
|
233
|
+
# There should be very limited reasons for a Cop to do it's own parsing
|
234
|
+
def parse(source, path = nil)
|
235
|
+
ProcessedSource.new(source, target_ruby_version, path)
|
236
|
+
end
|
237
|
+
|
236
238
|
### Persistence
|
237
239
|
|
238
240
|
# Override if your cop should be called repeatedly for multiple investigations
|
@@ -83,8 +83,7 @@ module RuboCop
|
|
83
83
|
|
84
84
|
def register_offense(node, gem_name, line_of_first_occurrence)
|
85
85
|
line_range = node.loc.column...node.loc.last_column
|
86
|
-
offense_location =
|
87
|
-
source_range(processed_source.buffer, node.first_line, line_range)
|
86
|
+
offense_location = source_range(processed_source.buffer, node.first_line, line_range)
|
88
87
|
message = format(
|
89
88
|
MSG,
|
90
89
|
gem_name: gem_name,
|
@@ -3,15 +3,24 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Bundler
|
6
|
-
#
|
6
|
+
# Each gem in the Gemfile should have a comment explaining
|
7
|
+
# its purpose in the project, or the reason for its version
|
8
|
+
# or source.
|
7
9
|
#
|
8
|
-
#
|
10
|
+
# The optional "OnlyFor" configuration array
|
9
11
|
# can be used to only register offenses when the gems
|
10
12
|
# use certain options or have version specifiers.
|
11
|
-
# Add "version_specifiers" and/or the gem option names
|
12
|
-
# you want to check.
|
13
13
|
#
|
14
|
-
#
|
14
|
+
# When "version_specifiers" is included, a comment
|
15
|
+
# will be enforced if the gem has any version specifier.
|
16
|
+
#
|
17
|
+
# When "restrictive_version_specifiers" is included, a comment
|
18
|
+
# will be enforced if the gem has a version specifier that
|
19
|
+
# holds back the version of the gem.
|
20
|
+
#
|
21
|
+
# For any other value in the array, a comment will be enforced for
|
22
|
+
# a gem if an option by the same name is present.
|
23
|
+
# A useful use case is to enforce a comment when using
|
15
24
|
# options that change the source of a gem:
|
16
25
|
#
|
17
26
|
# - `bitbucket`
|
@@ -21,7 +30,8 @@ module RuboCop
|
|
21
30
|
# - `source`
|
22
31
|
#
|
23
32
|
# For a full list of options supported by bundler,
|
24
|
-
#
|
33
|
+
# see https://bundler.io/man/gemfile.5.html
|
34
|
+
# .
|
25
35
|
#
|
26
36
|
# @example OnlyFor: [] (default)
|
27
37
|
# # bad
|
@@ -43,6 +53,18 @@ module RuboCop
|
|
43
53
|
# # Version 2.1 introduces breaking change baz
|
44
54
|
# gem 'foo', '< 2.1'
|
45
55
|
#
|
56
|
+
# @example OnlyFor: ['restrictive_version_specifiers']
|
57
|
+
# # bad
|
58
|
+
#
|
59
|
+
# gem 'foo', '< 2.1'
|
60
|
+
#
|
61
|
+
# # good
|
62
|
+
#
|
63
|
+
# gem 'foo', '>= 1.0'
|
64
|
+
#
|
65
|
+
# # Version 2.1 introduces breaking change baz
|
66
|
+
# gem 'foo', '< 2.1'
|
67
|
+
#
|
46
68
|
# @example OnlyFor: ['version_specifiers', 'github']
|
47
69
|
# # bad
|
48
70
|
#
|
@@ -60,15 +82,15 @@ module RuboCop
|
|
60
82
|
#
|
61
83
|
class GemComment < Base
|
62
84
|
include DefNode
|
85
|
+
include GemDeclaration
|
63
86
|
|
64
87
|
MSG = 'Missing gem description comment.'
|
65
88
|
CHECKED_OPTIONS_CONFIG = 'OnlyFor'
|
66
89
|
VERSION_SPECIFIERS_OPTION = 'version_specifiers'
|
90
|
+
RESTRICTIVE_VERSION_SPECIFIERS_OPTION = 'restrictive_version_specifiers'
|
91
|
+
RESTRICTIVE_VERSION_PATTERN = /<|~>/.freeze
|
67
92
|
RESTRICT_ON_SEND = %i[gem].freeze
|
68
93
|
|
69
|
-
# @!method gem_declaration?(node)
|
70
|
-
def_node_matcher :gem_declaration?, '(send nil? :gem str ...)'
|
71
|
-
|
72
94
|
def on_send(node)
|
73
95
|
return unless gem_declaration?(node)
|
74
96
|
return if ignored_gem?(node)
|
@@ -102,8 +124,7 @@ module RuboCop
|
|
102
124
|
end
|
103
125
|
|
104
126
|
def preceding_comment?(node1, node2)
|
105
|
-
node1 && node2 && precede?(node2, node1) &&
|
106
|
-
comment_line?(node2.loc.expression.source)
|
127
|
+
node1 && node2 && precede?(node2, node1) && comment_line?(node2.loc.expression.source)
|
107
128
|
end
|
108
129
|
|
109
130
|
def ignored_gem?(node)
|
@@ -114,6 +135,8 @@ module RuboCop
|
|
114
135
|
def checked_options_present?(node)
|
115
136
|
(cop_config[CHECKED_OPTIONS_CONFIG].include?(VERSION_SPECIFIERS_OPTION) &&
|
116
137
|
version_specified_gem?(node)) ||
|
138
|
+
(cop_config[CHECKED_OPTIONS_CONFIG].include?(RESTRICTIVE_VERSION_SPECIFIERS_OPTION) &&
|
139
|
+
restrictive_version_specified_gem?(node)) ||
|
117
140
|
contains_checked_options?(node)
|
118
141
|
end
|
119
142
|
|
@@ -124,6 +147,15 @@ module RuboCop
|
|
124
147
|
node.arguments[1]&.str_type?
|
125
148
|
end
|
126
149
|
|
150
|
+
# Version specifications that restrict all updates going forward. This excludes versions
|
151
|
+
# like ">= 1.0" or "!= 2.0.3".
|
152
|
+
def restrictive_version_specified_gem?(node)
|
153
|
+
return unless version_specified_gem?(node)
|
154
|
+
|
155
|
+
node.arguments
|
156
|
+
.any? { |arg| arg&.str_type? && RESTRICTIVE_VERSION_PATTERN.match?(arg.to_s) }
|
157
|
+
end
|
158
|
+
|
127
159
|
def contains_checked_options?(node)
|
128
160
|
(Array(cop_config[CHECKED_OPTIONS_CONFIG]) & gem_options(node).map(&:to_s)).any?
|
129
161
|
end
|