Class: RuboCop::Cop::Lint::UnneededDisable
- Includes:
- NameSimilarity
- Defined in:
- lib/rubocop/cop/lint/unneeded_disable.rb
Overview
This cop detects instances of rubocop:disable comments that can be removed without causing any offenses to be reported. It’s implemented as a cop in that it inherits from the Cop base class and calls add_offense. The unusual part of its implementation is that it doesn’t have any on_* methods or an investigate method. This means that it doesn’t take part in the investigation phase when the other cops do their work. Instead, it waits until it’s called in a later stage of the execution. The reason it can’t be implemented as a normal cop is that it depends on the results of all other cops to do its work.
Constant Summary collapse
- COP_NAME =
'Lint/UnneededDisable'.freeze
Constants included from NameSimilarity
NameSimilarity::MINIMUM_SIMILARITY_TO_SUGGEST
Constants included from Util
Util::ASGN_NODES, Util::BYTE_ORDER_MARK, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offenses, #processed_source
Instance Method Summary collapse
Methods included from NameSimilarity
Methods inherited from Cop
#add_offense, all, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, cop_type, #correct, #debug?, #details, #display_cop_names?, #display_style_guide?, #excluded_file?, #extra_details?, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, non_rails, #parse, qualified_cop_name, #reference_url, #relevant_file?, #style_guide_url, #target_ruby_version
Methods included from Sexp
Methods included from NodePattern::Macros
#def_node_matcher, #def_node_search, #node_search_body
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
begins_its_line?, block_length, comment_line?, directions, double_quotes_acceptable?, double_quotes_required?, effective_column, ends_its_line?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, move_pos, needs_escaping?, numeric_range_size, on_node, operator?, parentheses?, parenthesized_call?, range_with_surrounding_comma, range_with_surrounding_space, source_range, strip_quotes, to_string_literal, to_symbol_literal, within_node?
Methods included from PathUtil
absolute?, match_path?, relative_path
Constructor Details
This class inherits a constructor from RuboCop::Cop::Cop
Instance Method Details
#autocorrect(args) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/rubocop/cop/lint/unneeded_disable.rb', line 32 def autocorrect(args) lambda do |corrector| ranges, range = *args # Ranges are sorted by position. if range.source.start_with?('#') # Eat the entire comment, the preceding space, and the preceding # newline if there is one. original_begin = range.begin_pos range = range_with_surrounding_space(range, :left, true) range = range_with_surrounding_space(range, :right, # Special for a comment that # begins the file: remove # the newline at the end. original_begin == 0) else # Is there any cop between this one and the end of the line, which # is NOT being removed? if ends_its_line?(ranges.last) && trailing_range?(ranges, range) # Eat the comma on the left. range = range_with_surrounding_space(range, :left) range = range_with_surrounding_comma(range, :left) end range = range_with_surrounding_comma(range, :right) # Eat following spaces up to EOL, but not the newline itself. range = range_with_surrounding_space(range, :right, false) end corrector.remove(range) end end |
#check(offenses, cop_disabled_line_ranges, comments) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/rubocop/cop/lint/unneeded_disable.rb', line 21 def check(offenses, cop_disabled_line_ranges, comments) unneeded_cops = Hash.new { |h, k| h[k] = Set.new } each_unneeded_disable(cop_disabled_line_ranges, offenses, comments) do |comment, unneeded_cop| unneeded_cops[comment].add(unneeded_cop) end add_offenses(unneeded_cops) end |