rubocop 0.70.0 → 0.75.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 +6 -10
- data/bin/console +1 -0
- data/config/default.yml +91 -494
- data/lib/rubocop.rb +16 -54
- data/lib/rubocop/ast/builder.rb +2 -0
- data/lib/rubocop/ast/node.rb +9 -15
- data/lib/rubocop/ast/node/float_node.rb +12 -0
- data/lib/rubocop/ast/node/int_node.rb +12 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +4 -4
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -0
- data/lib/rubocop/ast/node/resbody_node.rb +1 -6
- data/lib/rubocop/ast/traversal.rb +3 -3
- data/lib/rubocop/cached_data.rb +1 -1
- data/lib/rubocop/comment_config.rb +3 -2
- data/lib/rubocop/config.rb +21 -508
- data/lib/rubocop/config_loader.rb +22 -4
- data/lib/rubocop/config_loader_resolver.rb +2 -8
- data/lib/rubocop/config_obsoletion.rb +213 -0
- data/lib/rubocop/config_validator.rb +239 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +71 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/commissioner.rb +3 -9
- data/lib/rubocop/cop/cop.rb +39 -12
- data/lib/rubocop/cop/corrector.rb +2 -3
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +43 -17
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
- data/lib/rubocop/cop/generator.rb +4 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +9 -4
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +2 -2
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +3 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +14 -59
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -0
- data/lib/rubocop/cop/layout/indent_assignment.rb +9 -1
- data/lib/rubocop/cop/layout/indent_first_argument.rb +7 -3
- data/lib/rubocop/cop/layout/indent_first_parameter.rb +7 -3
- data/lib/rubocop/cop/layout/indent_heredoc.rb +4 -4
- data/lib/rubocop/cop/layout/indentation_consistency.rb +13 -12
- data/lib/rubocop/cop/layout/indentation_width.rb +28 -10
- data/lib/rubocop/cop/layout/leading_comment_space.rb +28 -0
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +24 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +2 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +5 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +42 -23
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +21 -2
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +24 -40
- data/lib/rubocop/cop/layout/tab.rb +10 -22
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +17 -4
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +4 -6
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -3
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +4 -4
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +57 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -37
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -8
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +4 -4
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +5 -5
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +6 -6
- data/lib/rubocop/cop/lint/unified_integer.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +7 -2
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +2 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -6
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/message_annotator.rb +16 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -1
- data/lib/rubocop/cop/metrics/line_length.rb +6 -0
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
- data/lib/rubocop/cop/migration/department_name.rb +44 -0
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -4
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_alignment.rb +4 -0
- data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -3
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +87 -0
- data/lib/rubocop/cop/mixin/safe_mode.rb +2 -0
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -5
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +12 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +20 -22
- data/lib/rubocop/cop/naming/variable_name.rb +1 -0
- data/lib/rubocop/cop/offense.rb +18 -7
- data/lib/rubocop/cop/registry.rb +22 -1
- data/lib/rubocop/cop/security/eval.rb +1 -1
- data/lib/rubocop/cop/security/json_load.rb +1 -1
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -1
- data/lib/rubocop/cop/security/yaml_load.rb +1 -1
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -0
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +29 -10
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +16 -30
- data/lib/rubocop/cop/style/conditional_assignment.rb +8 -9
- data/lib/rubocop/cop/style/constant_visibility.rb +14 -3
- data/lib/rubocop/cop/style/date_time.rb +3 -3
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +2 -2
- 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/float_division.rb +94 -0
- data/lib/rubocop/cop/style/format_string.rb +13 -9
- data/lib/rubocop/cop/style/format_string_token.rb +10 -40
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +18 -33
- data/lib/rubocop/cop/style/guard_clause.rb +39 -10
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +42 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +51 -15
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +0 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +12 -6
- data/lib/rubocop/cop/style/min_max.rb +1 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +12 -2
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +3 -3
- data/lib/rubocop/cop/style/nested_modifier.rb +18 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +3 -3
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +8 -3
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +15 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +6 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +2 -2
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +15 -6
- data/lib/rubocop/cop/style/redundant_self.rb +18 -1
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +24 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +11 -2
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +8 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -2
- data/lib/rubocop/cop/style/strip.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +32 -3
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +4 -6
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_sort.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +1 -1
- data/lib/rubocop/cop/style/variable_interpolation.rb +6 -16
- data/lib/rubocop/cop/style/word_array.rb +2 -2
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -6
- data/lib/rubocop/cop/team.rb +15 -14
- data/lib/rubocop/cop/utils/format_string.rb +128 -0
- data/lib/rubocop/cop/variable_force/variable.rb +15 -2
- data/lib/rubocop/core_ext/string.rb +0 -24
- data/lib/rubocop/error.rb +23 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +8 -5
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +9 -1
- data/lib/rubocop/formatter/tap_formatter.rb +9 -1
- data/lib/rubocop/magic_comment.rb +4 -0
- data/lib/rubocop/node_pattern.rb +86 -7
- data/lib/rubocop/options.rb +18 -2
- data/lib/rubocop/path_util.rb +1 -1
- data/lib/rubocop/processed_source.rb +9 -1
- data/lib/rubocop/rspec/cop_helper.rb +0 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -1
- data/lib/rubocop/rspec/shared_contexts.rb +12 -17
- data/lib/rubocop/rspec/support.rb +0 -1
- data/lib/rubocop/runner.rb +20 -15
- data/lib/rubocop/target_finder.rb +6 -4
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop/yaml_duplication_checker.rb +8 -2
- metadata +16 -70
- data/lib/rubocop/cop/mixin/ignored_method_patterns.rb +0 -19
- data/lib/rubocop/cop/mixin/target_rails_version.rb +0 -16
- data/lib/rubocop/cop/rails/action_filter.rb +0 -117
- data/lib/rubocop/cop/rails/active_record_aliases.rb +0 -48
- data/lib/rubocop/cop/rails/active_record_override.rb +0 -82
- data/lib/rubocop/cop/rails/active_support_aliases.rb +0 -69
- data/lib/rubocop/cop/rails/application_job.rb +0 -40
- data/lib/rubocop/cop/rails/application_record.rb +0 -40
- data/lib/rubocop/cop/rails/assert_not.rb +0 -44
- data/lib/rubocop/cop/rails/belongs_to.rb +0 -102
- data/lib/rubocop/cop/rails/blank.rb +0 -164
- data/lib/rubocop/cop/rails/bulk_change_table.rb +0 -289
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +0 -91
- data/lib/rubocop/cop/rails/date.rb +0 -161
- data/lib/rubocop/cop/rails/delegate.rb +0 -132
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +0 -37
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +0 -91
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +0 -45
- data/lib/rubocop/cop/rails/environment_comparison.rb +0 -68
- data/lib/rubocop/cop/rails/exit.rb +0 -67
- data/lib/rubocop/cop/rails/file_path.rb +0 -108
- data/lib/rubocop/cop/rails/find_by.rb +0 -55
- data/lib/rubocop/cop/rails/find_each.rb +0 -51
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +0 -25
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +0 -106
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +0 -117
- data/lib/rubocop/cop/rails/http_status.rb +0 -179
- data/lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb +0 -94
- data/lib/rubocop/cop/rails/inverse_of.rb +0 -246
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +0 -175
- data/lib/rubocop/cop/rails/link_to_blank.rb +0 -98
- data/lib/rubocop/cop/rails/not_null_column.rb +0 -67
- data/lib/rubocop/cop/rails/output.rb +0 -49
- data/lib/rubocop/cop/rails/output_safety.rb +0 -99
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +0 -107
- data/lib/rubocop/cop/rails/presence.rb +0 -124
- data/lib/rubocop/cop/rails/present.rb +0 -153
- data/lib/rubocop/cop/rails/read_write_attribute.rb +0 -74
- data/lib/rubocop/cop/rails/redundant_allow_nil.rb +0 -111
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +0 -136
- data/lib/rubocop/cop/rails/reflection_class_name.rb +0 -37
- data/lib/rubocop/cop/rails/refute_methods.rb +0 -76
- data/lib/rubocop/cop/rails/relative_date_constant.rb +0 -93
- data/lib/rubocop/cop/rails/request_referer.rb +0 -56
- data/lib/rubocop/cop/rails/reversible_migration.rb +0 -286
- data/lib/rubocop/cop/rails/safe_navigation.rb +0 -87
- data/lib/rubocop/cop/rails/save_bang.rb +0 -316
- data/lib/rubocop/cop/rails/scope_args.rb +0 -29
- data/lib/rubocop/cop/rails/skips_model_validations.rb +0 -87
- data/lib/rubocop/cop/rails/time_zone.rb +0 -238
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +0 -105
- data/lib/rubocop/cop/rails/unknown_env.rb +0 -63
- data/lib/rubocop/cop/rails/validation.rb +0 -109
- data/lib/rubocop/rspec/shared_examples.rb +0 -59
@@ -57,24 +57,20 @@ module RuboCop
|
|
57
57
|
MSG = 'Use `%<preferred>s` instead of `%<bad>s`.'
|
58
58
|
|
59
59
|
def on_resbody(node)
|
60
|
-
|
61
|
-
return unless
|
62
|
-
|
63
|
-
@exception_name ||= exception_type.children.first
|
64
|
-
return if @exception_name.const_type? ||
|
65
|
-
variable_name == preferred_name
|
60
|
+
name = variable_name(node)
|
61
|
+
return unless name
|
62
|
+
return if preferred_name(name).to_sym == name
|
66
63
|
|
67
64
|
add_offense(node, location: offense_range(node))
|
68
65
|
end
|
69
66
|
|
70
67
|
def autocorrect(node)
|
71
68
|
lambda do |corrector|
|
72
|
-
offending_name = node
|
69
|
+
offending_name = variable_name(node)
|
70
|
+
preferred_name = preferred_name(offending_name)
|
73
71
|
corrector.replace(offense_range(node), preferred_name)
|
74
72
|
|
75
|
-
|
76
|
-
|
77
|
-
node.body.each_descendant(:lvar) do |var|
|
73
|
+
node.body&.each_descendant(:lvar) do |var|
|
78
74
|
next unless var.children.first == offending_name
|
79
75
|
|
80
76
|
corrector.replace(var.loc.expression, preferred_name)
|
@@ -89,24 +85,26 @@ module RuboCop
|
|
89
85
|
variable.loc.expression
|
90
86
|
end
|
91
87
|
|
92
|
-
def preferred_name
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
88
|
+
def preferred_name(variable_name)
|
89
|
+
preferred_name = cop_config.fetch('PreferredName', 'e')
|
90
|
+
if variable_name.to_s.start_with?('_')
|
91
|
+
"_#{preferred_name}"
|
92
|
+
else
|
93
|
+
preferred_name
|
97
94
|
end
|
98
95
|
end
|
99
96
|
|
100
|
-
def variable_name
|
101
|
-
|
102
|
-
|
97
|
+
def variable_name(node)
|
98
|
+
asgn_node = node.exception_variable
|
99
|
+
return unless asgn_node
|
103
100
|
|
104
|
-
|
105
|
-
@exception_name.loc.expression
|
101
|
+
asgn_node.children.last
|
106
102
|
end
|
107
103
|
|
108
|
-
def message(
|
109
|
-
|
104
|
+
def message(node)
|
105
|
+
offending_name = variable_name(node)
|
106
|
+
preferred_name = preferred_name(offending_name)
|
107
|
+
format(MSG, preferred: preferred_name, bad: offending_name)
|
110
108
|
end
|
111
109
|
end
|
112
110
|
end
|
data/lib/rubocop/cop/offense.rb
CHANGED
@@ -67,23 +67,34 @@ module RuboCop
|
|
67
67
|
|
68
68
|
# @api public
|
69
69
|
#
|
70
|
-
# @!attribute [r] corrected
|
70
|
+
# @!attribute [r] corrected?
|
71
71
|
#
|
72
72
|
# @return [Boolean]
|
73
|
-
# whether this offense is automatically corrected
|
74
|
-
|
75
|
-
|
73
|
+
# whether this offense is automatically corrected via
|
74
|
+
# autocorrect or a todo.
|
75
|
+
def corrected?
|
76
|
+
@status == :corrected || @status == :corrected_with_todo
|
77
|
+
end
|
78
|
+
|
79
|
+
# @api public
|
80
|
+
#
|
81
|
+
# @!attribute [r] corrected_with_todo?
|
82
|
+
#
|
83
|
+
# @return [Boolean]
|
84
|
+
# whether this offense is automatically disabled via a todo.
|
85
|
+
def corrected_with_todo?
|
86
|
+
@status == :corrected_with_todo
|
76
87
|
end
|
77
|
-
alias corrected? corrected
|
78
88
|
|
79
89
|
# @api public
|
80
90
|
#
|
81
91
|
# @!attribute [r] disabled?
|
82
92
|
#
|
83
93
|
# @return [Boolean]
|
84
|
-
# whether this offense was locally disabled
|
94
|
+
# whether this offense was locally disabled with a
|
95
|
+
# disable or todo where it occurred.
|
85
96
|
def disabled?
|
86
|
-
@status == :disabled
|
97
|
+
@status == :disabled || @status == :todo
|
87
98
|
end
|
88
99
|
|
89
100
|
# @api public
|
data/lib/rubocop/cop/registry.rb
CHANGED
@@ -91,8 +91,11 @@ module RuboCop
|
|
91
91
|
# @note Emits a warning if the provided name has an incorrect namespace
|
92
92
|
#
|
93
93
|
# @return [String] Qualified cop name
|
94
|
-
def qualified_cop_name(name, path)
|
94
|
+
def qualified_cop_name(name, path, shall_warn = true)
|
95
95
|
badge = Badge.parse(name)
|
96
|
+
if shall_warn && department_missing?(badge, name)
|
97
|
+
print_warning(name, path)
|
98
|
+
end
|
96
99
|
return name if registered?(badge)
|
97
100
|
|
98
101
|
potential_badges = qualify_badge(badge)
|
@@ -104,6 +107,24 @@ module RuboCop
|
|
104
107
|
end
|
105
108
|
end
|
106
109
|
|
110
|
+
def department_missing?(badge, name)
|
111
|
+
!badge.qualified? && unqualified_cop_names.include?(name)
|
112
|
+
end
|
113
|
+
|
114
|
+
def print_warning(name, path)
|
115
|
+
message = "#{path}: Warning: no department given for #{name}."
|
116
|
+
if path.end_with?('.rb')
|
117
|
+
message += ' Run `rubocop -a --only Migration/DepartmentName` to fix.'
|
118
|
+
end
|
119
|
+
warn message
|
120
|
+
end
|
121
|
+
|
122
|
+
def unqualified_cop_names
|
123
|
+
@unqualified_cop_names ||=
|
124
|
+
Set.new(@cops_by_cop_name.keys.map { |qn| File.basename(qn) }) <<
|
125
|
+
'UnneededCopDisableDirective'
|
126
|
+
end
|
127
|
+
|
107
128
|
# @return [Hash{String => Array<Class>}]
|
108
129
|
def to_h
|
109
130
|
@cops_by_cop_name
|
@@ -21,7 +21,7 @@ module RuboCop
|
|
21
21
|
class MarshalLoad < Cop
|
22
22
|
MSG = 'Avoid using `Marshal.%<method>s`.'
|
23
23
|
|
24
|
-
def_node_matcher :marshal_load,
|
24
|
+
def_node_matcher :marshal_load, <<~PATTERN
|
25
25
|
(send (const {nil? cbase} :Marshal) ${:load :restore}
|
26
26
|
!(send (const {nil? cbase} :Marshal) :dump ...))
|
27
27
|
PATTERN
|
@@ -114,7 +114,8 @@ module RuboCop
|
|
114
114
|
|
115
115
|
def on_send(node)
|
116
116
|
return unless node.arguments?
|
117
|
-
return if node.parenthesized?
|
117
|
+
return if node.parenthesized?
|
118
|
+
return if node.operator_method? || node.assignment_method?
|
118
119
|
|
119
120
|
node.arguments.each do |arg|
|
120
121
|
get_blocks(arg) do |block|
|
@@ -55,10 +55,6 @@ module RuboCop
|
|
55
55
|
end
|
56
56
|
alias on_csend on_send
|
57
57
|
|
58
|
-
# We let AutocorrectUnlessChangingAST#autocorrect work with the send
|
59
|
-
# node, because that context is needed. When parsing the code to see if
|
60
|
-
# the AST has changed, a braceless hash would not be parsed as a hash
|
61
|
-
# otherwise.
|
62
58
|
def autocorrect(send_node)
|
63
59
|
hash_node = send_node.last_argument
|
64
60
|
|
@@ -76,20 +72,32 @@ module RuboCop
|
|
76
72
|
private
|
77
73
|
|
78
74
|
def check(arg, args)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
75
|
+
case style
|
76
|
+
when :braces
|
77
|
+
check_braces(arg)
|
78
|
+
when :no_braces
|
79
|
+
check_no_braces(arg)
|
80
|
+
when :context_dependent
|
84
81
|
check_context_dependent(arg, args)
|
85
82
|
end
|
86
83
|
end
|
87
84
|
|
85
|
+
def check_braces(arg)
|
86
|
+
add_arg_offense(arg, :missing) unless arg.braces?
|
87
|
+
end
|
88
|
+
|
89
|
+
def check_no_braces(arg)
|
90
|
+
return unless arg.braces? && !braces_needed_for_semantics?(arg)
|
91
|
+
|
92
|
+
add_arg_offense(arg, :redundant)
|
93
|
+
end
|
94
|
+
|
88
95
|
def check_context_dependent(arg, args)
|
89
96
|
braces_around_second_from_end = args.size > 1 && args[-2].hash_type?
|
90
97
|
|
91
98
|
if arg.braces?
|
92
|
-
unless braces_around_second_from_end
|
99
|
+
unless braces_around_second_from_end ||
|
100
|
+
braces_needed_for_semantics?(arg)
|
93
101
|
add_arg_offense(arg, :redundant)
|
94
102
|
end
|
95
103
|
elsif braces_around_second_from_end
|
@@ -97,6 +105,17 @@ module RuboCop
|
|
97
105
|
end
|
98
106
|
end
|
99
107
|
|
108
|
+
# Returns true if there's block inside the braces of the given hash arg
|
109
|
+
# and that block uses do..end. The reason for wanting to check this is
|
110
|
+
# that the do..end could bind to a different method invocation if the
|
111
|
+
# hash braces were removed.
|
112
|
+
def braces_needed_for_semantics?(arg)
|
113
|
+
arg.each_pair do |_key, value|
|
114
|
+
return true if value.block_type? && !value.braces?
|
115
|
+
end
|
116
|
+
false
|
117
|
+
end
|
118
|
+
|
100
119
|
def add_arg_offense(arg, type)
|
101
120
|
add_offense(arg.parent, location: arg.source_range,
|
102
121
|
message: format(MSG,
|
@@ -6,7 +6,8 @@ module RuboCop
|
|
6
6
|
# This cop checks for comments put on the same line as some keywords.
|
7
7
|
# These keywords are: `begin`, `class`, `def`, `end`, `module`.
|
8
8
|
#
|
9
|
-
# Note that some comments
|
9
|
+
# Note that some comments
|
10
|
+
# (`:nodoc:`, `:yields:`, `rubocop:disable` and `rubocop:todo`)
|
10
11
|
# are allowed.
|
11
12
|
#
|
12
13
|
# @example
|
@@ -33,53 +34,38 @@ module RuboCop
|
|
33
34
|
# y
|
34
35
|
# end
|
35
36
|
class CommentedKeyword < Cop
|
36
|
-
include RangeHelp
|
37
|
-
|
38
37
|
MSG = 'Do not place comments on the same line as the ' \
|
39
38
|
'`%<keyword>s` keyword.'
|
40
39
|
|
41
40
|
def investigate(processed_source)
|
42
|
-
heredoc_lines = extract_heredoc_lines(processed_source.ast)
|
43
|
-
|
44
41
|
processed_source.each_comment do |comment|
|
45
|
-
|
46
|
-
line_position = location.line
|
47
|
-
line = processed_source.lines[line_position - 1]
|
48
|
-
next if heredoc_lines.any? { |r| r.include?(line_position) }
|
49
|
-
next unless offensive?(line)
|
50
|
-
|
51
|
-
range = source_range(processed_source.buffer,
|
52
|
-
line_position,
|
53
|
-
(location.column)...(location.last_column))
|
54
|
-
|
55
|
-
add_offense(range, location: range)
|
42
|
+
add_offense(comment) if offensive?(comment)
|
56
43
|
end
|
57
44
|
end
|
58
45
|
|
59
46
|
private
|
60
47
|
|
61
48
|
KEYWORDS = %w[begin class def end module].freeze
|
62
|
-
ALLOWED_COMMENTS = %w[
|
49
|
+
ALLOWED_COMMENTS = %w[
|
50
|
+
:nodoc:
|
51
|
+
:yields:
|
52
|
+
rubocop:disable
|
53
|
+
rubocop:todo
|
54
|
+
].freeze
|
63
55
|
|
64
|
-
def offensive?(
|
65
|
-
line = line
|
66
|
-
KEYWORDS.any? { |word| line =~
|
56
|
+
def offensive?(comment)
|
57
|
+
line = line(comment)
|
58
|
+
KEYWORDS.any? { |word| line =~ /^\s*#{word}\s/ } &&
|
67
59
|
ALLOWED_COMMENTS.none? { |c| line =~ /#\s*#{c}/ }
|
68
60
|
end
|
69
61
|
|
70
|
-
def message(
|
71
|
-
|
72
|
-
keyword = /^\s*(\S+).*#/.match(line)[1]
|
62
|
+
def message(comment)
|
63
|
+
keyword = line(comment).match(/(\S+).*#/)[1]
|
73
64
|
format(MSG, keyword: keyword)
|
74
65
|
end
|
75
66
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
ast.each_node(:str, :dstr, :xstr).select(&:heredoc?).map do |node|
|
80
|
-
body = node.location.heredoc_body
|
81
|
-
(body.first_line...body.last_line)
|
82
|
-
end
|
67
|
+
def line(comment)
|
68
|
+
comment.location.expression.source_line
|
83
69
|
end
|
84
70
|
end
|
85
71
|
end
|
@@ -68,16 +68,16 @@ module RuboCop
|
|
68
68
|
private
|
69
69
|
|
70
70
|
def expand_elsif(node, elsif_branches = [])
|
71
|
-
return [] if node.nil? || !node.if_type?
|
71
|
+
return [] if node.nil? || !node.if_type? || !node.elsif?
|
72
72
|
|
73
73
|
elsif_branches << node.if_branch
|
74
74
|
|
75
|
-
|
76
|
-
|
75
|
+
else_branch = node.else_branch
|
76
|
+
if else_branch&.if_type? && else_branch&.elsif?
|
77
|
+
expand_elsif(else_branch, elsif_branches)
|
77
78
|
else
|
78
|
-
elsif_branches <<
|
79
|
+
elsif_branches << else_branch
|
79
80
|
end
|
80
|
-
elsif_branches
|
81
81
|
end
|
82
82
|
|
83
83
|
def lhs_for_send(node)
|
@@ -219,11 +219,9 @@ module RuboCop
|
|
219
219
|
SINGLE_LINE_CONDITIONS_ONLY = 'SingleLineConditionsOnly'
|
220
220
|
WIDTH = 'Width'
|
221
221
|
|
222
|
-
def_node_matcher :condition?, '{if case}'
|
223
|
-
|
224
222
|
# The shovel operator `<<` does not have its own type. It is a `send`
|
225
223
|
# type.
|
226
|
-
def_node_matcher :assignment_type?,
|
224
|
+
def_node_matcher :assignment_type?, <<~PATTERN
|
227
225
|
{
|
228
226
|
#{ASSIGNMENT_TYPES.join(' ')}
|
229
227
|
(send _recv {:[]= :<< :=~ :!~ :<=> #end_with_eq?} ...)
|
@@ -596,7 +594,8 @@ module RuboCop
|
|
596
594
|
|
597
595
|
remove_whitespace_in_branches(corrector, branch, condition, column)
|
598
596
|
|
599
|
-
branch_else = branch.parent.loc.else
|
597
|
+
return unless (branch_else = branch.parent.loc.else)
|
598
|
+
|
600
599
|
corrector.remove_preceding(branch_else, branch_else.column - column)
|
601
600
|
end
|
602
601
|
end
|
@@ -46,7 +46,14 @@ module RuboCop
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def class_or_module_scope?(node)
|
49
|
-
|
49
|
+
return false unless node.parent
|
50
|
+
|
51
|
+
case node.parent.type
|
52
|
+
when :begin
|
53
|
+
class_or_module_scope?(node.parent)
|
54
|
+
when :class, :module
|
55
|
+
true
|
56
|
+
end
|
50
57
|
end
|
51
58
|
|
52
59
|
def visibility_declaration?(node)
|
@@ -57,9 +64,13 @@ module RuboCop
|
|
57
64
|
end
|
58
65
|
end
|
59
66
|
|
60
|
-
def_node_matcher :visibility_declaration_for?,
|
61
|
-
(send nil? {:public_constant :private_constant} ({sym str} %1))
|
67
|
+
def_node_matcher :visibility_declaration_for?, <<~PATTERN
|
68
|
+
(send nil? {:public_constant :private_constant} ({sym str} #match_name?(%1)))
|
62
69
|
PATTERN
|
70
|
+
|
71
|
+
def match_name?(name, constant_name)
|
72
|
+
name.to_sym == constant_name.to_sym
|
73
|
+
end
|
63
74
|
end
|
64
75
|
end
|
65
76
|
end
|