rubocop 0.80.1 → 0.85.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 +4 -4
- data/config/default.yml +202 -49
- data/lib/rubocop.rb +20 -61
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cli.rb +13 -7
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
- data/lib/rubocop/cli/command/show_cops.rb +2 -6
- data/lib/rubocop/comment_config.rb +1 -1
- data/lib/rubocop/config.rb +14 -2
- data/lib/rubocop/config_loader.rb +37 -33
- data/lib/rubocop/config_loader_resolver.rb +45 -6
- data/lib/rubocop/config_obsoletion.rb +2 -0
- data/lib/rubocop/config_store.rb +12 -2
- data/lib/rubocop/config_validator.rb +18 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
- data/lib/rubocop/cop/badge.rb +5 -5
- data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/commissioner.rb +0 -21
- data/lib/rubocop/cop/cop.rb +14 -6
- data/lib/rubocop/cop/corrector.rb +48 -24
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -8
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
- data/lib/rubocop/cop/generator.rb +4 -3
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/array_alignment.rb +53 -10
- data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
- data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +19 -16
- data/lib/rubocop/cop/layout/condition_position.rb +12 -2
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
- data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +6 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +5 -9
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
- data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +23 -20
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
- data/lib/rubocop/cop/lint/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
- data/lib/rubocop/cop/lint/empty_when.rb +29 -6
- data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -4
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
- data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/loop.rb +7 -5
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +62 -0
- data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
- data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
- data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +23 -26
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
- data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
- data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/migration/department_name.rb +22 -9
- data/lib/rubocop/cop/mixin/alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -2
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
- data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
- data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -1
- data/lib/rubocop/cop/naming/file_name.rb +27 -14
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +26 -0
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/registry.rb +12 -7
- data/lib/rubocop/cop/severity.rb +1 -3
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
- data/lib/rubocop/cop/style/alias.rb +4 -4
- data/lib/rubocop/cop/style/and_or.rb +7 -8
- data/lib/rubocop/cop/style/array_join.rb +2 -2
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
- data/lib/rubocop/cop/style/case_equality.rb +24 -1
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/collection_methods.rb +2 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +9 -11
- data/lib/rubocop/cop/style/copyright.rb +3 -3
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
- data/lib/rubocop/cop/style/documentation.rb +43 -5
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +41 -4
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +3 -3
- data/lib/rubocop/cop/style/empty_literal.rb +1 -3
- data/lib/rubocop/cop/style/empty_method.rb +2 -6
- data/lib/rubocop/cop/style/end_block.rb +6 -0
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
- data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
- data/lib/rubocop/cop/style/format_string.rb +2 -2
- data/lib/rubocop/cop/style/format_string_token.rb +2 -3
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
- data/lib/rubocop/cop/style/guard_clause.rb +25 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +6 -4
- data/lib/rubocop/cop/style/hash_syntax.rb +19 -12
- data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +6 -5
- data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
- data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
- data/lib/rubocop/cop/style/lambda.rb +3 -2
- data/lib/rubocop/cop/style/lambda_call.rb +1 -21
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +58 -12
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
- data/lib/rubocop/cop/style/negated_if.rb +3 -3
- data/lib/rubocop/cop/style/negated_unless.rb +3 -3
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +5 -5
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
- data/lib/rubocop/cop/style/one_line_conditional.rb +6 -9
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_condition.rb +3 -4
- data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
- data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
- data/lib/rubocop/cop/style/redundant_return.rb +5 -7
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +3 -7
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +3 -7
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +2 -2
- data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -0
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +0 -4
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
- data/lib/rubocop/cop/team.rb +61 -25
- data/lib/rubocop/cop/util.rb +25 -1
- data/lib/rubocop/cop/variable_force.rb +3 -9
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
- data/lib/rubocop/cop/variable_force/branch.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +3 -6
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/formatter/base_formatter.rb +0 -4
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
- data/lib/rubocop/formatter/formatter_set.rb +1 -4
- data/lib/rubocop/formatter/junit_formatter.rb +27 -6
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/formatter/tap_formatter.rb +1 -1
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/name_similarity.rb +12 -9
- data/lib/rubocop/options.rb +33 -12
- data/lib/rubocop/remote_config.rb +1 -3
- data/lib/rubocop/result_cache.rb +5 -7
- data/lib/rubocop/rspec/cop_helper.rb +3 -26
- data/lib/rubocop/rspec/expect_offense.rb +46 -16
- data/lib/rubocop/rspec/shared_contexts.rb +54 -20
- data/lib/rubocop/runner.rb +21 -14
- data/lib/rubocop/target_finder.rb +7 -7
- data/lib/rubocop/target_ruby.rb +5 -2
- data/lib/rubocop/version.rb +5 -3
- metadata +50 -77
- data/lib/rubocop/ast/builder.rb +0 -83
- data/lib/rubocop/ast/node.rb +0 -632
- data/lib/rubocop/ast/node/alias_node.rb +0 -24
- data/lib/rubocop/ast/node/and_node.rb +0 -29
- data/lib/rubocop/ast/node/args_node.rb +0 -29
- data/lib/rubocop/ast/node/array_node.rb +0 -57
- data/lib/rubocop/ast/node/block_node.rb +0 -117
- data/lib/rubocop/ast/node/break_node.rb +0 -17
- data/lib/rubocop/ast/node/case_node.rb +0 -56
- data/lib/rubocop/ast/node/class_node.rb +0 -31
- data/lib/rubocop/ast/node/def_node.rb +0 -82
- data/lib/rubocop/ast/node/defined_node.rb +0 -17
- data/lib/rubocop/ast/node/ensure_node.rb +0 -17
- data/lib/rubocop/ast/node/float_node.rb +0 -12
- data/lib/rubocop/ast/node/for_node.rb +0 -53
- data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
- data/lib/rubocop/ast/node/hash_node.rb +0 -109
- data/lib/rubocop/ast/node/if_node.rb +0 -175
- data/lib/rubocop/ast/node/int_node.rb +0 -12
- data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
- data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
- data/lib/rubocop/ast/node/module_node.rb +0 -24
- data/lib/rubocop/ast/node/or_node.rb +0 -29
- data/lib/rubocop/ast/node/pair_node.rb +0 -63
- data/lib/rubocop/ast/node/range_node.rb +0 -18
- data/lib/rubocop/ast/node/regexp_node.rb +0 -33
- data/lib/rubocop/ast/node/resbody_node.rb +0 -24
- data/lib/rubocop/ast/node/retry_node.rb +0 -17
- data/lib/rubocop/ast/node/return_node.rb +0 -24
- data/lib/rubocop/ast/node/self_class_node.rb +0 -24
- data/lib/rubocop/ast/node/send_node.rb +0 -13
- data/lib/rubocop/ast/node/str_node.rb +0 -16
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/symbol_node.rb +0 -12
- data/lib/rubocop/ast/node/until_node.rb +0 -35
- data/lib/rubocop/ast/node/when_node.rb +0 -53
- data/lib/rubocop/ast/node/while_node.rb +0 -35
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -200
- data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
- data/lib/rubocop/node_pattern.rb +0 -887
- data/lib/rubocop/processed_source.rb +0 -216
- data/lib/rubocop/string_util.rb +0 -14
- data/lib/rubocop/token.rb +0 -114
@@ -17,10 +17,12 @@ module RuboCop
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
# rubocop:disable Metrics/MethodLength
|
20
21
|
def resolve_inheritance(path, hash, file, debug)
|
21
22
|
inherited_files = Array(hash['inherit_from'])
|
22
23
|
base_configs(path, inherited_files, file)
|
23
24
|
.reverse.each_with_index do |base_config, index|
|
25
|
+
override_department_setting_for_cops(base_config, hash)
|
24
26
|
base_config.each do |k, v|
|
25
27
|
next unless v.is_a?(Hash)
|
26
28
|
|
@@ -34,6 +36,7 @@ module RuboCop
|
|
34
36
|
end
|
35
37
|
end
|
36
38
|
end
|
39
|
+
# rubocop:enable Metrics/MethodLength
|
37
40
|
|
38
41
|
def resolve_inheritance_from_gems(hash)
|
39
42
|
gems = hash.delete('inherit_gem')
|
@@ -68,9 +71,7 @@ module RuboCop
|
|
68
71
|
end
|
69
72
|
end
|
70
73
|
|
71
|
-
if disabled_by_default
|
72
|
-
config = handle_disabled_by_default(config, default_configuration)
|
73
|
-
end
|
74
|
+
config = handle_disabled_by_default(config, default_configuration) if disabled_by_default
|
74
75
|
|
75
76
|
opts = { inherit_mode: config['inherit_mode'] || {},
|
76
77
|
unset_nil: unset_nil }
|
@@ -100,8 +101,30 @@ module RuboCop
|
|
100
101
|
end
|
101
102
|
# rubocop:enable Metrics/AbcSize
|
102
103
|
|
104
|
+
# An `Enabled: true` setting in user configuration for a cop overrides an
|
105
|
+
# `Enabled: false` setting for its department.
|
106
|
+
def override_department_setting_for_cops(base_hash, derived_hash)
|
107
|
+
derived_hash.each_key do |key|
|
108
|
+
next unless key =~ %r{(.*)/.*}
|
109
|
+
|
110
|
+
department = Regexp.last_match(1)
|
111
|
+
next unless disabled?(derived_hash, department) ||
|
112
|
+
disabled?(base_hash, department)
|
113
|
+
|
114
|
+
# The `override_department` setting for the `Enabled` parameter is an
|
115
|
+
# internal setting that's not documented in the manual. It will cause a
|
116
|
+
# cop to be enabled later, when logic surrounding enabled/disabled it
|
117
|
+
# run, even though its department is disabled.
|
118
|
+
derived_hash[key]['Enabled'] = 'override_department' if derived_hash[key]['Enabled']
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
103
122
|
private
|
104
123
|
|
124
|
+
def disabled?(hash, department)
|
125
|
+
hash[department] && hash[department]['Enabled'] == false
|
126
|
+
end
|
127
|
+
|
105
128
|
def duplicate_setting?(base_hash, derived_hash, key, inherited_file)
|
106
129
|
return false if inherited_file.nil? # Not inheritance resolving merge
|
107
130
|
return false if inherited_file.start_with?('..') # Legitimate override
|
@@ -148,10 +171,20 @@ module RuboCop
|
|
148
171
|
|
149
172
|
def inherited_file(path, inherit_from, file)
|
150
173
|
if remote_file?(inherit_from)
|
174
|
+
# A remote configuration, e.g. `inherit_from: http://example.com/rubocop.yml`.
|
151
175
|
RemoteConfig.new(inherit_from, File.dirname(path))
|
176
|
+
elsif Pathname.new(inherit_from).absolute?
|
177
|
+
# An absolute path to a config, e.g. `inherit_from: /Users/me/rubocop.yml`.
|
178
|
+
# The path may come from `inherit_gem` option, where a gem name is expanded
|
179
|
+
# to an absolute path to that gem.
|
180
|
+
print 'Inheriting ' if ConfigLoader.debug?
|
181
|
+
inherit_from
|
152
182
|
elsif file.is_a?(RemoteConfig)
|
183
|
+
# A path relative to a URL, e.g. `inherit_from: configs/default.yml`
|
184
|
+
# in a config included with `inherit_from: http://example.com/rubocop.yml`
|
153
185
|
file.inherit_from_remote(inherit_from, path)
|
154
186
|
else
|
187
|
+
# A local relative path, e.g. `inherit_from: default.yml`
|
155
188
|
print 'Inheriting ' if ConfigLoader.debug?
|
156
189
|
File.expand_path(inherit_from, File.dirname(path))
|
157
190
|
end
|
@@ -181,12 +214,18 @@ module RuboCop
|
|
181
214
|
end
|
182
215
|
|
183
216
|
def transform(config)
|
184
|
-
|
217
|
+
config.transform_values { |params| yield(params) }
|
185
218
|
end
|
186
219
|
|
187
220
|
def gem_config_path(gem_name, relative_config_path)
|
188
|
-
|
189
|
-
|
221
|
+
if defined?(Bundler)
|
222
|
+
gem = Bundler.load.specs[gem_name].first
|
223
|
+
gem_path = gem.full_gem_path if gem
|
224
|
+
end
|
225
|
+
|
226
|
+
gem_path ||= Gem::Specification.find_by_name(gem_name).gem_dir
|
227
|
+
|
228
|
+
File.join(gem_path, relative_config_path)
|
190
229
|
rescue Gem::LoadError => e
|
191
230
|
raise Gem::LoadError,
|
192
231
|
"Unable to find gem #{gem_name}; is the gem installed? #{e}"
|
@@ -17,8 +17,10 @@ module RuboCop
|
|
17
17
|
'Layout/IndentHash' => 'Layout/FirstHashElementIndentation',
|
18
18
|
'Layout/IndentHeredoc' => 'Layout/HeredocIndentation',
|
19
19
|
'Layout/LeadingBlankLines' => 'Layout/LeadingEmptyLines',
|
20
|
+
'Layout/Tab' => 'Layout/IndentationStyle',
|
20
21
|
'Layout/TrailingBlankLines' => 'Layout/TrailingEmptyLines',
|
21
22
|
'Lint/DuplicatedKey' => 'Lint/DuplicateHashKey',
|
23
|
+
'Lint/EndInMethod' => 'Style/EndBlock',
|
22
24
|
'Lint/HandleExceptions' => 'Lint/SuppressedException',
|
23
25
|
'Lint/MultipleCompare' => 'Lint/MultipleComparison',
|
24
26
|
'Lint/StringConversionInInterpolation' => 'Lint/RedundantStringCoercion',
|
data/lib/rubocop/config_store.rb
CHANGED
@@ -29,14 +29,24 @@ module RuboCop
|
|
29
29
|
@options_config = ConfigLoader.default_configuration
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
33
|
-
|
32
|
+
def for_file(file)
|
33
|
+
for_dir(File.dirname(file))
|
34
|
+
end
|
34
35
|
|
36
|
+
# If type (file/dir) is known beforehand,
|
37
|
+
# prefer using #for_file or #for_dir for improved performance
|
38
|
+
def for(file_or_dir)
|
35
39
|
dir = if File.directory?(file_or_dir)
|
36
40
|
file_or_dir
|
37
41
|
else
|
38
42
|
File.dirname(file_or_dir)
|
39
43
|
end
|
44
|
+
for_dir(dir)
|
45
|
+
end
|
46
|
+
|
47
|
+
def for_dir(dir)
|
48
|
+
return @options_config if @options_config
|
49
|
+
|
40
50
|
@path_cache[dir] ||= ConfigLoader.configuration_file_for(dir)
|
41
51
|
path = @path_cache[dir]
|
42
52
|
@object_cache[path] ||= begin
|
@@ -13,6 +13,7 @@ module RuboCop
|
|
13
13
|
INTERNAL_PARAMS = %w[Description StyleGuide
|
14
14
|
VersionAdded VersionChanged VersionRemoved
|
15
15
|
Reference Safe SafeAutoCorrect].freeze
|
16
|
+
NEW_COPS_VALUES = %w[pending disable enable].freeze
|
16
17
|
|
17
18
|
def_delegators :@config, :smart_loaded_path, :for_all_cops
|
18
19
|
|
@@ -22,6 +23,7 @@ module RuboCop
|
|
22
23
|
@target_ruby = TargetRuby.new(config)
|
23
24
|
end
|
24
25
|
|
26
|
+
# rubocop:disable Metrics/AbcSize
|
25
27
|
def validate
|
26
28
|
check_cop_config_value(@config)
|
27
29
|
reject_conflicting_safe_settings
|
@@ -37,11 +39,13 @@ module RuboCop
|
|
37
39
|
|
38
40
|
alert_about_unrecognized_cops(invalid_cop_names)
|
39
41
|
check_target_ruby
|
42
|
+
validate_new_cops_parameter
|
40
43
|
validate_parameter_names(valid_cop_names)
|
41
44
|
validate_enforced_styles(valid_cop_names)
|
42
45
|
validate_syntax_cop
|
43
46
|
reject_mutually_exclusive_defaults
|
44
47
|
end
|
48
|
+
# rubocop:enable Metrics/AbcSize
|
45
49
|
|
46
50
|
def target_ruby_version
|
47
51
|
target_ruby.version
|
@@ -107,6 +111,18 @@ module RuboCop
|
|
107
111
|
'It\'s not possible to disable this cop.'
|
108
112
|
end
|
109
113
|
|
114
|
+
def validate_new_cops_parameter
|
115
|
+
new_cop_parameter = @config.for_all_cops['NewCops']
|
116
|
+
return if new_cop_parameter.nil? ||
|
117
|
+
NEW_COPS_VALUES.include?(new_cop_parameter)
|
118
|
+
|
119
|
+
message = "invalid #{new_cop_parameter} for `NewCops` found in" \
|
120
|
+
"#{smart_loaded_path}\n" \
|
121
|
+
"Valid choices are: #{NEW_COPS_VALUES.join(', ')}"
|
122
|
+
|
123
|
+
raise ValidationError, message
|
124
|
+
end
|
125
|
+
|
110
126
|
def validate_parameter_names(valid_cop_names)
|
111
127
|
valid_cop_names.each do |name|
|
112
128
|
validate_section_presence(name)
|
@@ -190,7 +206,8 @@ module RuboCop
|
|
190
206
|
SafeAutoCorrect
|
191
207
|
AutoCorrect].include?(key) && value.is_a?(String)
|
192
208
|
|
193
|
-
next if key == 'Enabled' &&
|
209
|
+
next if key == 'Enabled' &&
|
210
|
+
%w[pending override_department].include?(value)
|
194
211
|
|
195
212
|
raise ValidationError, msg_not_boolean(parent, key, value)
|
196
213
|
end
|
@@ -43,8 +43,7 @@ module RuboCop
|
|
43
43
|
def disable_offense(node)
|
44
44
|
range = node.location.expression
|
45
45
|
eol_comment = " # rubocop:todo #{cop_name}"
|
46
|
-
needed_line_length = range.
|
47
|
-
(range.source_line + eol_comment).length
|
46
|
+
needed_line_length = (range.source_line + eol_comment).length
|
48
47
|
if needed_line_length <= max_line_length
|
49
48
|
disable_offense_at_end_of_line(range_of_first_line(range),
|
50
49
|
eol_comment)
|
data/lib/rubocop/cop/badge.rb
CHANGED
@@ -4,11 +4,11 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
# Identifier of all cops containing a department and cop name.
|
6
6
|
#
|
7
|
-
# All cops are identified by their badge. For example, the badge
|
8
|
-
#
|
9
|
-
# parsed as either `Department/CopName` or just `CopName` to
|
10
|
-
# for badge references in source files that omit the department
|
11
|
-
#
|
7
|
+
# All cops are identified by their badge. For example, the badge for
|
8
|
+
# `RuboCop::Cop::Layout::IndentationStyle` is `Layout/IndentationStyle`.
|
9
|
+
# Badges can be parsed as either `Department/CopName` or just `CopName` to
|
10
|
+
# allow for badge references in source files that omit the department for
|
11
|
+
# RuboCop to infer.
|
12
12
|
class Badge
|
13
13
|
# Error raised when a badge parse fails.
|
14
14
|
class InvalidBadge < Error
|
@@ -5,7 +5,25 @@ module RuboCop
|
|
5
5
|
module Bundler
|
6
6
|
# Add a comment describing each gem in your Gemfile.
|
7
7
|
#
|
8
|
-
#
|
8
|
+
# Optionally, the "OnlyFor" configuration
|
9
|
+
# can be used to only register offenses when the gems
|
10
|
+
# use certain options or have version specifiers.
|
11
|
+
# Add "version_specifiers" and/or the gem option names
|
12
|
+
# you want to check.
|
13
|
+
#
|
14
|
+
# A useful use-case is to enforce a comment when using
|
15
|
+
# options that change the source of a gem:
|
16
|
+
#
|
17
|
+
# - `bitbucket`
|
18
|
+
# - `gist`
|
19
|
+
# - `git`
|
20
|
+
# - `github`
|
21
|
+
# - `source`
|
22
|
+
#
|
23
|
+
# For a full list of options supported by bundler,
|
24
|
+
# you can check the https://bundler.io/man/gemfile.5.html[official documentation].
|
25
|
+
#
|
26
|
+
# @example OnlyFor: [] (default)
|
9
27
|
# # bad
|
10
28
|
#
|
11
29
|
# gem 'foo'
|
@@ -15,10 +33,37 @@ module RuboCop
|
|
15
33
|
# # Helpers for the foo things.
|
16
34
|
# gem 'foo'
|
17
35
|
#
|
36
|
+
# @example OnlyFor: ['version_specifiers']
|
37
|
+
# # bad
|
38
|
+
#
|
39
|
+
# gem 'foo', '< 2.1'
|
40
|
+
#
|
41
|
+
# # good
|
42
|
+
#
|
43
|
+
# # Version 2.1 introduces breaking change baz
|
44
|
+
# gem 'foo', '< 2.1'
|
45
|
+
#
|
46
|
+
# @example OnlyFor: ['version_specifiers', 'github']
|
47
|
+
# # bad
|
48
|
+
#
|
49
|
+
# gem 'foo', github: 'some_account/some_fork_of_foo'
|
50
|
+
#
|
51
|
+
# gem 'bar', '< 2.1'
|
52
|
+
#
|
53
|
+
# # good
|
54
|
+
#
|
55
|
+
# # Using this fork because baz
|
56
|
+
# gem 'foo', github: 'some_account/some_fork_of_foo'
|
57
|
+
#
|
58
|
+
# # Version 2.1 introduces breaking change baz
|
59
|
+
# gem 'bar', '< 2.1'
|
60
|
+
#
|
18
61
|
class GemComment < Cop
|
19
62
|
include DefNode
|
20
63
|
|
21
64
|
MSG = 'Missing gem description comment.'
|
65
|
+
CHECKED_OPTIONS_CONFIG = 'OnlyFor'
|
66
|
+
VERSION_SPECIFIERS_OPTION = 'version_specifiers'
|
22
67
|
|
23
68
|
def_node_matcher :gem_declaration?, '(send nil? :gem str ...)'
|
24
69
|
|
@@ -26,6 +71,7 @@ module RuboCop
|
|
26
71
|
return unless gem_declaration?(node)
|
27
72
|
return if ignored_gem?(node)
|
28
73
|
return if commented?(node)
|
74
|
+
return if cop_config[CHECKED_OPTIONS_CONFIG].any? && !checked_options_present?(node)
|
29
75
|
|
30
76
|
add_offense(node)
|
31
77
|
end
|
@@ -58,6 +104,29 @@ module RuboCop
|
|
58
104
|
ignored_gems = Array(cop_config['IgnoredGems'])
|
59
105
|
ignored_gems.include?(node.first_argument.value)
|
60
106
|
end
|
107
|
+
|
108
|
+
def checked_options_present?(node)
|
109
|
+
(cop_config[CHECKED_OPTIONS_CONFIG].include?(VERSION_SPECIFIERS_OPTION) &&
|
110
|
+
version_specified_gem?(node)) ||
|
111
|
+
contains_checked_options?(node)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Besides the gem name, all other *positional* arguments to `gem` are version specifiers,
|
115
|
+
# as long as it has one we know there's at least one version specifier.
|
116
|
+
def version_specified_gem?(node)
|
117
|
+
# arguments[0] is the gem name
|
118
|
+
node.arguments[1]&.str_type?
|
119
|
+
end
|
120
|
+
|
121
|
+
def contains_checked_options?(node)
|
122
|
+
(Array(cop_config[CHECKED_OPTIONS_CONFIG]) & gem_options(node).map(&:to_s)).any?
|
123
|
+
end
|
124
|
+
|
125
|
+
def gem_options(node)
|
126
|
+
return [] unless node.arguments.last&.type == :hash
|
127
|
+
|
128
|
+
node.arguments.last.keys.map(&:value)
|
129
|
+
end
|
61
130
|
end
|
62
131
|
end
|
63
132
|
end
|
@@ -36,7 +36,6 @@ module RuboCop
|
|
36
36
|
|
37
37
|
def investigate(processed_source)
|
38
38
|
reset_errors
|
39
|
-
remove_irrelevant_cops(processed_source.file_path)
|
40
39
|
reset_callbacks
|
41
40
|
prepare(processed_source)
|
42
41
|
invoke_custom_processing(@cops, processed_source)
|
@@ -63,26 +62,6 @@ module RuboCop
|
|
63
62
|
@errors = []
|
64
63
|
end
|
65
64
|
|
66
|
-
def remove_irrelevant_cops(filename)
|
67
|
-
@cops.reject! do |cop|
|
68
|
-
cop.excluded_file?(filename) ||
|
69
|
-
!support_target_ruby_version?(cop) ||
|
70
|
-
!support_target_rails_version?(cop)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def support_target_ruby_version?(cop)
|
75
|
-
return true unless cop.class.respond_to?(:support_target_ruby_version?)
|
76
|
-
|
77
|
-
cop.class.support_target_ruby_version?(cop.target_ruby_version)
|
78
|
-
end
|
79
|
-
|
80
|
-
def support_target_rails_version?(cop)
|
81
|
-
return true unless cop.class.respond_to?(:support_target_rails_version?)
|
82
|
-
|
83
|
-
cop.class.support_target_rails_version?(cop.target_rails_version)
|
84
|
-
end
|
85
|
-
|
86
65
|
def reset_callbacks
|
87
66
|
@callbacks.clear
|
88
67
|
end
|
data/lib/rubocop/cop/cop.rb
CHANGED
@@ -146,17 +146,24 @@ module RuboCop
|
|
146
146
|
@offenses.any? { |o| o.location == location }
|
147
147
|
end
|
148
148
|
|
149
|
-
def correct(node)
|
149
|
+
def correct(node) # rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength
|
150
150
|
reason = reason_to_not_correct(node)
|
151
151
|
return reason if reason
|
152
152
|
|
153
153
|
@corrected_nodes[node] = true
|
154
|
+
|
154
155
|
if support_autocorrect?
|
155
156
|
correction = autocorrect(node)
|
156
|
-
return :uncorrected unless correction
|
157
157
|
|
158
|
-
|
159
|
-
|
158
|
+
if correction
|
159
|
+
@corrections << Correction.new(correction, node, self)
|
160
|
+
:corrected
|
161
|
+
elsif disable_uncorrectable?
|
162
|
+
disable_uncorrectable(node)
|
163
|
+
:corrected_with_todo
|
164
|
+
else
|
165
|
+
:uncorrected
|
166
|
+
end
|
160
167
|
elsif disable_uncorrectable?
|
161
168
|
disable_uncorrectable(node)
|
162
169
|
:corrected_with_todo
|
@@ -211,8 +218,9 @@ module RuboCop
|
|
211
218
|
alias name cop_name
|
212
219
|
|
213
220
|
def relevant_file?(file)
|
214
|
-
|
215
|
-
|
221
|
+
file == RuboCop::AST::ProcessedSource::STRING_SOURCE_NAME ||
|
222
|
+
file_name_matches_any?(file, 'Include', true) &&
|
223
|
+
!file_name_matches_any?(file, 'Exclude', false)
|
216
224
|
end
|
217
225
|
|
218
226
|
def excluded_file?(file)
|
@@ -72,18 +72,18 @@ module RuboCop
|
|
72
72
|
|
73
73
|
# Removes the source range.
|
74
74
|
#
|
75
|
-
# @param [Parser::Source::Range] range
|
76
|
-
def remove(
|
77
|
-
|
75
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
76
|
+
def remove(node_or_range)
|
77
|
+
range = to_range(node_or_range)
|
78
78
|
@source_rewriter.remove(range)
|
79
79
|
end
|
80
80
|
|
81
81
|
# Inserts new code before the given source range.
|
82
82
|
#
|
83
|
-
# @param [Parser::Source::Range] range
|
83
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
84
84
|
# @param [String] content
|
85
|
-
def insert_before(
|
86
|
-
|
85
|
+
def insert_before(node_or_range, content)
|
86
|
+
range = to_range(node_or_range)
|
87
87
|
# TODO: Fix Cops using bad ranges instead
|
88
88
|
if range.end_pos > @source_buffer.source.size
|
89
89
|
range = range.with(end_pos: @source_buffer.source.size)
|
@@ -94,28 +94,38 @@ module RuboCop
|
|
94
94
|
|
95
95
|
# Inserts new code after the given source range.
|
96
96
|
#
|
97
|
-
# @param [Parser::Source::Range] range
|
97
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
98
98
|
# @param [String] content
|
99
|
-
def insert_after(
|
100
|
-
|
99
|
+
def insert_after(node_or_range, content)
|
100
|
+
range = to_range(node_or_range)
|
101
101
|
@source_rewriter.insert_after(range, content)
|
102
102
|
end
|
103
103
|
|
104
|
+
# Wraps the given source range with the given before and after texts
|
105
|
+
#
|
106
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
107
|
+
# @param [String] before
|
108
|
+
# @param [String] after
|
109
|
+
def wrap(node_or_range, before, after)
|
110
|
+
range = to_range(node_or_range)
|
111
|
+
@source_rewriter.wrap(range, before, after)
|
112
|
+
end
|
113
|
+
|
104
114
|
# Replaces the code of the source range `range` with `content`.
|
105
115
|
#
|
106
|
-
# @param [Parser::Source::Range] range
|
116
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
107
117
|
# @param [String] content
|
108
|
-
def replace(
|
109
|
-
|
118
|
+
def replace(node_or_range, content)
|
119
|
+
range = to_range(node_or_range)
|
110
120
|
@source_rewriter.replace(range, content)
|
111
121
|
end
|
112
122
|
|
113
123
|
# Removes `size` characters prior to the source range.
|
114
124
|
#
|
115
|
-
# @param [Parser::Source::Range] range
|
125
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
116
126
|
# @param [Integer] size
|
117
|
-
def remove_preceding(
|
118
|
-
|
127
|
+
def remove_preceding(node_or_range, size)
|
128
|
+
range = to_range(node_or_range)
|
119
129
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
120
130
|
range.begin_pos - size,
|
121
131
|
range.begin_pos)
|
@@ -126,10 +136,10 @@ module RuboCop
|
|
126
136
|
# If `size` is greater than the size of `range`, the removed region can
|
127
137
|
# overrun the end of `range`.
|
128
138
|
#
|
129
|
-
# @param [Parser::Source::Range] range
|
139
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
130
140
|
# @param [Integer] size
|
131
|
-
def remove_leading(
|
132
|
-
|
141
|
+
def remove_leading(node_or_range, size)
|
142
|
+
range = to_range(node_or_range)
|
133
143
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
134
144
|
range.begin_pos,
|
135
145
|
range.begin_pos + size)
|
@@ -140,10 +150,10 @@ module RuboCop
|
|
140
150
|
# If `size` is greater than the size of `range`, the removed region can
|
141
151
|
# overrun the beginning of `range`.
|
142
152
|
#
|
143
|
-
# @param [Parser::Source::Range] range
|
153
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
144
154
|
# @param [Integer] size
|
145
|
-
def remove_trailing(
|
146
|
-
|
155
|
+
def remove_trailing(node_or_range, size)
|
156
|
+
range = to_range(node_or_range)
|
147
157
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
148
158
|
range.end_pos - size,
|
149
159
|
range.end_pos)
|
@@ -153,11 +163,25 @@ module RuboCop
|
|
153
163
|
private
|
154
164
|
|
155
165
|
# :nodoc:
|
156
|
-
def
|
157
|
-
|
166
|
+
def to_range(node_or_range)
|
167
|
+
range = case node_or_range
|
168
|
+
when ::RuboCop::AST::Node, ::Parser::Source::Comment
|
169
|
+
node_or_range.loc.expression
|
170
|
+
when ::Parser::Source::Range
|
171
|
+
node_or_range
|
172
|
+
else
|
173
|
+
raise TypeError,
|
174
|
+
'Expected a Parser::Source::Range, Comment or ' \
|
175
|
+
"Rubocop::AST::Node, got #{node_or_range.class}"
|
176
|
+
end
|
177
|
+
validate_buffer(range.source_buffer)
|
178
|
+
range
|
179
|
+
end
|
180
|
+
|
181
|
+
def validate_buffer(buffer)
|
158
182
|
return if buffer == @source_buffer
|
159
183
|
|
160
|
-
unless buffer.is_a?(Parser::Source::Buffer)
|
184
|
+
unless buffer.is_a?(::Parser::Source::Buffer)
|
161
185
|
# actually this should be enforced by parser gem
|
162
186
|
raise 'Corrector expected range source buffer to be a ' \
|
163
187
|
"Parser::Source::Buffer, but got #{buffer.class}"
|