禁用Clang Tool诊断

时间:2015-07-21 14:38:38

标签: c++ c++11 clang llvm llvm-clang

这将是一个普遍的问题。我目前正在为public static final synchronized String getContents(File file) { StringBuilder builder = null; Reader reader = null; try { builder = new StringBuilder(); reader = new InputStreamReader(new FileInputStream(file)); int data; while((data = reader.read()) != -1) { builder.append((char)data); } } catch (IOException ioe) { ioe.printStackTrace(); } finally { reader.close(); } return builder.toString(); } 编写一个与AST遍历相关的工具。所以我有一个var newArr = oldArr.concat([newEl]); 来创建一个clang,其中还有一个frontendaction。我致电ASTConsumer来执行我的行动。它运行正常,但默认情况下clang打印出我试图分析的repo中的所有警告和错误。无论如何我可以禁用clang诊断吗?我知道当我们用clang编译时,RecursiveASTVistor选项都会禁用诊断。但是我们如何为工具做到这一点?顺便说一句,我的工具位于Tool.run()

感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用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