rubocop 0.88.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 +1 -0
- data/config/default.yml +96 -16
- data/lib/rubocop.rb +16 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
- 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 +2 -2
- 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 +2 -2
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/base.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- 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 +32 -11
- 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/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/class_structure.rb +3 -7
- 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/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- 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_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_method_call_operator.rb +9 -1
- 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 +17 -13
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +7 -4
- 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 +2 -2
- 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 +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +4 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +27 -23
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +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 +4 -10
- 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 +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +16 -19
- 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 +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -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 +7 -7
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +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/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 +8 -3
- 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 +25 -15
- 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 +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +14 -16
- data/lib/rubocop/cop/mixin/alignment.rb +2 -1
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- 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/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +37 -8
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- 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_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/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 +23 -21
- 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_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 +2 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -14
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +19 -16
- 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 +6 -10
- 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 +1 -1
- 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 +12 -12
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +7 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +6 -8
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +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 +15 -16
- 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 +21 -20
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- 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 +5 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +8 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- 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 +10 -32
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +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 +13 -13
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- 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 +23 -20
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -0
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +23 -10
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- 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/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +3 -13
- 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 +2 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/options.rb +3 -3
- data/lib/rubocop/path_util.rb +19 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/rspec/expect_offense.rb +1 -1
- data/lib/rubocop/rspec/shared_contexts.rb +1 -5
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/target_finder.rb +12 -9
- data/lib/rubocop/version.rb +2 -2
- metadata +21 -8
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -37,20 +37,19 @@ module RuboCop
|
|
37
37
|
#
|
38
38
|
# # good
|
39
39
|
# format('%s', 'Hello')
|
40
|
-
class FormatStringToken <
|
40
|
+
class FormatStringToken < Base
|
41
41
|
include ConfigurableEnforcedStyle
|
42
42
|
|
43
43
|
def on_str(node)
|
44
|
+
return unless node.value.include?('%')
|
44
45
|
return if node.each_ancestor(:xstr, :regexp).any?
|
45
46
|
|
46
47
|
tokens(node) do |detected_style, token_range|
|
47
|
-
if detected_style == style ||
|
48
|
-
unannotated_format?(node, detected_style)
|
48
|
+
if detected_style == style || unannotated_format?(node, detected_style)
|
49
49
|
correct_style_detected
|
50
50
|
else
|
51
51
|
style_detected(detected_style)
|
52
|
-
add_offense(
|
53
|
-
message: message(detected_style))
|
52
|
+
add_offense(token_range, message: message(detected_style))
|
54
53
|
end
|
55
54
|
end
|
56
55
|
end
|
@@ -65,8 +64,7 @@ module RuboCop
|
|
65
64
|
PATTERN
|
66
65
|
|
67
66
|
def unannotated_format?(node, detected_style)
|
68
|
-
detected_style == :unannotated &&
|
69
|
-
!format_string_in_typical_context?(node)
|
67
|
+
detected_style == :unannotated && !format_string_in_typical_context?(node)
|
70
68
|
end
|
71
69
|
|
72
70
|
def message(detected_style)
|
@@ -73,10 +73,11 @@ module RuboCop
|
|
73
73
|
# module Bar
|
74
74
|
# # ...
|
75
75
|
# end
|
76
|
-
class FrozenStringLiteralComment <
|
76
|
+
class FrozenStringLiteralComment < Base
|
77
77
|
include ConfigurableEnforcedStyle
|
78
78
|
include FrozenStringLiteral
|
79
79
|
include RangeHelp
|
80
|
+
extend AutoCorrector
|
80
81
|
|
81
82
|
MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: '\
|
82
83
|
'true`.'
|
@@ -85,7 +86,7 @@ module RuboCop
|
|
85
86
|
MSG_DISABLED = 'Frozen string literal comment must be set to `true`.'
|
86
87
|
SHEBANG = '#!'
|
87
88
|
|
88
|
-
def
|
89
|
+
def on_new_investigation
|
89
90
|
return if processed_source.tokens.empty?
|
90
91
|
|
91
92
|
case style
|
@@ -98,23 +99,6 @@ module RuboCop
|
|
98
99
|
end
|
99
100
|
end
|
100
101
|
|
101
|
-
def autocorrect(node)
|
102
|
-
lambda do |corrector|
|
103
|
-
case style
|
104
|
-
when :never
|
105
|
-
remove_comment(corrector, node)
|
106
|
-
when :always_true
|
107
|
-
if frozen_string_literal_specified?
|
108
|
-
enable_comment(corrector)
|
109
|
-
else
|
110
|
-
insert_comment(corrector)
|
111
|
-
end
|
112
|
-
else
|
113
|
-
insert_comment(corrector)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
102
|
private
|
119
103
|
|
120
104
|
def ensure_no_comment(processed_source)
|
@@ -160,51 +144,45 @@ module RuboCop
|
|
160
144
|
end
|
161
145
|
|
162
146
|
def missing_offense(processed_source)
|
163
|
-
last_special_comment = last_special_comment(processed_source)
|
164
147
|
range = source_range(processed_source.buffer, 0, 0)
|
165
148
|
|
166
|
-
add_offense(
|
167
|
-
|
168
|
-
|
149
|
+
add_offense(range, message: MSG_MISSING) do |corrector|
|
150
|
+
insert_comment(corrector)
|
151
|
+
end
|
169
152
|
end
|
170
153
|
|
171
154
|
def missing_true_offense(processed_source)
|
172
|
-
last_special_comment = last_special_comment(processed_source)
|
173
155
|
range = source_range(processed_source.buffer, 0, 0)
|
174
156
|
|
175
|
-
add_offense(
|
176
|
-
|
177
|
-
|
157
|
+
add_offense(range, message: MSG_MISSING_TRUE) do |corrector|
|
158
|
+
insert_comment(corrector)
|
159
|
+
end
|
178
160
|
end
|
179
161
|
|
180
162
|
def unnecessary_comment_offense(processed_source)
|
181
|
-
frozen_string_literal_comment =
|
182
|
-
frozen_string_literal_comment(processed_source)
|
163
|
+
frozen_string_literal_comment = frozen_string_literal_comment(processed_source)
|
183
164
|
|
184
|
-
add_offense(frozen_string_literal_comment,
|
185
|
-
|
186
|
-
|
165
|
+
add_offense(frozen_string_literal_comment.pos, message: MSG_UNNECESSARY) do |corrector|
|
166
|
+
remove_comment(corrector, frozen_string_literal_comment)
|
167
|
+
end
|
187
168
|
end
|
188
169
|
|
189
170
|
def disabled_offense(processed_source)
|
190
|
-
frozen_string_literal_comment =
|
191
|
-
frozen_string_literal_comment(processed_source)
|
171
|
+
frozen_string_literal_comment = frozen_string_literal_comment(processed_source)
|
192
172
|
|
193
|
-
add_offense(frozen_string_literal_comment,
|
194
|
-
|
195
|
-
|
173
|
+
add_offense(frozen_string_literal_comment.pos, message: MSG_DISABLED) do |corrector|
|
174
|
+
enable_comment(corrector)
|
175
|
+
end
|
196
176
|
end
|
197
177
|
|
198
178
|
def remove_comment(corrector, node)
|
199
|
-
corrector.remove(range_with_surrounding_space(range: node.pos,
|
200
|
-
side: :right))
|
179
|
+
corrector.remove(range_with_surrounding_space(range: node.pos, side: :right))
|
201
180
|
end
|
202
181
|
|
203
182
|
def enable_comment(corrector)
|
204
183
|
comment = frozen_string_literal_comment(processed_source)
|
205
184
|
|
206
|
-
corrector.replace(line_range(comment.line),
|
207
|
-
FROZEN_STRING_LITERAL_ENABLED)
|
185
|
+
corrector.replace(line_range(comment.line), FROZEN_STRING_LITERAL_ENABLED)
|
208
186
|
end
|
209
187
|
|
210
188
|
def insert_comment(corrector)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.
|
7
|
+
# `STDOUT/STDERR/STDIN` are constants, and while you can actually
|
8
|
+
# reassign (possibly to redirect some stream) constants in Ruby, you'll get
|
9
|
+
# an interpreter warning if you do so.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# # bad
|
13
|
+
# STDOUT.puts('hello')
|
14
|
+
#
|
15
|
+
# hash = { out: STDOUT, key: value }
|
16
|
+
#
|
17
|
+
# def m(out = STDOUT)
|
18
|
+
# out.puts('hello')
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# $stdout.puts('hello')
|
23
|
+
#
|
24
|
+
# hash = { out: $stdout, key: value }
|
25
|
+
#
|
26
|
+
# def m(out = $stdout)
|
27
|
+
# out.puts('hello')
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
class GlobalStdStream < Base
|
31
|
+
extend AutoCorrector
|
32
|
+
|
33
|
+
MSG = 'Use `%<gvar_name>s` instead of `%<const_name>s`.'
|
34
|
+
|
35
|
+
STD_STREAMS = %i[STDIN STDOUT STDERR].to_set.freeze
|
36
|
+
|
37
|
+
def_node_matcher :const_to_gvar_assignment?, <<~PATTERN
|
38
|
+
(gvasgn %1 (const nil? _))
|
39
|
+
PATTERN
|
40
|
+
|
41
|
+
def on_const(node)
|
42
|
+
const_name = node.children[1]
|
43
|
+
return unless STD_STREAMS.include?(const_name)
|
44
|
+
|
45
|
+
gvar_name = gvar_name(const_name).to_sym
|
46
|
+
return if const_to_gvar_assignment?(node.parent, gvar_name)
|
47
|
+
|
48
|
+
add_offense(node, message: message(const_name)) do |corrector|
|
49
|
+
corrector.replace(node, gvar_name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def message(const_name)
|
56
|
+
format(MSG, gvar_name: gvar_name(const_name), const_name: const_name)
|
57
|
+
end
|
58
|
+
|
59
|
+
def gvar_name(const_name)
|
60
|
+
"$#{const_name.to_s.downcase}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
# FOO = 2
|
20
20
|
# foo = 2
|
21
21
|
# $stdin.read
|
22
|
-
class GlobalVars <
|
22
|
+
class GlobalVars < Base
|
23
23
|
MSG = 'Do not introduce global variables.'
|
24
24
|
|
25
25
|
# built-in global variables and their English aliases
|
@@ -72,7 +72,7 @@ module RuboCop
|
|
72
72
|
def check(node)
|
73
73
|
global_var, = *node
|
74
74
|
|
75
|
-
add_offense(node
|
75
|
+
add_offense(node.loc.name) unless allowed_var?(global_var)
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -46,7 +46,7 @@ module RuboCop
|
|
46
46
|
# # good
|
47
47
|
# foo || raise('exception') if something
|
48
48
|
# ok
|
49
|
-
class GuardClause <
|
49
|
+
class GuardClause < Base
|
50
50
|
include MinBodyLength
|
51
51
|
include StatementModifier
|
52
52
|
|
@@ -87,7 +87,7 @@ module RuboCop
|
|
87
87
|
private
|
88
88
|
|
89
89
|
def check_ending_if(node)
|
90
|
-
return if accepted_form?(node, true) || !min_body_length?(node)
|
90
|
+
return if accepted_form?(node, ending: true) || !min_body_length?(node)
|
91
91
|
|
92
92
|
register_offense(node, 'return', opposite_keyword(node))
|
93
93
|
end
|
@@ -105,9 +105,8 @@ module RuboCop
|
|
105
105
|
example = "#{conditional_keyword} #{condition.source}; " \
|
106
106
|
"#{scope_exiting_keyword}; end"
|
107
107
|
end
|
108
|
-
|
109
|
-
|
110
|
-
message: format(MSG, example: example))
|
108
|
+
|
109
|
+
add_offense(node.loc.keyword, message: format(MSG, example: example))
|
111
110
|
end
|
112
111
|
|
113
112
|
def guard_clause_source(guard_clause)
|
@@ -125,7 +124,7 @@ module RuboCop
|
|
125
124
|
max && node.source_range.column + example.length > max
|
126
125
|
end
|
127
126
|
|
128
|
-
def accepted_form?(node, ending
|
127
|
+
def accepted_form?(node, ending: false)
|
129
128
|
accepted_if?(node, ending) || node.condition.multiline? ||
|
130
129
|
node.parent&.assignment?
|
131
130
|
end
|
@@ -25,7 +25,7 @@ module RuboCop
|
|
25
25
|
extend AutoCorrector
|
26
26
|
|
27
27
|
def on_hash(node)
|
28
|
-
return unless node
|
28
|
+
return unless last_array_item?(node)
|
29
29
|
|
30
30
|
if braces_style?
|
31
31
|
check_braces(node)
|
@@ -36,6 +36,13 @@ module RuboCop
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
+
def last_array_item?(node)
|
40
|
+
parent = node.parent
|
41
|
+
return false unless parent
|
42
|
+
|
43
|
+
parent.array_type? && parent.children.last.equal?(node)
|
44
|
+
end
|
45
|
+
|
39
46
|
def check_braces(node)
|
40
47
|
return if node.braces?
|
41
48
|
|
@@ -17,8 +17,9 @@ module RuboCop
|
|
17
17
|
# # good
|
18
18
|
# hash.each_key { |k| p k }
|
19
19
|
# hash.each_value { |v| p v }
|
20
|
-
class HashEachMethods <
|
20
|
+
class HashEachMethods < Base
|
21
21
|
include Lint::UnusedArgument
|
22
|
+
extend AutoCorrector
|
22
23
|
|
23
24
|
MSG = 'Use `%<prefer>s` instead of `%<current>s`.'
|
24
25
|
|
@@ -30,12 +31,6 @@ module RuboCop
|
|
30
31
|
register_kv_offense(node)
|
31
32
|
end
|
32
33
|
|
33
|
-
def autocorrect(node)
|
34
|
-
lambda do |corrector|
|
35
|
-
correct_key_value_each(node, corrector)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
34
|
private
|
40
35
|
|
41
36
|
def register_kv_offense(node)
|
@@ -45,7 +40,9 @@ module RuboCop
|
|
45
40
|
msg = format(message, prefer: "each_#{method[0..-2]}",
|
46
41
|
current: "#{method}.each")
|
47
42
|
|
48
|
-
add_offense(
|
43
|
+
add_offense(kv_range(target), message: msg) do |corrector|
|
44
|
+
correct_key_value_each(target, corrector)
|
45
|
+
end
|
49
46
|
end
|
50
47
|
end
|
51
48
|
|
@@ -73,7 +73,7 @@ module RuboCop
|
|
73
73
|
ruby19_no_mixed_keys_check(pairs)
|
74
74
|
elsif style == :no_mixed_keys
|
75
75
|
no_mixed_keys_check(pairs)
|
76
|
-
|
76
|
+
elsif node.source.include?('=>')
|
77
77
|
ruby19_check(pairs)
|
78
78
|
end
|
79
79
|
end
|
@@ -174,7 +174,7 @@ module RuboCop
|
|
174
174
|
|
175
175
|
corrector.replace(
|
176
176
|
range,
|
177
|
-
range.source.sub(/^:(.*\S)\s*=>\s*$/, space
|
177
|
+
range.source.sub(/^:(.*\S)\s*=>\s*$/, "#{space}\\1: ")
|
178
178
|
)
|
179
179
|
|
180
180
|
hash_node = pair_node.parent
|
@@ -199,7 +199,8 @@ module RuboCop
|
|
199
199
|
def autocorrect_hash_rockets(corrector, pair_node)
|
200
200
|
op = pair_node.loc.operator
|
201
201
|
|
202
|
-
|
202
|
+
key_with_hash_rocket = ":#{pair_node.key.source}#{pair_node.inverse_delimiter(true)}"
|
203
|
+
corrector.replace(pair_node.key, key_with_hash_rocket)
|
203
204
|
corrector.remove(range_with_surrounding_space(range: op))
|
204
205
|
end
|
205
206
|
|
@@ -23,9 +23,10 @@ module RuboCop
|
|
23
23
|
# # good
|
24
24
|
# {a: 1, b: 2}.transform_keys { |k| foo(k) }
|
25
25
|
# {a: 1, b: 2}.transform_keys { |k| k.to_s }
|
26
|
-
class HashTransformKeys <
|
27
|
-
extend TargetRubyVersion
|
26
|
+
class HashTransformKeys < Base
|
28
27
|
include HashTransformMethod
|
28
|
+
extend TargetRubyVersion
|
29
|
+
extend AutoCorrector
|
29
30
|
|
30
31
|
minimum_target_ruby_version 2.5
|
31
32
|
|
@@ -23,8 +23,9 @@ module RuboCop
|
|
23
23
|
# # good
|
24
24
|
# {a: 1, b: 2}.transform_values { |v| foo(v) }
|
25
25
|
# {a: 1, b: 2}.transform_values { |v| v * v }
|
26
|
-
class HashTransformValues <
|
26
|
+
class HashTransformValues < Base
|
27
27
|
include HashTransformMethod
|
28
|
+
extend AutoCorrector
|
28
29
|
|
29
30
|
def_node_matcher :on_bad_each_with_object, <<~PATTERN
|
30
31
|
(block
|
@@ -62,7 +62,7 @@ module RuboCop
|
|
62
62
|
# do_x
|
63
63
|
# do_z
|
64
64
|
# end
|
65
|
-
class IdenticalConditionalBranches <
|
65
|
+
class IdenticalConditionalBranches < Base
|
66
66
|
MSG = 'Move `%<source>s` out of the conditional.'
|
67
67
|
|
68
68
|
def on_if(node)
|
@@ -81,7 +81,7 @@ module RuboCop
|
|
81
81
|
|
82
82
|
private
|
83
83
|
|
84
|
-
def check_branches(branches) # rubocop:todo Metrics/CyclomaticComplexity
|
84
|
+
def check_branches(branches) # rubocop:todo Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
85
85
|
# return if any branch is empty. An empty branch can be an `if`
|
86
86
|
# without an `else` or a branch that contains only comments.
|
87
87
|
return if branches.any?(&:nil?)
|
@@ -58,10 +58,10 @@ module RuboCop
|
|
58
58
|
# action_b
|
59
59
|
# end
|
60
60
|
#
|
61
|
-
class IfInsideElse <
|
61
|
+
class IfInsideElse < Base
|
62
62
|
MSG = 'Convert `if` nested inside `else` to `elsif`.'
|
63
63
|
|
64
|
-
def on_if(node)
|
64
|
+
def on_if(node)
|
65
65
|
return if node.ternary? || node.unless?
|
66
66
|
|
67
67
|
else_branch = node.else_branch
|
@@ -69,7 +69,7 @@ module RuboCop
|
|
69
69
|
return unless else_branch&.if_type? && else_branch&.if?
|
70
70
|
return if allow_if_modifier_in_else_branch?(else_branch)
|
71
71
|
|
72
|
-
add_offense(else_branch
|
72
|
+
add_offense(else_branch.loc.keyword)
|
73
73
|
end
|
74
74
|
|
75
75
|
private
|
@@ -30,10 +30,11 @@ module RuboCop
|
|
30
30
|
# if long_condition
|
31
31
|
# do_something_in_a_method_with_a_long_name(arg)
|
32
32
|
# end
|
33
|
-
class IfUnlessModifier <
|
33
|
+
class IfUnlessModifier < Base
|
34
34
|
include StatementModifier
|
35
35
|
include LineLengthHelp
|
36
36
|
include IgnoredPattern
|
37
|
+
extend AutoCorrector
|
37
38
|
|
38
39
|
MSG_USE_MODIFIER = 'Favor modifier `%<keyword>s` usage when having a ' \
|
39
40
|
'single-line body. Another good alternative is ' \
|
@@ -49,22 +50,22 @@ module RuboCop
|
|
49
50
|
end
|
50
51
|
return unless msg
|
51
52
|
|
52
|
-
add_offense(node,
|
53
|
-
|
54
|
-
|
53
|
+
add_offense(node.loc.keyword, message: format(msg, keyword: node.keyword)) do |corrector|
|
54
|
+
autocorrect(corrector, node)
|
55
|
+
end
|
55
56
|
end
|
56
57
|
|
57
|
-
|
58
|
+
private
|
59
|
+
|
60
|
+
def autocorrect(corrector, node)
|
58
61
|
replacement = if node.modifier_form?
|
59
62
|
to_normal_form(node)
|
60
63
|
else
|
61
64
|
to_modifier_form(node)
|
62
65
|
end
|
63
|
-
|
66
|
+
corrector.replace(node, replacement)
|
64
67
|
end
|
65
68
|
|
66
|
-
private
|
67
|
-
|
68
69
|
def too_long_due_to_modifier?(node)
|
69
70
|
node.modifier_form? && too_long_single_line?(node) &&
|
70
71
|
!another_statement_on_same_line?(node)
|
@@ -148,26 +149,6 @@ module RuboCop
|
|
148
149
|
sibling.source_range.first_line == line_no
|
149
150
|
end
|
150
151
|
|
151
|
-
def parenthesize?(node)
|
152
|
-
# Parenthesize corrected expression if changing to modifier-if form
|
153
|
-
# would change the meaning of the parent expression
|
154
|
-
# (due to the low operator precedence of modifier-if)
|
155
|
-
parent = node.parent
|
156
|
-
return false if parent.nil?
|
157
|
-
return true if parent.assignment? || parent.operator_keyword?
|
158
|
-
|
159
|
-
node.parent.send_type? && !node.parent.parenthesized?
|
160
|
-
end
|
161
|
-
|
162
|
-
def to_modifier_form(node)
|
163
|
-
expression = [node.body.source,
|
164
|
-
node.keyword,
|
165
|
-
node.condition.source,
|
166
|
-
first_line_comment(node)].compact.join(' ')
|
167
|
-
|
168
|
-
parenthesize?(node) ? "(#{expression})" : expression
|
169
|
-
end
|
170
|
-
|
171
152
|
def to_normal_form(node)
|
172
153
|
indentation = ' ' * node.source_range.column
|
173
154
|
<<~RUBY.chomp
|
@@ -178,10 +159,7 @@ module RuboCop
|
|
178
159
|
end
|
179
160
|
|
180
161
|
def first_line_comment(node)
|
181
|
-
|
182
|
-
processed_source.find_comment { |c| c.loc.line == node.loc.line }
|
183
|
-
|
184
|
-
comment ? comment.loc.expression.source : nil
|
162
|
+
processed_source.comment_at_line(node.loc.line)&.text
|
185
163
|
end
|
186
164
|
end
|
187
165
|
end
|