Class: Temill::Emitters::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/temill/emitter.rb

Direct Known Subclasses

DirectoryEmitter, StdoutEmitter, StringEmitter

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Base

Returns a new instance of Base.



7
8
9
# File 'lib/temill/emitter.rb', line 7

def initialize(options)
  @options = options
end

Instance Method Details

#annotation(ip, output_line_for_caller) ⇒ Object



39
40
41
42
43
# File 'lib/temill/emitter.rb', line 39

def annotation(ip, output_line_for_caller)
  "temill showing #{ip.results.size} results" +
    " for line #{ip.caller_lineno}" +
    " (line #{output_line_for_caller} in this output)"
end

#call(source_files) ⇒ Object

Parameters:



16
17
18
# File 'lib/temill/emitter.rb', line 16

def call(source_files)
  execute(source_files)
end

#emit_for_source_file(sf, out_f) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/temill/emitter.rb', line 20

def emit_for_source_file(sf, out_f)
  lines_map = [] # map source lineno to output lineno
  compact_ranges = sf.insertion_points.map{| ip | ip.caller_lineno .. ip.emitter_lineno }
  printer = Printer.new(out_f, **@options)
  sf.each_source_line{| line,i |
    lines_map[i] = printer.lineno
    printer.print_raw(line) if not @options[:compact] or compact_ranges.any?{| r | r.cover?(i) }
    if ips = sf.insertion_points.at_emitter_lineno(i)
      ips.each{| ip |
        printer.indent = ip.indent
        printer.print_str(annotation(ip, lines_map[ip.caller_lineno]))
        ip.results.each{| obj |
          printer.print(obj)
        }
      }
    end
  }
end

#execute(source_files) ⇒ Object

Parameters:



12
13
# File 'lib/temill/emitter.rb', line 12

def execute(source_files)
end