Class: Steep::Source::IgnoreRanges

Inherits:
Object
  • Object
show all
Defined in:
lib/steep/source/ignore_ranges.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ignores:) ⇒ IgnoreRanges

Returns a new instance of IgnoreRanges.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/steep/source/ignore_ranges.rb', line 6

def initialize(ignores:)
  @all_ignores = ignores.sort_by(&:line)
  @error_ignores = []

  @ignored_lines = {}
  @ignored_ranges = []

  last_start = nil #: AST::Ignore::IgnoreStart?

  all_ignores.each do |ignore|
    case ignore
    when AST::Ignore::IgnoreStart
      if last_start
        error_ignores << last_start
      end
      last_start = ignore
    when AST::Ignore::IgnoreEnd
      if last_start
        ignored_ranges << [last_start, ignore]
        last_start = nil
      else
        error_ignores << ignore
      end
    when AST::Ignore::IgnoreLine
      if last_start
        error_ignores << ignore
      else
        ignored_lines[ignore.line] = ignore
      end
    end
  end

  if last_start
    error_ignores << last_start
  end
end

Instance Attribute Details

#all_ignoresObject (readonly)

Returns the value of attribute all_ignores.



4
5
6
# File 'lib/steep/source/ignore_ranges.rb', line 4

def all_ignores
  @all_ignores
end

#error_ignoresObject (readonly)

Returns the value of attribute error_ignores.



4
5
6
# File 'lib/steep/source/ignore_ranges.rb', line 4

def error_ignores
  @error_ignores
end

#ignored_linesObject (readonly)

Returns the value of attribute ignored_lines.



4
5
6
# File 'lib/steep/source/ignore_ranges.rb', line 4

def ignored_lines
  @ignored_lines
end

#ignored_rangesObject (readonly)

Returns the value of attribute ignored_ranges.



4
5
6
# File 'lib/steep/source/ignore_ranges.rb', line 4

def ignored_ranges
  @ignored_ranges
end

Instance Method Details

#each_ignore(&block) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/steep/source/ignore_ranges.rb', line 43

def each_ignore(&block)
  if block
    ignored_ranges.each(&block)
    ignored_lines.each_value(&block)
  else
    enum_for(:each_ignore)
  end
end

#ignore?(start_line, end_line, code) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/steep/source/ignore_ranges.rb', line 52

def ignore?(start_line, end_line, code)
  if ignore = ignored_lines.fetch(start_line, nil)
    ignore_code?(ignore, code) and return ignore
  end

  if start_line != end_line
    if ignore = ignored_lines.fetch(end_line, nil)
      ignore_code?(ignore, code) and return ignore
    end
  end

  ignored_ranges.find do |ignore_start, ignore_end|
    range = ignore_start.line..ignore_end.line
    range.cover?(start_line) && range.cover?(end_line)
  end
end

#ignore_code?(line, code) ⇒ Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
76
# File 'lib/steep/source/ignore_ranges.rb', line 69

def ignore_code?(line, code)
  case diags = line.ignored_diagnostics
  when Symbol
    true
  else
    diags.any? {|d| code == "Ruby::#{d}" }
  end
end