[PATCH] D68969: [clang-format] Remove the dependency on frontend
MyDeveloperDay via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 16 15:36:54 PDT 2019
MyDeveloperDay updated this revision to Diff 225320.
MyDeveloperDay added a comment.
Remove need to split lines or search for `\n`
General Algorithm
1. take Location of Replacement line and column
2. make a new SourceLocation of line and column =0 (beginning of that replacement line)
3. make a new SourceLocation of line+1 and column = 0 (beginning of the next line)
4. use `getCharacterData()` to get pointers to beginning of each line
5. make a String from those begin and end ptrs
Seems very much faster when run over clang source tree (removal of noticeable pauses on large files)
That should equal the line
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68969/new/
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,8 +18,8 @@
#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/Demangle/StringView.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/InitLLVM.h"
@@ -325,12 +325,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 +336,41 @@
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]");
+ FileManager &FileMgr = Sources.getFileManager();
+ llvm::ErrorOr<const FileEntry *> FileEntryPtr =
+ FileMgr.getFile(AssumedFileName);
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()));
+
+ SourceLocation LineBegin = Sources.translateFileLineCol(
+ FileEntryPtr.get(), PLoc.getLine() - 1, 0);
+ SourceLocation NextLineBegin =
+ Sources.translateFileLineCol(FileEntryPtr.get(), PLoc.getLine(), 0);
+
+ const char *StartBuf = Sources.getCharacterData(LineBegin);
+ const char *EndBuf = Sources.getCharacterData(NextLineBegin);
+
+ StringRef Line(StartBuf, (EndBuf - StartBuf));
+
+ 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.225320.patch
Type: text/x-patch
Size: 3596 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191016/a8e7b1c8/attachment-0001.bin>
More information about the cfe-commits
mailing list