-
Notifications
You must be signed in to change notification settings - Fork 14.9k
[libclang/python] Return None instead of null cursors from Token.cursor #163183
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-clang Author: Jannick Kremer (DeinAlptraum) ChangesSince #138103 , the Fixes #163180 Full diff: https://github.com/llvm/llvm-project/pull/163183.diff 3 Files Affected:
diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 80140d2787608..da97bd375608c 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3939,6 +3939,8 @@ def cursor(self):
cursor._tu = self._tu
conf.lib.clang_annotateTokens(self._tu, byref(self), 1, byref(cursor))
+ if cursor.is_null():
+ return None
return cursor
diff --git a/clang/bindings/python/tests/cindex/test_tokens.py b/clang/bindings/python/tests/cindex/test_tokens.py
index b6c1fc8b83600..d1982164deca8 100644
--- a/clang/bindings/python/tests/cindex/test_tokens.py
+++ b/clang/bindings/python/tests/cindex/test_tokens.py
@@ -53,3 +53,11 @@ def test_token_extent(self):
self.assertEqual(extent.start.offset, 4)
self.assertEqual(extent.end.offset, 7)
+
+ def test_null_cursor(self):
+ """Ensure that null cursors are converted to None by get_tokens"""
+ tu = get_tu("int i = 5;")
+ tokens = list(tu.get_tokens(extent=tu.cursor.extent))
+ for token in tokens:
+ print(token.spelling, token.kind, token.extent)
+ self.assertEqual(tokens[-1].cursor, None)
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 65b086caf3652..b32009309c1cb 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -136,6 +136,7 @@ Clang Frontend Potentially Breaking Changes
Clang Python Bindings Potentially Breaking Changes
--------------------------------------------------
+- Return ``None`` instead of null cursors from ``Token.cursor``
- TypeKind ``ELABORATED`` is not used anymore, per clang AST changes removing
ElaboratedTypes. The value becomes unused, and all the existing users should
expect the former underlying type to be reported instead.
|
I talked to Aaron about backporting, and this should be fine to backport. |
Okay, so I get it into the 21.x branch by calling the cherry-pick command in a comment here? |
…or (llvm#163183) Since llvm#138103 , the `Cursor` class throws an error when any of its methods is called on a null cursor. Simultaneously, we adapted all methods to return `None` instead of a null cursor, so users should not encounter these. We have overlooked one way to end up with null cursors, namely the `Token.cursor` property, which may return null cursors under some circumstances. Fixes llvm#163180
/cherry-pick 38a5282 |
Error: Command failed due to missing milestone. |
/cherry-pick 38a5282 |
Failed to cherry-pick: 38a5282 https://github.com/llvm/llvm-project/actions/runs/18593736643 Please manually backport the fix and push it to your github fork. Once this is done, please create a pull request |
…or (llvm#163183) Since llvm#138103 , the `Cursor` class throws an error when any of its methods is called on a null cursor. Simultaneously, we adapted all methods to return `None` instead of a null cursor, so users should not encounter these. We have overlooked one way to end up with null cursors, namely the `Token.cursor` property, which may return null cursors under some circumstances. Fixes llvm#163180
Fixed the release note conflcit manually and opened a PR at #163961 |
…or (llvm#163183) Since llvm#138103 , the `Cursor` class throws an error when any of its methods is called on a null cursor. Simultaneously, we adapted all methods to return `None` instead of a null cursor, so users should not encounter these. We have overlooked one way to end up with null cursors, namely the `Token.cursor` property, which may return null cursors under some circumstances. Fixes llvm#163180
Since #138103 , the
Cursor
class throws an error when any of its methods is called on a null cursor. Simultaneously, we adapted all methods to returnNone
instead of a null cursor, so users should not encounter these. We have overlooked one way to end up with null cursors, namely theToken.cursor
property, which may return null cursors under some circumstances.Fixes #163180