问题标签 [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.
c++ - 使用 ASTMatcher 获取具有至少两个相同访问说明符的类
当类中有两个或更多类似的访问说明符时,我需要在 C++ 代码中捕获案例。假设有两个类
如何匹配 A 类(因为它有两个“公共”)而不是 B 类与 ASTMatcher?
c++ - 如何获取clang抽象语法树右侧的整个表达式?
让我们举一个玩具例子,假设我在 test.cpp 文件中有以下代码:
我想在除法运算中找到分母的变量名,然后使用clang我使用命令得到上述代码的抽象语法树(AST)clang -Xclang -ast-dump -fsyntax-only test.cpp
。我得到以下输出
根据上述 AST 知识并使用 clang-query,我使用以下命令获取分母的变量名称
我得到我的输出
现在我们在同一页面上,我有两个问题。
在上面的玩具示例中,如果我有另一个变量而不是 10,那么我的查询匹配两个变量(分子和分母)。如何限制我的 clang 查询以仅匹配作为除法运算的分母的变量?换句话说,如何找到出现在二元运算符“/”右侧的变量?一个例子是
int g = gw / gt;
如果我在分母中有一个表达式,而不是变量 gt,那么如何使用 clang 获得整个表达式?换句话说,如何获得抽象语法树中二元运算符“/”右侧的表达式?一个简单的例子可以是
int g = gw / (gt - gw);
,一个复杂的例子可以是int g = gw / gt - gw / gr * gg / sqrt( gt - gw ^ 2) + gq;
我感谢在这方面的任何帮助。
c - 在 Clang-Query 中匹配函数指针
匹配函数指针的查询是什么,例如,在以下代码中:
y
是要匹配的函数指针。
compiler-construction - 列出 Clang 查询匹配器
有没有办法列出所有可能的匹配器clang-query
?AST 匹配器参考列表不一定是最新版本。即使是ASTMatchers.h
clang 标题 ( clang-6.0.0
) 中的列表也没有显示当前可用的内容。例如,equalsNode
匹配器包含在列表中,而在clang-query
.
c++ - 如何找到应该导出的符号
如果您使用-fvisibility=hidden
或使用 msvc 进行编译,则必须手动导出共享库符号。作为一个实验,如何使用 AST 匹配器(clang-query)自动找到它们?
这并不容易,因为需要一组最小的导出声明,并且内联函数、模板、外联模板定义、静态数据成员等很快就会变得复杂。
也欢迎 LLVM IR 或 C++ 标准用语的一般答案。
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 源?
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
c++ - 与不同变量类型相比的变量的 Clang AST 匹配器
我是 clang-tidy 的新手,以下是练习,所以我可以转向更复杂的匹配器和工具。
可以说我们有
我的目标是识别与“my_type”进行比较的变量,以便通过将它们的类型更改为 my_type 来修复它们的声明。
现在我正在尝试执行以下操作
这里的问题是我忽略了上下文。做这样的事情的正确方法是什么?
c++ - clang-tidy 隔离多个字段声明
在 clang-tidy 中有 readability-isolate-declaration 检查。我正在尝试为字段声明做类似的事情。
让我们说我们有以下
如果我们在 clang-query 中检查上面的示例,我们会得到类似
在这里,我得到了 x 和 y 的 2 个不同的 FieldDecl。在以下情况下,我也得到 2 个 FieldDecls
这几乎是相同的。有人如何根据 AST 区分这两种情况?
c++ - 使用 clang-query 在 cpp 源代码中定位构造函数行号
我正在寻找使用 clang-query 获取构造函数最后一行的行号,有人知道如何到达那里吗?
我有很多源文件要通过,并且需要更新构造函数。我花时间尝试用正则表达式解析源文件,它适用于很多极端情况。所以这是列表中的下一项。
我尝试在网络上搜索和堆栈溢出,但我找不到太多,并且对语言解析器的工作方式有点迷茫。此外,我使用这个工具http://ce.steveire.com/作为m cxxConstructorDecl()
我对 clang-query 的输入,但它为我提供了包含“MyClass”的 4 行的匹配项,它只给了我一行构造函数的第一行。任何帮助表示赞赏!