问题标签 [clang-query]

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 回答
51 浏览

c++ - 使用 ASTMatcher 获取具有至少两个相同访问说明符的类

当类中有两个或更多类似的访问说明符时,我需要在 C++ 代码中捕获案例。假设有两个类

如何匹配 A 类(因为它有两个“公共”)而不是 B 类与 ASTMatcher?

0 投票
1 回答
619 浏览

c++ - 如何获取clang抽象语法树右侧的整个表达式?

让我们举一个玩具例子,假设我在 test.cpp 文件中有以下代码:

我想在除法运算中找到分母的变量名,然后使用clang我使用命令得到上述代码的抽象语法树(AST)clang -Xclang -ast-dump -fsyntax-only test.cpp。我得到以下输出

根据上述 AST 知识并使用 clang-query,我使用以下命令获取分母的变量名称

我得到我的输出

现在我们在同一页面上,我有两个问题。

  1. 在上面的玩具示例中,如果我有另一个变量而不是 10,那么我的查询匹配两个变量(分子和分母)。如何限制我的 clang 查询以仅匹配作为除法运算的分母的变量?换句话说,如何找到出现在二元运算符“/”右侧的变量?一个例子是int g = gw / gt;

  2. 如果我在分母中有一个表达式,而不是变量 gt,那么如何使用 clang 获得整个表达式?换句话说,如何获得抽象语法树中二元运算符“/”右侧的表达式?一个简单的例子可以是 int g = gw / (gt - gw);,一个复杂的例子可以是int g = gw / gt - gw / gr * gg / sqrt( gt - gw ^ 2) + gq;

我感谢在这方面的任何帮助。

0 投票
1 回答
236 浏览

c - 在 Clang-Query 中匹配函数指针

匹配函数指针的查询是什么,例如,在以下代码中:

y是要匹配的函数指针。

0 投票
1 回答
239 浏览

compiler-construction - 列出 Clang 查询匹配器

有没有办法列出所有可能的匹配器clang-queryAST 匹配器参考列表不一定是最新版本。即使是ASTMatchers.hclang 标题 ( clang-6.0.0) 中的列表也没有显示当前可用的内容。例如,equalsNode匹配器包含在列表中,而在clang-query.

0 投票
2 回答
447 浏览

c++ - 如何找到应该导出的符号

如果您使用-fvisibility=hidden或使用 msvc 进行编译,则必须手动导出共享库符号。作为一个实验,如何使用 AST 匹配器(clang-query)自动找到它们?

这并不容易,因为需要一组最小的导出声明,并且内联函数、模板、外联模板定义、静态数据成员等很快就会变得复杂。

也欢迎 LLVM IR 或 C++ 标准用语的一般答案。

0 投票
1 回答
296 浏览

c++ - 在导入 Foundation 的 Objective-C 文件上运行 Clang-query

我正在尝试使用 clang-query 对导入 Foundation 但它不起作用的 obj-c 文件运行匹配,clang-query通过将其移动到tools/extra文件夹进行构建后,我使用以下命令运行它:

./clang-query MyClass.m -- -extra-arg-before "-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk"

但我收到了这个错误:

我应该如何运行clang-query来分析我的 Objective-C 源?

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 投票
1 回答
636 浏览

c++ - 与不同变量类型相比的变量的 Clang AST 匹配器

我是 clang-tidy 的新手,以下是练习,所以我可以转向更复杂的匹配器和工具。

可以说我们有

我的目标是识别与“my_type”进行比较的变量,以便通过将它们的类型更改为 my_type 来修复它们的声明。

现在我正在尝试执行以下操作

这里的问题是我忽略了上下文。做这样的事情的正确方法是什么?

0 投票
0 回答
66 浏览

c++ - clang-tidy 隔离多个字段声明

在 clang-tidy 中有 readability-isolate-declaration 检查。我正在尝试为字段声明做类似的事情。

让我们说我们有以下

如果我们在 clang-query 中检查上面的示例,我们会得到类似

在这里,我得到了 x 和 y 的 2 个不同的 FieldDecl。在以下情况下,我也得到 2 个 FieldDecls

这几乎是相同的。有人如何根据 AST 区分这两种情况?

0 投票
1 回答
43 浏览

c++ - 使用 clang-query 在 cpp 源代码中定位构造函数行号

我正在寻找使用 clang-query 获取构造函数最后一行的行号,有人知道如何到达那里吗?

我有很多源文件要通过,并且需要更新构造函数。我花时间尝试用正则表达式解析源文件,它适用于很多极端情况。所以这是列表中的下一项。

我尝试在网络上搜索和堆栈溢出,但我找不到太多,并且对语言解析器的工作方式有点迷茫。此外,我使用这个工具http://ce.steveire.com/作为m cxxConstructorDecl()我对 clang-query 的输入,但它为我提供了包含“MyClass”的 4 行的匹配项,它只给了我一行构造函数的第一行。任何帮助表示赞赏!