问题标签 [libtooling]

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 投票
0 回答
216 浏览

c++ - Clang AST 区分隐式 int 和无效类型

我正在使用 clang 和前端以及 RecursiveASTVisitor 开发 clang lib-tooling 项目。

对于以下代码(来自 llvm-clang 测试)

上面代码的 AST 是

在此处输入图像描述

如您所见,在 AST 中,变量sam被标记为无效,而变量y却不是,尽管两个变量都默认为 int。当我使用 RecursiveASTVisitor 遍历声明时,两个声明都无效。

现在的问题是如何区分这两个声明,因为 y 是隐式 int而 sam 是unresolved

有人遇到过这样的问题吗?

0 投票
0 回答
444 浏览

c++ - clang libtooling:如何检查方法是否从基类继承

我正在使用带有 libTooling 库的 clang 编译器前端开发 C++ 解析器。

对于来自 LLVM Clang 测试的以下代码

以下代码的 AST 是

在此处输入图像描述

请看第二个橙色框,这个函数没有在类 H 中显式声明,但它是从基类继承的,它引用了红色框中突出显示的相同模板类型。

我的问题是,我不想访问 H 类中的继承函数。那么如何跳过或忽略继承函数?

谢谢,赫曼特

0 投票
1 回答
1029 浏览

clang - Clang: write a function's AST from original file to a new file

I'm a novice for Clang who is trying to analyze AST via libtooling. I want to find a particular function, and move its AST from original source file to a new file.

I've known how to find the function by MatchFinder. Now, I was wondering how to write its AST to a new file(.c or .cpp)

Thanks in advance!

0 投票
1 回答
159 浏览

clang - Clang工具,检查是否最终或覆盖

是否有“clang 方式”来检查是否CXXMethodDecloverrideorfinal关键字指定?

我可以通过std::string::find(" override")字符串来检查它CXXMethodDecl,但是这种方式看起来有点难看。

0 投票
0 回答
833 浏览

c++ - 如何从 CXXMemberCallExpr 中提取类型和名称?

我想从 A::WriteData 方法定义中提取整个调用者对象的类型和名称以及成员调用表达式的参数类型。

用于 WriteData 方法的 clang AST 的相关部分在这里-

在这种情况下,我想从我的匹配器获得的信息是:

我尝试了以下匹配器:

这给了我想要提取的正确陈述。

我提取了以下内容(下面是无效的 c++):

  1. 通过将参数的 QualType 作为字符串获取参数类型:

    /li>
  2. 参数名称:

    /li>
  3. 对象调用者的类型:

    /li>
  4. 对象调用方法:

    /li>

如何获取对象调用者本身? 有没有更好的方法来获取传递给 Write 方法的参数名称?

看着 AST,我不知道从哪里开始。

0 投票
2 回答
2215 浏览

c++ - Clang 使用 LibTooling Rewriter 生成新文件?

我正在使用 LibTooling 进行一些分析。我知道如何遍历 AST 并将一些文本插入某处。例如,

现在我想知道是否有任何方法可以保存代码?(天气保存到原始文件或生成新文件)

因为分析后,我只能在终端上读取结果,这对我来说还不够。

0 投票
0 回答
358 浏览

clang - 运行 clang libtooling 时出现分段错误(核心转储)

我实现了一个简单的重构工具,它可以将函数名称替换为用户特定的名称。

当我在测试代码(没有任何头文件)上运行该工具时,它运行良好。

但是,如果我在测试代码中包含头文件,例如

...然后,我再次运行它。存在分段错误(核心转储):

我对此感到困惑,因为我只添加了一个“#include <...>”你能帮忙检查一下故障信息吗?提前致谢!

0 投票
2 回答
847 浏览

include - 如何使用 clang libtooling 获取#includes 的源位置?

有没有办法通过它的或什么来获取clang::SourceLocation每个#include文件? clang::FileIDclang::FileEntry

0 投票
0 回答
71 浏览

clang - addToCallGraph 可以为我做所有事情来生成调用图吗?

我想为 .cpp 文件中的特定函数生成调用图。我通过使用 AST Matcher 获得函数的 decl。然后,我将 decl 传递给 addToCallGraph 函数;

之后,我尝试打印调用图:

但是,我发现结果并不完整。例如调用关系是A()->B();B()->C() 结果是:

B 和 C 之间的关系尚未显示。

我的问题是,

1) addToCallGraph 是否完成了所有调用图的生成过程?

2)我们如何检查A,B和C之间的所有关系?

提前致谢!

0 投票
1 回答
292 浏览

c - clang libtooling 安全地插入新标头

我正在使用 clang 的 libtooling 来修改一些代码,并且我正在尝试找到一种方法来在我的工具用于 C 文件时安全地插入标头。

我已阅读What's the right way to match #includes (or #defines) using Clang's libtooling? 关于对预处理器的匹配调用的问题,但我仍然不确定使用它来插入代码。

使用 libtooling 重写器插入新 #include 的正确方法是什么?