Compare commits

...

4 Commits

Author SHA1 Message Date
rherilier
e097bd6ffd
Merge 5d401fc95d into 3799e38920 2025-07-05 01:13:49 -04:00
Fangrui Song
3799e38920 Adapt llvmorg-21 changes: clang::CompilerInstance and llvm::PointerUnion 2025-05-11 23:37:30 -07:00
Fangrui Song
5d401fc95d early return and add a comment 2024-11-23 17:52:20 -08:00
Rémi Hérilier
e55cc6865c workspace: Make didChangeConfiguration use its parameter
to update the configuration settings.
2024-11-18 20:30:32 +01:00
4 changed files with 55 additions and 4 deletions

View File

@ -377,10 +377,17 @@ const Decl *getAdjustedDecl(const Decl *d) {
if (!s->isExplicitSpecialization()) {
llvm::PointerUnion<ClassTemplateDecl *, ClassTemplatePartialSpecializationDecl *> result =
s->getSpecializedTemplateOrPartial();
if (result.is<ClassTemplateDecl *>())
#if LLVM_VERSION_MAJOR >= 21
if (auto *ctd = dyn_cast<ClassTemplateDecl *>(result))
d = ctd;
else
d = cast<ClassTemplatePartialSpecializationDecl *>(result);
#else
if (isa<ClassTemplateDecl *>(result))
d = result.get<ClassTemplateDecl *>();
else
d = result.get<ClassTemplatePartialSpecializationDecl *>();
#endif
continue;
}
} else if (auto *d1 = r->getInstantiatedFromMemberClass()) {
@ -964,10 +971,17 @@ public:
else if (auto *sd = dyn_cast<ClassTemplateSpecializationDecl>(rd)) {
llvm::PointerUnion<ClassTemplateDecl *, ClassTemplatePartialSpecializationDecl *> result =
sd->getSpecializedTemplateOrPartial();
#if LLVM_VERSION_MAJOR >= 21
if (auto *ctd = dyn_cast<ClassTemplateDecl *>(result))
d1 = ctd;
else
d1 = cast<ClassTemplatePartialSpecializationDecl *>(result);
#else
if (result.is<ClassTemplateDecl *>())
d1 = result.get<ClassTemplateDecl *>();
else
d1 = result.get<ClassTemplatePartialSpecializationDecl *>();
#endif
} else
d1 = rd->getInstantiatedFromMemberClass();
@ -1241,15 +1255,23 @@ IndexResult index(SemaManager *manager, WorkingFiles *wfiles, VFS *vfs, const st
}
IndexDiags dc;
#if LLVM_VERSION_MAJOR >= 21
auto clang = std::make_unique<CompilerInstance>(std::move(ci), pch);
#else
auto clang = std::make_unique<CompilerInstance>(pch);
clang->setInvocation(std::move(ci));
#endif
clang->createDiagnostics(
#if LLVM_VERSION_MAJOR >= 20
*fs,
#endif
&dc, false);
clang->getDiagnostics().setIgnoreAllWarnings(true);
#if LLVM_VERSION_MAJOR >= 21
clang->setTarget(TargetInfo::CreateTargetInfo(clang->getDiagnostics(), clang->getTargetOpts()));
#else
clang->setTarget(TargetInfo::CreateTargetInfo(clang->getDiagnostics(), clang->getInvocation().TargetOpts));
#endif
if (!clang->hasTarget())
return {};
clang->getPreprocessorOpts().RetainRemappedFileBuffers = true;

View File

@ -296,7 +296,7 @@ private:
void textDocument_signatureHelp(TextDocumentPositionParam &, ReplyOnce &);
void textDocument_switchSourceHeader(TextDocumentIdentifier &, ReplyOnce &);
void textDocument_typeDefinition(TextDocumentPositionParam &, ReplyOnce &);
void workspace_didChangeConfiguration(EmptyParam &);
void workspace_didChangeConfiguration(JsonReader &);
void workspace_didChangeWatchedFiles(DidChangeWatchedFilesParam &);
void workspace_didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParam &);
void workspace_executeCommand(JsonReader &, ReplyOnce &);

View File

@ -13,6 +13,9 @@
#include <llvm/ADT/StringRef.h>
#include <llvm/Support/Path.h>
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <algorithm>
#include <ctype.h>
#include <functional>
@ -22,13 +25,31 @@ using namespace llvm;
namespace ccls {
REFLECT_STRUCT(SymbolInformation, name, kind, location, containerName);
void MessageHandler::workspace_didChangeConfiguration(EmptyParam &) {
void MessageHandler::workspace_didChangeConfiguration(JsonReader &reader) {
auto it = reader.m->FindMember("settings");
if (!(it != reader.m->MemberEnd() && it->value.IsObject()))
return;
// Similar to MessageHandler::initialize.
rapidjson::StringBuffer output;
rapidjson::Writer<rapidjson::StringBuffer> writer(output);
JsonReader m1(&it->value);
it->value.Accept(writer);
LOG_S(INFO) << "didChangeConfiguration: " << output.GetString();
try {
reflect(m1, *g_config);
} catch (std::invalid_argument &) {
reader.path_.push_back("settings");
reader.path_.insert(reader.path_.end(), m1.path_.begin(), m1.path_.end());
throw;
}
for (auto &[folder, _] : g_config->workspaceFolders)
project->load(folder);
project->index(wfiles, RequestId());
manager->clear();
};
}
void MessageHandler::workspace_didChangeWatchedFiles(DidChangeWatchedFilesParam &param) {
for (auto &event : param.changes) {

View File

@ -261,14 +261,22 @@ std::unique_ptr<CompilerInstance> buildCompilerInstance(Session &session, std::u
else
ci->getPreprocessorOpts().addRemappedFile(main, buf.get());
#if LLVM_VERSION_MAJOR >= 21
auto clang = std::make_unique<CompilerInstance>(std::move(ci), session.pch);
#else
auto clang = std::make_unique<CompilerInstance>(session.pch);
clang->setInvocation(std::move(ci));
#endif
clang->createDiagnostics(
#if LLVM_VERSION_MAJOR >= 20
*fs,
#endif
&dc, false);
#if LLVM_VERSION_MAJOR >= 21
clang->setTarget(TargetInfo::CreateTargetInfo(clang->getDiagnostics(), clang->getTargetOpts()));
#else
clang->setTarget(TargetInfo::CreateTargetInfo(clang->getDiagnostics(), clang->getInvocation().TargetOpts));
#endif
if (!clang->hasTarget())
return nullptr;
clang->getPreprocessorOpts().RetainRemappedFileBuffers = true;