问题标签 [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.

0 投票
1 回答
1435 浏览

c++ - 使用 clang AST 解析评论

我想用 clang AST 解析自定义标签。这是我的编译单元输入的简单说明。

之后如何获得这些标签\my-tags

阅读clang 用户手册后,我意识到-Wdocumentation-fparse-all-comments甚至-fcomment-block-commands可以满足我的要求。但是,当我在我的 中添加这些标志之一时compile_commands.jsonASTContext.Comments.empty()仍然会输出True. 我在下面附上了我compile_commands.json和我的 clang AST 前端代码以供参考。

0 投票
1 回答
272 浏览

clang - Clang AST Libtooling:如何在 AST 匹配上打印数组标识符

我尝试过的代码如下:

getBase()应该打印数组标识符,但它正在打印地址,例如0x559f7da7e838。如何打印数组名称/标识符?例如,在arr[i] = 40 的情况下; 我想打印arr

0 投票
1 回答
97 浏览

abstract-syntax-tree - 需要从我的示例中解释 Clang AST 查看器

我尝试使用x86-64 clang 10.0.0 Ast Viewer打印以下代码的 AST

我得到了这个:

现在,在此之后,我尝试将 return char 'c' 更改为 'cw' 并得到:

我得到了这个:

现在,为什么 -ImplicitCastExpr 消失了,甚至从 ('char' 99) 现在变成了 ('int' 25463)。我需要解释,谢谢。

0 投票
1 回答
176 浏览

c++ - 使用 Clang AST 访问者匹配传递给 ForStmt 的 Cond 中的函数的参数

我正在尝试匹配传递给 ForStmt 条件的整数值。但是,这loopbound是对 a 的调用,FunctionDecl而我似乎没有通过ParamVarDecl.

MWE:我的测试示例:

这是 AST 转储:

ASTRecursiveVisitor:

我不确定为什么在这里Bound作为Null指针返回。我已经调试了代码直到上一个IfStmt,它们似乎可以工作。任何帮助,将不胜感激。

0 投票
0 回答
78 浏览

python - 如何在 clang Python 绑定中公开 ImplicitCastExpr 节点?

我有 C 代码:

使用 clang 的 python 绑定,我在第 28 行获得了这个函数调用:

在我的python代码中,我有兴趣知道这两个

  1. 这是节点类型“ImplicitCastExpr”和
  2. 该functionCall的参数签名是'int(*)(float ,int()(int *,float *))'

这是否可以通过几个小时的工作来实现?我一直在阅读:

https://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang 但那已经有 9 年历史了,我希望 python 绑定现在更完整。

0 投票
0 回答
45 浏览

c++ - 使用工具创建新的命名空间

我有一个很大的代码库,里面充满了诸如MyCompanyMyDeptMyType. 这使得代码很难阅读。我想使用一个工具将所有这些名称移动到一个嵌套的命名空间MyCompany::MyDept

我的头文件看起来像

我的 cpp 文件最终会出现using namespace MyCompany::MyDept;在顶部。

这样的工具存在吗?(clang-rename?)如果没有,我最好的机会是写我自己的clang AST访问者吗?

0 投票
0 回答
108 浏览

c++ - 使用 clang LibASTMatchers 获取文件未找到错误

我在libastmatchers使用Postgres 源时遇到了 CLang 的问题:它找不到包含文件。仅当从两个文件创建 CLangTool 时才会重现此错误。如果是为单独的文件创建的,则没有错误并且功能匹配成功。

完整错误:

目录结构:

文件内容:

  • nodeHash.c 为空;
  • 条件.c:
  • pg_config_ext.h:
  • compile_commands.json:
  • CMakeLists.txt:
  • 主.cpp:

我正在使用 CLang 版本10.0.0

也许,是同一个问题,但没有答案。

0 投票
1 回答
93 浏览

c++ - Clang MatchResult 没有绑定 AST 节点?

我正在编写我的第一个 AST 匹配器来检测指针到积分的转换,但BoundedNodesin 的大小MatchResult为 0。这怎么可能?为什么 AST Matcher 会在 MatchResult 为空的情况下调用我的回调?一段代码是否有可能匹配某个 Matcher 而不会在 AST 中作为节点出现?

这是我的整个代码:

这输出

在包含 1 个指向积分转换的指针的文件上调用时:

同样,我不明白为什么会检测到匹配,但找不到节点?如果我为上面的代码转储 AST,它会给出:

所以我想这result.Nodes.getMap()至少会产生我在CXXReinterpretCastExprAST 转储中显示的内容?然而它是空的。

0 投票
1 回答
115 浏览

c++ - Clang AST:从 CXXRecordDecl 访问成员函数模板

假设我有一个像这样的虚拟课程:

其中的 AST 转储如下所示:

给定对CXXRecordDecl节点的访问权限Stack,我如何访问和的FunctionTemplateDecl对象?只返回方法声明,我看不到任何其他可能有用的函数。我是否必须单独匹配函数模板声明,然后将它们与类声明相关联?pushpopCXXRecorDecl::methodsempty

0 投票
1 回答
374 浏览

c++ - clang-query:检查函数参数类型的模板参数的名称

我有一个大项目,以及大量 C++ 类成员函数,形式如下:

我正在尝试编写一个匹配器来查找像这样的函数,这些函数的参数类型的名称中包含字符串“Listener”。

我可以找到类型weak_ptr名称中带有“”的参数的函数:

这很好地匹配了上面的函数。但是,如果我更改"weak_ptr""Listener",则该功能不再匹配。我猜这是因为它是std::weak_ptr类模板的模板参数的名称。

我已经尝试了这个查询的许多不同的变体,但我还没有找到与我感兴趣的函数相匹配的那个。

任何指针?