]> granicus.if.org Git - clang/commitdiff
python bindings: fix Diagnostics.range iterator
authorTobias Grosser <grosser@fim.uni-passau.de>
Sat, 5 Feb 2011 17:53:51 +0000 (17:53 +0000)
committerTobias Grosser <grosser@fim.uni-passau.de>
Sat, 5 Feb 2011 17:53:51 +0000 (17:53 +0000)
The iterator did never throw an IndexError. It was therefore not possible
to use it in a normal foreach loop as that loop would never stop.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124953 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/python/clang/cindex.py
bindings/python/tests/cindex/test_diagnostics.py

index c398656a0aaf058e4ff1f737864104d5e45055cf..ee0abd63151f84b7e4e7653c6afee075deef8610 100644 (file)
@@ -215,6 +215,8 @@ class Diagnostic(object):
                 return int(_clang_getDiagnosticNumRanges(self.diag))
 
             def __getitem__(self, key):
+               if (key >= len(self)):
+                       raise IndexError
                 return _clang_getDiagnosticRange(self.diag, key)
 
         return RangeIterator(self)
index 85187652917b5eea7d4ec654a40e64420636633a..33876cfd20b3e39b9c577afee63a7752da4ec80a 100644 (file)
@@ -46,3 +46,26 @@ def test_diagnostic_fixit():
     assert tu.diagnostics[0].fixits[0].range.end.line == 1
     assert tu.diagnostics[0].fixits[0].range.end.column == 30
     assert tu.diagnostics[0].fixits[0].value == '.f0 = '
+
+def test_diagnostic_range():
+    index = Index.create()
+    tu = tu_from_source("""void f() { int i = "a" + 1; }""")
+    assert len(tu.diagnostics) == 1
+    assert tu.diagnostics[0].severity == Diagnostic.Warning
+    assert tu.diagnostics[0].location.line == 1
+    assert tu.diagnostics[0].location.column == 16
+    assert tu.diagnostics[0].spelling.startswith('incompatible pointer to')
+    assert len(tu.diagnostics[0].fixits) == 0
+    assert len(tu.diagnostics[0].ranges) == 1
+    assert tu.diagnostics[0].ranges[0].start.line == 1
+    assert tu.diagnostics[0].ranges[0].start.column == 20
+    assert tu.diagnostics[0].ranges[0].end.line == 1
+    assert tu.diagnostics[0].ranges[0].end.column == 27
+    try:
+      tu.diagnostics[0].ranges[1].start.line
+    except IndexError:
+      assert True
+    else:
+      assert False
+      
+