rubocop 0.86.0 → 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 +1 -1
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +198 -25
- data/lib/rubocop.rb +30 -5
- data/lib/rubocop/cli.rb +2 -4
- 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/show_cops.rb +3 -3
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +41 -69
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- 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 +38 -12
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- 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 +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 +1 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
- 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 +16 -6
- 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_around_block_parameters.rb +22 -27
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -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 +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
- 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 +13 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
- data/lib/rubocop/cop/lint/rand_one.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +41 -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 +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 -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 +2 -1
- 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 +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -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/enforce_superclass.rb +3 -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_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/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
- data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -24
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +10 -15
- 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 +3 -3
- 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 +3 -3
- 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_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 +10 -12
- 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 +23 -23
- 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 +14 -11
- 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 +23 -24
- 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 +13 -4
- 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 +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 +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 +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 +19 -20
- 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 +5 -9
- 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 +7 -9
- 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 +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 +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 +3 -3
- 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 +22 -32
- 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.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 +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 +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 +4 -6
- 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/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 +1 -1
- 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 +26 -7
- 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 +7 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +11 -11
- 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/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 +3 -3
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
- 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/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 +3 -13
- data/lib/rubocop/cop/utils/format_string.rb +1 -2
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +7 -5
- 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 +2 -2
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -3
- data/lib/rubocop/options.rb +18 -11
- data/lib/rubocop/path_util.rb +17 -17
- 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 +53 -22
- data/lib/rubocop/rspec/shared_contexts.rb +16 -17
- data/lib/rubocop/runner.rb +35 -34
- data/lib/rubocop/target_finder.rb +13 -10
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +2 -2
- metadata +40 -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
@@ -74,10 +74,8 @@ module RuboCop
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def inside_comment?(range, comma_offset)
|
77
|
-
processed_source.
|
78
|
-
|
79
|
-
comment_offset >= 0 && comment_offset < comma_offset
|
80
|
-
end
|
77
|
+
comment = processed_source.comment_at_line(range.line)
|
78
|
+
comment && comment.loc.expression.begin_pos < range.begin_pos + comma_offset
|
81
79
|
end
|
82
80
|
|
83
81
|
# Returns true if the node has round/square/curly brackets.
|
@@ -15,11 +15,13 @@ module RuboCop
|
|
15
15
|
args.each do |arg|
|
16
16
|
# Argument names might be "_" or prefixed with "_" to indicate they
|
17
17
|
# are unused. Trim away this prefix and only analyse the basename.
|
18
|
-
|
18
|
+
name_child = arg.children.first
|
19
|
+
next if name_child.nil?
|
20
|
+
|
21
|
+
full_name = name_child.to_s
|
19
22
|
next if full_name == '_'
|
20
23
|
|
21
24
|
name = full_name.gsub(/\A(_+)/, '')
|
22
|
-
next if (arg.restarg_type? || arg.kwrestarg_type?) && name.empty?
|
23
25
|
next if allowed_names.include?(name)
|
24
26
|
|
25
27
|
range = arg_range(arg, name.size)
|
@@ -39,8 +41,7 @@ module RuboCop
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def case_offense(node, range)
|
42
|
-
add_offense(
|
43
|
-
message: format(CASE_MSG, name_type: name_type(node)))
|
44
|
+
add_offense(range, message: format(CASE_MSG, name_type: name_type(node)))
|
44
45
|
end
|
45
46
|
|
46
47
|
def uppercase?(name)
|
@@ -57,8 +58,7 @@ module RuboCop
|
|
57
58
|
end
|
58
59
|
|
59
60
|
def num_offense(node, range)
|
60
|
-
add_offense(
|
61
|
-
message: format(NUM_MSG, name_type: name_type(node)))
|
61
|
+
add_offense(range, message: format(NUM_MSG, name_type: name_type(node)))
|
62
62
|
end
|
63
63
|
|
64
64
|
def ends_with_num?(name)
|
@@ -66,10 +66,9 @@ module RuboCop
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def length_offense(node, range)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
min: min_length))
|
69
|
+
message = format(LENGTH_MSG, name_type: name_type(node).capitalize, min: min_length)
|
70
|
+
|
71
|
+
add_offense(range, message: message)
|
73
72
|
end
|
74
73
|
|
75
74
|
def long_enough?(name)
|
@@ -84,11 +83,7 @@ module RuboCop
|
|
84
83
|
end
|
85
84
|
|
86
85
|
def forbidden_offense(node, range, name)
|
87
|
-
add_offense(
|
88
|
-
node,
|
89
|
-
location: range,
|
90
|
-
message: format(FORBIDDEN_MSG, name: name, name_type: name_type(node))
|
91
|
-
)
|
86
|
+
add_offense(range, message: format(FORBIDDEN_MSG, name: name, name_type: name_type(node)))
|
92
87
|
end
|
93
88
|
|
94
89
|
def allowed_names
|
@@ -7,10 +7,6 @@ module RuboCop
|
|
7
7
|
module UnusedArgument
|
8
8
|
extend NodePattern::Macros
|
9
9
|
|
10
|
-
def join_force?(force_class)
|
11
|
-
force_class == VariableForce
|
12
|
-
end
|
13
|
-
|
14
10
|
def after_leaving_scope(scope, _variable_table)
|
15
11
|
scope.variables.each_value do |variable|
|
16
12
|
check_argument(variable)
|
@@ -24,8 +20,10 @@ module RuboCop
|
|
24
20
|
return if variable.referenced?
|
25
21
|
|
26
22
|
message = message(variable)
|
27
|
-
|
28
|
-
|
23
|
+
|
24
|
+
add_offense(variable.declaration_node.loc.name, message: message) do |corrector|
|
25
|
+
autocorrect(corrector, variable.declaration_node)
|
26
|
+
end
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
# Help methods for determining node visibility.
|
6
|
+
module VisibilityHelp
|
7
|
+
extend NodePattern::Macros
|
8
|
+
|
9
|
+
VISIBILITY_SCOPES = %i[private protected public].freeze
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def node_visibility(node)
|
14
|
+
scope = find_visibility_start(node)
|
15
|
+
scope&.method_name || :public
|
16
|
+
end
|
17
|
+
|
18
|
+
def find_visibility_start(node)
|
19
|
+
left_siblings_of(node)
|
20
|
+
.reverse
|
21
|
+
.find(&method(:visibility_block?))
|
22
|
+
end
|
23
|
+
|
24
|
+
# Navigate to find the last protected method
|
25
|
+
def find_visibility_end(node)
|
26
|
+
possible_visibilities = VISIBILITY_SCOPES - [node_visibility(node)]
|
27
|
+
right = right_siblings_of(node)
|
28
|
+
right.find do |child_node|
|
29
|
+
possible_visibilities.include?(node_visibility(child_node))
|
30
|
+
end || right.last
|
31
|
+
end
|
32
|
+
|
33
|
+
def left_siblings_of(node)
|
34
|
+
siblings_of(node)[0, node.sibling_index]
|
35
|
+
end
|
36
|
+
|
37
|
+
def right_siblings_of(node)
|
38
|
+
siblings_of(node)[node.sibling_index..-1]
|
39
|
+
end
|
40
|
+
|
41
|
+
def siblings_of(node)
|
42
|
+
node.parent.children
|
43
|
+
end
|
44
|
+
|
45
|
+
def_node_matcher :visibility_block?, <<~PATTERN
|
46
|
+
(send nil? { :private :protected :public })
|
47
|
+
PATTERN
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -21,14 +21,16 @@ module RuboCop
|
|
21
21
|
# # good
|
22
22
|
# def attribute
|
23
23
|
# end
|
24
|
-
class AccessorMethodName <
|
24
|
+
class AccessorMethodName < Base
|
25
25
|
MSG_READER = 'Do not prefix reader method names with `get_`.'
|
26
26
|
MSG_WRITER = 'Do not prefix writer method names with `set_`.'
|
27
27
|
|
28
28
|
def on_def(node)
|
29
29
|
return unless bad_reader_name?(node) || bad_writer_name?(node)
|
30
30
|
|
31
|
-
|
31
|
+
message = message(node)
|
32
|
+
|
33
|
+
add_offense(node.loc.name, message: message)
|
32
34
|
end
|
33
35
|
alias on_defs on_def
|
34
36
|
|
@@ -5,7 +5,9 @@
|
|
5
5
|
module RuboCop
|
6
6
|
module Cop
|
7
7
|
module Naming
|
8
|
-
# This cop checks for non-ascii characters in identifier names.
|
8
|
+
# This cop checks for non-ascii characters in identifier and constant names.
|
9
|
+
# Identifiers are always checked and whether constants are checked
|
10
|
+
# can be controlled using AsciiConstants config.
|
9
11
|
#
|
10
12
|
# @example
|
11
13
|
# # bad
|
@@ -36,21 +38,42 @@ module RuboCop
|
|
36
38
|
# # good
|
37
39
|
# params[:width_gteq]
|
38
40
|
#
|
39
|
-
|
41
|
+
# @example AsciiConstants: true (default)
|
42
|
+
# # bad
|
43
|
+
# class Foö
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# FOÖ = "foo"
|
47
|
+
#
|
48
|
+
# @example AsciiConstants: false
|
49
|
+
# # good
|
50
|
+
# class Foö
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# FOÖ = "foo"
|
54
|
+
#
|
55
|
+
class AsciiIdentifiers < Base
|
40
56
|
include RangeHelp
|
41
57
|
|
42
|
-
|
58
|
+
IDENTIFIER_MSG = 'Use only ascii symbols in identifiers.'
|
59
|
+
CONSTANT_MSG = 'Use only ascii symbols in constants.'
|
43
60
|
|
44
|
-
def
|
61
|
+
def on_new_investigation
|
45
62
|
processed_source.each_token do |token|
|
46
|
-
next
|
63
|
+
next if !should_check?(token) || token.text.ascii_only?
|
47
64
|
|
48
|
-
|
65
|
+
message = token.type == :tIDENTIFIER ? IDENTIFIER_MSG : CONSTANT_MSG
|
66
|
+
add_offense(first_offense_range(token), message: message)
|
49
67
|
end
|
50
68
|
end
|
51
69
|
|
52
70
|
private
|
53
71
|
|
72
|
+
def should_check?(token)
|
73
|
+
token.type == :tIDENTIFIER ||
|
74
|
+
(token.type == :tCONSTANT && cop_config['AsciiConstants'])
|
75
|
+
end
|
76
|
+
|
54
77
|
def first_offense_range(identifier)
|
55
78
|
expression = identifier.pos
|
56
79
|
first_offense = first_non_ascii_chars(identifier.text)
|
@@ -13,12 +13,12 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# def +(other); end
|
16
|
-
class BinaryOperatorParameterName <
|
16
|
+
class BinaryOperatorParameterName < Base
|
17
17
|
MSG = 'When defining the `%<opr>s` operator, ' \
|
18
18
|
'name its argument `other`.'
|
19
19
|
|
20
20
|
OP_LIKE_METHODS = %i[eql? equal?].freeze
|
21
|
-
|
21
|
+
EXCLUDED = %i[+@ -@ [] []= << === `].freeze
|
22
22
|
|
23
23
|
def_node_matcher :op_method_candidate?, <<~PATTERN
|
24
24
|
(def [#op_method? $_] (args $(arg [!:other !:_other])) _)
|
@@ -33,7 +33,7 @@ module RuboCop
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def op_method?(name)
|
36
|
-
return false if
|
36
|
+
return false if EXCLUDED.include?(name)
|
37
37
|
|
38
38
|
!/\A\w/.match?(name) || OP_LIKE_METHODS.include?(name)
|
39
39
|
end
|
@@ -26,7 +26,7 @@ module RuboCop
|
|
26
26
|
# end
|
27
27
|
# class module_parent::MyModule
|
28
28
|
# end
|
29
|
-
class ClassAndModuleCamelCase <
|
29
|
+
class ClassAndModuleCamelCase < Base
|
30
30
|
MSG = 'Use CamelCase for classes and modules.'
|
31
31
|
|
32
32
|
def on_class(node)
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
name = node.loc.name.source.gsub(allowed, '')
|
35
35
|
return unless /_/.match?(name)
|
36
36
|
|
37
|
-
add_offense(node
|
37
|
+
add_offense(node.loc.name)
|
38
38
|
end
|
39
39
|
alias on_module on_class
|
40
40
|
end
|
@@ -17,7 +17,7 @@ module RuboCop
|
|
17
17
|
#
|
18
18
|
# # good
|
19
19
|
# INCH_IN_CM = 2.54
|
20
|
-
class ConstantName <
|
20
|
+
class ConstantName < Base
|
21
21
|
MSG = 'Use SCREAMING_SNAKE_CASE for constants.'
|
22
22
|
# Use POSIX character classes, so we allow accented characters rather
|
23
23
|
# than just standard ASCII characters
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
return if allowed_assignment?(value)
|
48
48
|
return if SNAKE_CASE.match?(const_name)
|
49
49
|
|
50
|
-
add_offense(node
|
50
|
+
add_offense(node.loc.name)
|
51
51
|
end
|
52
52
|
|
53
53
|
private
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
24
24
|
# lib/layout_manager.rb
|
25
25
|
#
|
26
26
|
# anything/using_snake_case.rake
|
27
|
-
class FileName <
|
27
|
+
class FileName < Base
|
28
28
|
include RangeHelp
|
29
29
|
|
30
30
|
MSG_SNAKE_CASE = 'The name of this source file (`%<basename>s`) ' \
|
@@ -35,13 +35,13 @@ module RuboCop
|
|
35
35
|
|
36
36
|
SNAKE_CASE = /^[\da-z_.?!]+$/.freeze
|
37
37
|
|
38
|
-
def
|
38
|
+
def on_new_investigation
|
39
39
|
file_path = processed_source.file_path
|
40
40
|
return if config.file_to_exclude?(file_path) ||
|
41
41
|
config.allowed_camel_case_file?(file_path)
|
42
42
|
|
43
43
|
for_bad_filename(file_path) do |range, msg|
|
44
|
-
add_offense(
|
44
|
+
add_offense(range, message: msg)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
27
27
|
# <<-sql
|
28
28
|
# SELECT * FROM foo
|
29
29
|
# sql
|
30
|
-
class HeredocDelimiterCase <
|
30
|
+
class HeredocDelimiterCase < Base
|
31
31
|
include Heredoc
|
32
32
|
include ConfigurableEnforcedStyle
|
33
33
|
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
36
36
|
def on_heredoc(node)
|
37
37
|
return if correct_case_delimiters?(node)
|
38
38
|
|
39
|
-
add_offense(node
|
39
|
+
add_offense(node.loc.heredoc_end)
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
@@ -23,7 +23,7 @@ module RuboCop
|
|
23
23
|
# <<-EOS
|
24
24
|
# SELECT * FROM foo
|
25
25
|
# EOS
|
26
|
-
class HeredocDelimiterNaming <
|
26
|
+
class HeredocDelimiterNaming < Base
|
27
27
|
include Heredoc
|
28
28
|
|
29
29
|
MSG = 'Use meaningful heredoc delimiters.'
|
@@ -31,7 +31,7 @@ module RuboCop
|
|
31
31
|
def on_heredoc(node)
|
32
32
|
return if meaningful_delimiters?(node)
|
33
33
|
|
34
|
-
add_offense(node
|
34
|
+
add_offense(node.loc.heredoc_end)
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
@@ -84,7 +84,7 @@ module RuboCop
|
|
84
84
|
# def _foo
|
85
85
|
# @_foo ||= calculate_expensive_thing
|
86
86
|
# end
|
87
|
-
class MemoizedInstanceVariableName <
|
87
|
+
class MemoizedInstanceVariableName < Base
|
88
88
|
include ConfigurableEnforcedStyle
|
89
89
|
|
90
90
|
MSG = 'Memoized variable `%<var>s` does not match ' \
|
@@ -115,7 +115,7 @@ module RuboCop
|
|
115
115
|
suggested_var: suggested_var(method_name),
|
116
116
|
method: method_name
|
117
117
|
)
|
118
|
-
add_offense(
|
118
|
+
add_offense(ivar_assign.source_range, message: msg)
|
119
119
|
end
|
120
120
|
alias on_defs on_def
|
121
121
|
|
@@ -43,13 +43,13 @@ module RuboCop
|
|
43
43
|
# def baz(age_a, height_b, gender_c)
|
44
44
|
# do_stuff(age_a, height_b, gender_c)
|
45
45
|
# end
|
46
|
-
class MethodParameterName <
|
46
|
+
class MethodParameterName < Base
|
47
47
|
include UncommunicativeName
|
48
48
|
|
49
49
|
def on_def(node)
|
50
50
|
return unless node.arguments?
|
51
51
|
|
52
|
-
check(node, node.arguments
|
52
|
+
check(node, node.arguments)
|
53
53
|
end
|
54
54
|
alias on_defs on_def
|
55
55
|
end
|
@@ -27,7 +27,9 @@ module RuboCop
|
|
27
27
|
# # good
|
28
28
|
# def value?
|
29
29
|
# end
|
30
|
-
class PredicateName <
|
30
|
+
class PredicateName < Base
|
31
|
+
include AllowedMethods
|
32
|
+
|
31
33
|
def_node_matcher :dynamic_method_define, <<~PATTERN
|
32
34
|
(send nil? #method_definition_macros
|
33
35
|
(sym $_)
|
@@ -40,8 +42,7 @@ module RuboCop
|
|
40
42
|
next if allowed_method_name?(method_name.to_s, prefix)
|
41
43
|
|
42
44
|
add_offense(
|
43
|
-
node,
|
44
|
-
location: node.first_argument.loc.expression,
|
45
|
+
node.first_argument.loc.expression,
|
45
46
|
message: message(method_name,
|
46
47
|
expected_name(method_name.to_s, prefix))
|
47
48
|
)
|
@@ -56,8 +57,7 @@ module RuboCop
|
|
56
57
|
next if allowed_method_name?(method_name, prefix)
|
57
58
|
|
58
59
|
add_offense(
|
59
|
-
node,
|
60
|
-
location: :name,
|
60
|
+
node.loc.name,
|
61
61
|
message: message(method_name, expected_name(method_name, prefix))
|
62
62
|
)
|
63
63
|
end
|
@@ -70,7 +70,7 @@ module RuboCop
|
|
70
70
|
!method_name.match?(/^#{prefix}[^0-9]/) ||
|
71
71
|
method_name == expected_name(method_name, prefix) ||
|
72
72
|
method_name.end_with?('=') ||
|
73
|
-
|
73
|
+
allowed_method?(method_name)
|
74
74
|
end
|
75
75
|
|
76
76
|
def expected_name(method_name, prefix)
|
@@ -95,10 +95,6 @@ module RuboCop
|
|
95
95
|
cop_config['NamePrefix']
|
96
96
|
end
|
97
97
|
|
98
|
-
def allowed_methods
|
99
|
-
cop_config['AllowedMethods']
|
100
|
-
end
|
101
|
-
|
102
98
|
def method_definition_macros(macro_name)
|
103
99
|
cop_config['MethodDefinitionMacros'].include?(macro_name.to_s)
|
104
100
|
end
|