[clang] [libclang/python] Derive library function types from annotations (PR #142120)
Jannick Kremer via cfe-commits
cfe-commits at lists.llvm.org
Fri May 30 03:56:16 PDT 2025
https://github.com/DeinAlptraum created https://github.com/llvm/llvm-project/pull/142120
This is a PoC for now
>From 4669be22f731faf9ce0985aa634166c30c7025c6 Mon Sep 17 00:00:00 2001
From: Jannick Kremer <jannick.kremer at mailbox.org>
Date: Fri, 30 May 2025 19:54:15 +0900
Subject: [PATCH] [libclang/python] Derive library function types from
annotations THis is a PoC for now
---
clang/bindings/python/clang/cindex.py | 833 ++++++++++++++++++--------
1 file changed, 583 insertions(+), 250 deletions(-)
diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 6f7243cdf80ac..889df2e2f0a87 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -78,6 +78,7 @@
c_void_p,
cast,
cdll,
+ _Pointer,
py_object,
)
@@ -93,6 +94,7 @@
Iterator,
Literal,
Optional,
+ Protocol,
Sequence,
Type as TType,
TypeVar,
@@ -101,8 +103,7 @@
)
if TYPE_CHECKING:
- from ctypes import _Pointer
- from typing_extensions import Protocol, TypeAlias
+ from typing_extensions import TypeAlias
StrPath: TypeAlias = TUnion[str, os.PathLike[str]]
LibFunc: TypeAlias = TUnion[
@@ -3986,256 +3987,588 @@ def set_property(self, property, value):
# Now comes the plumbing to hook up the C library.
# Register callback types
-translation_unit_includes_callback = CFUNCTYPE(
+translation_unit_includes_callback: TypeAlias = CFUNCTYPE( # type: ignore [valid-type]
None, c_object_p, POINTER(SourceLocation), c_uint, py_object
)
-cursor_visit_callback = CFUNCTYPE(c_int, Cursor, Cursor, py_object)
-fields_visit_callback = CFUNCTYPE(c_int, Cursor, py_object)
+cursor_visit_callback: TypeAlias = CFUNCTYPE(c_int, Cursor, Cursor, py_object) # type: ignore [valid-type]
+fields_visit_callback: TypeAlias = CFUNCTYPE(c_int, Cursor, py_object) # type: ignore [valid-type]
+
+
+def _get_annotations() -> list[LibFunc]:
+ def str_to_type(typename: str) -> type:
+ # The _Pointer types are instantiated dynamically at runtime
+ # so convert manually accordingly
+ if typename.startswith("_Pointer[") and typename.endswith("]"):
+ inner_type = typename[9:-1]
+ inner_mapped_type = str_to_type(inner_type)
+ return POINTER(inner_mapped_type)
+ return globals_flat[typename]
+
+ # Get all globally available names and flatten the builtins onto the
+ # top level of the dict. In the case of duplicates the builtin is
+ # overwritten with the non-builtin
+ gl = globals()
+ builtins = gl.pop("__builtins__")
+ globals_flat: dict[str, type] = {**builtins, **gl}
+
+ func_names = {attr for attr in vars(ClangLib) if attr.startswith("clang_")}
+ annotation_types: list[LibFunc] = []
+ for func_name in func_names:
+ annotation = getattr(ClangLib, func_name).__annotations__
+ ret_type = str_to_type(annotation.pop("return"))
+ arg_types = [str_to_type(annotation[key]) for key in annotation.keys()]
+ annotation_types.append((func_name, arg_types, ret_type))
+ return annotation_types
+
# Functions strictly alphabetical order.
-FUNCTION_LIST: list[LibFunc] = [
- (
- "clang_annotateTokens",
- [TranslationUnit, POINTER(Token), c_uint, POINTER(Cursor)],
- ),
- ("clang_CompilationDatabase_dispose", [c_object_p]),
- (
- "clang_CompilationDatabase_fromDirectory",
- [c_interop_string, POINTER(c_uint)],
- c_object_p,
- ),
- ("clang_CompilationDatabase_getAllCompileCommands", [c_object_p], c_object_p),
- (
- "clang_CompilationDatabase_getCompileCommands",
- [c_object_p, c_interop_string],
- c_object_p,
- ),
- ("clang_CompileCommands_dispose", [c_object_p]),
- ("clang_CompileCommands_getCommand", [c_object_p, c_uint], c_object_p),
- ("clang_CompileCommands_getSize", [c_object_p], c_uint),
- ("clang_CompileCommand_getArg", [c_object_p, c_uint], _CXString),
- ("clang_CompileCommand_getDirectory", [c_object_p], _CXString),
- ("clang_CompileCommand_getFilename", [c_object_p], _CXString),
- ("clang_CompileCommand_getNumArgs", [c_object_p], c_uint),
- (
- "clang_codeCompleteAt",
- [TranslationUnit, c_interop_string, c_int, c_int, c_void_p, c_int, c_int],
- POINTER(CCRStructure),
- ),
- ("clang_codeCompleteGetDiagnostic", [CodeCompletionResults, c_int], Diagnostic),
- ("clang_codeCompleteGetNumDiagnostics", [CodeCompletionResults], c_int),
- ("clang_createIndex", [c_int, c_int], c_object_p),
- ("clang_createTranslationUnit", [Index, c_interop_string], c_object_p),
- ("clang_CXRewriter_create", [TranslationUnit], c_object_p),
- ("clang_CXRewriter_dispose", [Rewriter]),
- ("clang_CXRewriter_insertTextBefore", [Rewriter, SourceLocation, c_interop_string]),
- ("clang_CXRewriter_overwriteChangedFiles", [Rewriter], c_int),
- ("clang_CXRewriter_removeText", [Rewriter, SourceRange]),
- ("clang_CXRewriter_replaceText", [Rewriter, SourceRange, c_interop_string]),
- ("clang_CXRewriter_writeMainFileToStdOut", [Rewriter]),
- ("clang_CXXConstructor_isConvertingConstructor", [Cursor], bool),
- ("clang_CXXConstructor_isCopyConstructor", [Cursor], bool),
- ("clang_CXXConstructor_isDefaultConstructor", [Cursor], bool),
- ("clang_CXXConstructor_isMoveConstructor", [Cursor], bool),
- ("clang_CXXField_isMutable", [Cursor], bool),
- ("clang_CXXMethod_isConst", [Cursor], bool),
- ("clang_CXXMethod_isDefaulted", [Cursor], bool),
- ("clang_CXXMethod_isDeleted", [Cursor], bool),
- ("clang_CXXMethod_isCopyAssignmentOperator", [Cursor], bool),
- ("clang_CXXMethod_isMoveAssignmentOperator", [Cursor], bool),
- ("clang_CXXMethod_isExplicit", [Cursor], bool),
- ("clang_CXXMethod_isPureVirtual", [Cursor], bool),
- ("clang_CXXMethod_isStatic", [Cursor], bool),
- ("clang_CXXMethod_isVirtual", [Cursor], bool),
- ("clang_CXXRecord_isAbstract", [Cursor], bool),
- ("clang_EnumDecl_isScoped", [Cursor], bool),
- ("clang_defaultDiagnosticDisplayOptions", [], c_uint),
- ("clang_defaultSaveOptions", [TranslationUnit], c_uint),
- ("clang_disposeCodeCompleteResults", [CodeCompletionResults]),
- # ("clang_disposeCXTUResourceUsage",
- # [CXTUResourceUsage]),
- ("clang_disposeDiagnostic", [Diagnostic]),
- ("clang_disposeIndex", [Index]),
- ("clang_disposeString", [_CXString]),
- ("clang_disposeTokens", [TranslationUnit, POINTER(Token), c_uint]),
- ("clang_disposeTranslationUnit", [TranslationUnit]),
- ("clang_equalCursors", [Cursor, Cursor], bool),
- ("clang_equalLocations", [SourceLocation, SourceLocation], bool),
- ("clang_equalRanges", [SourceRange, SourceRange], bool),
- ("clang_equalTypes", [Type, Type], bool),
- ("clang_formatDiagnostic", [Diagnostic, c_uint], _CXString),
- ("clang_getAddressSpace", [Type], c_uint),
- ("clang_getArgType", [Type, c_uint], Type),
- ("clang_getArrayElementType", [Type], Type),
- ("clang_getArraySize", [Type], c_longlong),
- ("clang_getFieldDeclBitWidth", [Cursor], c_int),
- ("clang_getCanonicalCursor", [Cursor], Cursor),
- ("clang_getCanonicalType", [Type], Type),
- ("clang_getChildDiagnostics", [Diagnostic], c_object_p),
- ("clang_getCompletionAvailability", [c_void_p], c_int),
- ("clang_getCompletionBriefComment", [c_void_p], _CXString),
- ("clang_getCompletionChunkCompletionString", [c_void_p, c_int], c_object_p),
- ("clang_getCompletionChunkKind", [c_void_p, c_int], c_int),
- ("clang_getCompletionChunkText", [c_void_p, c_int], _CXString),
- ("clang_getCompletionPriority", [c_void_p], c_int),
- ("clang_getCString", [_CXString], c_interop_string),
- ("clang_getCursor", [TranslationUnit, SourceLocation], Cursor),
- ("clang_getCursorAvailability", [Cursor], c_int),
- ("clang_getCursorDefinition", [Cursor], Cursor),
- ("clang_getCursorDisplayName", [Cursor], _CXString),
- ("clang_getCursorExceptionSpecificationType", [Cursor], c_int),
- ("clang_getCursorExtent", [Cursor], SourceRange),
- ("clang_getCursorLexicalParent", [Cursor], Cursor),
- ("clang_getCursorLinkage", [Cursor], c_int),
- ("clang_getCursorLocation", [Cursor], SourceLocation),
- ("clang_getCursorPrettyPrinted", [Cursor, PrintingPolicy], _CXString),
- ("clang_getCursorPrintingPolicy", [Cursor], c_object_p),
- ("clang_getCursorReferenced", [Cursor], Cursor),
- ("clang_getCursorReferenceNameRange", [Cursor, c_uint, c_uint], SourceRange),
- ("clang_getCursorResultType", [Cursor], Type),
- ("clang_getCursorSemanticParent", [Cursor], Cursor),
- ("clang_getCursorSpelling", [Cursor], _CXString),
- ("clang_getCursorTLSKind", [Cursor], c_int),
- ("clang_getCursorType", [Cursor], Type),
- ("clang_getCursorUSR", [Cursor], _CXString),
- ("clang_Cursor_getMangling", [Cursor], _CXString),
- ("clang_Cursor_hasAttrs", [Cursor], c_uint),
- # ("clang_getCXTUResourceUsage",
- # [TranslationUnit],
- # CXTUResourceUsage),
- ("clang_getCXXAccessSpecifier", [Cursor], c_uint),
- ("clang_getDeclObjCTypeEncoding", [Cursor], _CXString),
- ("clang_getDiagnostic", [c_object_p, c_uint], c_object_p),
- ("clang_getDiagnosticCategory", [Diagnostic], c_uint),
- ("clang_getDiagnosticCategoryText", [Diagnostic], _CXString),
- ("clang_getDiagnosticFixIt", [Diagnostic, c_uint, POINTER(SourceRange)], _CXString),
- ("clang_getDiagnosticInSet", [c_object_p, c_uint], c_object_p),
- ("clang_getDiagnosticLocation", [Diagnostic], SourceLocation),
- ("clang_getDiagnosticNumFixIts", [Diagnostic], c_uint),
- ("clang_getDiagnosticNumRanges", [Diagnostic], c_uint),
- ("clang_getDiagnosticOption", [Diagnostic, POINTER(_CXString)], _CXString),
- ("clang_getDiagnosticRange", [Diagnostic, c_uint], SourceRange),
- ("clang_getDiagnosticSeverity", [Diagnostic], c_int),
- ("clang_getDiagnosticSpelling", [Diagnostic], _CXString),
- ("clang_getElementType", [Type], Type),
- ("clang_getEnumConstantDeclUnsignedValue", [Cursor], c_ulonglong),
- ("clang_getEnumConstantDeclValue", [Cursor], c_longlong),
- ("clang_getEnumDeclIntegerType", [Cursor], Type),
- ("clang_getExceptionSpecificationType", [Type], c_int),
- ("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),
- (
- "clang_getInclusions",
- [TranslationUnit, translation_unit_includes_callback, py_object],
- ),
- (
- "clang_getInstantiationLocation",
- [
- SourceLocation,
- POINTER(c_object_p),
- POINTER(c_uint),
- POINTER(c_uint),
- POINTER(c_uint),
- ],
- ),
- ("clang_getLocation", [TranslationUnit, File, c_uint, c_uint], SourceLocation),
- ("clang_getLocationForOffset", [TranslationUnit, File, c_uint], SourceLocation),
- ("clang_getNullCursor", None, Cursor),
- ("clang_getNumArgTypes", [Type], c_uint),
- ("clang_getNumCompletionChunks", [c_void_p], c_int),
- ("clang_getNumDiagnostics", [c_object_p], c_uint),
- ("clang_getNumDiagnosticsInSet", [c_object_p], c_uint),
- ("clang_getNumElements", [Type], c_longlong),
- ("clang_getNumOverloadedDecls", [Cursor], c_uint),
- ("clang_getOffsetOfBase", [Cursor, Cursor], c_longlong),
- ("clang_getOverloadedDecl", [Cursor, c_uint], Cursor),
- ("clang_getPointeeType", [Type], Type),
- ("clang_getRange", [SourceLocation, SourceLocation], SourceRange),
- ("clang_getRangeEnd", [SourceRange], SourceLocation),
- ("clang_getRangeStart", [SourceRange], SourceLocation),
- ("clang_getResultType", [Type], Type),
- ("clang_getSpecializedCursorTemplate", [Cursor], Cursor),
- ("clang_getTemplateCursorKind", [Cursor], c_uint),
- ("clang_getTokenExtent", [TranslationUnit, Token], SourceRange),
- ("clang_getTokenKind", [Token], c_uint),
- ("clang_getTokenLocation", [TranslationUnit, Token], SourceLocation),
- ("clang_getTokenSpelling", [TranslationUnit, Token], _CXString),
- ("clang_getTranslationUnitCursor", [TranslationUnit], Cursor),
- ("clang_getTranslationUnitSpelling", [TranslationUnit], _CXString),
- ("clang_getTUResourceUsageName", [c_uint], c_interop_string),
- ("clang_getTypeDeclaration", [Type], Cursor),
- ("clang_getTypedefDeclUnderlyingType", [Cursor], Type),
- ("clang_getTypedefName", [Type], _CXString),
- ("clang_getTypeKindSpelling", [c_uint], _CXString),
- ("clang_getTypePrettyPrinted", [Type, PrintingPolicy], _CXString),
- ("clang_getTypeSpelling", [Type], _CXString),
- ("clang_hashCursor", [Cursor], c_uint),
- ("clang_isAttribute", [CursorKind], bool),
- ("clang_getFullyQualifiedName", [Type, PrintingPolicy, c_uint], _CXString),
- ("clang_isConstQualifiedType", [Type], bool),
- ("clang_isCursorDefinition", [Cursor], bool),
- ("clang_isDeclaration", [CursorKind], bool),
- ("clang_isExpression", [CursorKind], bool),
- ("clang_isFileMultipleIncludeGuarded", [TranslationUnit, File], bool),
- ("clang_isFunctionTypeVariadic", [Type], bool),
- ("clang_isInvalid", [CursorKind], bool),
- ("clang_isPODType", [Type], bool),
- ("clang_isPreprocessing", [CursorKind], bool),
- ("clang_isReference", [CursorKind], bool),
- ("clang_isRestrictQualifiedType", [Type], bool),
- ("clang_isStatement", [CursorKind], bool),
- ("clang_isTranslationUnit", [CursorKind], bool),
- ("clang_isUnexposed", [CursorKind], bool),
- ("clang_isVirtualBase", [Cursor], bool),
- ("clang_isVolatileQualifiedType", [Type], bool),
- ("clang_isBeforeInTranslationUnit", [SourceLocation, SourceLocation], bool),
- (
- "clang_parseTranslationUnit",
- [Index, c_interop_string, c_void_p, c_int, c_void_p, c_int, c_int],
- c_object_p,
- ),
- ("clang_reparseTranslationUnit", [TranslationUnit, c_int, c_void_p, c_int], c_int),
- ("clang_saveTranslationUnit", [TranslationUnit, c_interop_string, c_uint], c_int),
- (
- "clang_tokenize",
- [TranslationUnit, SourceRange, POINTER(POINTER(Token)), POINTER(c_uint)],
- ),
- ("clang_visitChildren", [Cursor, cursor_visit_callback, py_object], c_uint),
- ("clang_visitCXXBaseClasses", [Type, fields_visit_callback, py_object], c_uint),
- ("clang_visitCXXMethods", [Type, fields_visit_callback, py_object], c_uint),
- ("clang_Cursor_getNumArguments", [Cursor], c_int),
- ("clang_Cursor_getArgument", [Cursor, c_uint], Cursor),
- ("clang_Cursor_getNumTemplateArguments", [Cursor], c_int),
- ("clang_Cursor_getTemplateArgumentKind", [Cursor, c_uint], c_uint),
- ("clang_Cursor_getTemplateArgumentType", [Cursor, c_uint], Type),
- ("clang_Cursor_getTemplateArgumentValue", [Cursor, c_uint], c_longlong),
- ("clang_Cursor_getTemplateArgumentUnsignedValue", [Cursor, c_uint], c_ulonglong),
- ("clang_getCursorBinaryOperatorKind", [Cursor], c_int),
- ("clang_Cursor_getBriefCommentText", [Cursor], _CXString),
- ("clang_Cursor_getRawCommentText", [Cursor], _CXString),
- ("clang_Cursor_getOffsetOfField", [Cursor], c_longlong),
- ("clang_Cursor_getStorageClass", [Cursor], c_int),
- ("clang_Cursor_isAnonymous", [Cursor], bool),
- ("clang_Cursor_isAnonymousRecordDecl", [Cursor], bool),
- ("clang_Cursor_isBitField", [Cursor], bool),
- ("clang_Location_isInSystemHeader", [SourceLocation], bool),
- ("clang_PrintingPolicy_dispose", [PrintingPolicy]),
- ("clang_PrintingPolicy_getProperty", [PrintingPolicy, c_int], c_uint),
- ("clang_PrintingPolicy_setProperty", [PrintingPolicy, c_int, c_uint]),
- ("clang_Type_getAlignOf", [Type], c_longlong),
- ("clang_Type_getClassType", [Type], Type),
- ("clang_Type_getNumTemplateArguments", [Type], c_int),
- ("clang_Type_getTemplateArgumentAsType", [Type, c_uint], Type),
- ("clang_Type_getOffsetOf", [Type, c_interop_string], c_longlong),
- ("clang_Type_getSizeOf", [Type], c_longlong),
- ("clang_Type_getCXXRefQualifier", [Type], c_uint),
- ("clang_Type_getNamedType", [Type], Type),
- ("clang_Type_visitFields", [Type, fields_visit_callback, py_object], c_uint),
-]
+class ClangLib(Protocol):
+
+ def clang_annotateTokens(
+ self,
+ arg1: TranslationUnit,
+ arg2: _Pointer[Token],
+ arg3: c_uint,
+ arg4: _Pointer[Cursor],
+ ) -> None: ...
+
+ def clang_CompilationDatabase_dispose(self, arg1: _Pointer[c_void_p]) -> None: ...
+
+ def clang_CompilationDatabase_fromDirectory(
+ self, arg1: c_interop_string, arg2: _Pointer[c_uint]
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_CompilationDatabase_getAllCompileCommands(
+ self, arg1: _Pointer[c_void_p]
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_CompilationDatabase_getCompileCommands(
+ self, arg1: _Pointer[c_void_p], arg2: c_interop_string
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_CompileCommands_dispose(self, arg1: _Pointer[c_void_p]) -> None: ...
+
+ def clang_CompileCommands_getCommand(
+ self, arg1: _Pointer[c_void_p], arg2: c_uint
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_CompileCommands_getSize(self, arg1: _Pointer[c_void_p]) -> c_uint: ...
+
+ def clang_CompileCommand_getArg(
+ self, arg1: _Pointer[c_void_p], arg2: c_uint
+ ) -> _CXString: ...
+
+ def clang_CompileCommand_getDirectory(
+ self, arg1: _Pointer[c_void_p]
+ ) -> _CXString: ...
+
+ def clang_CompileCommand_getFilename(
+ self, arg1: _Pointer[c_void_p]
+ ) -> _CXString: ...
+
+ def clang_CompileCommand_getNumArgs(self, arg1: _Pointer[c_void_p]) -> c_uint: ...
+
+ def clang_codeCompleteAt(
+ self,
+ arg1: TranslationUnit,
+ arg2: c_interop_string,
+ arg3: c_int,
+ arg4: c_int,
+ arg5: c_void_p,
+ arg6: c_int,
+ arg7: c_int,
+ ) -> _Pointer[CCRStructure]: ...
+
+ def clang_codeCompleteGetDiagnostic(
+ self, arg1: CodeCompletionResults, arg2: c_int
+ ) -> Diagnostic: ...
+
+ def clang_codeCompleteGetNumDiagnostics(
+ self, arg1: CodeCompletionResults
+ ) -> c_int: ...
+
+ def clang_createIndex(self, arg1: c_int, arg2: c_int) -> _Pointer[c_void_p]: ...
+
+ def clang_createTranslationUnit(
+ self, arg1: Index, arg2: c_interop_string
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_CXRewriter_create(self, arg1: TranslationUnit) -> _Pointer[c_void_p]: ...
+
+ def clang_CXRewriter_dispose(self, arg1: Rewriter) -> None: ...
+
+ def clang_CXRewriter_insertTextBefore(
+ self, arg1: Rewriter, arg2: SourceLocation, arg3: c_interop_string
+ ) -> None: ...
+
+ def clang_CXRewriter_overwriteChangedFiles(self, arg1: Rewriter) -> c_int: ...
+
+ def clang_CXRewriter_removeText(
+ self, arg1: Rewriter, arg2: SourceRange
+ ) -> None: ...
+
+ def clang_CXRewriter_replaceText(
+ self, arg1: Rewriter, arg2: SourceRange, arg3: c_interop_string
+ ) -> None: ...
+
+ def clang_CXRewriter_writeMainFileToStdOut(self, arg1: Rewriter) -> None: ...
+
+ def clang_CXXConstructor_isConvertingConstructor(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXConstructor_isCopyConstructor(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXConstructor_isDefaultConstructor(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXConstructor_isMoveConstructor(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXField_isMutable(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isConst(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isDefaulted(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isDeleted(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isCopyAssignmentOperator(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isMoveAssignmentOperator(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isExplicit(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isPureVirtual(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isStatic(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXMethod_isVirtual(self, arg1: Cursor) -> bool: ...
+
+ def clang_CXXRecord_isAbstract(self, arg1: Cursor) -> bool: ...
+
+ def clang_EnumDecl_isScoped(self, arg1: Cursor) -> bool: ...
+
+ def clang_defaultDiagnosticDisplayOptions(self) -> c_uint: ...
+
+ def clang_defaultSaveOptions(self, arg1: TranslationUnit) -> c_uint: ...
+
+ def clang_disposeCodeCompleteResults(self, arg1: CodeCompletionResults) -> None: ...
+
+ def clang_disposeDiagnostic(self, arg1: Diagnostic) -> None: ...
+
+ def clang_disposeIndex(self, arg1: Index) -> None: ...
+
+ def clang_disposeString(self, arg1: _CXString) -> None: ...
+
+ def clang_disposeTokens(
+ self, arg1: TranslationUnit, arg2: _Pointer[Token], arg3: c_uint
+ ) -> None: ...
+
+ def clang_disposeTranslationUnit(self, arg1: TranslationUnit) -> None: ...
+
+ def clang_equalCursors(self, arg1: Cursor, arg2: Cursor) -> bool: ...
+
+ def clang_equalLocations(
+ self, arg1: SourceLocation, arg2: SourceLocation
+ ) -> bool: ...
+
+ def clang_equalRanges(self, arg1: SourceRange, arg2: SourceRange) -> bool: ...
+
+ def clang_equalTypes(self, arg1: Type, arg2: Type) -> bool: ...
+
+ def clang_formatDiagnostic(self, arg1: Diagnostic, arg2: c_uint) -> _CXString: ...
+
+ def clang_getAddressSpace(self, arg1: Type) -> c_uint: ...
+
+ def clang_getArgType(self, arg1: Type, arg2: c_uint) -> Type: ...
+
+ def clang_getArrayElementType(self, arg1: Type) -> Type: ...
+
+ def clang_getArraySize(self, arg1: Type) -> c_longlong: ...
+
+ def clang_getFieldDeclBitWidth(self, arg1: Cursor) -> c_int: ...
+
+ def clang_getCanonicalCursor(self, arg1: Cursor) -> Cursor: ...
+
+ def clang_getCanonicalType(self, arg1: Type) -> Type: ...
+
+ def clang_getChildDiagnostics(self, arg1: Diagnostic) -> _Pointer[c_void_p]: ...
+
+ def clang_getCompletionAvailability(self, arg1: c_void_p) -> c_int: ...
+
+ def clang_getCompletionBriefComment(self, arg1: c_void_p) -> _CXString: ...
+
+ def clang_getCompletionChunkCompletionString(
+ self, arg1: c_void_p, arg2: c_int
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_getCompletionChunkKind(self, arg1: c_void_p, arg2: c_int) -> c_int: ...
+
+ def clang_getCompletionChunkText(
+ self, arg1: c_void_p, arg2: c_int
+ ) -> _CXString: ...
+
+ def clang_getCompletionPriority(self, arg1: c_void_p) -> c_int: ...
+
+ def clang_getCString(self, arg1: _CXString) -> c_interop_string: ...
+
+ def clang_getCursor(
+ self, arg1: TranslationUnit, arg2: SourceLocation
+ ) -> Cursor: ...
+
+ def clang_getCursorAvailability(self, arg1: Cursor) -> c_int: ...
+
+ def clang_getCursorDefinition(self, arg1: Cursor) -> Cursor: ...
+
+ def clang_getCursorDisplayName(self, arg1: Cursor) -> _CXString: ...
+
+ def clang_getCursorExceptionSpecificationType(self, arg1: Cursor) -> c_int: ...
+
+ def clang_getCursorExtent(self, arg1: Cursor) -> SourceRange: ...
+
+ def clang_getCursorLexicalParent(self, arg1: Cursor) -> Cursor: ...
+
+ def clang_getCursorLinkage(self, arg1: Cursor) -> c_int: ...
+
+ def clang_getCursorLocation(self, arg1: Cursor) -> SourceLocation: ...
+
+ def clang_getCursorPrettyPrinted(
+ self, arg1: Cursor, arg2: PrintingPolicy
+ ) -> _CXString: ...
+
+ def clang_getCursorPrintingPolicy(self, arg1: Cursor) -> _Pointer[c_void_p]: ...
+
+ def clang_getCursorReferenced(self, arg1: Cursor) -> Cursor: ...
+
+ def clang_getCursorReferenceNameRange(
+ self, arg1: Cursor, arg2: c_uint, arg3: c_uint
+ ) -> SourceRange: ...
+
+ def clang_getCursorResultType(self, arg1: Cursor) -> Type: ...
+
+ def clang_getCursorSemanticParent(self, arg1: Cursor) -> Cursor: ...
+
+ def clang_getCursorSpelling(self, arg1: Cursor) -> _CXString: ...
+
+ def clang_getCursorTLSKind(self, arg1: Cursor) -> c_int: ...
+
+ def clang_getCursorType(self, arg1: Cursor) -> Type: ...
+
+ def clang_getCursorUSR(self, arg1: Cursor) -> _CXString: ...
+
+ def clang_Cursor_getMangling(self, arg1: Cursor) -> _CXString: ...
+
+ def clang_Cursor_hasAttrs(self, arg1: Cursor) -> c_uint: ...
+
+ def clang_getCXXAccessSpecifier(self, arg1: Cursor) -> c_uint: ...
+
+ def clang_getDeclObjCTypeEncoding(self, arg1: Cursor) -> _CXString: ...
+
+ def clang_getDiagnostic(
+ self, arg1: _Pointer[c_void_p], arg2: c_uint
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_getDiagnosticCategory(self, arg1: Diagnostic) -> c_uint: ...
+
+ def clang_getDiagnosticCategoryText(self, arg1: Diagnostic) -> _CXString: ...
+
+ def clang_getDiagnosticFixIt(
+ self, arg1: Diagnostic, arg2: c_uint, arg3: _Pointer[SourceRange]
+ ) -> _CXString: ...
+
+ def clang_getDiagnosticInSet(
+ self, arg1: _Pointer[c_void_p], arg2: c_uint
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_getDiagnosticLocation(self, arg1: Diagnostic) -> SourceLocation: ...
+
+ def clang_getDiagnosticNumFixIts(self, arg1: Diagnostic) -> c_uint: ...
+
+ def clang_getDiagnosticNumRanges(self, arg1: Diagnostic) -> c_uint: ...
+
+ def clang_getDiagnosticOption(
+ self, arg1: Diagnostic, arg2: _Pointer[_CXString]
+ ) -> _CXString: ...
+
+ def clang_getDiagnosticRange(
+ self, arg1: Diagnostic, arg2: c_uint
+ ) -> SourceRange: ...
+
+ def clang_getDiagnosticSeverity(self, arg1: Diagnostic) -> c_int: ...
+
+ def clang_getDiagnosticSpelling(self, arg1: Diagnostic) -> _CXString: ...
+
+ def clang_getElementType(self, arg1: Type) -> Type: ...
+
+ def clang_getEnumConstantDeclUnsignedValue(self, arg1: Cursor) -> c_ulonglong: ...
+
+ def clang_getEnumConstantDeclValue(self, arg1: Cursor) -> c_longlong: ...
+
+ def clang_getEnumDeclIntegerType(self, arg1: Cursor) -> Type: ...
+
+ def clang_getExceptionSpecificationType(self, arg1: Type) -> c_int: ...
+
+ def clang_getFile(
+ self, arg1: TranslationUnit, arg2: c_interop_string
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_getFileName(self, arg1: File) -> _CXString: ...
+
+ def clang_getFileTime(self, arg1: File) -> c_uint: ...
+
+ def clang_File_isEqual(self, arg1: File, arg2: File) -> bool: ...
+
+ def clang_getIBOutletCollectionType(self, arg1: Cursor) -> Type: ...
+
+ def clang_getIncludedFile(self, arg1: Cursor) -> _Pointer[c_void_p]: ...
+
+ def clang_getInclusions(
+ self,
+ arg1: TranslationUnit,
+ arg2: translation_unit_includes_callback,
+ arg3: py_object,
+ ) -> None: ...
+
+ def clang_getInstantiationLocation(
+ self,
+ arg1: SourceLocation,
+ arg2: _Pointer[_Pointer[c_void_p]],
+ arg3: _Pointer[c_uint],
+ arg4: _Pointer[c_uint],
+ arg5: _Pointer[c_uint],
+ ) -> None: ...
+
+ def clang_getLocation(
+ self, arg1: TranslationUnit, arg2: File, arg3: c_uint, arg4: c_uint
+ ) -> SourceLocation: ...
+
+ def clang_getLocationForOffset(
+ self, arg1: TranslationUnit, arg2: File, arg3: c_uint
+ ) -> SourceLocation: ...
+
+ def clang_getNullCursor(self) -> Cursor: ...
+
+ def clang_getNumArgTypes(self, arg1: Type) -> c_uint: ...
+
+ def clang_getNumCompletionChunks(self, arg1: c_void_p) -> c_int: ...
+
+ def clang_getNumDiagnostics(self, arg1: _Pointer[c_void_p]) -> c_uint: ...
+
+ def clang_getNumDiagnosticsInSet(self, arg1: _Pointer[c_void_p]) -> c_uint: ...
+
+ def clang_getNumElements(self, arg1: Type) -> c_longlong: ...
+
+ def clang_getNumOverloadedDecls(self, arg1: Cursor) -> c_uint: ...
+
+ def clang_getOffsetOfBase(self, arg1: Cursor, arg2: Cursor) -> c_longlong: ...
+
+ def clang_getOverloadedDecl(self, arg1: Cursor, arg2: c_uint) -> Cursor: ...
+
+ def clang_getPointeeType(self, arg1: Type) -> Type: ...
+
+ def clang_getRange(
+ self, arg1: SourceLocation, arg2: SourceLocation
+ ) -> SourceRange: ...
+
+ def clang_getRangeEnd(self, arg1: SourceRange) -> SourceLocation: ...
+
+ def clang_getRangeStart(self, arg1: SourceRange) -> SourceLocation: ...
+
+ def clang_getResultType(self, arg1: Type) -> Type: ...
+
+ def clang_getSpecializedCursorTemplate(self, arg1: Cursor) -> Cursor: ...
+
+ def clang_getTemplateCursorKind(self, arg1: Cursor) -> c_uint: ...
+
+ def clang_getTokenExtent(
+ self, arg1: TranslationUnit, arg2: Token
+ ) -> SourceRange: ...
+
+ def clang_getTokenKind(self, arg1: Token) -> c_uint: ...
+
+ def clang_getTokenLocation(
+ self, arg1: TranslationUnit, arg2: Token
+ ) -> SourceLocation: ...
+
+ def clang_getTokenSpelling(
+ self, arg1: TranslationUnit, arg2: Token
+ ) -> _CXString: ...
+
+ def clang_getTranslationUnitCursor(self, arg1: TranslationUnit) -> Cursor: ...
+
+ def clang_getTranslationUnitSpelling(self, arg1: TranslationUnit) -> _CXString: ...
+
+ def clang_getTUResourceUsageName(self, arg1: c_uint) -> c_interop_string: ...
+
+ def clang_getTypeDeclaration(self, arg1: Type) -> Cursor: ...
+
+ def clang_getTypedefDeclUnderlyingType(self, arg1: Cursor) -> Type: ...
+
+ def clang_getTypedefName(self, arg1: Type) -> _CXString: ...
+
+ def clang_getTypeKindSpelling(self, arg1: c_uint) -> _CXString: ...
+
+ def clang_getTypePrettyPrinted(
+ self, arg1: Type, arg2: PrintingPolicy
+ ) -> _CXString: ...
+
+ def clang_getTypeSpelling(self, arg1: Type) -> _CXString: ...
+
+ def clang_hashCursor(self, arg1: Cursor) -> c_uint: ...
+
+ def clang_isAttribute(self, arg1: CursorKind) -> bool: ...
+
+ def clang_getFullyQualifiedName(
+ self, arg1: Type, arg2: PrintingPolicy, arg3: c_uint
+ ) -> _CXString: ...
+
+ def clang_isConstQualifiedType(self, arg1: Type) -> bool: ...
+
+ def clang_isCursorDefinition(self, arg1: Cursor) -> bool: ...
+
+ def clang_isDeclaration(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isExpression(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isFileMultipleIncludeGuarded(
+ self, arg1: TranslationUnit, arg2: File
+ ) -> bool: ...
+
+ def clang_isFunctionTypeVariadic(self, arg1: Type) -> bool: ...
+
+ def clang_isInvalid(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isPODType(self, arg1: Type) -> bool: ...
+
+ def clang_isPreprocessing(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isReference(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isRestrictQualifiedType(self, arg1: Type) -> bool: ...
+
+ def clang_isStatement(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isTranslationUnit(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isUnexposed(self, arg1: CursorKind) -> bool: ...
+
+ def clang_isVirtualBase(self, arg1: Cursor) -> bool: ...
+
+ def clang_isVolatileQualifiedType(self, arg1: Type) -> bool: ...
+
+ def clang_isBeforeInTranslationUnit(
+ self, arg1: SourceLocation, arg2: SourceLocation
+ ) -> bool: ...
+
+ def clang_parseTranslationUnit(
+ self,
+ arg1: Index,
+ arg2: c_interop_string,
+ arg3: c_void_p,
+ arg4: c_int,
+ arg5: c_void_p,
+ arg6: c_int,
+ arg7: c_int,
+ ) -> _Pointer[c_void_p]: ...
+
+ def clang_reparseTranslationUnit(
+ self, arg1: TranslationUnit, arg2: c_int, arg3: c_void_p, arg4: c_int
+ ) -> c_int: ...
+
+ def clang_saveTranslationUnit(
+ self, arg1: TranslationUnit, arg2: c_interop_string, arg3: c_uint
+ ) -> c_int: ...
+
+ def clang_tokenize(
+ self,
+ arg1: TranslationUnit,
+ arg2: SourceRange,
+ arg3: _Pointer[_Pointer[Token]],
+ arg4: _Pointer[c_uint],
+ ) -> None: ...
+
+ def clang_visitChildren(
+ self, arg1: Cursor, arg2: cursor_visit_callback, arg3: py_object
+ ) -> c_uint: ...
+
+ def clang_visitCXXBaseClasses(
+ self, arg1: Type, arg2: fields_visit_callback, arg3: py_object
+ ) -> c_uint: ...
+
+ def clang_visitCXXMethods(
+ self, arg1: Type, arg2: fields_visit_callback, arg3: py_object
+ ) -> c_uint: ...
+
+ def clang_Cursor_getNumArguments(self, arg1: Cursor) -> c_int: ...
+
+ def clang_Cursor_getArgument(self, arg1: Cursor, arg2: c_uint) -> Cursor: ...
+
+ def clang_Cursor_getNumTemplateArguments(self, arg1: Cursor) -> c_int: ...
+
+ def clang_Cursor_getTemplateArgumentKind(
+ self, arg1: Cursor, arg2: c_uint
+ ) -> c_uint: ...
+
+ def clang_Cursor_getTemplateArgumentType(
+ self, arg1: Cursor, arg2: c_uint
+ ) -> Type: ...
+
+ def clang_Cursor_getTemplateArgumentValue(
+ self, arg1: Cursor, arg2: c_uint
+ ) -> c_longlong: ...
+
+ def clang_Cursor_getTemplateArgumentUnsignedValue(
+ self, arg1: Cursor, arg2: c_uint
+ ) -> c_ulonglong: ...
+
+ def clang_getCursorBinaryOperatorKind(self, arg1: Cursor) -> c_int: ...
+
+ def clang_Cursor_getBriefCommentText(self, arg1: Cursor) -> _CXString: ...
+
+ def clang_Cursor_getRawCommentText(self, arg1: Cursor) -> _CXString: ...
+
+ def clang_Cursor_getOffsetOfField(self, arg1: Cursor) -> c_longlong: ...
+
+ def clang_Cursor_getStorageClass(self, arg1: Cursor) -> c_int: ...
+
+ def clang_Cursor_isAnonymous(self, arg1: Cursor) -> bool: ...
+
+ def clang_Cursor_isAnonymousRecordDecl(self, arg1: Cursor) -> bool: ...
+
+ def clang_Cursor_isBitField(self, arg1: Cursor) -> bool: ...
+
+ def clang_Location_isInSystemHeader(self, arg1: SourceLocation) -> bool: ...
+
+ def clang_PrintingPolicy_dispose(self, arg1: PrintingPolicy) -> None: ...
+
+ def clang_PrintingPolicy_getProperty(
+ self, arg1: PrintingPolicy, arg2: c_int
+ ) -> c_uint: ...
+
+ def clang_PrintingPolicy_setProperty(
+ self, arg1: PrintingPolicy, arg2: c_int, arg3: c_uint
+ ) -> None: ...
+
+ def clang_Type_getAlignOf(self, arg1: Type) -> c_longlong: ...
+
+ def clang_Type_getClassType(self, arg1: Type) -> Type: ...
+
+ def clang_Type_getNumTemplateArguments(self, arg1: Type) -> c_int: ...
+
+ def clang_Type_getTemplateArgumentAsType(
+ self, arg1: Type, arg2: c_uint
+ ) -> Type: ...
+
+ def clang_Type_getOffsetOf(
+ self, arg1: Type, arg2: c_interop_string
+ ) -> c_longlong: ...
+
+ def clang_Type_getSizeOf(self, arg1: Type) -> c_longlong: ...
+
+ def clang_Type_getCXXRefQualifier(self, arg1: Type) -> c_uint: ...
+
+ def clang_Type_getNamedType(self, arg1: Type) -> Type: ...
+
+ def clang_Type_visitFields(
+ self, arg1: Type, arg2: fields_visit_callback, arg3: py_object
+ ) -> c_uint: ...
class LibclangError(Exception):
@@ -4280,7 +4613,7 @@ def register_functions(lib: CDLL, ignore_errors: bool) -> None:
def register(item: LibFunc) -> None:
register_function(lib, item, ignore_errors)
- for f in FUNCTION_LIST:
+ for f in _get_annotations():
register(f)
@@ -4339,7 +4672,7 @@ def set_compatibility_check(check_status: bool) -> None:
Config.compatibility_check = check_status
@CachedProperty
- def lib(self) -> CDLL:
+ def lib(self) -> ClangLib:
lib = self.get_cindex_library()
register_functions(lib, not Config.compatibility_check)
self.null_cursor = lib.clang_getNullCursor()
More information about the cfe-commits
mailing list