LSP: Avoid running strlen() on json keys

This feels better when stepping through the code but doesn't
really make a difference in the profile.

Change-Id: I2c30578bf1e990b039caadb8b8ce532f009b775d
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
hjk
2023-12-12 12:58:45 +01:00
parent d8561ccb2d
commit 570344b066
18 changed files with 318 additions and 308 deletions

View File

@@ -18,8 +18,8 @@ using namespace Utils;
namespace ClangCodeModel::Internal {
static constexpr char roleKey[] = "role";
static constexpr char arcanaKey[] = "arcana";
static constexpr LanguageServerProtocol::Key roleKey{"role"};
static constexpr LanguageServerProtocol::Key arcanaKey{"arcana"};
QString ClangdAstNode::role() const { return typedValue<QString>(roleKey); }
QString ClangdAstNode::kind() const { return typedValue<QString>(kindKey); }

View File

@@ -98,7 +98,7 @@ class SymbolDetails : public JsonObject
public:
using JsonObject::JsonObject;
static constexpr char usrKey[] = "usr";
static constexpr Key usrKey{"usr"};
// the unqualified name of the symbol
QString name() const { return typedValue<QString>(nameKey); }
@@ -229,15 +229,15 @@ class DiagnosticsCapabilities : public JsonObject
{
public:
using JsonObject::JsonObject;
void enableCategorySupport() { insert("categorySupport", true); }
void enableCodeActionsInline() {insert("codeActionsInline", true);}
void enableCategorySupport() { insert(Key{"categorySupport"}, true); }
void enableCodeActionsInline() {insert(Key{"codeActionsInline"}, true);}
};
class InactiveRegionsCapabilities : public JsonObject
{
public:
using JsonObject::JsonObject;
void enableInactiveRegionsSupport() { insert("inactiveRegions", true); }
void enableInactiveRegionsSupport() { insert(Key{"inactiveRegions"}, true); }
};
class ClangdTextDocumentClientCapabilities : public TextDocumentClientCapabilities
@@ -246,9 +246,9 @@ public:
using TextDocumentClientCapabilities::TextDocumentClientCapabilities;
void setPublishDiagnostics(const DiagnosticsCapabilities &caps)
{ insert("publishDiagnostics", caps); }
{ insert(Key{"publishDiagnostics"}, caps); }
void setInactiveRegionsCapabilities(const InactiveRegionsCapabilities &caps)
{ insert("inactiveRegionsCapabilities", caps); }
{ insert(Key{"inactiveRegionsCapabilities"}, caps); }
};
static qint64 getRevision(const TextDocument *doc)
@@ -1594,7 +1594,7 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc,
std::optional<QList<CodeAction> > ClangdDiagnostic::codeActions() const
{
auto actions = optionalArray<LanguageServerProtocol::CodeAction>("codeActions");
auto actions = optionalArray<LanguageServerProtocol::CodeAction>(Key{"codeActions"});
if (!actions)
return actions;
static const QStringList badCodeActions{
@@ -1611,7 +1611,7 @@ std::optional<QList<CodeAction> > ClangdDiagnostic::codeActions() const
QString ClangdDiagnostic::category() const
{
return typedValue<QString>("category");
return typedValue<QString>(Key{"category"});
}
MessageId ClangdClient::Private::getAndHandleAst(const TextDocOrFile &doc,

View File

@@ -623,7 +623,7 @@ IAssistProposal *ClangdFunctionHintProcessor::perform()
ClangdCompletionCapabilities::ClangdCompletionCapabilities(const JsonObject &object)
: TextDocumentClientCapabilities::CompletionCapabilities(object)
{
insert("editsNearCursor", true); // For dot-to-arrow correction.
insert(Key{"editsNearCursor"}, true); // For dot-to-arrow correction.
if (std::optional<CompletionItemCapbilities> completionItemCaps = completionItem()) {
completionItemCaps->setSnippetSupport(false);
setCompletionItem(*completionItemCaps);

View File

@@ -46,8 +46,8 @@ public:
return components;
}
static constexpr char totalKey[] = "_total";
static constexpr char selfKey[] = "_self";
static constexpr Key totalKey{"_total"};
static constexpr Key selfKey{"_self"};
};

View File

@@ -968,7 +968,9 @@ public:
using JsonObject::JsonObject;
DocumentUri uri() const { return TextDocumentIdentifier(value("textDocument")).uri(); }
QList<Range> inactiveRegions() const { return array<Range>("regions"); }
QList<Range> inactiveRegions() const {
return array<Range>(LanguageServerProtocol::Key{"regions"});
}
};
class InactiveRegionsNotification : public Notification<InactiveRegionsParams>