这将是一个普遍的问题。我目前正在为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()
感谢。
答案 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