diff options
author | Tobias Grosser <grosser@fim.uni-passau.de> | 2012-02-05 11:41:58 +0000 |
---|---|---|
committer | Tobias Grosser <grosser@fim.uni-passau.de> | 2012-02-05 11:41:58 +0000 |
commit | ea403825faa5b8780a9b44277e6a2c68d7849146 (patch) | |
tree | f482c45407acfd00e3c13da957d71cf2a2cb1bab /bindings/python | |
parent | 74858335a1a5205b3e1c89ecf9221cea839c0b0b (diff) |
[clang.py] Expose diagnostic category and option info to Python binding
Contributed by: Gregory Szorc <gregory.szorc@gmail.com>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149825 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings/python')
-rw-r--r-- | bindings/python/clang/cindex.py | 37 | ||||
-rw-r--r-- | bindings/python/tests/cindex/test_diagnostics.py | 34 |
2 files changed, 68 insertions, 3 deletions
diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py index 474740a64d..e385ca2893 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -267,6 +267,29 @@ class Diagnostic(object): return FixItIterator(self) + @property + def category_number(self): + """The category number for this diagnostic.""" + return _clang_getDiagnosticCategory(self) + + @property + def category_name(self): + """The string name of the category for this diagnostic.""" + return _clang_getDiagnosticCategoryName(self.category_number) + + @property + def option(self): + """The command-line option that enables this diagnostic.""" + return _clang_getDiagnosticOption(self, None) + + @property + def disable_option(self): + """The command-line option that disables this diagnostic.""" + disable = _CXString() + _clang_getDiagnosticOption(self, byref(disable)) + + return _CXString_getCString(disable) + def __repr__(self): return "<Diagnostic severity %r, location %r, spelling %r>" % ( self.severity, self.location, self.spelling) @@ -1205,6 +1228,20 @@ _clang_getDiagnosticFixIt.argtypes = [Diagnostic, c_uint, POINTER(SourceRange)] _clang_getDiagnosticFixIt.restype = _CXString _clang_getDiagnosticFixIt.errcheck = _CXString.from_result +_clang_getDiagnosticCategory = lib.clang_getDiagnosticCategory +_clang_getDiagnosticCategory.argtypes = [Diagnostic] +_clang_getDiagnosticCategory.restype = c_uint + +_clang_getDiagnosticCategoryName = lib.clang_getDiagnosticCategoryName +_clang_getDiagnosticCategoryName.argtypes = [c_uint] +_clang_getDiagnosticCategoryName.restype = _CXString +_clang_getDiagnosticCategoryName.errcheck = _CXString.from_result + +_clang_getDiagnosticOption = lib.clang_getDiagnosticOption +_clang_getDiagnosticOption.argtypes = [Diagnostic, POINTER(_CXString)] +_clang_getDiagnosticOption.restype = _CXString +_clang_getDiagnosticOption.errcheck = _CXString.from_result + ### class CompletionChunk: diff --git a/bindings/python/tests/cindex/test_diagnostics.py b/bindings/python/tests/cindex/test_diagnostics.py index 98f97d3bd3..b9872d9ce9 100644 --- a/bindings/python/tests/cindex/test_diagnostics.py +++ b/bindings/python/tests/cindex/test_diagnostics.py @@ -1,8 +1,13 @@ from clang.cindex import * -def tu_from_source(source): +def tu_from_source(source, all_warnings=False): + args = [] + if all_warnings: + args = ['-Wall', '-Wextra'] + index = Index.create() - tu = index.parse('INPUT.c', unsaved_files = [('INPUT.c', source)]) + tu = index.parse('INPUT.c', args=args, + unsaved_files = [('INPUT.c', source)]) return tu # FIXME: We need support for invalid translation units to test better. @@ -65,5 +70,28 @@ def test_diagnostic_range(): assert True else: assert False - + +def test_diagnostic_category(): + # Ensure that category properties work. + index = Index.create() + tu = tu_from_source("""int f(int i) { return 7; }""", all_warnings=True) + assert len(tu.diagnostics) == 1 + d = tu.diagnostics[0] + + assert d.severity == Diagnostic.Warning + assert d.location.line == 1 + assert d.location.column == 11 + + assert d.category_number == 2 + assert d.category_name == 'Semantic Issue' + +def test_diagnostic_option(): + # Ensure that category option properties work. + index = Index.create() + tu = tu_from_source("""int f(int i) { return 7; }""", all_warnings=True) + assert len(tu.diagnostics) == 1 + d = tu.diagnostics[0] + + assert d.option == '-Wunused-parameter' + assert d.disable_option == '-Wno-unused-parameter' |