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

clang - 如何比较clang中的两个decls?

除了简单地获取并检查 decls 的名称之外,clang 中是否有一些方法可以比较两个或多个 decls (clang::Decl) 是否相同?

0 投票
1 回答
153 浏览

c++ - 使用相对标头包含路径重新解析 ASTUnit 失败

我正在使用 libclangLibTooling从 C++ 源文件中获取代码完成数据。ASTUnits 是从通过with作为生成器创建的compile_commands.json文件生成的。CMakeNinja

在编译器调用命令中,有相对的头文件包含路径(例如-Ifoo -I../bar)。

成功生成一个clang::ASTUnit,我需要设置clang::FileManager::FileSystemOptions::WorkingDir以指示 clang 如何规范化相对路径。

问题是,打电话时clang::ASTUnit::Reparse()我的 ASTUnits 时,这个值被丢弃,clang::DiagnosticConsumer然后我报告丢失的头文件。

作为一种解决方法,我从头开始重新生成 ASTUnit,而不是在源更改时重新解析它们。


问题:

Q1:这是正常行为吗?对我来说,它本质上Reparse毫无用处。
Q2:如何成功地重新解析具有相对标头包含路径的 ASTUnit?

0 投票
0 回答
676 浏览

clang - Clang 源到源转换

我正在做一些 Clang 源到源的转换。我是从 Clang 源代码做的:clang/tools/extra. 我所做的是printf("Hello World\n");在 main 方法的开头添加一个。它工作得很好,我运行我的工具bin/add-code ../../test/hello.c,它变成了:

对此:

add-code是我写的 clang libtool。
但是这个重写器只将更改写入终端;而我想用修改编译 hello.c 并想用 clang 命令来做,clang -c hello.c不像我在这里做的那样。
我怎么能那样做?

0 投票
1 回答
476 浏览

c++ - 将内存文件添加到 clang CompilerInstance

我正在尝试使用 clang 创建一个工具,并且想知道是否可以将包含文件从内存注入到CompilerInstance预处理器。
我的目标是在#include <my_globals.hpp>我的文件中添加一个并动态地包含该文件和适当的内容。所以我有一个ASTFrontendAction这样的:

只要我不包含我的头文件,解析就可以工作。如果我这样做,我会得到一个my_globals.hpp file not found.
所以addRemappedFile不会使这个文件对预处理器可见。我可以添加一些搜索路径,但我怎样才能表明这个文件没有路径?
谁能给我提示我如何解决这个问题。

0 投票
1 回答
146 浏览

clang - 如何在clang libtooling进行功能分析时排除内置/系统功能

我正在尝试使用 clang libtooling 来分析函数。这是我要分析的源代码:

当我运行我的工具来获取上述文件中的所有函数 decl 时,我发现有很多内置/系统函数,例如:

(我认为它们是由头文件“stdio.h”引入的)

我的问题是:如何从“stdio.h”文件或其他(系统)头文件中删除所有这些内置/系统函数?

提前致谢!!!

0 投票
1 回答
353 浏览

clang - clang libtooling 生成的调用图(.dot)没有节点标签

我是 clang libtooling 的初学者。我正在尝试使用 clang::CallGraph viewGraph 来生成我的调用图的 .dot 文件。这是代码:

有趣的是,生成的调用图文件 (.dot) 没有节点的标签,尽管我可以正确打印带有所有节点名称的调用图。

这是生成的图片: 在此处输入图像描述

我很好奇为什么会这样显示。我的代码中哪一部分有问题?

提前致谢!

0 投票
1 回答
90 浏览

clang - LibTooling 是否可能不会更改标题?

我有一个 LibTooling (TimeFlag),用于为每个 forstmt/whilestmt 添加一个标志。我用来./TimeFlag lalala.cpp --在 lalala.cpp 中插入标志

不幸的是,这个工具也会改变头文件,甚至系统库。

那么有没有一些方法让 LibTooling 只处理输入文件?

0 投票
0 回答
227 浏览

c++ - 带有 MatchFinder 的 Clang libtooling

我是 libtooling 的初学者,我尝试使用简单的 c++ 代码来学习。我尝试解析/打印 typedef 表达式,如下行:

clang++ -Xclang -ast-dump -fsyntax-only输出:

为了解析它,我创建了一个继承自MatchFinder::MatchCallback和重载的类MatchFinder::MatchCallback::run

但是Item指针等于null。我可以解析/打印函数、变量、类、结构模板、方法模板、枚举... with MacthFinder::MatchCallback,但这种方式不能在 typedef 上运行。这段代码有什么问题?

0 投票
1 回答
288 浏览

c++ - Clang LibTooling - 如何使用 DependencyCollector

我试图在我的工具中使用 Clang 的 DependencyCollector 类来列出文件中的所有依赖项,比如说 test.cpp
这是我的程序:

现在,如果我运行程序,例如文件test.cpp

该程序没有找到任何包含。
如果有人可以帮助我,那就太好了,因为在互联网上搜索了数小时后我无法找到答案。

0 投票
3 回答
14434 浏览

c++ - 忽略 clang-tidy 中的系统头文件

tldr;> 如何在 clang-tidy 中隐藏来自系统标头的警告?

我有以下最小示例源文件,它在系统标头中触发了一个整洁的警告:

在 Ubuntu 17.04 上使用 clang-tidy 4.0.0 使用 libstdc++ 7.0.1 调用它:

产量

我想在系统标题中隐藏警告。我尝试了以下方法:

但警告仍然显示。