class RuboCop::DirectiveComment
This class wraps the ‘Parser::Source::Comment` object that represents a special `rubocop:disable` and `rubocop:enable` comment and exposes what cops it contains.
Constants
- AVAILABLE_MODES
-
@api private
- COPS_PATTERN
-
@api private
- COP_NAMES_PATTERN
-
@api private
- COP_NAME_PATTERN
-
@api private
- DIRECTIVE_COMMENT_REGEXP
-
@api private
- DIRECTIVE_HEADER_PATTERN
-
@api private
- DIRECTIVE_MARKER_PATTERN
-
@api private
- DIRECTIVE_MARKER_REGEXP
-
@api private
- LINT_DEPARTMENT
-
@api private
- LINT_REDUNDANT_DIRECTIVE_COP
-
@api private
- LINT_SYNTAX_COP
-
@api private
- MALFORMED_DIRECTIVE_WITHOUT_COP_NAME_REGEXP
-
@api private
- TRAILING_COMMENT_MARKER
-
@api private
Attributes
Public Class Methods
Source
# File lib/rubocop/directive_comment.rb, line 40 def self.before_comment(line) line.split(DIRECTIVE_COMMENT_REGEXP).first end
Source
# File lib/rubocop/directive_comment.rb, line 46 def initialize(comment, cop_registry = Cop::Registry.global) @comment = comment @cop_registry = cop_registry @match_data = comment.text.match(DIRECTIVE_COMMENT_REGEXP) @mode, @cops = match_captures end
Public Instance Methods
Source
# File lib/rubocop/directive_comment.rb, line 115 def all_cops? cops == 'all' end
Checks if all cops specified in this directive
Source
# File lib/rubocop/directive_comment.rb, line 120 def cop_names @cop_names ||= all_cops? ? all_cop_names : parsed_cop_names end
Returns array of specified in this directive cop names
Source
# File lib/rubocop/directive_comment.rb, line 131 def department_names raw_cop_names.select { |cop| department?(cop) } end
Returns array of specified in this directive department names when all department disabled
Source
# File lib/rubocop/directive_comment.rb, line 145 def directive_count raw_cop_names.count end
Source
# File lib/rubocop/directive_comment.rb, line 95 def disabled? %w[disable todo].include?(mode) end
Checks if this directive disables cops
Source
# File lib/rubocop/directive_comment.rb, line 110 def disabled_all? disabled? && all_cops? end
Checks if this directive disables all cops
Source
# File lib/rubocop/directive_comment.rb, line 100 def enabled? mode == 'enable' end
Checks if this directive enables cops
Source
# File lib/rubocop/directive_comment.rb, line 105 def enabled_all? !disabled? && all_cops? end
Checks if this directive enables all cops
Source
# File lib/rubocop/directive_comment.rb, line 136 def in_directive_department?(cop) department_names.any? { |department| cop.start_with?(department) } end
Checks if directive departments include cop
Source
# File lib/rubocop/directive_comment.rb, line 150 def line_number comment.source_range.line end
Returns line number for directive
Source
# File lib/rubocop/directive_comment.rb, line 59 def malformed? return true if !start_with_marker? || @match_data.nil? tail = @match_data.post_match.lstrip !(tail.empty? || tail.start_with?(TRAILING_COMMENT_MARKER)) end
Checks if the comment is malformed as a ‘# rubocop:` directive
Source
# File lib/rubocop/directive_comment.rb, line 77 def match?(cop_names) parsed_cop_names.uniq.sort == cop_names.uniq.sort end
Checks if this directive contains all the given cop names
Source
# File lib/rubocop/directive_comment.rb, line 90 def match_captures @match_captures ||= @match_data&.captures end
Returns match captures to directive comment pattern
Source
# File lib/rubocop/directive_comment.rb, line 67 def missing_cop_name? MALFORMED_DIRECTIVE_WITHOUT_COP_NAME_REGEXP.match?(comment.text) end
Checks if the directive comment is missing a cop name
Source
# File lib/rubocop/directive_comment.rb, line 141 def overridden_by_department?(cop) in_directive_department?(cop) && raw_cop_names.include?(cop) end
Checks if cop department has already used in directive comment
Source
# File lib/rubocop/directive_comment.rb, line 81 def range match = comment.text.match(DIRECTIVE_COMMENT_REGEXP) begin_pos = comment.source_range.begin_pos Parser::Source::Range.new( comment.source_range.source_buffer, begin_pos + match.begin(0), begin_pos + match.end(0) ) end
Source
# File lib/rubocop/directive_comment.rb, line 125 def raw_cop_names @raw_cop_names ||= (cops || '').split(/,\s*/) end
Returns an array of cops for this directive comment, without resolving departments
Source
# File lib/rubocop/directive_comment.rb, line 72 def single_line? !comment.text.start_with?(DIRECTIVE_COMMENT_REGEXP) end
Checks if this directive relates to single line
Source
# File lib/rubocop/directive_comment.rb, line 54 def start_with_marker? comment.text.start_with?(DIRECTIVE_MARKER_REGEXP) end
Checks if the comment starts with ‘# rubocop:` marker
Private Instance Methods
Source
# File lib/rubocop/directive_comment.rb, line 167 def all_cop_names exclude_lint_department_cops(cop_registry.names) end
Source
# File lib/rubocop/directive_comment.rb, line 171 def cop_names_for_department(department) names = cop_registry.names_for_department(department) department == LINT_DEPARTMENT ? exclude_lint_department_cops(names) : names end
Source
# File lib/rubocop/directive_comment.rb, line 163 def department?(name) cop_registry.department?(name) end
Source
# File lib/rubocop/directive_comment.rb, line 176 def exclude_lint_department_cops(cops) cops - [LINT_REDUNDANT_DIRECTIVE_COP, LINT_SYNTAX_COP] end
Source
# File lib/rubocop/directive_comment.rb, line 156 def parsed_cop_names cops = raw_cop_names.map do |name| department?(name) ? cop_names_for_department(name) : name end.flatten cops - [LINT_SYNTAX_COP] end