问题标签 [clang-ast-matchers]
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.
c++ - 使用 clang AST 解析评论
我想用 clang AST 解析自定义标签。这是我的编译单元输入的简单说明。
之后如何获得这些标签\my-tags
?
阅读clang 用户手册后,我意识到-Wdocumentation
,-fparse-all-comments
甚至-fcomment-block-commands
可以满足我的要求。但是,当我在我的 中添加这些标志之一时compile_commands.json
,ASTContext.Comments.empty()
仍然会输出True
. 我在下面附上了我compile_commands.json
和我的 clang AST 前端代码以供参考。
clang - Clang AST Libtooling:如何在 AST 匹配上打印数组标识符
我尝试过的代码如下:
getBase()应该打印数组标识符,但它正在打印地址,例如0x559f7da7e838。如何打印数组名称/标识符?例如,在arr[i] = 40 的情况下; 我想打印arr
abstract-syntax-tree - 需要从我的示例中解释 Clang AST 查看器
我尝试使用x86-64 clang 10.0.0 Ast Viewer打印以下代码的 AST
我得到了这个:
现在,在此之后,我尝试将 return char 'c' 更改为 'cw' 并得到:
我得到了这个:
现在,为什么 -ImplicitCastExpr 消失了,甚至从 ('char' 99) 现在变成了 ('int' 25463)。我需要解释,谢谢。
c++ - 使用 Clang AST 访问者匹配传递给 ForStmt 的 Cond 中的函数的参数
我正在尝试匹配传递给 ForStmt 条件的整数值。但是,这loopbound
是对 a 的调用,FunctionDecl
而我似乎没有通过ParamVarDecl
.
MWE:我的测试示例:
这是 AST 转储:
ASTRecursiveVisitor:
我不确定为什么在这里Bound
作为Null
指针返回。我已经调试了代码直到上一个IfStmt
,它们似乎可以工作。任何帮助,将不胜感激。
python - 如何在 clang Python 绑定中公开 ImplicitCastExpr 节点?
我有 C 代码:
使用 clang 的 python 绑定,我在第 28 行获得了这个函数调用:
在我的python代码中,我有兴趣知道这两个
- 这是节点类型“ImplicitCastExpr”和
- 该functionCall的参数签名是'int(*)(float ,int()(int *,float *))'
这是否可以通过几个小时的工作来实现?我一直在阅读:
https://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang 但那已经有 9 年历史了,我希望 python 绑定现在更完整。
c++ - 使用工具创建新的命名空间
我有一个很大的代码库,里面充满了诸如MyCompanyMyDeptMyType
. 这使得代码很难阅读。我想使用一个工具将所有这些名称移动到一个嵌套的命名空间MyCompany::MyDept
。
我的头文件看起来像
我的 cpp 文件最终会出现using namespace MyCompany::MyDept;
在顶部。
这样的工具存在吗?(clang-rename?)如果没有,我最好的机会是写我自己的clang AST访问者吗?
c++ - 使用 clang LibASTMatchers 获取文件未找到错误
我在libastmatchers
使用Postgres 源时遇到了 CLang 的问题:它找不到包含文件。仅当从两个文件创建 CLangTool 时才会重现此错误。如果是为单独的文件创建的,则没有错误并且功能匹配成功。
完整错误:
目录结构:
文件内容:
- nodeHash.c 为空;
- 条件.c:
- pg_config_ext.h:
- compile_commands.json:
- CMakeLists.txt:
- 主.cpp:
我正在使用 CLang 版本10.0.0
也许,这是同一个问题,但没有答案。
c++ - Clang MatchResult 没有绑定 AST 节点?
我正在编写我的第一个 AST 匹配器来检测指针到积分的转换,但BoundedNodes
in 的大小MatchResult
为 0。这怎么可能?为什么 AST Matcher 会在 MatchResult 为空的情况下调用我的回调?一段代码是否有可能匹配某个 Matcher 而不会在 AST 中作为节点出现?
这是我的整个代码:
这输出
在包含 1 个指向积分转换的指针的文件上调用时:
同样,我不明白为什么会检测到匹配,但找不到节点?如果我为上面的代码转储 AST,它会给出:
所以我想这result.Nodes.getMap()
至少会产生我在CXXReinterpretCastExpr
AST 转储中显示的内容?然而它是空的。
c++ - Clang AST:从 CXXRecordDecl 访问成员函数模板
假设我有一个像这样的虚拟课程:
其中的 AST 转储如下所示:
给定对CXXRecordDecl
节点的访问权限Stack
,我如何访问和的FunctionTemplateDecl
对象?只返回方法声明,我看不到任何其他可能有用的函数。我是否必须单独匹配函数模板声明,然后将它们与类声明相关联?push
pop
CXXRecorDecl::methods
empty
c++ - clang-query:检查函数参数类型的模板参数的名称
我有一个大项目,以及大量 C++ 类成员函数,形式如下:
我正在尝试编写一个匹配器来查找像这样的函数,这些函数的参数类型的名称中包含字符串“Listener”。
我可以找到类型weak_ptr
名称中带有“”的参数的函数:
这很好地匹配了上面的函数。但是,如果我更改"weak_ptr"
为"Listener"
,则该功能不再匹配。我猜这是因为它是std::weak_ptr
类模板的模板参数的名称。
我已经尝试了这个查询的许多不同的变体,但我还没有找到与我感兴趣的函数相匹配的那个。
任何指针?