rubocop 0.80.0 → 0.84.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 +171 -34
- data/lib/rubocop.rb +15 -62
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cli.rb +11 -5
- data/lib/rubocop/cli/command/show_cops.rb +2 -6
- data/lib/rubocop/config.rb +41 -13
- data/lib/rubocop/config_loader.rb +40 -36
- data/lib/rubocop/config_loader_resolver.rb +27 -4
- data/lib/rubocop/config_obsoletion.rb +2 -0
- 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/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/corrector.rb +49 -27
- 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 +3 -3
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -3
- 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/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 +0 -2
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
- 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/heredoc_argument_closing_parenthesis.rb +4 -8
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- 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 +7 -4
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -4
- 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_method_call_operator.rb +129 -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 +2 -6
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +40 -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 +133 -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 +18 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
- 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 +6 -4
- 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/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +31 -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_string_coercion.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 +20 -25
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
- 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 +5 -0
- data/lib/rubocop/cop/migration/department_name.rb +21 -12
- data/lib/rubocop/cop/mixin/alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/array_min_size.rb +2 -6
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +4 -12
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -3
- 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 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +2 -1
- data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -3
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
- data/lib/rubocop/cop/mixin/surrounding_space.rb +1 -3
- 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/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -3
- 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/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/registry.rb +13 -10
- 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 +1 -1
- data/lib/rubocop/cop/style/attr.rb +1 -3
- 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 +1 -1
- 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 +1 -5
- 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/frozen_string_literal_comment.rb +2 -4
- data/lib/rubocop/cop/style/guard_clause.rb +25 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -3
- data/lib/rubocop/cop/style/hash_syntax.rb +15 -10
- 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/inverse_methods.rb +9 -5
- 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/nested_parenthesized_calls.rb +4 -4
- 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 +4 -4
- 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 +18 -6
- 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 +2 -2
- 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 +1 -1
- 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 +2 -6
- data/lib/rubocop/cop/style/trivial_accessors.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/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/util.rb +24 -0
- 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 +2 -6
- 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 +17 -6
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/formatter/tap_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +12 -9
- data/lib/rubocop/options.rb +20 -13
- data/lib/rubocop/remote_config.rb +1 -3
- data/lib/rubocop/result_cache.rb +1 -3
- data/lib/rubocop/rspec/cop_helper.rb +2 -4
- data/lib/rubocop/rspec/expect_offense.rb +4 -10
- data/lib/rubocop/rspec/shared_contexts.rb +54 -20
- data/lib/rubocop/runner.rb +15 -12
- data/lib/rubocop/target_finder.rb +5 -7
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +5 -3
- metadata +32 -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
|
@@ -181,7 +204,7 @@ module RuboCop
|
|
181
204
|
end
|
182
205
|
|
183
206
|
def transform(config)
|
184
|
-
|
207
|
+
config.transform_values { |params| yield(params) }
|
185
208
|
end
|
186
209
|
|
187
210
|
def gem_config_path(gem_name, relative_config_path)
|
@@ -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',
|
@@ -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
|
@@ -72,50 +72,58 @@ 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
|
-
if range.end_pos > @source_buffer.source.size
|
89
|
-
range = range.with(end_pos: @source_buffer.source.size)
|
90
|
-
end
|
88
|
+
range = range.with(end_pos: @source_buffer.source.size) if range.end_pos > @source_buffer.source.size
|
91
89
|
|
92
90
|
@source_rewriter.insert_before(range, content)
|
93
91
|
end
|
94
92
|
|
95
93
|
# Inserts new code after the given source range.
|
96
94
|
#
|
97
|
-
# @param [Parser::Source::Range] range
|
95
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
98
96
|
# @param [String] content
|
99
|
-
def insert_after(
|
100
|
-
|
97
|
+
def insert_after(node_or_range, content)
|
98
|
+
range = to_range(node_or_range)
|
101
99
|
@source_rewriter.insert_after(range, content)
|
102
100
|
end
|
103
101
|
|
102
|
+
# Wraps the given source range with the given before and after texts
|
103
|
+
#
|
104
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
105
|
+
# @param [String] before
|
106
|
+
# @param [String] after
|
107
|
+
def wrap(node_or_range, before, after)
|
108
|
+
range = to_range(node_or_range)
|
109
|
+
@source_rewriter.wrap(range, before, after)
|
110
|
+
end
|
111
|
+
|
104
112
|
# Replaces the code of the source range `range` with `content`.
|
105
113
|
#
|
106
|
-
# @param [Parser::Source::Range] range
|
114
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
107
115
|
# @param [String] content
|
108
|
-
def replace(
|
109
|
-
|
116
|
+
def replace(node_or_range, content)
|
117
|
+
range = to_range(node_or_range)
|
110
118
|
@source_rewriter.replace(range, content)
|
111
119
|
end
|
112
120
|
|
113
121
|
# Removes `size` characters prior to the source range.
|
114
122
|
#
|
115
|
-
# @param [Parser::Source::Range] range
|
123
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
116
124
|
# @param [Integer] size
|
117
|
-
def remove_preceding(
|
118
|
-
|
125
|
+
def remove_preceding(node_or_range, size)
|
126
|
+
range = to_range(node_or_range)
|
119
127
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
120
128
|
range.begin_pos - size,
|
121
129
|
range.begin_pos)
|
@@ -126,10 +134,10 @@ module RuboCop
|
|
126
134
|
# If `size` is greater than the size of `range`, the removed region can
|
127
135
|
# overrun the end of `range`.
|
128
136
|
#
|
129
|
-
# @param [Parser::Source::Range] range
|
137
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
130
138
|
# @param [Integer] size
|
131
|
-
def remove_leading(
|
132
|
-
|
139
|
+
def remove_leading(node_or_range, size)
|
140
|
+
range = to_range(node_or_range)
|
133
141
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
134
142
|
range.begin_pos,
|
135
143
|
range.begin_pos + size)
|
@@ -140,10 +148,10 @@ module RuboCop
|
|
140
148
|
# If `size` is greater than the size of `range`, the removed region can
|
141
149
|
# overrun the beginning of `range`.
|
142
150
|
#
|
143
|
-
# @param [Parser::Source::Range] range
|
151
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
144
152
|
# @param [Integer] size
|
145
|
-
def remove_trailing(
|
146
|
-
|
153
|
+
def remove_trailing(node_or_range, size)
|
154
|
+
range = to_range(node_or_range)
|
147
155
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
148
156
|
range.end_pos - size,
|
149
157
|
range.end_pos)
|
@@ -153,11 +161,25 @@ module RuboCop
|
|
153
161
|
private
|
154
162
|
|
155
163
|
# :nodoc:
|
156
|
-
def
|
157
|
-
|
164
|
+
def to_range(node_or_range)
|
165
|
+
range = case node_or_range
|
166
|
+
when ::RuboCop::AST::Node, ::Parser::Source::Comment
|
167
|
+
node_or_range.loc.expression
|
168
|
+
when ::Parser::Source::Range
|
169
|
+
node_or_range
|
170
|
+
else
|
171
|
+
raise TypeError,
|
172
|
+
'Expected a Parser::Source::Range, Comment or ' \
|
173
|
+
"Rubocop::AST::Node, got #{node_or_range.class}"
|
174
|
+
end
|
175
|
+
validate_buffer(range.source_buffer)
|
176
|
+
range
|
177
|
+
end
|
178
|
+
|
179
|
+
def validate_buffer(buffer)
|
158
180
|
return if buffer == @source_buffer
|
159
181
|
|
160
|
-
unless buffer.is_a?(Parser::Source::Buffer)
|
182
|
+
unless buffer.is_a?(::Parser::Source::Buffer)
|
161
183
|
# actually this should be enforced by parser gem
|
162
184
|
raise 'Corrector expected range source buffer to be a ' \
|
163
185
|
"Parser::Source::Buffer, but got #{buffer.class}"
|
@@ -48,10 +48,8 @@ module RuboCop
|
|
48
48
|
return if taboo_ranges.any? { |t| within?(range, t) }
|
49
49
|
|
50
50
|
if column_delta.positive?
|
51
|
-
unless range.resize(1).source == "\n"
|
52
|
-
|
53
|
-
end
|
54
|
-
elsif range.source =~ /\A[ \t]+\z/
|
51
|
+
corrector.insert_before(range, ' ' * column_delta) unless range.resize(1).source == "\n"
|
52
|
+
elsif /\A[ \t]+\z/.match?(range.source)
|
55
53
|
remove(range, corrector)
|
56
54
|
end
|
57
55
|
end
|
@@ -92,9 +90,7 @@ module RuboCop
|
|
92
90
|
end
|
93
91
|
|
94
92
|
def calculate_range(expr, line_begin_pos, column_delta)
|
95
|
-
if column_delta.positive?
|
96
|
-
return range_between(line_begin_pos, line_begin_pos)
|
97
|
-
end
|
93
|
+
return range_between(line_begin_pos, line_begin_pos) if column_delta.positive?
|
98
94
|
|
99
95
|
starts_with_space =
|
100
96
|
expr.source_buffer.source[line_begin_pos].start_with?(' ')
|
@@ -112,7 +108,7 @@ module RuboCop
|
|
112
108
|
corrector.remove(range)
|
113
109
|
rescue RuntimeError
|
114
110
|
range = range_between(range.begin_pos + 1, range.end_pos + 1)
|
115
|
-
retry if range.source
|
111
|
+
retry if /^ +$/.match?(range.source)
|
116
112
|
ensure
|
117
113
|
$stderr = original_stderr
|
118
114
|
end
|
@@ -10,8 +10,7 @@ module RuboCop
|
|
10
10
|
|
11
11
|
lambda do |corrector|
|
12
12
|
corrector.replace(node.loc.keyword, node.inverse_keyword)
|
13
|
-
corrector.replace(condition.
|
14
|
-
condition.children.first.source)
|
13
|
+
corrector.replace(condition, condition.children.first.source)
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
@@ -44,13 +44,13 @@ module RuboCop
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def replace_selector(corrector)
|
47
|
-
corrector.replace(method
|
47
|
+
corrector.replace(method, 'lambda')
|
48
48
|
end
|
49
49
|
|
50
50
|
def remove_arguments(corrector)
|
51
51
|
return if arguments.empty_and_without_delimiters?
|
52
52
|
|
53
|
-
corrector.remove(arguments
|
53
|
+
corrector.remove(arguments)
|
54
54
|
end
|
55
55
|
|
56
56
|
def insert_arguments(corrector)
|
@@ -62,7 +62,7 @@ module RuboCop
|
|
62
62
|
|
63
63
|
def remove_leading_whitespace(corrector)
|
64
64
|
corrector.remove_preceding(
|
65
|
-
arguments
|
65
|
+
arguments,
|
66
66
|
arguments.source_range.begin_pos -
|
67
67
|
block_node.send_node.source_range.end_pos
|
68
68
|
)
|
@@ -38,9 +38,9 @@ module RuboCop
|
|
38
38
|
return unless eol_comment
|
39
39
|
|
40
40
|
text = eol_comment.loc.expression.source
|
41
|
-
corrector.insert_before(node
|
41
|
+
corrector.insert_before(node,
|
42
42
|
text + "\n" + (' ' * node.loc.keyword.column))
|
43
|
-
corrector.remove(eol_comment
|
43
|
+
corrector.remove(eol_comment)
|
44
44
|
end
|
45
45
|
|
46
46
|
private
|
@@ -10,9 +10,7 @@ module RuboCop
|
|
10
10
|
corrector.remove(node.loc.begin)
|
11
11
|
corrector.remove(node.loc.end)
|
12
12
|
|
13
|
-
if ternary_condition?(node) && next_char_is_question_mark?(node)
|
14
|
-
corrector.insert_after(node.loc.end, ' ')
|
15
|
-
end
|
13
|
+
corrector.insert_after(node.loc.end, ' ') if ternary_condition?(node) && next_char_is_question_mark?(node)
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
@@ -35,9 +35,7 @@ module RuboCop
|
|
35
35
|
|
36
36
|
def add_space(processed_source, corrector, left_token, right_token)
|
37
37
|
@processed_source = processed_source
|
38
|
-
unless left_token.space_after?
|
39
|
-
corrector.insert_after(left_token.pos, ' ')
|
40
|
-
end
|
38
|
+
corrector.insert_after(left_token.pos, ' ') unless left_token.space_after?
|
41
39
|
return if right_token.space_before?
|
42
40
|
|
43
41
|
corrector.insert_before(right_token.pos, ' ')
|
@@ -13,9 +13,9 @@ module RuboCop
|
|
13
13
|
lambda do |corrector|
|
14
14
|
str = node.str_content
|
15
15
|
if style == :single_quotes
|
16
|
-
corrector.replace(node
|
16
|
+
corrector.replace(node, to_string_literal(str))
|
17
17
|
else
|
18
|
-
corrector.replace(node
|
18
|
+
corrector.replace(node, str.inspect)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|