lib/ffi/clang/diagnostic.rb in ffi-clang-0.2.0 vs lib/ffi/clang/diagnostic.rb in ffi-clang-0.2.1
- old
+ new
@@ -24,10 +24,14 @@
require 'ffi/clang/source_range'
module FFI
module Clang
class Diagnostic < AutoPointer
+ def self.default_display_opts
+ Lib.opts_from Lib::DiagnosticDisplayOptions, Lib.default_diagnostic_display_options
+ end
+
def initialize(translation_unit, pointer)
super pointer
@translation_unit = translation_unit
end
@@ -49,39 +53,61 @@
Lib.get_string Lib.get_diagnostic_spelling(self)
end
def location
sl = Lib.get_diagnostic_location(self)
- SourceLocation.new sl
+ ExpansionLocation.new sl
end
def fixits
- raise NotImplementedError
- # unsigned clang_getDiagnosticNumFixIts(CXDiagnostic Diag);
- # – CXString clang_getDiagnosticFixIt(CXDiagnostic Diag,
- # unsigned FixIt,
- # CXSourceRange *ReplacementRange);
+ n = Lib.get_diagnostic_num_fix_its(self)
+ n.times.map { |i|
+ ptr = MemoryPointer.new Lib::CXSourceRange
+ replace_text = Lib.extract_string(Lib.get_diagnostic_fix_it(self, i, ptr))
+ {text: replace_text, range: SourceRange.new(ptr)}
+ }
end
def ranges
n = Lib.get_diagnostic_num_ranges(self)
n.times.map {|i| SourceRange.new Lib.get_diagnostic_range(self, i)}
end
- private
+ def children
+ diagnostic_set = Lib.get_child_diagnostics(self)
+ num_diagnostics = Lib.get_num_diagnostics_in_set(diagnostic_set)
+ num_diagnostics.times.map { |i|
+ Diagnostic.new(@translation_unit, Lib.get_diagnostic_in_set(diagnostic_set, i))
+ }
+ end
- def range_count
-
+ def enable_option
+ Lib.extract_string Lib.get_diagnostic_option(self, nil)
end
+ def disable_option
+ ptr = MemoryPointer.new Lib::CXString
+ Lib.get_diagnostic_option(self, ptr)
+ Lib.extract_string ptr
+ end
+
+ def category
+ Lib.extract_string Lib.get_diagnostic_category_text(self)
+ end
+
+ def category_id
+ Lib.get_diagnostic_category(self)
+ end
+
+ private
+
def display_opts(opts)
if opts.empty?
Lib.default_diagnostic_display_options
else
Lib.bitmask_from Lib::DiagnosticDisplayOptions, opts
end
end
-
end
end
end