问题标签 [libclang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
940 浏览

c++ - clang,libtooling 添加新的规范内置数据类型

在使用 libtooling 的程序中,有没有办法让某些类型被识别为“内置类型”?例如,我想让 int16_t、uint32_t 等被识别为规范的内置类型,而不是 typedef 到 short、unsigned 等。

0 投票
2 回答
806 浏览

c++ - libclang/libtooling 处理或关闭所有错误输出

我认为每件事都在标题中^^ 事实上,我正在使用 libtooling 开发一个工具,但我想抑制每个错误(该工具旨在仅用于正确的源,因此错误输出会影响标准错误。 ..)。

0 投票
1 回答
240 浏览

objective-c - libclang:从实现游标中获取接口游标

世界!我正在尝试使用 libclang 来确定 Objective-C 方法所属的超类。我有一个代表实例方法的游标(CXCursor_ObjCInstanceMethodDecl)。当我得到游标的父级时,我得到一个 CXCursor_ObjCImplementationDecl 类型的游标。我需要能够从最后一个游标中获取界面游标,以确定方法的超类。有没有办法做到这一点?

0 投票
0 回答
58 浏览

python - 为 libclang 中的不同翻译单元重用 AST(python 绑定)

我正在为 libclang 使用 python 绑定。在解析 cpp 文件时,我会解析 cpp 中包含的每个标头(或者更确切地说是预处理器步骤之后的 cpp)。我正在尝试查找对某些人工制品的所有引用,但是多次浏览相同的标题有点慢。

一般来说,我看到的是为每个翻译单元生成一个 AST。是否有可能重用已经为不同翻译单元访问过的标题的 AST?或者可能有任何其他建议让它更快(只有静态分析,没有编译)。

0 投票
1 回答
359 浏览

macos - 在 Cocoa 应用程序中嵌入 libclang 的教程

有没有人有关于在 Cocoa 应用程序中嵌入 libclang 的好教程?

特别是我在启动时遇到了 rpath 的问题,说找不到 dylib。

错误是可爱的 dyld: Library not loaded: @rpath/libclang.dylib

0 投票
1 回答
1197 浏览

c++ - 如何使用 clang API 解析函数指针的 typedef 以获取函数指针名称?

我目前正在使用 clang C API 为 C++ 代码构建解析器。解析器将处理一个头文件并为其生成一个已定义符号和缺失符号的列表(它忽略包含指令,因此它将严格解析头文件的内容)。我的问题是,如果我有typedef一个函数指针,它接受一个未定义类型的参数,例如:

AST 解析SOME_TYPE为 typedef 而不是funcPtrName. 如果我替换SOME_UNDEF_TYPEint,它会正确解析funcPtrName

我以为我可以clang_tokenize用来获取光标的所有标记并手动获取函数指针名称,但是调用clang_getCursorExtent指向 typedef 的光标无法正常工作(返回的范围是 0,0)。

你知道解决这个问题的任何方法吗?

0 投票
1 回答
1008 浏览

python - 由 Libclang 的 python 绑定生成的 AST 无法解析 C++ 源代码中的某些标记

我正在使用 Libclang 的 python 绑定。我基本上有两个查询:

  1. 我想知道我们如何解析既不是由用户定义也不是包含库的库函数。例如,当我有以下源代码时 -

    • Libclang 无法解析 malloc(),因为此代码中既没有包含 stdlib,也没有为 malloc 提供用户定义的定义。
  2. Libclang 的 AST 无法识别未使用构造函数定义的对象。例如,在源代码中 -

    /li>

push_back( ) 语句不会被解析,但是当这样写时:

它解析正确。

  • 这种行为的另一个令人惊讶的表现是当这些对象作为函数参数传递给用户定义的函数时。例如

    /li>

push_back() 仍然没有被识别,但是当它被写入时,事情被正确解析了

如果有人能够提出解决方法,那就太好了。也许有一个标志可以在设置时避免这种情况?

0 投票
2 回答
3622 浏览

c++ - 如何在 libclang c++ 中使用 RecursiveASTVisitor 提取注释并匹配声明?

我正在编写一个实用程序,它应该解析 C++(和 C)头文件,提取结构、枚举、字段等,并根据提取的信息生成其他语言的代码。我决定为此使用 libclang。

我正在使用 a RecursiveASTVisitor,似乎我能够提取我需要的所有信息,除了评论。

我希望读取出现在每个声明(字段、结构、类、枚举)正上方的注释,并在我用其他语言生成代码时添加其文本。

问题是我看到的所有使用注释的示例都使用CxCursor了clang的C接口,我不知道如何CxCursor在我的上下文中获取。

那么-如何在仍在使用的同时提取评论RecursiveASTVisitor

0 投票
2 回答
1640 浏览

c - 使用 libclang 获取 typedef 类型和名称?

如果它们是匿名结构等,我可以获得 typedefs 的名称和类型,但正常的 typedefs(eg typedef int size_t) 我只能获得size_t. 我怎样才能得到类型“int”?

0 投票
1 回答
2682 浏览

python - 如何使用 libclang 检索函数调用参数值

是否可以检索clang.cindex.CursorKind.CALL_EXPR游标的参数值?

当我使用编译器(clang++ -ast-dump source.cpp)转储 AST 时,我会获得有关函数调用(调用表达式)及其参数的信息。但是我无法使用 python 的绑定来复制它(使用 libclang 的解析器检索 AST)。

这是我正在使用的源代码:

这是其 AST 转储的一部分:

我想通过评估调用表达式光标来检索最后一行的IntegerLiteral值部分。