forked from OSchip/llvm-project
python: add bindings for children of diagnostics
This exposes the Clang API bindings clang_getChildDiagnostics (which returns a CXDiagnosticSet) and clang_getNumDiagnosticsInSet / clang_getDiagnosticInSet (to traverse the CXDiagnosticSet), and adds a helper children property in the Python Diagnostic wrapper. Also, this adds the missing OVERLOAD_CANDIDATE (700) cursor type. Patch by Hanson Wang! llvm-svn: 268167
This commit is contained in:
parent
c179435055
commit
acc98ca43c
|
@ -359,6 +359,23 @@ class Diagnostic(object):
|
|||
|
||||
return FixItIterator(self)
|
||||
|
||||
@property
|
||||
def children(self):
|
||||
class ChildDiagnosticsIterator:
|
||||
def __init__(self, diag):
|
||||
self.diag_set = conf.lib.clang_getChildDiagnostics(diag)
|
||||
|
||||
def __len__(self):
|
||||
return int(conf.lib.clang_getNumDiagnosticsInSet(self.diag_set))
|
||||
|
||||
def __getitem__(self, key):
|
||||
diag = conf.lib.clang_getDiagnosticInSet(self.diag_set, key)
|
||||
if not diag:
|
||||
raise IndexError
|
||||
return Diagnostic(diag)
|
||||
|
||||
return ChildDiagnosticsIterator(self)
|
||||
|
||||
@property
|
||||
def category_number(self):
|
||||
"""The category number for this diagnostic or 0 if unavailable."""
|
||||
|
@ -1120,6 +1137,9 @@ CursorKind.MODULE_IMPORT_DECL = CursorKind(600)
|
|||
# A type alias template declaration
|
||||
CursorKind.TYPE_ALIAS_TEMPLATE_DECL = CursorKind(601)
|
||||
|
||||
# A code completion overload candidate.
|
||||
CursorKind.OVERLOAD_CANDIDATE = CursorKind(700)
|
||||
|
||||
### Template Argument Kinds ###
|
||||
class TemplateArgumentKind(BaseEnumeration):
|
||||
"""
|
||||
|
@ -3053,6 +3073,10 @@ functionList = [
|
|||
Type,
|
||||
Type.from_result),
|
||||
|
||||
("clang_getChildDiagnostics",
|
||||
[Diagnostic],
|
||||
c_object_p),
|
||||
|
||||
("clang_getCompletionAvailability",
|
||||
[c_void_p],
|
||||
c_int),
|
||||
|
@ -3173,6 +3197,10 @@ functionList = [
|
|||
_CXString,
|
||||
_CXString.from_result),
|
||||
|
||||
("clang_getDiagnosticInSet",
|
||||
[c_object_p, c_uint],
|
||||
c_object_p),
|
||||
|
||||
("clang_getDiagnosticLocation",
|
||||
[Diagnostic],
|
||||
SourceLocation),
|
||||
|
@ -3274,6 +3302,10 @@ functionList = [
|
|||
[c_object_p],
|
||||
c_uint),
|
||||
|
||||
("clang_getNumDiagnosticsInSet",
|
||||
[c_object_p],
|
||||
c_uint),
|
||||
|
||||
("clang_getNumElements",
|
||||
[Type],
|
||||
c_longlong),
|
||||
|
|
|
@ -80,3 +80,15 @@ def test_diagnostic_option():
|
|||
|
||||
assert d.option == '-Wunused-parameter'
|
||||
assert d.disable_option == '-Wno-unused-parameter'
|
||||
|
||||
def test_diagnostic_children():
|
||||
tu = get_tu('void f(int x) {} void g() { f(); }')
|
||||
assert len(tu.diagnostics) == 1
|
||||
d = tu.diagnostics[0]
|
||||
|
||||
children = d.children
|
||||
assert len(children) == 1
|
||||
assert children[0].severity == Diagnostic.Note
|
||||
assert children[0].spelling.endswith('declared here')
|
||||
assert children[0].location.line == 1
|
||||
assert children[0].location.column == 1
|
||||
|
|
Loading…
Reference in New Issue