https://github.com/DeinAlptraum updated 
https://github.com/llvm/llvm-project/pull/160296

>From 930402a752c87d84b961bb2192d6efa732bf7ad9 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Tue, 23 Sep 2025 22:26:44 +0900
Subject: [PATCH 01/15] Use existing AvailabilityKind enum for code completion
 availability

---
 clang/bindings/python/clang/cindex.py | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index 2b6ab00c88219..8bee77424d1f4 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3051,6 +3051,16 @@ class _CXUnsavedFile(Structure):
 }
 
 
+# Converting the new enum names (full upper-case, underscore separated)
+# to the old ones (separated by capitalization), e.g. RESULT_TYPE -> ResultType
+def _kind_to_old_name(kind: BaseEnumeration):
+    # Remove underscores
+    components = kind.name.split("_")
+    # Upper-camel case each split component
+    components = [component.lower().capitalize() for component in components]
+    return "".join(components)
+
+
 class CompletionChunk:
     class Kind:
         def __init__(self, name: str):
@@ -3177,9 +3187,9 @@ def priority(self) -> int:
         return conf.lib.clang_getCompletionPriority(self.obj)  # type: ignore 
[no-any-return]
 
     @property
-    def availability(self) -> CompletionChunk.Kind:
+    def availability(self) -> AvailabilityKind:
         res = conf.lib.clang_getCompletionAvailability(self.obj)
-        return availabilityKinds[res]
+        return AvailabilityKind.from_id(res)
 
     @property
     def briefComment(self) -> str:
@@ -3191,20 +3201,12 @@ def __repr__(self) -> str:
             + " || Priority: "
             + str(self.priority)
             + " || Availability: "
-            + str(self.availability)
+            + _kind_to_old_name(self.availability)
             + " || Brief comment: "
             + str(self.briefComment)
         )
 
 
-availabilityKinds = {
-    0: CompletionChunk.Kind("Available"),
-    1: CompletionChunk.Kind("Deprecated"),
-    2: CompletionChunk.Kind("NotAvailable"),
-    3: CompletionChunk.Kind("NotAccessible"),
-}
-
-
 class CodeCompletionResult(Structure):
     _fields_ = [("cursorKind", c_int), ("completionString", c_object_p)]
 

>From d6649a3f0f5c3b135db65a30d676c6dd47ce5bef Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Wed, 24 Sep 2025 22:18:25 +0900
Subject: [PATCH 02/15] Turn comment into docstring

---
 clang/bindings/python/clang/cindex.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index 8bee77424d1f4..989ba5ada2f0a 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3051,9 +3051,11 @@ class _CXUnsavedFile(Structure):
 }
 
 
-# Converting the new enum names (full upper-case, underscore separated)
-# to the old ones (separated by capitalization), e.g. RESULT_TYPE -> ResultType
 def _kind_to_old_name(kind: BaseEnumeration):
+    """
+    Converting the new enum names (full upper-case, underscore separated)
+    to the old ones (separated by capitalization), e.g. RESULT_TYPE -> 
ResultType
+    """
     # Remove underscores
     components = kind.name.split("_")
     # Upper-camel case each split component

>From 802224da0c86a8bca476e8fdf0e37ae3dc243ccf Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Wed, 24 Sep 2025 17:02:44 +0200
Subject: [PATCH 03/15] Update clang/bindings/python/clang/cindex.py

Co-authored-by: Vlad Serebrennikov <[email protected]>
---
 clang/bindings/python/clang/cindex.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index 989ba5ada2f0a..fddddfa570a8e 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3051,7 +3051,7 @@ class _CXUnsavedFile(Structure):
 }
 
 
-def _kind_to_old_name(kind: BaseEnumeration):
+def _convert_screaming_caps_to_pascal_case(kind: BaseEnumeration):
     """
     Converting the new enum names (full upper-case, underscore separated)
     to the old ones (separated by capitalization), e.g. RESULT_TYPE -> 
ResultType

>From a8cc996a3dfa24a2c3a66868324bfd58557f0d06 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sun, 4 Jan 2026 17:24:03 +0900
Subject: [PATCH 04/15] Remove unused CompletionString.Availability

---
 clang/bindings/python/clang/cindex.py | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index fddddfa570a8e..b376465c8738b 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3155,16 +3155,6 @@ def isKindResultType(self) -> bool:
 
 
 class CompletionString(ClangObject):
-    class Availability:
-        def __init__(self, name):
-            self.name = name
-
-        def __str__(self):
-            return self.name
-
-        def __repr__(self):
-            return "<Availability: %s>" % self
-
     def __len__(self) -> int:
         return self.num_chunks
 

>From b01d045f216489b8b9ce475cb50daa2b21d6e3dc Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sun, 4 Jan 2026 17:27:23 +0900
Subject: [PATCH 05/15] Pass string instead of enum variant to converter

---
 clang/bindings/python/clang/cindex.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index b376465c8738b..6a2e54aed5c53 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3051,13 +3051,13 @@ class _CXUnsavedFile(Structure):
 }
 
 
-def _convert_screaming_caps_to_pascal_case(kind: BaseEnumeration):
+def _convert_screaming_caps_to_pascal_case(kind: str):
     """
     Converting the new enum names (full upper-case, underscore separated)
     to the old ones (separated by capitalization), e.g. RESULT_TYPE -> 
ResultType
     """
     # Remove underscores
-    components = kind.name.split("_")
+    components = kind.split("_")
     # Upper-camel case each split component
     components = [component.lower().capitalize() for component in components]
     return "".join(components)
@@ -3193,7 +3193,7 @@ def __repr__(self) -> str:
             + " || Priority: "
             + str(self.priority)
             + " || Availability: "
-            + _kind_to_old_name(self.availability)
+            + _convert_screaming_caps_to_pascal_case(self.availability.name)
             + " || Brief comment: "
             + str(self.briefComment)
         )

>From 49507d2f96c43e2d877f97a20fd4b99d6b7ec314 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Mon, 5 Jan 2026 01:17:33 +0900
Subject: [PATCH 06/15] Add AvailabilityKindCompat

---
 clang/bindings/python/clang/cindex.py         | 52 +++++++++++++------
 .../tests/cindex/test_code_completion.py      | 37 ++++++++++++-
 2 files changed, 72 insertions(+), 17 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index 6a2e54aed5c53..a51023c2d9c5d 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3051,18 +3051,6 @@ class _CXUnsavedFile(Structure):
 }
 
 
-def _convert_screaming_caps_to_pascal_case(kind: str):
-    """
-    Converting the new enum names (full upper-case, underscore separated)
-    to the old ones (separated by capitalization), e.g. RESULT_TYPE -> 
ResultType
-    """
-    # Remove underscores
-    components = kind.split("_")
-    # Upper-camel case each split component
-    components = [component.lower().capitalize() for component in components]
-    return "".join(components)
-
-
 class CompletionChunk:
     class Kind:
         def __init__(self, name: str):
@@ -3179,9 +3167,9 @@ def priority(self) -> int:
         return conf.lib.clang_getCompletionPriority(self.obj)  # type: ignore 
[no-any-return]
 
     @property
-    def availability(self) -> AvailabilityKind:
+    def availability(self) -> AvailabilityKindCompat:
         res = conf.lib.clang_getCompletionAvailability(self.obj)
-        return AvailabilityKind.from_id(res)
+        return AvailabilityKindCompat.from_id(res)
 
     @property
     def briefComment(self) -> str:
@@ -3193,11 +3181,45 @@ def __repr__(self) -> str:
             + " || Priority: "
             + str(self.priority)
             + " || Availability: "
-            + _convert_screaming_caps_to_pascal_case(self.availability.name)
+            + str(self.availability)
             + " || Brief comment: "
             + str(self.briefComment)
         )
 
+# AvailabilityKindCompat is an exact copy of AvailabilityKind, except for 
__str__
+# This is a temporary measure to keep the string representation the same
+# until we unify the return of CompletionString.availability to be 
AvailabilityKind
+# Note that deriving from AvailabilityKind directly is not possible
+class AvailabilityKindCompat(BaseEnumeration):
+    """
+    Describes the availability of an entity.
+    """
+
+    # Ensure AvailabilityKindCompat is comparable with AvailabilityKind
+    def __eq__(self, other: object) -> bool:
+        if isinstance(other, AvailabilityKind):
+            return self.value == other.value
+        else:
+            return NotImplemented
+
+    def __str__(self) -> str:
+        """
+        Returns the common enum names (full upper-case, underscore separated)
+        to the old format (separated by capitalization), e.g. NOT_ACCESSIBLE 
-> NotAccessible
+        This is a temporary measure and will be changed in a future release
+        to return the same format (full upper-case, underscore separated) like 
other Kinds
+        """
+        # Remove underscores
+        components = self.name.split("_")
+        # Upper-camel case each split component
+        components = [component.lower().capitalize() for component in 
components]
+        return "".join(components)
+
+    AVAILABLE = 0
+    DEPRECATED = 1
+    NOT_AVAILABLE = 2
+    NOT_ACCESSIBLE = 3
+
 
 class CodeCompletionResult(Structure):
     _fields_ = [("cursorKind", c_int), ("completionString", c_object_p)]
diff --git a/clang/bindings/python/tests/cindex/test_code_completion.py 
b/clang/bindings/python/tests/cindex/test_code_completion.py
index 32b75eb1ae029..f2ebc7ab73fcd 100644
--- a/clang/bindings/python/tests/cindex/test_code_completion.py
+++ b/clang/bindings/python/tests/cindex/test_code_completion.py
@@ -1,5 +1,4 @@
-from clang.cindex import TranslationUnit
-
+from clang.cindex import TranslationUnit, AvailabilityKind, 
AvailabilityKindCompat
 
 import unittest
 from pathlib import Path
@@ -137,3 +136,37 @@ class Q : public P {
             "{'void', ResultType} | {'~P', TypedText} | {'(', LeftParen} | 
{')', RightParen} || Priority: 79 || Availability: Available || Brief comment: 
",
         ]
         self.check_completion_results(cr, expected)
+
+    def test_availability_kind_compat_(self):
+        numKinds = len(AvailabilityKindCompat)
+
+        # Compare with regular kind
+        for compatKind in AvailabilityKindCompat:
+            commonKind = AvailabilityKind.from_id(compatKind.value)
+            nextKindId = (compatKind.value+1) % numKinds
+            commonKindUnequal= AvailabilityKind.from_id(nextKindId)
+            self.assertEqual(commonKind, compatKind)
+            self.assertEqual(compatKind, commonKind)
+            self.assertNotEqual(commonKindUnequal, compatKind)
+            self.assertNotEqual(compatKind, commonKindUnequal)
+
+        # Compare two compat kinds
+        for compatKind in AvailabilityKindCompat:
+            compatKind2 = AvailabilityKindCompat.from_id(compatKind.value)
+            nextKindId = (compatKind.value+1) % numKinds
+            compatKind2Unequal = AvailabilityKind.from_id(nextKindId)
+            self.assertEqual(compatKind, compatKind2)
+            self.assertEqual(compatKind2, compatKind)
+            self.assertNotEqual(compatKind2Unequal, compatKind)
+            self.assertNotEqual(compatKind, compatKind2Unequal)
+
+    def test_compat_str(self):
+        kindStringMap = {
+            0: "Available",
+            1: "Deprecated",
+            2: "NotAvailable",
+            3: "NotAccessible",
+        }
+        for id, string in kindStringMap.items():
+            kind = AvailabilityKindCompat.from_id(id)
+            self.assertEqual(str(kind), string)

>From 8fb54316b75a350268a4306bdcebc80ae630f6c9 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Mon, 5 Jan 2026 01:36:47 +0900
Subject: [PATCH 07/15] Add deprecation warning

---
 clang/bindings/python/clang/cindex.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index a51023c2d9c5d..ebb3a4f538c5c 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -84,6 +84,7 @@
 import os
 import sys
 from enum import Enum
+import warnings
 
 from typing import (
     Any,
@@ -3186,6 +3187,7 @@ def __repr__(self) -> str:
             + str(self.briefComment)
         )
 
+
 # AvailabilityKindCompat is an exact copy of AvailabilityKind, except for 
__str__
 # This is a temporary measure to keep the string representation the same
 # until we unify the return of CompletionString.availability to be 
AvailabilityKind
@@ -3209,6 +3211,14 @@ def __str__(self) -> str:
         This is a temporary measure and will be changed in a future release
         to return the same format (full upper-case, underscore separated) like 
other Kinds
         """
+
+        warnings.warn(
+            "The CompletionString.availability's return value will be changed 
in "
+            "a future release to be unified with other kinds. As a result, its 
string "
+            "representations will change to full upper-case, prefixed with the 
class name "
+            "(e.g. NotAvailable -> AvailabilityKind.NOT_AVAILABLE).",
+            DeprecationWarning,
+        )
         # Remove underscores
         components = self.name.split("_")
         # Upper-camel case each split component

>From bc84caf3cb6b2bdb3e09ee34dbdaad91b010c3ac Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Mon, 5 Jan 2026 01:48:29 +0900
Subject: [PATCH 08/15] Fix enums test

---
 clang/bindings/python/tests/cindex/test_enums.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/clang/bindings/python/tests/cindex/test_enums.py 
b/clang/bindings/python/tests/cindex/test_enums.py
index 0d3453e602edf..d290686b5ee71 100644
--- a/clang/bindings/python/tests/cindex/test_enums.py
+++ b/clang/bindings/python/tests/cindex/test_enums.py
@@ -4,6 +4,7 @@
 from clang.cindex import (
     AccessSpecifier,
     AvailabilityKind,
+    AvailabilityKindCompat,
     BinaryOperator,
     CursorKind,
     ExceptionSpecificationKind,
@@ -22,7 +23,10 @@
 
 
 class TestEnums(unittest.TestCase):
+    # Test all enum classes, except for AvailabilityKindCompat since it is
+    # just a copy of AvailabilityKind and has no corresponding C-class
     enums = BaseEnumeration.__subclasses__()
+    enums.remove(AvailabilityKindCompat)
 
     def test_from_id(self):
         """Check that kinds can be constructed from valid IDs"""

>From 2d5878292557faff241bbb8fc616717773fd6bfa Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Mon, 5 Jan 2026 01:52:13 +0900
Subject: [PATCH 09/15] Fix formatting

---
 clang/bindings/python/tests/cindex/test_code_completion.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang/bindings/python/tests/cindex/test_code_completion.py 
b/clang/bindings/python/tests/cindex/test_code_completion.py
index f2ebc7ab73fcd..6e12077a35bde 100644
--- a/clang/bindings/python/tests/cindex/test_code_completion.py
+++ b/clang/bindings/python/tests/cindex/test_code_completion.py
@@ -143,8 +143,8 @@ def test_availability_kind_compat_(self):
         # Compare with regular kind
         for compatKind in AvailabilityKindCompat:
             commonKind = AvailabilityKind.from_id(compatKind.value)
-            nextKindId = (compatKind.value+1) % numKinds
-            commonKindUnequal= AvailabilityKind.from_id(nextKindId)
+            nextKindId = (compatKind.value + 1) % numKinds
+            commonKindUnequal = AvailabilityKind.from_id(nextKindId)
             self.assertEqual(commonKind, compatKind)
             self.assertEqual(compatKind, commonKind)
             self.assertNotEqual(commonKindUnequal, compatKind)
@@ -153,7 +153,7 @@ def test_availability_kind_compat_(self):
         # Compare two compat kinds
         for compatKind in AvailabilityKindCompat:
             compatKind2 = AvailabilityKindCompat.from_id(compatKind.value)
-            nextKindId = (compatKind.value+1) % numKinds
+            nextKindId = (compatKind.value + 1) % numKinds
             compatKind2Unequal = AvailabilityKind.from_id(nextKindId)
             self.assertEqual(compatKind, compatKind2)
             self.assertEqual(compatKind2, compatKind)

>From 19bd1be33f035b093276ba6ad32a1f92ae23723f Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sat, 17 Jan 2026 18:57:05 +0900
Subject: [PATCH 10/15] Improve documentation according to review comments

---
 clang/bindings/python/clang/cindex.py | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index ebb3a4f538c5c..760657acafae4 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3187,14 +3187,15 @@ def __repr__(self) -> str:
             + str(self.briefComment)
         )
 
-
-# AvailabilityKindCompat is an exact copy of AvailabilityKind, except for 
__str__
+# AvailabilityKindCompat is an exact copy of AvailabilityKind, except for 
__str__.
 # This is a temporary measure to keep the string representation the same
-# until we unify the return of CompletionString.availability to be 
AvailabilityKind
-# Note that deriving from AvailabilityKind directly is not possible
+# until we change CompletionString.availability to return AvailabilityKind,
+# like Cursor.availability does.
+# Note that deriving from AvailabilityKind directly is not possible.
 class AvailabilityKindCompat(BaseEnumeration):
     """
     Describes the availability of an entity.
+    It is deprecated in favor of AvailabilityKind.
     """
 
     # Ensure AvailabilityKindCompat is comparable with AvailabilityKind
@@ -3206,17 +3207,17 @@ def __eq__(self, other: object) -> bool:
 
     def __str__(self) -> str:
         """
-        Returns the common enum names (full upper-case, underscore separated)
-        to the old format (separated by capitalization), e.g. NOT_ACCESSIBLE 
-> NotAccessible
-        This is a temporary measure and will be changed in a future release
-        to return the same format (full upper-case, underscore separated) like 
other Kinds
+        Converts enum value to string in the old camelCase format.
+        This is a temporary measure that will be changed in the future release
+        to return string in ALL_CAPS format, like for other enums.
         """
 
         warnings.warn(
-            "The CompletionString.availability's return value will be changed 
in "
-            "a future release to be unified with other kinds. As a result, its 
string "
-            "representations will change to full upper-case, prefixed with the 
class name "
-            "(e.g. NotAvailable -> AvailabilityKind.NOT_AVAILABLE).",
+            "String representation of 'CompletionString.availability' will be "
+            "changed in a future release from 'camelCase' to 'ALL_CAPS' to "
+            "match other enums. 'CompletionString.availability' can be "
+            "compared to 'AvailabilityKind' directly, "
+            "without conversion to string.",
             DeprecationWarning,
         )
         # Remove underscores

>From 1a1bfb416f83b882dac5d23e51b337f9f4ea8b8b Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sat, 17 Jan 2026 18:57:57 +0900
Subject: [PATCH 11/15] Reformat test imports

---
 clang/bindings/python/tests/cindex/test_code_completion.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/bindings/python/tests/cindex/test_code_completion.py 
b/clang/bindings/python/tests/cindex/test_code_completion.py
index 6e12077a35bde..02a9aa6597c15 100644
--- a/clang/bindings/python/tests/cindex/test_code_completion.py
+++ b/clang/bindings/python/tests/cindex/test_code_completion.py
@@ -1,4 +1,4 @@
-from clang.cindex import TranslationUnit, AvailabilityKind, 
AvailabilityKindCompat
+from clang.cindex import AvailabilityKind, AvailabilityKindCompat, 
TranslationUnit
 
 import unittest
 from pathlib import Path

>From f30a3e311ac494a67772eafd639f64d378d42f37 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sat, 17 Jan 2026 19:07:57 +0900
Subject: [PATCH 12/15] Fix test

---
 clang/bindings/python/tests/cindex/test_code_completion.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/bindings/python/tests/cindex/test_code_completion.py 
b/clang/bindings/python/tests/cindex/test_code_completion.py
index 02a9aa6597c15..d438115c1d054 100644
--- a/clang/bindings/python/tests/cindex/test_code_completion.py
+++ b/clang/bindings/python/tests/cindex/test_code_completion.py
@@ -154,7 +154,7 @@ def test_availability_kind_compat_(self):
         for compatKind in AvailabilityKindCompat:
             compatKind2 = AvailabilityKindCompat.from_id(compatKind.value)
             nextKindId = (compatKind.value + 1) % numKinds
-            compatKind2Unequal = AvailabilityKind.from_id(nextKindId)
+            compatKind2Unequal = AvailabilityKindCompat.from_id(nextKindId)
             self.assertEqual(compatKind, compatKind2)
             self.assertEqual(compatKind2, compatKind)
             self.assertNotEqual(compatKind2Unequal, compatKind)

>From c716885f201f40d06277faf8c3a0d6c81a7cd898 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sat, 17 Jan 2026 19:09:01 +0900
Subject: [PATCH 13/15] Fix isinstance check

---
 clang/bindings/python/clang/cindex.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index 760657acafae4..6936d3130078e 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3200,7 +3200,7 @@ class AvailabilityKindCompat(BaseEnumeration):
 
     # Ensure AvailabilityKindCompat is comparable with AvailabilityKind
     def __eq__(self, other: object) -> bool:
-        if isinstance(other, AvailabilityKind):
+        if isinstance(other, (AvailabilityKind, AvailabilityKindCompat)):
             return self.value == other.value
         else:
             return NotImplemented

>From 51cceb35ae906cdd93e9338f80d076fc212dc8f5 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sat, 17 Jan 2026 19:15:25 +0900
Subject: [PATCH 14/15] Move AvailabilityKindCompat into CompletionString

---
 clang/bindings/python/clang/cindex.py         | 91 ++++++++++---------
 .../tests/cindex/test_code_completion.py      | 14 +--
 .../python/tests/cindex/test_enums.py         |  4 +-
 3 files changed, 55 insertions(+), 54 deletions(-)

diff --git a/clang/bindings/python/clang/cindex.py 
b/clang/bindings/python/clang/cindex.py
index 6936d3130078e..b1a0b159f5262 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -3144,6 +3144,51 @@ def isKindResultType(self) -> bool:
 
 
 class CompletionString(ClangObject):
+    # AvailabilityKindCompat is an exact copy of AvailabilityKind, except for 
__str__.
+    # This is a temporary measure to keep the string representation the same
+    # until we change CompletionString.availability to return AvailabilityKind,
+    # like Cursor.availability does.
+    # Note that deriving from AvailabilityKind directly is not possible.
+    class AvailabilityKindCompat(BaseEnumeration):
+        """
+        Describes the availability of an entity.
+        It is deprecated in favor of AvailabilityKind.
+        """
+
+        # Ensure AvailabilityKindCompat is comparable with AvailabilityKind
+        def __eq__(self, other: object) -> bool:
+            if isinstance(other, (AvailabilityKind, 
CompletionString.AvailabilityKindCompat)):
+                return self.value == other.value
+            else:
+                return NotImplemented
+
+        def __str__(self) -> str:
+            """
+            Converts enum value to string in the old camelCase format.
+            This is a temporary measure that will be changed in the future 
release
+            to return string in ALL_CAPS format, like for other enums.
+            """
+
+            warnings.warn(
+                "String representation of 'CompletionString.availability' will 
be "
+                "changed in a future release from 'camelCase' to 'ALL_CAPS' to 
"
+                "match other enums. 'CompletionString.availability' can be "
+                "compared to 'AvailabilityKind' directly, "
+                "without conversion to string.",
+                DeprecationWarning,
+            )
+            # Remove underscores
+            components = self.name.split("_")
+            # Upper-camel case each split component
+            components = [component.lower().capitalize() for component in 
components]
+            return "".join(components)
+
+        AVAILABLE = 0
+        DEPRECATED = 1
+        NOT_AVAILABLE = 2
+        NOT_ACCESSIBLE = 3
+
+
     def __len__(self) -> int:
         return self.num_chunks
 
@@ -3170,7 +3215,7 @@ def priority(self) -> int:
     @property
     def availability(self) -> AvailabilityKindCompat:
         res = conf.lib.clang_getCompletionAvailability(self.obj)
-        return AvailabilityKindCompat.from_id(res)
+        return CompletionString.AvailabilityKindCompat.from_id(res)
 
     @property
     def briefComment(self) -> str:
@@ -3187,50 +3232,6 @@ def __repr__(self) -> str:
             + str(self.briefComment)
         )
 
-# AvailabilityKindCompat is an exact copy of AvailabilityKind, except for 
__str__.
-# This is a temporary measure to keep the string representation the same
-# until we change CompletionString.availability to return AvailabilityKind,
-# like Cursor.availability does.
-# Note that deriving from AvailabilityKind directly is not possible.
-class AvailabilityKindCompat(BaseEnumeration):
-    """
-    Describes the availability of an entity.
-    It is deprecated in favor of AvailabilityKind.
-    """
-
-    # Ensure AvailabilityKindCompat is comparable with AvailabilityKind
-    def __eq__(self, other: object) -> bool:
-        if isinstance(other, (AvailabilityKind, AvailabilityKindCompat)):
-            return self.value == other.value
-        else:
-            return NotImplemented
-
-    def __str__(self) -> str:
-        """
-        Converts enum value to string in the old camelCase format.
-        This is a temporary measure that will be changed in the future release
-        to return string in ALL_CAPS format, like for other enums.
-        """
-
-        warnings.warn(
-            "String representation of 'CompletionString.availability' will be "
-            "changed in a future release from 'camelCase' to 'ALL_CAPS' to "
-            "match other enums. 'CompletionString.availability' can be "
-            "compared to 'AvailabilityKind' directly, "
-            "without conversion to string.",
-            DeprecationWarning,
-        )
-        # Remove underscores
-        components = self.name.split("_")
-        # Upper-camel case each split component
-        components = [component.lower().capitalize() for component in 
components]
-        return "".join(components)
-
-    AVAILABLE = 0
-    DEPRECATED = 1
-    NOT_AVAILABLE = 2
-    NOT_ACCESSIBLE = 3
-
 
 class CodeCompletionResult(Structure):
     _fields_ = [("cursorKind", c_int), ("completionString", c_object_p)]
diff --git a/clang/bindings/python/tests/cindex/test_code_completion.py 
b/clang/bindings/python/tests/cindex/test_code_completion.py
index d438115c1d054..c082a004df766 100644
--- a/clang/bindings/python/tests/cindex/test_code_completion.py
+++ b/clang/bindings/python/tests/cindex/test_code_completion.py
@@ -1,4 +1,4 @@
-from clang.cindex import AvailabilityKind, AvailabilityKindCompat, 
TranslationUnit
+from clang.cindex import AvailabilityKind, CompletionString, TranslationUnit
 
 import unittest
 from pathlib import Path
@@ -138,10 +138,10 @@ class Q : public P {
         self.check_completion_results(cr, expected)
 
     def test_availability_kind_compat_(self):
-        numKinds = len(AvailabilityKindCompat)
+        numKinds = len(CompletionString.AvailabilityKindCompat)
 
         # Compare with regular kind
-        for compatKind in AvailabilityKindCompat:
+        for compatKind in CompletionString.AvailabilityKindCompat:
             commonKind = AvailabilityKind.from_id(compatKind.value)
             nextKindId = (compatKind.value + 1) % numKinds
             commonKindUnequal = AvailabilityKind.from_id(nextKindId)
@@ -151,10 +151,10 @@ def test_availability_kind_compat_(self):
             self.assertNotEqual(compatKind, commonKindUnequal)
 
         # Compare two compat kinds
-        for compatKind in AvailabilityKindCompat:
-            compatKind2 = AvailabilityKindCompat.from_id(compatKind.value)
+        for compatKind in CompletionString.AvailabilityKindCompat:
+            compatKind2 = 
CompletionString.AvailabilityKindCompat.from_id(compatKind.value)
             nextKindId = (compatKind.value + 1) % numKinds
-            compatKind2Unequal = AvailabilityKindCompat.from_id(nextKindId)
+            compatKind2Unequal = 
CompletionString.AvailabilityKindCompat.from_id(nextKindId)
             self.assertEqual(compatKind, compatKind2)
             self.assertEqual(compatKind2, compatKind)
             self.assertNotEqual(compatKind2Unequal, compatKind)
@@ -168,5 +168,5 @@ def test_compat_str(self):
             3: "NotAccessible",
         }
         for id, string in kindStringMap.items():
-            kind = AvailabilityKindCompat.from_id(id)
+            kind = CompletionString.AvailabilityKindCompat.from_id(id)
             self.assertEqual(str(kind), string)
diff --git a/clang/bindings/python/tests/cindex/test_enums.py 
b/clang/bindings/python/tests/cindex/test_enums.py
index d290686b5ee71..f50bd219cee77 100644
--- a/clang/bindings/python/tests/cindex/test_enums.py
+++ b/clang/bindings/python/tests/cindex/test_enums.py
@@ -4,8 +4,8 @@
 from clang.cindex import (
     AccessSpecifier,
     AvailabilityKind,
-    AvailabilityKindCompat,
     BinaryOperator,
+    CompletionString,
     CursorKind,
     ExceptionSpecificationKind,
     LanguageKind,
@@ -26,7 +26,7 @@ class TestEnums(unittest.TestCase):
     # Test all enum classes, except for AvailabilityKindCompat since it is
     # just a copy of AvailabilityKind and has no corresponding C-class
     enums = BaseEnumeration.__subclasses__()
-    enums.remove(AvailabilityKindCompat)
+    enums.remove(CompletionString.AvailabilityKindCompat)
 
     def test_from_id(self):
         """Check that kinds can be constructed from valid IDs"""

>From 82def13cc64f71a06b9dccd8de0ae0bca5c93bf4 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <[email protected]>
Date: Sat, 17 Jan 2026 19:30:44 +0900
Subject: [PATCH 15/15] Add release note

---
 clang/docs/ReleaseNotes.rst | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 4d886c3d55e7c..3c3afb8077957 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -54,6 +54,19 @@ Clang Frontend Potentially Breaking Changes
 
 Clang Python Bindings Potentially Breaking Changes
 --------------------------------------------------
+- Remove ``CompletionString.Availability``. No libclang interfaces returned 
instances of it.
+- Remove ``CompletionString.Kind`` and its container, ``availabilityKinds``.
+  ``CompletionString.availability`` now returns instances of 
``CompletionString.AvailabilityKindCompat``.
+
+  Instances of ``AvailabilityKindCompat`` have the same ``__str__`` 
representation
+  as the previous ``CompletionString.Kind``s and are equality-compatible with
+  the existing ``AvailabilityKind`` enum. It will be replaced by 
``AvailabilityKind``
+  in a future release. When this happens, the return type of 
``CompletionString.availability``
+  will change to ``AvailabilityKind``, so it is recommended to use 
``AvailabilityKind``
+  to compare with the return values of ``CompletionString.availability``.
+
+  In this release, uses of ``availabilityKinds`` need to be replaced by
+  ``CompletionString.AvailabilityKindCompat``.
 
 What's New in Clang |release|?
 ==============================

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to