问题标签 [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 回答
336 浏览

c++ - Clang AST 匹配器:如何匹配 lambda 捕获的变量?

如何匹配在 lambda 之外定义并通过引用捕获的 lambda 中的变量?

我要解决的问题:我有一个数据库事务系统,其代码如下所示:

上面的代码有一个微妙的错误,因为 f 没有清除值。TransactionRunner::Run 可以多次调用 f 直到事务成功。如果 f 不清除值,则值将具有先前尝试的垃圾值。

我正在写一个clang-tidy检查来发现这样的错误并阻止新的错误被写入。

到目前为止,我有类似的东西:

上面将找到一个具有正确签名的 lambda,其中包含一个集合插入,但没有明确调用同一集合。

我希望它不会在 lambda 内声明的集合上触发。所以我希望匹配器仅在集合被 lambda 捕获时才匹配。

0 投票
1 回答
733 浏览

c - 使用 clang AST 用宏替换表达式

我希望在 clang ast 匹配器的帮助下更改以下代码。

我有以下 AST 匹配器,它似乎可以很好地识别代码。

但是我在理解如何写支票和翻译方面有一个问题。我目前坚持使用此代码:

我不知道如何将这两个变量提取为字符串。我正在查看 Expr 类的文档(http://clang.llvm.org/doxygen/classclang_1_1Expr.html),但我找不到有用的东西。

如果有人能指出我正确的方向,将不胜感激。

添加编辑。

0 投票
0 回答
53 浏览

objective-c - 将 @import 声明与 ASTMatchers 匹配

我正在尝试@import使用 AST 匹配器为我正在创建的自定义工具匹配 objc 声明;我正在使用Result.Context->local_imports(),但尽管我@import的源代码中有语句并且我正在传递fmodules标志,但从返回的迭代器local_imports始终为空。有什么想法我能做到这一点吗?

0 投票
1 回答
485 浏览

c++ - ClangAST Consumer:如何在 FunctionDecl 中遍历语句、VarDecl、BinaryOperator?

在 clang AST 消费者内部,我有一个用于 FunctionDecl 的 walker。如何遍历函数声明中的 DeclStmt、Statements、BinaryOperator。请举个例子。

0 投票
1 回答
351 浏览

clang - 编写 AST 匹配器以查找所有没有 break 语句的 case 语句

我想找到所有没有 break 语句的 case 语句。我使用 clang-query 来构建我的匹配器。我的匹配器在某些测试用例中失败。

我写了简单的匹配器

匹配 caseStmt(除非(有(breakStmt())))

它适用于以下测试用例

在此处输入图像描述

在此处输入图像描述 不适用于以下

在此处输入图像描述 在上述情况下,它显示了带有 break 语句的 case 语句以及没有 break 语句的 case 语句。

我在做什么错?请帮助:)我正在关注这个 http://releases.llvm.org/8.0.0/tools/clang/docs/LibASTMatchersTutorial.html

0 投票
2 回答
246 浏览

c++ - Clang AST Match 调用具有特定类的 make_unique

我正在尝试使用 clang 的 AST 匹配器来定位如下代码:

在 clang-query 中,我尝试了以下方法:

我也试过refersToType(...)换成

这也给出了零匹配。我可以使用什么来针对std::make_unique特定类型的模板化调用?

0 投票
0 回答
150 浏览

c++ - Clang AST 匹配器:匹配嵌套命名空间

给定一个具有不同命名空间的私有成员的类

我正在尝试匹配 cxxConstructorExpr 的嵌套命名空间 Cfg,因为我的最终目标是从 ExampleApi 类中读取一些变量名

我可以_cfgApi通过执行以下操作来匹配:

但这还不够好,因为代码库会自动生成下面的类,Test::Cfg::*Api而且我还没有发现通配符谓词的用法。

我试着做一些事情:

它匹配命名空间但不匹配嵌套命名空间。我认为在比赛发生后进行后期处理可能会产生太多噪音。

我正在和hasParentmatcher 一起玩,但到目前为止还没有运气。

所以我的问题是:我如何匹配嵌套命名空间以进行类初始化。

0 投票
1 回答
230 浏览

clang - 在 clang 中仅启用语法解析

我正在尝试实现一个使用 ASTMatcher API 进行句法分析的 clang 工具。我正在尝试找出如何为 clang 指定额外的标志以禁用语义检查。我知道 clang 构建了一个巨大的 AST,其中包括系统头文件。有什么方法可以在禁用导致未知类型错误的语义检查的同时解析源代码?我只想分析给定文件的源代码的语法完整性。到目前为止,我已经尝试通过修改 DSL 来检查匹配代码是否来自主文件来解决这个问题:

但这并不能阻止 clang 查看头文件。

0 投票
1 回答
850 浏览

clang - Clang AST Matchers:如何从函数声明中找到函数体?

我正在尝试编写一个简单的 clang-tidy 检查器,它将检查fopen()多次调用的构造函数。我的目的是发现潜在的内存泄漏,以防第二次fopen()调用中发生任何异常。

使用这个

能够找到所有的fopen()电话。

但我找不到cxxConstructorDecl使用这个。

我很怀疑,因为我使用cxxConstructorDecl的过滤器没有应用于构造函数主体。那么如何从函数声明中找到函数体呢?

0 投票
0 回答
183 浏览

clang - Clang AST Matchers:是否可以根据计数进行过滤?

我正在尝试编写一个简单的 clang-tidy 检查器,它将检查fopen()多次调用的构造函数。为此,我试图将构造函数与多个fopen()调用相匹配。我的目的是发现潜在的内存泄漏,以防第二次fopen()调用中发生任何异常。

使用这个

我能够找到构造函数fopen。但我想找到一个以上的构造函数fopen。我想知道是否可以根据计数进行过滤?

我检查了逻辑缩小匹配器(allOf、anyOf、anything 和 unless),但没有找到与计数相关的任何内容。