forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user