forked from OSchip/llvm-project
Fix colored diagnostics from tools
r271042 changed the way the diagnostic arguments are parsed. It assumes that the diagnostics options were already parsed by the "Driver". For tools using clang::Tooling, the diagnostics argument were not parsed. Differential Revision: https://reviews.llvm.org/D23837 llvm-svn: 280118
This commit is contained in:
parent
624cdc3803
commit
b37a5e3a71
|
@ -15,6 +15,7 @@
|
|||
#include "clang/Tooling/Tooling.h"
|
||||
#include "clang/Driver/Compilation.h"
|
||||
#include "clang/Driver/Driver.h"
|
||||
#include "clang/Driver/Options.h"
|
||||
#include "clang/Driver/Tool.h"
|
||||
#include "clang/Driver/ToolChain.h"
|
||||
#include "clang/Frontend/ASTUnit.h"
|
||||
|
@ -26,6 +27,7 @@
|
|||
#include "clang/Tooling/CompilationDatabase.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
#include "llvm/Option/ArgList.h"
|
||||
#include "llvm/Option/Option.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
|
@ -241,6 +243,12 @@ bool ToolInvocation::run() {
|
|||
Argv.push_back(Str.c_str());
|
||||
const char *const BinaryName = Argv[0];
|
||||
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
|
||||
unsigned MissingArgIndex, MissingArgCount;
|
||||
llvm::opt::InputArgList ParsedArgs =
|
||||
driver::createDriverOptTable()->ParseArgs(
|
||||
ArrayRef<const char *>(Argv).slice(1), MissingArgIndex,
|
||||
MissingArgCount);
|
||||
ParseDiagnosticArgs(*DiagOpts, ParsedArgs);
|
||||
TextDiagnosticPrinter DiagnosticPrinter(
|
||||
llvm::errs(), &*DiagOpts);
|
||||
DiagnosticsEngine Diagnostics(
|
||||
|
|
|
@ -332,6 +332,44 @@ TEST(runToolOnCodeWithArgs, TestNoDepFile) {
|
|||
EXPECT_FALSE(llvm::sys::fs::remove(DepFilePath.str()));
|
||||
}
|
||||
|
||||
struct CheckColoredDiagnosticsAction : public clang::ASTFrontendAction {
|
||||
CheckColoredDiagnosticsAction(bool ShouldShowColor)
|
||||
: ShouldShowColor(ShouldShowColor) {}
|
||||
std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &Compiler,
|
||||
StringRef) override {
|
||||
if (Compiler.getDiagnosticOpts().ShowColors != ShouldShowColor)
|
||||
Compiler.getDiagnostics().Report(
|
||||
Compiler.getDiagnostics().getCustomDiagID(
|
||||
DiagnosticsEngine::Fatal,
|
||||
"getDiagnosticOpts().ShowColors != ShouldShowColor"));
|
||||
return llvm::make_unique<ASTConsumer>();
|
||||
}
|
||||
|
||||
private:
|
||||
bool ShouldShowColor = true;
|
||||
};
|
||||
|
||||
TEST(runToolOnCodeWithArgs, DiagnosticsColor) {
|
||||
|
||||
EXPECT_TRUE(runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(true), "",
|
||||
{"-fcolor-diagnostics"}));
|
||||
EXPECT_TRUE(runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(false),
|
||||
"", {"-fno-color-diagnostics"}));
|
||||
EXPECT_TRUE(
|
||||
runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(true), "",
|
||||
{"-fno-color-diagnostics", "-fcolor-diagnostics"}));
|
||||
EXPECT_TRUE(
|
||||
runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(false), "",
|
||||
{"-fcolor-diagnostics", "-fno-color-diagnostics"}));
|
||||
EXPECT_TRUE(runToolOnCodeWithArgs(
|
||||
new CheckColoredDiagnosticsAction(true), "",
|
||||
{"-fno-color-diagnostics", "-fdiagnostics-color=always"}));
|
||||
|
||||
// Check that this test would fail if ShowColors is not what it should.
|
||||
EXPECT_FALSE(runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(false),
|
||||
"", {"-fcolor-diagnostics"}));
|
||||
}
|
||||
|
||||
TEST(ClangToolTest, ArgumentAdjusters) {
|
||||
FixedCompilationDatabase Compilations("/", std::vector<std::string>());
|
||||
|
||||
|
|
Loading…
Reference in New Issue