[PATCH] D68969: [clang-format] Remove the dependency on frontend
MyDeveloperDay via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 14 20:50:22 PDT 2019
MyDeveloperDay created this revision.
MyDeveloperDay added reviewers: thakis, klimek, mitchell-stellar.
MyDeveloperDay added projects: clang, clang-format.
Herald added a subscriber: mgorny.
Address review comments from D68554: [clang-format] Proposal for clang-format to give compiler style warnings <https://reviews.llvm.org/D68554> by trying to drop the dependency again on Frontend whilst keeping the same format diagnostic messages
Not completely happy with having to do a split in order to get the StringRef for the Line the error occurred on, but could see a way to use SourceManager and SourceLocation to give me a single line?
But this removes the dependency on frontend which should keep the binary size down.
Repository:
rC Clang
https://reviews.llvm.org/D68969
Files:
clang/tools/clang-format/CMakeLists.txt
clang/tools/clang-format/ClangFormat.cpp
Index: clang/tools/clang-format/ClangFormat.cpp
===================================================================
--- clang/tools/clang-format/ClangFormat.cpp
+++ clang/tools/clang-format/ClangFormat.cpp
@@ -18,7 +18,6 @@
#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"
@@ -325,12 +324,9 @@
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, DiagsBuffer));
+ new DiagnosticsEngine(DiagID, &*DiagOpts));
IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem(
new llvm::vfs::InMemoryFileSystem);
@@ -339,24 +335,35 @@
FileID FileID = createInMemoryFile(AssumedFileName, Code.get(), Sources,
Files, InMemoryFileSystem.get());
- const unsigned ID = Diags->getCustomDiagID(
- WarningsAsErrors ? clang::DiagnosticsEngine::Error
- : clang::DiagnosticsEngine::Warning,
- "code should be clang-formatted [-Wclang-format-violations]");
+ SmallVector<StringRef, 8> Lines;
+ Code->getBuffer().split(Lines, "\n", /*MaxSplit=*/-1,
+ /*KeepEmpty=*/true);
unsigned Errors = 0;
- DiagsBuffer->BeginSourceFile(LangOptions(), nullptr);
if (WarnFormat && !NoWarnFormat) {
+ ArrayRef<std::pair<unsigned, unsigned>> Ranges;
for (const auto &R : Replaces) {
- Diags->Report(
- Sources.getLocForStartOfFile(FileID).getLocWithOffset(R.getOffset()),
- ID);
+ PresumedLoc PLoc = Sources.getPresumedLoc(
+ Sources.getLocForStartOfFile(FileID).getLocWithOffset(R.getOffset()));
+
+ StringRef Line;
+ if (PLoc.getLine() < Lines.size() && PLoc.getLine() > 0)
+ Line = Lines[PLoc.getLine() - 1];
+
+ SMDiagnostic Diags(
+ llvm::SourceMgr(), SMLoc(), AssumedFileName, PLoc.getLine(),
+ PLoc.getColumn() - 1,
+ 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));
Errors++;
if (ErrorLimit && Errors >= ErrorLimit)
break;
}
}
- DiagsBuffer->EndSourceFile();
return WarningsAsErrors;
}
Index: clang/tools/clang-format/CMakeLists.txt
===================================================================
--- clang/tools/clang-format/CMakeLists.txt
+++ clang/tools/clang-format/CMakeLists.txt
@@ -7,7 +7,6 @@
set(CLANG_FORMAT_LIB_DEPS
clangBasic
clangFormat
- clangFrontend
clangRewrite
clangToolingCore
)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68969.224953.patch
Type: text/x-patch
Size: 3217 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191015/0137f2d4/attachment.bin>
More information about the cfe-commits
mailing list