问题标签 [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.
clang - 如何比较clang中的两个decls?
除了简单地获取并检查 decls 的名称之外,clang 中是否有一些方法可以比较两个或多个 decls (clang::Decl) 是否相同?
c++ - 使用相对标头包含路径重新解析 ASTUnit 失败
我正在使用 libclangLibTooling
从 C++ 源文件中获取代码完成数据。ASTUnits 是从通过with作为生成器创建的compile_commands.json文件生成的。CMake
Ninja
在编译器调用命令中,有相对的头文件包含路径(例如-Ifoo -I../bar
)。
成功生成一个clang::ASTUnit
,我需要设置clang::FileManager::FileSystemOptions::WorkingDir
以指示 clang 如何规范化相对路径。
问题是,打电话时
clang::ASTUnit::Reparse()
我的 ASTUnits 时,这个值被丢弃,clang::DiagnosticConsumer
然后我报告丢失的头文件。
作为一种解决方法,我从头开始重新生成 ASTUnit,而不是在源更改时重新解析它们。
问题:
Q1:
这是正常行为吗?对我来说,它本质上Reparse
毫无用处。
Q2:
如何成功地重新解析具有相对标头包含路径的 ASTUnit?
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
不像我在这里做的那样。
我怎么能那样做?
c++ - 将内存文件添加到 clang CompilerInstance
我正在尝试使用 clang 创建一个工具,并且想知道是否可以将包含文件从内存注入到CompilerInstance
预处理器。
我的目标是在#include <my_globals.hpp>
我的文件中添加一个并动态地包含该文件和适当的内容。所以我有一个ASTFrontendAction
这样的:
只要我不包含我的头文件,解析就可以工作。如果我这样做,我会得到一个my_globals.hpp file not found
.
所以addRemappedFile
不会使这个文件对预处理器可见。我可以添加一些搜索路径,但我怎样才能表明这个文件没有路径?
谁能给我提示我如何解决这个问题。
clang - 如何在clang libtooling进行功能分析时排除内置/系统功能
我正在尝试使用 clang libtooling 来分析函数。这是我要分析的源代码:
当我运行我的工具来获取上述文件中的所有函数 decl 时,我发现有很多内置/系统函数,例如:
(我认为它们是由头文件“stdio.h”引入的)
我的问题是:如何从“stdio.h”文件或其他(系统)头文件中删除所有这些内置/系统函数?
提前致谢!!!
clang - LibTooling 是否可能不会更改标题?
我有一个 LibTooling (TimeFlag),用于为每个 forstmt/whilestmt 添加一个标志。我用来./TimeFlag lalala.cpp --
在 lalala.cpp 中插入标志
不幸的是,这个工具也会改变头文件,甚至系统库。
那么有没有一些方法让 LibTooling 只处理输入文件?
c++ - 带有 MatchFinder 的 Clang libtooling
我是 libtooling 的初学者,我尝试使用简单的 c++ 代码来学习。我尝试解析/打印 typedef 表达式,如下行:
clang++ -Xclang -ast-dump -fsyntax-only
输出:
为了解析它,我创建了一个继承自MatchFinder::MatchCallback
和重载的类MatchFinder::MatchCallback::run
:
但是Item
指针等于null。我可以解析/打印函数、变量、类、结构模板、方法模板、枚举... with MacthFinder::MatchCallback
,但这种方式不能在 typedef 上运行。这段代码有什么问题?
c++ - Clang LibTooling - 如何使用 DependencyCollector
我试图在我的工具中使用 Clang 的 DependencyCollector 类来列出文件中的所有依赖项,比如说 test.cpp
这是我的程序:
现在,如果我运行程序,例如文件test.cpp
:
该程序没有找到任何包含。
如果有人可以帮助我,那就太好了,因为在互联网上搜索了数小时后我无法找到答案。
c++ - 忽略 clang-tidy 中的系统头文件
tldr;> 如何在 clang-tidy 中隐藏来自系统标头的警告?
我有以下最小示例源文件,它在系统标头中触发了一个整洁的警告:
在 Ubuntu 17.04 上使用 clang-tidy 4.0.0 使用 libstdc++ 7.0.1 调用它:
产量
我想在系统标题中隐藏警告。我尝试了以下方法:
但警告仍然显示。