================
@@ -1913,7 +1916,7 @@ def type(self):
return self._type
@property
- def canonical(self):
+ def canonical(self) -> Cursor | None:
"""Return the canonical Cursor corresponding to this Cursor.
----------------
Endilll wrote:
> That said, the input to it comes from clang_getCanonicalCursor which does not
> seem to ever return the Null-Cursor
Are you sure? It seems that if you pass null cursor to it, you get null cursor
back:
https://github.com/llvm/llvm-project/blob/ec29f83a02841bb61df88f5fede0054f18c1b367/clang/tools/libclang/CIndex.cpp#L7438-L7440
> so we could theoretically constrain the return type here to just Cursor, by
> asserting isinstance(the_return_value, Cursor), but this is a bit ugly...
> what do you think?
Looking at `Cursor.from_cursor_result` and `Cursor.from_result`, it seems that
Python bindings make a serious effort to map null cursor to `None`. Which means
there should be no way to call `Cursor` methods on a null cursor. Which means
that `clang_getCanonicalCursor` will never return null cursor back. So I agree
that we should drop `| None` part of type hint.
Instead of the assert you propose, I think all `Cursor` methods should assert
that `self` is not a null cursor, and ideally avoid calling `getNullCursor` on
every method invocation. That said, we're already are not shy to call it in
`from_result` and `from_cursor_result`, so it might be an acceptable overhead.
https://github.com/llvm/llvm-project/pull/138103
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits