Module: WhyClasses::DisableComments
- Defined in:
- lib/why_classes/disable_comments.rb
Overview
Honours inline suppression comments:
# why-classes:disable RuleA, RuleB (whole file)
# why-classes:disable-line RuleA (that line only)
A bare disable/disable-line with no rule names (or all) suppresses
every rule.
Defined Under Namespace
Classes: Directives
Constant Summary collapse
- DIRECTIVE =
/#\s*why-classes:disable(?<line>-line)?\s*(?<rules>[\w:,\s]*)$/
Class Method Summary collapse
Class Method Details
.filter(offenses, comments) ⇒ Object
47 48 49 50 |
# File 'lib/why_classes/disable_comments.rb', line 47 def filter(offenses, comments) directives = parse(comments) offenses.select { |offense| directives.allow?(offense) } end |
.parse(comments) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/why_classes/disable_comments.rb', line 28 def parse(comments) file_rules = [] line_rules = Hash.new { |h, k| h[k] = [] } comments.each do |comment| match = DIRECTIVE.match(comment.text) next unless match names = rule_names(match[:rules]) if match[:line] line_rules[comment.location.line].concat(names) else file_rules.concat(names) end end Directives.new(file_rules: file_rules.uniq, line_rules: line_rules.transform_values(&:uniq)) end |
.rule_names(raw) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/why_classes/disable_comments.rb', line 52 def rule_names(raw) names = raw.to_s.split(/[,\s]+/).reject(&:empty?) return [:all] if names.empty? || names.include?("all") names end |