禁用 Clang 工具诊断

Disable Clang Tool diagnostics

这将是一个一般性问题。我目前正在为 clang 编写一个与 AST 遍历相关的工具。所以我有一个 frontendaction 来创建一个 ASTConsumer,它还有一个 RecursiveASTVistor。我调用 Tool.run() 来执行我的操作。它运行良好,但默认情况下 clang 会打印出我尝试分析的 repo 中的所有警告和错误。无论如何我可以禁用 clang 诊断吗?我知道当我们用 clang 编译时,-w 选项都会禁用诊断。但是我们如何为工具做到这一点?顺便说一下,我的工具位于 /llvm/tools/clang/tools/extra/mytool

谢谢。

您可以使用 IgnoringDiagConsumer 来抑制所有诊断消息:

class MyFrontendAction : public ASTFrontendAction
{
public:
    MyFrontendAction() {}

    std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, StringRef file) override
    {
        CI.getDiagnostics().setClient(new IgnoringDiagConsumer());
        return llvm::make_unique<MyASTConsumer>();
    }
};

或者您可以实现自己的 DiagnosticConsumer 来处理诊断。

另一种选择是在命令行 -- 之后将 -w 选项传递给您的工具以忽略警告(当然不会抑制错误消息):

mytool.exe test.cpp -- -w