rubocop 1.10.0 → 1.14.0
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 +15 -14
- data/assets/output.html.erb +1 -1
- data/config/default.yml +60 -3
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +6 -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/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
- data/lib/rubocop/cli/command/show_cops.rb +1 -4
- data/lib/rubocop/cli/command/suggest_extensions.rb +3 -2
- data/lib/rubocop/comment_config.rb +45 -101
- 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 +3 -3
- data/lib/rubocop/cop/bundler/gem_comment.rb +43 -10
- data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -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 +6 -12
- 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/date_assignment.rb +1 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -4
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
- data/lib/rubocop/cop/generator.rb +3 -6
- 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.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -4
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +3 -5
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +3 -3
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +5 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
- data/lib/rubocop/cop/layout/argument_alignment.rb +8 -9
- data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
- data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
- data/lib/rubocop/cop/layout/block_alignment.rb +8 -19
- data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/class_structure.rb +5 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
- data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
- 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 +10 -9
- data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
- 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 +5 -9
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +11 -5
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +24 -20
- 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/first_parameter_indentation.rb +6 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
- 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_consistency.rb +9 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
- data/lib/rubocop/cop/layout/indentation_width.rb +21 -11
- 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 +22 -15
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
- data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
- 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 +3 -6
- data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -3
- 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 +6 -11
- 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/big_decimal_new.rb +1 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
- data/lib/rubocop/cop/lint/debugger.rb +3 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +79 -41
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +3 -5
- data/lib/rubocop/cop/lint/duplicate_branch.rb +2 -3
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +6 -7
- data/lib/rubocop/cop/lint/duplicate_require.rb +1 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/else_layout.rb +1 -3
- 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_interpolation.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +4 -6
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +1 -0
- 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 +4 -7
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -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/multiple_comparison.rb +1 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +4 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +8 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +13 -5
- 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 +3 -2
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +2 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +5 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -4
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -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 +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +2 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -7
- data/lib/rubocop/cop/lint/shadowed_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -0
- data/lib/rubocop/cop/lint/struct_new_override.rb +2 -2
- data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +3 -0
- 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/unified_integer.rb +1 -0
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +3 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +15 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
- data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -3
- data/lib/rubocop/cop/lint/useless_times.rb +3 -0
- data/lib/rubocop/cop/lint/void.rb +4 -11
- 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 +3 -6
- data/lib/rubocop/cop/metrics/parameter_lists.rb +3 -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/code_length_calculator.rb +6 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +4 -7
- data/lib/rubocop/cop/migration/department_name.rb +3 -7
- data/lib/rubocop/cop/mixin/alignment.rb +12 -7
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +1 -3
- data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
- 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 +3 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +6 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -9
- data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -22
- data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
- data/lib/rubocop/cop/mixin/match_range.rb +2 -5
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -3
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -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 +4 -7
- data/lib/rubocop/cop/mixin/range_help.rb +10 -13
- data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
- data/lib/rubocop/cop/mixin/safe_assignment.rb +6 -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 +1 -1
- 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 +7 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
- data/lib/rubocop/cop/mixin/visibility_help.rb +1 -0
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -0
- data/lib/rubocop/cop/naming/file_name.rb +7 -16
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +8 -3
- data/lib/rubocop/cop/naming/method_name.rb +4 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
- data/lib/rubocop/cop/offense.rb +3 -8
- data/lib/rubocop/cop/registry.rb +12 -11
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +4 -5
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +6 -12
- data/lib/rubocop/cop/style/and_or.rb +3 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +4 -3
- data/lib/rubocop/cop/style/array_coercion.rb +2 -0
- data/lib/rubocop/cop/style/array_join.rb +1 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
- data/lib/rubocop/cop/style/attr.rb +2 -3
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
- data/lib/rubocop/cop/style/case_equality.rb +2 -1
- data/lib/rubocop/cop/style/case_like_if.rb +16 -6
- data/lib/rubocop/cop/style/character_literal.rb +2 -4
- data/lib/rubocop/cop/style/class_and_module_children.rb +6 -9
- data/lib/rubocop/cop/style/class_equality_comparison.rb +3 -0
- data/lib/rubocop/cop/style/class_methods.rb +1 -3
- data/lib/rubocop/cop/style/collection_compact.rb +3 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +2 -3
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +4 -9
- data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
- data/lib/rubocop/cop/style/conditional_assignment.rb +12 -24
- data/lib/rubocop/cop/style/constant_visibility.rb +1 -0
- data/lib/rubocop/cop/style/copyright.rb +3 -6
- data/lib/rubocop/cop/style/date_time.rb +5 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/dir.rb +1 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +30 -3
- data/lib/rubocop/cop/style/documentation_method.rb +1 -0
- data/lib/rubocop/cop/style/double_negation.rb +1 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +2 -2
- data/lib/rubocop/cop/style/each_with_object.rb +1 -0
- 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 +13 -8
- 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 +2 -3
- data/lib/rubocop/cop/style/eval_with_location.rb +5 -5
- data/lib/rubocop/cop/style/even_odd.rb +1 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -4
- data/lib/rubocop/cop/style/float_division.rb +4 -0
- data/lib/rubocop/cop/style/format_string.rb +2 -0
- data/lib/rubocop/cop/style/format_string_token.rb +2 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
- data/lib/rubocop/cop/style/global_std_stream.rb +1 -0
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +57 -5
- data/lib/rubocop/cop/style/hash_each_methods.rb +2 -2
- data/lib/rubocop/cop/style/hash_except.rb +1 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +2 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
- data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +4 -0
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -0
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +5 -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 +47 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
- 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 +2 -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 +3 -2
- data/lib/rubocop/cop/style/module_function.rb +8 -6
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
- data/lib/rubocop/cop/style/multiple_comparison.rb +22 -5
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -10
- data/lib/rubocop/cop/style/negated_if.rb +1 -2
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +24 -2
- 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_comparison.rb +3 -0
- data/lib/rubocop/cop/style/nil_lambda.rb +1 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +9 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
- data/lib/rubocop/cop/style/option_hash.rb +2 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
- data/lib/rubocop/cop/style/or_assignment.rb +4 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +12 -9
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
- 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 +2 -2
- data/lib/rubocop/cop/style/raise_args.rb +4 -8
- data/lib/rubocop/cop/style/random_with_offset.rb +8 -8
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
- data/lib/rubocop/cop/style/redundant_assignment.rb +2 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +47 -7
- 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 +5 -6
- data/lib/rubocop/cop/style/redundant_exception.rb +5 -6
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +2 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -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 +6 -4
- data/lib/rubocop/cop/style/redundant_self.rb +9 -9
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +4 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +3 -5
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
- data/lib/rubocop/cop/style/rescue_standard_error.rb +5 -7
- data/lib/rubocop/cop/style/return_nil.rb +7 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +12 -21
- data/lib/rubocop/cop/style/sample.rb +1 -0
- data/lib/rubocop/cop/style/send.rb +1 -2
- data/lib/rubocop/cop/style/signal_exception.rb +6 -7
- data/lib/rubocop/cop/style/single_argument_dig.rb +2 -2
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -0
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +31 -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 +3 -6
- data/lib/rubocop/cop/style/string_chars.rb +39 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +9 -10
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -0
- data/lib/rubocop/cop/style/string_literals.rb +2 -5
- data/lib/rubocop/cop/style/strip.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +11 -0
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +29 -10
- data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +3 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
- data/lib/rubocop/cop/style/trivial_accessors.rb +3 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
- data/lib/rubocop/cop/style/unpack_first.rb +1 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -3
- 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 +4 -11
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -2
- data/lib/rubocop/cop/team.rb +2 -5
- data/lib/rubocop/cop/util.rb +8 -11
- 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 +69 -9
- data/lib/rubocop/ext/regexp_parser.rb +3 -6
- data/lib/rubocop/file_finder.rb +1 -3
- data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
- 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 +3 -9
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/formatter/tap_formatter.rb +4 -2
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -1
- data/lib/rubocop/options.rb +27 -41
- 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 +19 -16
- data/lib/rubocop/target_ruby.rb +25 -21
- data/lib/rubocop/version.rb +1 -1
- metadata +18 -11
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -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
|
@@ -30,7 +30,7 @@ module RuboCop
|
|
30
30
|
# if Dir.exist?(local)
|
31
31
|
# gem 'rubocop', path: local
|
32
32
|
# elsif ENV['RUBOCOP_VERSION'] == 'master'
|
33
|
-
# gem 'rubocop', git: 'https://github.com/rubocop
|
33
|
+
# gem 'rubocop', git: 'https://github.com/rubocop/rubocop.git'
|
34
34
|
# else
|
35
35
|
# gem 'rubocop', '~> 0.90.0'
|
36
36
|
# end
|
@@ -57,6 +57,7 @@ module RuboCop
|
|
57
57
|
|
58
58
|
private
|
59
59
|
|
60
|
+
# @!method gem_declarations(node)
|
60
61
|
def_node_search :gem_declarations, '(send nil? :gem str ...)'
|
61
62
|
|
62
63
|
def duplicated_gem_nodes
|
@@ -82,8 +83,7 @@ module RuboCop
|
|
82
83
|
|
83
84
|
def register_offense(node, gem_name, line_of_first_occurrence)
|
84
85
|
line_range = node.loc.column...node.loc.last_column
|
85
|
-
offense_location =
|
86
|
-
source_range(processed_source.buffer, node.first_line, line_range)
|
86
|
+
offense_location = source_range(processed_source.buffer, node.first_line, line_range)
|
87
87
|
message = format(
|
88
88
|
MSG,
|
89
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,14 +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
|
-
def_node_matcher :gem_declaration?, '(send nil? :gem str ...)'
|
70
|
-
|
71
94
|
def on_send(node)
|
72
95
|
return unless gem_declaration?(node)
|
73
96
|
return if ignored_gem?(node)
|
@@ -101,8 +124,7 @@ module RuboCop
|
|
101
124
|
end
|
102
125
|
|
103
126
|
def preceding_comment?(node1, node2)
|
104
|
-
node1 && node2 && precede?(node2, node1) &&
|
105
|
-
comment_line?(node2.loc.expression.source)
|
127
|
+
node1 && node2 && precede?(node2, node1) && comment_line?(node2.loc.expression.source)
|
106
128
|
end
|
107
129
|
|
108
130
|
def ignored_gem?(node)
|
@@ -113,6 +135,8 @@ module RuboCop
|
|
113
135
|
def checked_options_present?(node)
|
114
136
|
(cop_config[CHECKED_OPTIONS_CONFIG].include?(VERSION_SPECIFIERS_OPTION) &&
|
115
137
|
version_specified_gem?(node)) ||
|
138
|
+
(cop_config[CHECKED_OPTIONS_CONFIG].include?(RESTRICTIVE_VERSION_SPECIFIERS_OPTION) &&
|
139
|
+
restrictive_version_specified_gem?(node)) ||
|
116
140
|
contains_checked_options?(node)
|
117
141
|
end
|
118
142
|
|
@@ -123,6 +147,15 @@ module RuboCop
|
|
123
147
|
node.arguments[1]&.str_type?
|
124
148
|
end
|
125
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
|
+
|
126
159
|
def contains_checked_options?(node)
|
127
160
|
(Array(cop_config[CHECKED_OPTIONS_CONFIG]) & gem_options(node).map(&:to_s)).any?
|
128
161
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Bundler
|
6
|
+
# Enforce that Gem version specifications are either required
|
7
|
+
# or forbidden.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: required (default)
|
10
|
+
# # bad
|
11
|
+
# gem 'rubocop'
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# gem 'rubocop', '~> 1.12'
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# gem 'rubocop', '>= 1.10.0'
|
18
|
+
#
|
19
|
+
# # good
|
20
|
+
# gem 'rubocop', '>= 1.5.0', '< 1.10.0'
|
21
|
+
#
|
22
|
+
# @example EnforcedStyle: forbidden
|
23
|
+
# # good
|
24
|
+
# gem 'rubocop'
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# gem 'rubocop', '~> 1.12'
|
28
|
+
#
|
29
|
+
# # bad
|
30
|
+
# gem 'rubocop', '>= 1.10.0'
|
31
|
+
#
|
32
|
+
# # bad
|
33
|
+
# gem 'rubocop', '>= 1.5.0', '< 1.10.0'
|
34
|
+
#
|
35
|
+
class GemVersion < Base
|
36
|
+
include ConfigurableEnforcedStyle
|
37
|
+
include GemDeclaration
|
38
|
+
|
39
|
+
REQUIRED_MSG = 'Gem version specification is required.'
|
40
|
+
FORBIDDEN_MSG = 'Gem version specification is forbidden.'
|
41
|
+
VERSION_SPECIFICATION_REGEX = /^\s*[~<>=]*\s*[0-9.]+/.freeze
|
42
|
+
|
43
|
+
# @!method includes_version_specification?(node)
|
44
|
+
def_node_matcher :includes_version_specification?, <<~PATTERN
|
45
|
+
(send nil? :gem <(str #version_specification?) ...>)
|
46
|
+
PATTERN
|
47
|
+
|
48
|
+
def on_send(node)
|
49
|
+
return unless gem_declaration?(node)
|
50
|
+
return if allowed_gem?(node)
|
51
|
+
|
52
|
+
if offense?(node)
|
53
|
+
add_offense(node)
|
54
|
+
opposite_style_detected
|
55
|
+
else
|
56
|
+
correct_style_detected
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def allowed_gem?(node)
|
63
|
+
allowed_gems.include?(node.first_argument.value)
|
64
|
+
end
|
65
|
+
|
66
|
+
def allowed_gems
|
67
|
+
Array(cop_config['AllowedGems'])
|
68
|
+
end
|
69
|
+
|
70
|
+
def message(range)
|
71
|
+
gem_specification = range.source
|
72
|
+
|
73
|
+
if required_style?
|
74
|
+
format(REQUIRED_MSG, gem_specification: gem_specification)
|
75
|
+
elsif forbidden_style?
|
76
|
+
format(FORBIDDEN_MSG, gem_specification: gem_specification)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def offense?(node)
|
81
|
+
(required_style? && !includes_version_specification?(node)) ||
|
82
|
+
(forbidden_style? && includes_version_specification?(node))
|
83
|
+
end
|
84
|
+
|
85
|
+
def forbidden_style?
|
86
|
+
style == :forbidden
|
87
|
+
end
|
88
|
+
|
89
|
+
def required_style?
|
90
|
+
style == :required
|
91
|
+
end
|
92
|
+
|
93
|
+
def version_specification?(expression)
|
94
|
+
expression.match?(VERSION_SPECIFICATION_REGEX)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -38,10 +38,7 @@ module RuboCop
|
|
38
38
|
gem_declarations(processed_source.ast)
|
39
39
|
.each_cons(2) do |previous, current|
|
40
40
|
next unless consecutive_lines(previous, current)
|
41
|
-
next unless case_insensitive_out_of_order?(
|
42
|
-
gem_name(current),
|
43
|
-
gem_name(previous)
|
44
|
-
)
|
41
|
+
next unless case_insensitive_out_of_order?(gem_name(current), gem_name(previous))
|
45
42
|
|
46
43
|
register_offense(previous, current)
|
47
44
|
end
|
@@ -64,6 +61,7 @@ module RuboCop
|
|
64
61
|
declarations.to_a[node_index - 1]
|
65
62
|
end
|
66
63
|
|
64
|
+
# @!method gem_declarations(node)
|
67
65
|
def_node_search :gem_declarations, <<~PATTERN
|
68
66
|
(:send nil? :gem str ...)
|
69
67
|
PATTERN
|
@@ -143,20 +143,14 @@ module RuboCop
|
|
143
143
|
map = {}
|
144
144
|
callbacks&.select! do |cop|
|
145
145
|
restrictions = cop.class.send :restrict_on_send
|
146
|
-
restrictions.each
|
147
|
-
(map[name] ||= []) << cop
|
148
|
-
end
|
146
|
+
restrictions.each { |name| (map[name] ||= []) << cop }
|
149
147
|
restrictions.empty?
|
150
148
|
end
|
151
149
|
map
|
152
150
|
end
|
153
151
|
|
154
152
|
def invoke(callback, cops, *args)
|
155
|
-
cops.each
|
156
|
-
with_cop_error_handling(cop) do
|
157
|
-
cop.send(callback, *args)
|
158
|
-
end
|
159
|
-
end
|
153
|
+
cops.each { |cop| with_cop_error_handling(cop) { cop.send(callback, *args) } }
|
160
154
|
end
|
161
155
|
|
162
156
|
# Allow blind rescues here, since we're absorbing and packaging or
|
data/lib/rubocop/cop/cop.rb
CHANGED
@@ -18,9 +18,7 @@ module RuboCop
|
|
18
18
|
def call(corrector)
|
19
19
|
lambda.call(corrector)
|
20
20
|
rescue StandardError => e
|
21
|
-
raise ErrorWithAnalyzedFileLocation.new(
|
22
|
-
cause: e, node: node, cop: cop
|
23
|
-
)
|
21
|
+
raise ErrorWithAnalyzedFileLocation.new(cause: e, node: node, cop: cop)
|
24
22
|
end
|
25
23
|
end
|
26
24
|
|
@@ -55,9 +53,7 @@ module RuboCop
|
|
55
53
|
return unless method_defined?(:join_force?)
|
56
54
|
|
57
55
|
cop = new
|
58
|
-
Force.all.select
|
59
|
-
cop.join_force?(force_class)
|
60
|
-
end
|
56
|
+
Force.all.select { |force_class| cop.join_force?(force_class) }
|
61
57
|
end
|
62
58
|
|
63
59
|
# @deprecated
|
@@ -97,12 +93,6 @@ module RuboCop
|
|
97
93
|
Registry.qualified_cop_name(name, origin)
|
98
94
|
end
|
99
95
|
|
100
|
-
# @deprecated
|
101
|
-
# Open issue if there's a valid use case to include this in Base
|
102
|
-
def parse(source, path = nil)
|
103
|
-
ProcessedSource.new(source, target_ruby_version, path)
|
104
|
-
end
|
105
|
-
|
106
96
|
private
|
107
97
|
|
108
98
|
def begin_investigation(processed_source)
|
@@ -130,17 +120,13 @@ module RuboCop
|
|
130
120
|
|
131
121
|
return unless lambda
|
132
122
|
|
133
|
-
suppress_clobbering
|
134
|
-
lambda.call(corrector)
|
135
|
-
end
|
123
|
+
suppress_clobbering { lambda.call(corrector) }
|
136
124
|
end
|
137
125
|
|
138
126
|
def correction_lambda
|
139
127
|
return unless support_autocorrect?
|
140
128
|
|
141
|
-
dedup_on_node(@v0_argument)
|
142
|
-
autocorrect(@v0_argument)
|
143
|
-
end
|
129
|
+
dedup_on_node(@v0_argument) { autocorrect(@v0_argument) }
|
144
130
|
end
|
145
131
|
|
146
132
|
def dedup_on_node(node)
|