[libclang/python] Expose clang_getCursorLanguage via Cursor.language (#152897)
This commit is contained in:
parent
e72335192d
commit
e20dd94bb3
@ -1907,6 +1907,15 @@ class Cursor(Structure):
|
||||
|
||||
return LinkageKind.from_id(self._linkage)
|
||||
|
||||
@property
|
||||
@cursor_null_guard
|
||||
def language(self) -> LanguageKind:
|
||||
"""Determine the "language" of the entity referred to by a given cursor."""
|
||||
if not hasattr(self, "_language"):
|
||||
self._language = conf.lib.clang_getCursorLanguage(self)
|
||||
|
||||
return LanguageKind.from_id(self._language)
|
||||
|
||||
@property
|
||||
@cursor_null_guard
|
||||
def tls_kind(self) -> TLSKind:
|
||||
@ -2584,6 +2593,17 @@ class LinkageKind(BaseEnumeration):
|
||||
EXTERNAL = 4
|
||||
|
||||
|
||||
class LanguageKind(BaseEnumeration):
|
||||
"""
|
||||
Describe the "language" of the entity referred to by a cursor.
|
||||
"""
|
||||
|
||||
INVALID = 0
|
||||
C = 1
|
||||
OBJ_C = 2
|
||||
C_PLUS_PLUS = 3
|
||||
|
||||
|
||||
class TLSKind(BaseEnumeration):
|
||||
"""Describes the kind of thread-local storage (TLS) of a cursor."""
|
||||
|
||||
@ -4084,6 +4104,7 @@ FUNCTION_LIST: list[LibFunc] = [
|
||||
("clang_getCursorDisplayName", [Cursor], _CXString),
|
||||
("clang_getCursorExceptionSpecificationType", [Cursor], c_int),
|
||||
("clang_getCursorExtent", [Cursor], SourceRange),
|
||||
("clang_getCursorLanguage", [Cursor], c_int),
|
||||
("clang_getCursorLexicalParent", [Cursor], Cursor),
|
||||
("clang_getCursorLinkage", [Cursor], c_int),
|
||||
("clang_getCursorLocation", [Cursor], SourceLocation),
|
||||
|
||||
27
clang/bindings/python/tests/cindex/test_cursor_language.py
Normal file
27
clang/bindings/python/tests/cindex/test_cursor_language.py
Normal file
@ -0,0 +1,27 @@
|
||||
import os
|
||||
|
||||
from clang.cindex import Config, LanguageKind
|
||||
|
||||
if "CLANG_LIBRARY_PATH" in os.environ:
|
||||
Config.set_library_path(os.environ["CLANG_LIBRARY_PATH"])
|
||||
|
||||
import unittest
|
||||
|
||||
from .util import get_cursor, get_tu
|
||||
|
||||
|
||||
class TestCursorLanguage(unittest.TestCase):
|
||||
def test_c(self):
|
||||
tu = get_tu("int a;", lang="c")
|
||||
main_func = get_cursor(tu.cursor, "a")
|
||||
self.assertEqual(main_func.language, LanguageKind.C)
|
||||
|
||||
def test_c(self):
|
||||
tu = get_tu("class Cls {};", lang="cpp")
|
||||
main_func = get_cursor(tu.cursor, "Cls")
|
||||
self.assertEqual(main_func.language, LanguageKind.C_PLUS_PLUS)
|
||||
|
||||
def test_obj_c(self):
|
||||
tu = get_tu("@interface If : NSObject", lang="objc")
|
||||
main_func = get_cursor(tu.cursor, "If")
|
||||
self.assertEqual(main_func.language, LanguageKind.OBJ_C)
|
||||
@ -6,6 +6,7 @@ from clang.cindex import (
|
||||
BinaryOperator,
|
||||
CursorKind,
|
||||
ExceptionSpecificationKind,
|
||||
LanguageKind,
|
||||
LinkageKind,
|
||||
RefQualifierKind,
|
||||
StorageClass,
|
||||
@ -26,6 +27,7 @@ class TestEnums(unittest.TestCase):
|
||||
AccessSpecifier,
|
||||
TypeKind,
|
||||
RefQualifierKind,
|
||||
LanguageKind,
|
||||
LinkageKind,
|
||||
TLSKind,
|
||||
StorageClass,
|
||||
|
||||
@ -309,6 +309,7 @@ Sanitizers
|
||||
|
||||
Python Binding Changes
|
||||
----------------------
|
||||
- Exposed `clang_getCursorLanguage` via `Cursor.language`.
|
||||
|
||||
OpenMP Support
|
||||
--------------
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user