[clang] [libclang/python] Add equality comparison operators for File (PR #130383)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 7 19:02:07 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Jannick Kremer (DeinAlptraum)
<details>
<summary>Changes</summary>
This covers the `File` interface changes added by #<!-- -->120590
---
Full diff: https://github.com/llvm/llvm-project/pull/130383.diff
3 Files Affected:
- (modified) clang/bindings/python/clang/cindex.py (+7)
- (modified) clang/bindings/python/tests/cindex/test_file.py (+15)
- (modified) clang/docs/ReleaseNotes.rst (+1)
``````````diff
diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 879a0a3c5c58c..bc8fb7c27fdac 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3470,6 +3470,12 @@ def __str__(self):
def __repr__(self):
return "<File: %s>" % (self.name)
+ def __eq__(self, other) -> bool:
+ return isinstance(other, File) and bool(conf.lib.clang_File_isEqual(self, other))
+
+ def __ne__(self, other) -> bool:
+ return not self.__eq__(other)
+
@staticmethod
def from_result(res, arg):
assert isinstance(res, c_object_p)
@@ -3956,6 +3962,7 @@ def set_property(self, property, value):
("clang_getFile", [TranslationUnit, c_interop_string], c_object_p),
("clang_getFileName", [File], _CXString),
("clang_getFileTime", [File], c_uint),
+ ("clang_File_isEqual", [File, File], bool),
("clang_getIBOutletCollectionType", [Cursor], Type),
("clang_getIncludedFile", [Cursor], c_object_p),
(
diff --git a/clang/bindings/python/tests/cindex/test_file.py b/clang/bindings/python/tests/cindex/test_file.py
index 14a3084ee2b47..0e8431054e951 100644
--- a/clang/bindings/python/tests/cindex/test_file.py
+++ b/clang/bindings/python/tests/cindex/test_file.py
@@ -16,3 +16,18 @@ def test_file(self):
self.assertEqual(str(file), "t.c")
self.assertEqual(file.name, "t.c")
self.assertEqual(repr(file), "<File: t.c>")
+
+ def test_file_eq(self):
+ index = Index.create()
+ tu = index.parse(
+ "t.c",
+ unsaved_files=[
+ ("t.c", "int a = 729;"),
+ ("s.c", "int a = 729;"),
+ ],
+ )
+ file1 = File.from_name(tu, "t.c")
+ file2 = File.from_name(tu, "s.c")
+ self.assertEqual(file1, file1)
+ self.assertNotEqual(file1, file2)
+ self.assertNotEqual(file1, "t.c")
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index a25808e36bd51..a2f10f20ce716 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -444,6 +444,7 @@ Python Binding Changes
----------------------
- Added ``Type.get_methods``, a binding for ``clang_visitCXXMethods``, which
allows visiting the methods of a class.
+- Add equality comparison operators for ``File`` type
OpenMP Support
--------------
``````````
</details>
https://github.com/llvm/llvm-project/pull/130383
More information about the cfe-commits
mailing list