Class: JSON5::DiagnosticSink

Inherits:
Object
  • Object
show all
Defined in:
lib/json5/diagnostic.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target, filename: nil) ⇒ DiagnosticSink

Returns a new instance of DiagnosticSink.



45
46
47
48
# File 'lib/json5/diagnostic.rb', line 45

def initialize(target, filename: nil)
  @target = target
  @filename = filename
end

Class Method Details

.build(target, filename: nil) ⇒ Object



37
38
39
# File 'lib/json5/diagnostic.rb', line 37

def self.build(target, filename: nil)
  new(target, filename: filename)
end

.write_default_warning(diagnostic) ⇒ Object



41
42
43
# File 'lib/json5/diagnostic.rb', line 41

def self.write_default_warning(diagnostic)
  Warning.warn("#{diagnostic.message} (#{diagnostic.code})\n")
end

Instance Method Details

#emit(code:, message:, byte_offset:, end_byte_offset:, line: nil, column: nil) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/json5/diagnostic.rb', line 50

def emit(code:, message:, byte_offset:, end_byte_offset:, line: nil, column: nil)
  diagnostic = Diagnostic.new(
    code: code,
    message: message,
    filename: @filename,
    byte_offset: byte_offset,
    end_byte_offset: end_byte_offset,
    line: line,
    column: column
  )
  if @target.is_a?(Array)
    @target << diagnostic
  elsif @target.respond_to?(:call)
    @target.call(diagnostic)
  elsif @target != :ignore
    self.class.write_default_warning(diagnostic)
  end
  diagnostic
end