问题标签 [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 投票
1 回答
232 浏览

c++ - 遍历 AST 树的特定部分

我已经转储了一个简单的 C++ 代码的 AST 树。 在此处输入图像描述

是否可以只访问选定的节点而忽略其他所有内容,包括使用 libTooling 或 ASTMatchers 的子节点?

0 投票
1 回答
186 浏览

clang - 如何检查 Decl 是否在 #if 指令的范围内?

我正在构建一个clang libtool,我怎样才能获得预处理器信息,告诉我给定的Decl是否在#if #ifdef #ifndef的范围内?

0 投票
0 回答
113 浏览

objective-c - 将 Objective-C 对象指针类型与 Clang 的 LibTooling 中的可空性说明符匹配

可以说我有这样的代码:

现在,我想创建一个匹配器来匹配变量声明。

目前我有这样的事情:

有,objcObjectPointerType()但它只匹配a。有一些指针/引用匹配器,但它们根本不适用于这些变量声明。此外,我尝试过,isAnyPointer()但它适用于任何指针,无论是否为 obj-c。

我试图type()确保我所做的一切都是正确的,并且它有效。

那么,我怎样才能只匹配 obj-c 变量声明,有或没有可空性说明符?

谢谢!

0 投票
1 回答
1120 浏览

c++ - 单行多变量声明的clang ast访问者

我是 Clang libTooling 开发的新手。

考虑以下变量声明

对于我的项目要求,我想捕获整个声明表达式,包括“i”、“j”和“k”。

如何使用 clang libTooling 捕获完整的声明表达式,包括所有变量?

我正在经历的是,我没有让访问者获得完整的表达式,而是获得了访问者进行单个变量声明。

这是 clang libTooling 中的预期行为还是我遗漏了什么?

请建议我捕获单行多个声明或任何解决方法的正确方法?任何形式的帮助将不胜感激。

谢谢,赫曼特

0 投票
0 回答
255 浏览

c++ - 如何在 clang AST 中获取无效/未解析类型的实际名称

考虑以下代码

在上面的代码片段中,“unknownType”在编译时没有被解析,所以 clang 会将默认类型作为 int 放入 AST 并将声明标记为无效。

现在的问题是在遍历 AST 时,如何获得名称“unknownType”。用现有API获取类型名会给出int,其来源范围也是无效的。

有人遇到这样的问题吗?请帮忙?

谢谢,赫曼特

0 投票
0 回答
137 浏览

c++11 - clang libtooling 3.8.1 中未推断出“auto”类型

我正在使用 clang 3.8.1 libtooling 库。我已经为 C++ 自动类型编写了访问者。当我尝试获取推导类型时,我得到 NULL-TYPE。

有人遇到过类似的问题吗?请告诉我铿锵的自动类型扣除,因为它让我无处可去。

示例代码:

0 投票
0 回答
441 浏览

c++ - 未实例化的函数/类模板 ast 不是由 clang 生成的

我正在开发基于 clang libtooling 的 C/C++ 解析器。我使用 clang 生成的 AST 来解析代码。最近我观察到,对于未实例化的模板类或函数,clang 不会为该类或函数生成 AST。

示例:代码和相应的 AST 如下所示

在此处输入图像描述

有没有人遇到过这样的行为?这是预期的行为。我想做代码的静态分析,我不在乎模板类/函数是否被实例化。如果没有 AST,我将无法进行正确的静态分析。

请你帮我解决这个问题。提前致谢。

谢谢,赫曼特

0 投票
1 回答
336 浏览

clang - 铿锵工具。键入不带关键字的名称

我正在开发一些 clang 工具,我需要生成具有未明确指定的类型的源代码。我从中获得的具有类型的字符串clang::QualType 类似于:class std::initializer_list<int>. 问题是获取没有关键字的类型。

我尝试向所有继承人dyn_cast<>键入 ( ),但结果始终为空。clang::TypeTypeWithKeyword

当然,我可以从类型名称的字符串中删除所有出现的“class”、“struct”等,但我想用“clang 方式”解决这个问题。

0 投票
1 回答
64 浏览

c++11 - 在某些输入文件上运行自定义 clang 前端工具时出现异常

我根据以下链接编写了一个自定义 clang 前端工具。 http://clang.llvm.org/docs/RAVFrontendAction.html

现在我将 clang 源代码本身提供给我的前端工具进行静态分析。我的工具为此测试用例抛出异常 https://llvm.org/svn/llvm-project/cfe/trunk/test/CXX/expr/expr.const/p2-0x.cpp

从这个测试用例的文档来看,它是为未定义的行为而编写的。在此测试中运行 ClangTool 时,即使在控件进入 HandleTranslationUnit 之前,它也会引发 stackoverflow 异常

由于 clang 可以为上述测试用例生成 AST,我认为异常可能在编译期间出现。现在的问题是我不能继续访问这些文件的 AST 节点,因为我不关心输入源文件的语义。我只对静态分析感兴趣。

这是预期的行为吗?那么如何遍历生成的 AST 并访问节点。我真的被困在这一刻,不知道如何继续。请你帮我解决这个问题。

提前致谢!

谢谢,赫曼特·巴加特

0 投票
1 回答
306 浏览

c++ - 替换在 clang RefactoringTool 中返回空地图

我有一个 MatchFinder 定义为:

而 DeclarationMatcher 和 MatchCallback 如下:

在我的主代码中,我为查找器执行前端操作,并获取替换:

虽然我可以观察到在执行 FrontendAction 时会填充 FuncPrinter 中的 Replace 变量,但Tool.getReplacements()返回一个空的std::map<std::string, Replacements>. 如果有人能指出我出错的地方,我将不胜感激。