mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-11 18:36:55 +00:00
[clangd] Only re-open files if their flags changed
Reviewers: sammccall Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D72647
This commit is contained in:
parent
2f63d549f1
commit
60249c2c3b
@ -1126,10 +1126,8 @@ void ClangdLSPServer::onResolveTypeHierarchy(
|
||||
void ClangdLSPServer::applyConfiguration(
|
||||
const ConfigurationSettings &Settings) {
|
||||
// Per-file update to the compilation database.
|
||||
bool ShouldReparseOpenFiles = false;
|
||||
llvm::StringSet<> ModifiedFiles;
|
||||
for (auto &Entry : Settings.compilationDatabaseChanges) {
|
||||
/// The opened files need to be reparsed only when some existing
|
||||
/// entries are changed.
|
||||
PathRef File = Entry.first;
|
||||
auto Old = CDB->getCompileCommand(File);
|
||||
auto New =
|
||||
@ -1138,11 +1136,11 @@ void ClangdLSPServer::applyConfiguration(
|
||||
/*Output=*/"");
|
||||
if (Old != New) {
|
||||
CDB->setCompileCommand(File, std::move(New));
|
||||
ShouldReparseOpenFiles = true;
|
||||
ModifiedFiles.insert(File);
|
||||
}
|
||||
}
|
||||
if (ShouldReparseOpenFiles)
|
||||
reparseOpenedFiles();
|
||||
|
||||
reparseOpenedFiles(ModifiedFiles);
|
||||
}
|
||||
|
||||
void ClangdLSPServer::publishSemanticHighlighting(
|
||||
@ -1463,10 +1461,15 @@ void ClangdLSPServer::onFileUpdated(PathRef File, const TUStatus &Status) {
|
||||
notify("textDocument/clangd.fileStatus", Status.render(File));
|
||||
}
|
||||
|
||||
void ClangdLSPServer::reparseOpenedFiles() {
|
||||
void ClangdLSPServer::reparseOpenedFiles(
|
||||
const llvm::StringSet<> &ModifiedFiles) {
|
||||
if (ModifiedFiles.empty())
|
||||
return;
|
||||
// Reparse only opened files that were modified.
|
||||
for (const Path &FilePath : DraftMgr.getActiveFiles())
|
||||
Server->addDocument(FilePath, *DraftMgr.getDraft(FilePath),
|
||||
WantDiagnostics::Auto);
|
||||
if (ModifiedFiles.find(FilePath) != ModifiedFiles.end())
|
||||
Server->addDocument(FilePath, *DraftMgr.getDraft(FilePath),
|
||||
WantDiagnostics::Auto);
|
||||
}
|
||||
|
||||
} // namespace clangd
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "Transport.h"
|
||||
#include "clang/Tooling/Core/Replacement.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/ADT/StringSet.h"
|
||||
#include <memory>
|
||||
|
||||
namespace clang {
|
||||
@ -123,10 +124,10 @@ private:
|
||||
/// produce '->' and '::', respectively.
|
||||
bool shouldRunCompletion(const CompletionParams &Params) const;
|
||||
|
||||
/// Forces a reparse of all currently opened files. As a result, this method
|
||||
/// may be very expensive. This method is normally called when the
|
||||
/// compilation database is changed.
|
||||
void reparseOpenedFiles();
|
||||
/// Forces a reparse of all currently opened files which were modified. As a
|
||||
/// result, this method may be very expensive. This method is normally called
|
||||
/// when the compilation database is changed.
|
||||
void reparseOpenedFiles(const llvm::StringSet<> &ModifiedFiles);
|
||||
void applyConfiguration(const ConfigurationSettings &Settings);
|
||||
|
||||
/// Sends a "publishSemanticHighlighting" notification to the LSP client.
|
||||
|
@ -46,8 +46,6 @@
|
||||
# ERR: Updating file {{.*}}foo.c with command
|
||||
# ERR: [{{.*}}clangd-test2]
|
||||
# ERR: clang -c foo.c -Wall -Werror
|
||||
# Don't reparse the second file:
|
||||
# ERR: Skipping rebuild of the AST for {{.*}}bar.c
|
||||
---
|
||||
{"jsonrpc":"2.0","id":5,"method":"shutdown"}
|
||||
---
|
||||
|
Loading…
x
Reference in New Issue
Block a user