diff options
-rw-r--r-- | clang/tools/clang-format/CMakeLists.txt | 1 | ||||
-rw-r--r-- | clang/tools/clang-format/ClangFormat.cpp | 40 |
2 files changed, 15 insertions, 26 deletions
diff --git a/clang/tools/clang-format/CMakeLists.txt b/clang/tools/clang-format/CMakeLists.txt index 35ecdb11253..28ac4fb5913 100644 --- a/clang/tools/clang-format/CMakeLists.txt +++ b/clang/tools/clang-format/CMakeLists.txt @@ -7,6 +7,7 @@ add_clang_tool(clang-format set(CLANG_FORMAT_LIB_DEPS clangBasic clangFormat + clangFrontend clangRewrite clangToolingCore ) diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp index cbbb52bd0aa..db00d41d035 100644 --- a/clang/tools/clang-format/ClangFormat.cpp +++ b/clang/tools/clang-format/ClangFormat.cpp @@ -18,6 +18,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/Version.h" #include "clang/Format/Format.h" +#include "clang/Frontend/TextDiagnosticPrinter.h" #include "clang/Rewrite/Core/Rewriter.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" @@ -299,9 +300,12 @@ emitReplacementWarnings(const Replacements &Replaces, StringRef AssumedFileName, IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); DiagOpts->ShowColors = (ShowColors && !NoShowColors); + TextDiagnosticPrinter *DiagsBuffer = + new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts, false); + IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); IntrusiveRefCntPtr<DiagnosticsEngine> Diags( - new DiagnosticsEngine(DiagID, &*DiagOpts)); + new DiagnosticsEngine(DiagID, &*DiagOpts, DiagsBuffer)); IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( new llvm::vfs::InMemoryFileSystem); @@ -310,40 +314,24 @@ emitReplacementWarnings(const Replacements &Replaces, StringRef AssumedFileName, FileID FileID = createInMemoryFile(AssumedFileName, Code.get(), Sources, Files, InMemoryFileSystem.get()); - FileManager &FileMgr = Sources.getFileManager(); - llvm::ErrorOr<const FileEntry *> FileEntryPtr = - FileMgr.getFile(AssumedFileName); + const unsigned ID = Diags->getCustomDiagID( + WarningsAsErrors ? clang::DiagnosticsEngine::Error + : clang::DiagnosticsEngine::Warning, + "code should be clang-formatted [-Wclang-format-violations]"); unsigned Errors = 0; + DiagsBuffer->BeginSourceFile(LangOptions(), nullptr); if (WarnFormat && !NoWarnFormat) { for (const auto &R : Replaces) { - PresumedLoc PLoc = Sources.getPresumedLoc( - Sources.getLocForStartOfFile(FileID).getLocWithOffset(R.getOffset())); - - SourceLocation LineBegin = - Sources.translateFileLineCol(FileEntryPtr.get(), PLoc.getLine(), 1); - SourceLocation NextLineBegin = Sources.translateFileLineCol( - FileEntryPtr.get(), PLoc.getLine() + 1, 1); - - const char *StartBuf = Sources.getCharacterData(LineBegin); - const char *EndBuf = Sources.getCharacterData(NextLineBegin); - - StringRef Line(StartBuf, (EndBuf - StartBuf) - 1); - - SMDiagnostic Diags( - llvm::SourceMgr(), SMLoc(), AssumedFileName, PLoc.getLine(), - PLoc.getColumn(), - WarningsAsErrors ? SourceMgr::DiagKind::DK_Error - : SourceMgr::DiagKind::DK_Warning, - "code should be clang-formatted [-Wclang-format-violations]", Line, - ArrayRef<std::pair<unsigned, unsigned>>()); - - Diags.print(nullptr, llvm::errs(), (ShowColors && !NoShowColors)); + Diags->Report( + Sources.getLocForStartOfFile(FileID).getLocWithOffset(R.getOffset()), + ID); Errors++; if (ErrorLimit && Errors >= ErrorLimit) break; } } + DiagsBuffer->EndSourceFile(); return WarningsAsErrors; } |