ClangCodeModel: Force clangd re-highlighting on font settings change

Change-Id: Ie449a5329bd49eac116751e66a07602f316e147d
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-11-15 14:58:40 +01:00
parent b41280b942
commit 5769dbe0aa
3 changed files with 10 additions and 10 deletions

View File

@@ -1072,7 +1072,7 @@ public:
const QString &type = {}); const QString &type = {});
void handleSemanticTokens(TextDocument *doc, const QList<ExpandedSemanticToken> &tokens, void handleSemanticTokens(TextDocument *doc, const QList<ExpandedSemanticToken> &tokens,
int version); int version, bool force);
enum class AstCallbackMode { SyncIfPossible, AlwaysAsync }; enum class AstCallbackMode { SyncIfPossible, AlwaysAsync };
using TextDocOrFile = const Utils::variant<const TextDocument *, Utils::FilePath>; using TextDocOrFile = const Utils::variant<const TextDocument *, Utils::FilePath>;
@@ -1270,8 +1270,8 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir)
setDiagnosticsHandlers(textMarkCreator, hideDiagsHandler); setDiagnosticsHandlers(textMarkCreator, hideDiagsHandler);
setSymbolStringifier(displayNameFromDocumentSymbol); setSymbolStringifier(displayNameFromDocumentSymbol);
setSemanticTokensHandler([this](TextDocument *doc, const QList<ExpandedSemanticToken> &tokens, setSemanticTokensHandler([this](TextDocument *doc, const QList<ExpandedSemanticToken> &tokens,
int version) { int version, bool force) {
d->handleSemanticTokens(doc, tokens, version); d->handleSemanticTokens(doc, tokens, version, force);
}); });
hoverHandler()->setHelpItemProvider([this](const HoverRequest::Response &response, hoverHandler()->setHelpItemProvider([this](const HoverRequest::Response &response,
const DocumentUri &uri) { const DocumentUri &uri) {
@@ -2630,7 +2630,7 @@ static void semanticHighlighter(QFutureInterface<HighlightingResult> &future,
// in the semantic tokens nor in the AST. // in the semantic tokens nor in the AST.
void ClangdClient::Private::handleSemanticTokens(TextDocument *doc, void ClangdClient::Private::handleSemanticTokens(TextDocument *doc,
const QList<ExpandedSemanticToken> &tokens, const QList<ExpandedSemanticToken> &tokens,
int version) int version, bool force)
{ {
SubtaskTimer t(highlightingTimer); SubtaskTimer t(highlightingTimer);
qCDebug(clangdLog) << "handling LSP tokens" << doc->filePath() << tokens.size(); qCDebug(clangdLog) << "handling LSP tokens" << doc->filePath() << tokens.size();
@@ -2641,7 +2641,7 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc,
} }
const auto previous = previousTokens.find(doc); const auto previous = previousTokens.find(doc);
if (previous != previousTokens.end()) { if (previous != previousTokens.end()) {
if (previous->first == tokens && previous->second == version) { if (!force && previous->first == tokens && previous->second == version) {
qCDebug(clangdLogHighlight) << "tokens and version same as last time; nothing to do"; qCDebug(clangdLogHighlight) << "tokens and version same as last time; nothing to do";
return; return;
} }

View File

@@ -261,7 +261,7 @@ void SemanticTokenSupport::updateSemanticTokens(TextDocument *textDocument)
void SemanticTokenSupport::rehighlight() void SemanticTokenSupport::rehighlight()
{ {
for (const Utils::FilePath &filePath : m_tokens.keys()) for (const Utils::FilePath &filePath : m_tokens.keys())
highlight(filePath); highlight(filePath, true);
} }
void addModifiers(int key, void addModifiers(int key,
@@ -474,7 +474,7 @@ void SemanticTokenSupport::handleSemanticTokensDelta(
highlight(filePath); highlight(filePath);
} }
void SemanticTokenSupport::highlight(const Utils::FilePath &filePath) void SemanticTokenSupport::highlight(const Utils::FilePath &filePath, bool force)
{ {
TextDocument *doc = TextDocument::textDocumentForFilePath(filePath); TextDocument *doc = TextDocument::textDocumentForFilePath(filePath);
if (!doc || LanguageClientManager::clientForDocument(doc) != m_client) if (!doc || LanguageClientManager::clientForDocument(doc) != m_client)
@@ -517,7 +517,7 @@ void SemanticTokenSupport::highlight(const Utils::FilePath &filePath)
} }
} }
m_tokensHandler(doc, expandedTokens, versionedTokens.version); m_tokensHandler(doc, expandedTokens, versionedTokens.version, force);
return; return;
} }
int line = 1; int line = 1;

View File

@@ -56,7 +56,7 @@ inline bool operator==(const ExpandedSemanticToken &t1, const ExpandedSemanticTo
&& t1.type == t2.type && t1.modifiers == t2.modifiers; && t1.type == t2.type && t1.modifiers == t2.modifiers;
} }
using SemanticTokensHandler = std::function<void(TextEditor::TextDocument *, using SemanticTokensHandler = std::function<void(TextEditor::TextDocument *,
const QList<ExpandedSemanticToken> &, int)>; const QList<ExpandedSemanticToken> &, int, bool)>;
namespace SemanticHighligtingSupport { namespace SemanticHighligtingSupport {
@@ -99,7 +99,7 @@ private:
void handleSemanticTokensDelta(const Utils::FilePath &filePath, void handleSemanticTokensDelta(const Utils::FilePath &filePath,
const LanguageServerProtocol::SemanticTokensDeltaResult &result, const LanguageServerProtocol::SemanticTokensDeltaResult &result,
int documentVersion); int documentVersion);
void highlight(const Utils::FilePath &filePath); void highlight(const Utils::FilePath &filePath, bool force = false);
void updateFormatHash(); void updateFormatHash();
void currentEditorChanged(); void currentEditorChanged();
void onCurrentEditorChanged(Core::IEditor *editor); void onCurrentEditorChanged(Core::IEditor *editor);