Merge remote-tracking branch 'origin/8.0'

Change-Id: Icbb87ac8bcee5fb86042d3863a973573510651b4
This commit is contained in:
hjk
2022-08-05 08:48:22 +02:00
31 changed files with 440 additions and 380 deletions

View File

@@ -3227,7 +3227,10 @@ class DumperBase():
lbyte = ldata[i] lbyte = ldata[i]
else: else:
lbyte = ldata[fieldOffset + fieldSize - 1 - i] lbyte = ldata[fieldOffset + fieldSize - 1 - i]
data += ord(lbyte) if isinstance(lbyte, (str, bytes)):
data += ord(lbyte)
else:
data += lbyte
data = data >> fieldBitpos data = data >> fieldBitpos
data = data & ((1 << fieldBitsize) - 1) data = data & ((1 << fieldBitsize) - 1)
val.lvalue = data val.lvalue = data

View File

@@ -27,6 +27,7 @@
#ifdef QUICK3D_MODULE #ifdef QUICK3D_MODULE
#include <QColor>
#include <QHash> #include <QHash>
#include <QMatrix4x4> #include <QMatrix4x4>
#include <QObject> #include <QObject>

View File

@@ -101,6 +101,7 @@
#include <QtQuick3D/private/qquick3dscenerootnode_p.h> #include <QtQuick3D/private/qquick3dscenerootnode_p.h>
#include <QtQuick3D/private/qquick3drepeater_p.h> #include <QtQuick3D/private/qquick3drepeater_p.h>
#include <QtQuick3D/private/qquick3dloader_p.h> #include <QtQuick3D/private/qquick3dloader_p.h>
#include <QtQuick3D/private/qquick3dsceneenvironment_p.h>
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include "../editor3d/qt5compat/qquick3darealight_p.h" #include "../editor3d/qt5compat/qquick3darealight_p.h"
#endif #endif

View File

@@ -37,6 +37,13 @@ namespace LanguageServerProtocol {
Q_LOGGING_CATEGORY(parseLog, "qtc.languageserverprotocol.parse", QtWarningMsg) Q_LOGGING_CATEGORY(parseLog, "qtc.languageserverprotocol.parse", QtWarningMsg)
constexpr char headerFieldSeparator[] = ": ";
constexpr char contentCharsetName[] = "charset";
constexpr char defaultCharset[] = "utf-8";
constexpr char contentLengthFieldName[] = "Content-Length";
constexpr char headerSeparator[] = "\r\n";
constexpr char contentTypeFieldName[] = "Content-Type";
BaseMessage::BaseMessage() BaseMessage::BaseMessage()
: mimeType(JsonRpcMessage::jsonRpcMimeType()) : mimeType(JsonRpcMessage::jsonRpcMimeType())
{ } { }

View File

@@ -626,7 +626,7 @@ public:
void clearWorkDoneProgress() { remove(workDoneProgressKey); } void clearWorkDoneProgress() { remove(workDoneProgressKey); }
private: private:
constexpr static const char workDoneProgressKey[] = "workDoneProgress"; constexpr static const char16_t workDoneProgressKey[] = u"workDoneProgress";
}; };
class LANGUAGESERVERPROTOCOL_EXPORT ClientCapabilities : public JsonObject class LANGUAGESERVERPROTOCOL_EXPORT ClientCapabilities : public JsonObject

View File

@@ -27,220 +27,214 @@
namespace LanguageServerProtocol { namespace LanguageServerProtocol {
constexpr char actionsKey[] = "actions"; constexpr char16_t actionsKey[] = u"actions";
constexpr char activeParameterKey[] = "activeParameter"; constexpr char16_t activeParameterKey[] = u"activeParameter";
constexpr char activeParameterSupportKey[] = "activeParameterSupport"; constexpr char16_t activeParameterSupportKey[] = u"activeParameterSupport";
constexpr char activeSignatureKey[] = "activeSignature"; constexpr char16_t activeSignatureKey[] = u"activeSignature";
constexpr char addedKey[] = "added"; constexpr char16_t addedKey[] = u"added";
constexpr char additionalTextEditsKey[] = "additionalTextEdits"; constexpr char16_t additionalTextEditsKey[] = u"additionalTextEdits";
constexpr char alphaKey[] = "alpha"; constexpr char16_t alphaKey[] = u"alpha";
constexpr char appliedKey[] = "applied"; constexpr char16_t appliedKey[] = u"applied";
constexpr char applyEditKey[] = "applyEdit"; constexpr char16_t applyEditKey[] = u"applyEdit";
constexpr char argumentsKey[] = "arguments"; constexpr char16_t argumentsKey[] = u"arguments";
constexpr char blueKey[] = "blue"; constexpr char16_t blueKey[] = u"blue";
constexpr char cancellableKey[] = "cancellable"; constexpr char16_t cancellableKey[] = u"cancellable";
constexpr char capabilitiesKey[] = "capabilities"; constexpr char16_t capabilitiesKey[] = u"capabilities";
constexpr char chKey[] = "ch"; constexpr char16_t chKey[] = u"ch";
constexpr char changeKey[] = "change"; constexpr char16_t changeKey[] = u"change";
constexpr char changeNotificationsKey[] = "changeNotifications"; constexpr char16_t changeNotificationsKey[] = u"changeNotifications";
constexpr char changesKey[] = "changes"; constexpr char16_t changesKey[] = u"changes";
constexpr char characterKey[] = "character"; constexpr char16_t characterKey[] = u"character";
constexpr char childrenKey[] = "children"; constexpr char16_t childrenKey[] = u"children";
constexpr char clientInfoKey[] = "clientInfo"; constexpr char16_t clientInfoKey[] = u"clientInfo";
constexpr char codeActionKey[] = "codeAction"; constexpr char16_t codeActionKey[] = u"codeAction";
constexpr char codeActionKindKey[] = "codeActionKind"; constexpr char16_t codeActionKindKey[] = u"codeActionKind";
constexpr char codeActionKindsKey[] = "codeActionKinds"; constexpr char16_t codeActionKindsKey[] = u"codeActionKinds";
constexpr char codeActionLiteralSupportKey[] = "codeActionLiteralSupport"; constexpr char16_t codeActionLiteralSupportKey[] = u"codeActionLiteralSupport";
constexpr char codeActionProviderKey[] = "codeActionProvider"; constexpr char16_t codeActionProviderKey[] = u"codeActionProvider";
constexpr char codeKey[] = "code"; constexpr char16_t codeKey[] = u"code";
constexpr char codeLensKey[] = "codeLens"; constexpr char16_t codeLensKey[] = u"codeLens";
constexpr char codeLensProviderKey[] = "codeLensProvider"; constexpr char16_t codeLensProviderKey[] = u"codeLensProvider";
constexpr char colorInfoKey[] = "colorInfo"; constexpr char16_t colorInfoKey[] = u"colorInfo";
constexpr char colorKey[] = "color"; constexpr char16_t colorKey[] = u"color";
constexpr char colorProviderKey[] = "colorProvider"; constexpr char16_t colorProviderKey[] = u"colorProvider";
constexpr char commandKey[] = "command"; constexpr char16_t commandKey[] = u"command";
constexpr char commandsKey[] = "commands"; constexpr char16_t commandsKey[] = u"commands";
constexpr char commitCharacterSupportKey[] = "commitCharacterSupport"; constexpr char16_t commitCharacterSupportKey[] = u"commitCharacterSupport";
constexpr char commitCharactersKey[] = "commitCharacters"; constexpr char16_t commitCharactersKey[] = u"commitCharacters";
constexpr char completionItemKey[] = "completionItem"; constexpr char16_t completionItemKey[] = u"completionItem";
constexpr char completionItemKindKey[] = "completionItemKind"; constexpr char16_t completionItemKindKey[] = u"completionItemKind";
constexpr char completionKey[] = "completion"; constexpr char16_t completionKey[] = u"completion";
constexpr char completionProviderKey[] = "completionProvider"; constexpr char16_t completionProviderKey[] = u"completionProvider";
constexpr char configurationKey[] = "configuration"; constexpr char16_t configurationKey[] = u"configuration";
constexpr char containerNameKey[] = "containerName"; constexpr char16_t containerNameKey[] = u"containerName";
constexpr char contentChangesKey[] = "contentChanges"; constexpr char16_t contentChangesKey[] = u"contentChanges";
constexpr char contentCharsetName[] = "charset"; constexpr char16_t contentFormatKey[] = u"contentFormat";
constexpr char contentFormatKey[] = "contentFormat"; constexpr char16_t contentKey[] = u"value";
constexpr char contentKey[] = "value"; constexpr char16_t contentsKey[] = u"contents";
constexpr char contentLengthFieldName[] = "Content-Length"; constexpr char16_t contextKey[] = u"context";
constexpr char contentTypeFieldName[] = "Content-Type"; constexpr char16_t contextSupportKey[] = u"contextSupport";
constexpr char contentsKey[] = "contents"; constexpr char16_t dataKey[] = u"data";
constexpr char contextKey[] = "context"; constexpr char16_t definitionKey[] = u"definition";
constexpr char contextSupportKey[] = "contextSupport"; constexpr char16_t definitionProviderKey[] = u"definitionProvider";
constexpr char dataKey[] = "data"; constexpr char16_t deleteCountKey[] = u"deleteCount";
constexpr char defaultCharset[] = "utf-8"; constexpr char16_t deltaKey[] = u"delta";
constexpr char definitionKey[] = "definition"; constexpr char16_t deprecatedKey[] = u"deprecated";
constexpr char definitionProviderKey[] = "definitionProvider"; constexpr char16_t detailKey[] = u"detail";
constexpr char deleteCountKey[] = "deleteCount"; constexpr char16_t diagnosticsKey[] = u"diagnostics";
constexpr char deltaKey[] = "delta"; constexpr char16_t didChangeConfigurationKey[] = u"didChangeConfiguration";
constexpr char deprecatedKey[] = "deprecated"; constexpr char16_t didChangeWatchedFilesKey[] = u"didChangeWatchedFiles";
constexpr char detailKey[] = "detail"; constexpr char16_t didSaveKey[] = u"didSave";
constexpr char diagnosticsKey[] = "diagnostics"; constexpr char16_t documentChangesKey[] = u"documentChanges";
constexpr char didChangeConfigurationKey[] = "didChangeConfiguration"; constexpr char16_t documentFormattingProviderKey[] = u"documentFormattingProvider";
constexpr char didChangeWatchedFilesKey[] = "didChangeWatchedFiles"; constexpr char16_t documentHighlightKey[] = u"documentHighlight";
constexpr char didSaveKey[] = "didSave"; constexpr char16_t documentHighlightProviderKey[] = u"documentHighlightProvider";
constexpr char documentChangesKey[] = "documentChanges"; constexpr char16_t documentLinkKey[] = u"documentLink";
constexpr char documentFormattingProviderKey[] = "documentFormattingProvider"; constexpr char16_t documentLinkProviderKey[] = u"documentLinkProvider";
constexpr char documentHighlightKey[] = "documentHighlight"; constexpr char16_t documentRangeFormattingProviderKey[] = u"documentRangeFormattingProvider";
constexpr char documentHighlightProviderKey[] = "documentHighlightProvider"; constexpr char16_t documentSelectorKey[] = u"documentSelector";
constexpr char documentLinkKey[] = "documentLink"; constexpr char16_t documentSymbolKey[] = u"documentSymbol";
constexpr char documentLinkProviderKey[] = "documentLinkProvider"; constexpr char16_t documentSymbolProviderKey[] = u"documentSymbolProvider";
constexpr char documentRangeFormattingProviderKey[] = "documentRangeFormattingProvider"; constexpr char16_t documentationFormatKey[] = u"documentationFormat";
constexpr char documentSelectorKey[] = "documentSelector"; constexpr char16_t documentationKey[] = u"documentation";
constexpr char documentSymbolKey[] = "documentSymbol"; constexpr char16_t dynamicRegistrationKey[] = u"dynamicRegistration";
constexpr char documentSymbolProviderKey[] = "documentSymbolProvider"; constexpr char16_t editKey[] = u"edit";
constexpr char documentationFormatKey[] = "documentationFormat"; constexpr char16_t editsKey[] = u"edits";
constexpr char documentationKey[] = "documentation"; constexpr char16_t endKey[] = u"end";
constexpr char dynamicRegistrationKey[] = "dynamicRegistration"; constexpr char16_t errorKey[] = u"error";
constexpr char editKey[] = "edit"; constexpr char16_t eventKey[] = u"event";
constexpr char editsKey[] = "edits"; constexpr char16_t executeCommandKey[] = u"executeCommand";
constexpr char endKey[] = "end"; constexpr char16_t executeCommandProviderKey[] = u"executeCommandProvider";
constexpr char errorKey[] = "error"; constexpr char16_t experimentalKey[] = u"experimental";
constexpr char eventKey[] = "event"; constexpr char16_t filterTextKey[] = u"filterText";
constexpr char executeCommandKey[] = "executeCommand"; constexpr char16_t firstTriggerCharacterKey[] = u"firstTriggerCharacter";
constexpr char executeCommandProviderKey[] = "executeCommandProvider"; constexpr char16_t formatsKey[] = u"formats";
constexpr char experimentalKey[] = "experimental"; constexpr char16_t formattingKey[] = u"formatting";
constexpr char filterTextKey[] = "filterText"; constexpr char16_t fullKey[] = u"full";
constexpr char firstTriggerCharacterKey[] = "firstTriggerCharacter"; constexpr char16_t greenKey[] = u"green";
constexpr char formatsKey[] = "formats"; constexpr char16_t hierarchicalDocumentSymbolSupportKey[] = u"hierarchicalDocumentSymbolSupport";
constexpr char formattingKey[] = "formatting"; constexpr char16_t hoverKey[] = u"hover";
constexpr char fullKey[] = "full"; constexpr char16_t hoverProviderKey[] = u"hoverProvider";
constexpr char greenKey[] = "green"; constexpr char16_t idKey[] = u"id";
constexpr char headerFieldSeparator[] = ": "; constexpr char16_t implementationKey[] = u"implementation";
constexpr char headerSeparator[] = "\r\n"; constexpr char16_t implementationProviderKey[] = u"implementationProvider";
constexpr char hierarchicalDocumentSymbolSupportKey[] = "hierarchicalDocumentSymbolSupport"; constexpr char16_t includeDeclarationKey[] = u"includeDeclaration";
constexpr char hoverKey[] = "hover"; constexpr char16_t includeTextKey[] = u"includeText";
constexpr char hoverProviderKey[] = "hoverProvider"; constexpr char16_t initializationOptionsKey[] = u"initializationOptions";
constexpr char idKey[] = "id"; constexpr char16_t insertFinalNewlineKey[] = u"insertFinalNewline";
constexpr char implementationKey[] = "implementation"; constexpr char16_t insertSpaceKey[] = u"insertSpace";
constexpr char implementationProviderKey[] = "implementationProvider"; constexpr char16_t insertTextFormatKey[] = u"insertTextFormat";
constexpr char includeDeclarationKey[] = "includeDeclaration"; constexpr char16_t insertTextKey[] = u"insertText";
constexpr char includeTextKey[] = "includeText"; constexpr char16_t isIncompleteKey[] = u"isIncomplete";
constexpr char initializationOptionsKey[] = "initializationOptions"; constexpr char16_t itemsKey[] = u"items";
constexpr char insertFinalNewlineKey[] = "insertFinalNewline"; constexpr char16_t jsonRpcVersionKey[] = u"jsonrpc";
constexpr char insertSpaceKey[] = "insertSpace"; constexpr char16_t kindKey[] = u"kind";
constexpr char insertTextFormatKey[] = "insertTextFormat"; constexpr char16_t labelKey[] = u"label";
constexpr char insertTextKey[] = "insertText"; constexpr char16_t languageIdKey[] = u"languageId";
constexpr char isIncompleteKey[] = "isIncomplete"; constexpr char16_t languageKey[] = u"language";
constexpr char itemsKey[] = "items"; constexpr char16_t legendKey[] = u"legend";
constexpr char jsonRpcVersionKey[] = "jsonrpc"; constexpr char16_t limitKey[] = u"limit";
constexpr char kindKey[] = "kind"; constexpr char16_t lineKey[] = u"line";
constexpr char labelKey[] = "label"; constexpr char16_t linesKey[] = u"lines";
constexpr char languageIdKey[] = "languageId"; constexpr char16_t locationKey[] = u"location";
constexpr char languageKey[] = "language"; constexpr char16_t messageKey[] = u"message";
constexpr char legendKey[] = "legend"; constexpr char16_t methodKey[] = u"method";
constexpr char limitKey[] = "limit"; constexpr char16_t moreTriggerCharacterKey[] = u"moreTriggerCharacter";
constexpr char lineKey[] = "line"; constexpr char16_t multiLineTokenSupportKey[] = u"multiLineTokenSupport";
constexpr char linesKey[] = "lines"; constexpr char16_t nameKey[] = u"name";
constexpr char locationKey[] = "location"; constexpr char16_t newNameKey[] = u"newName";
constexpr char messageKey[] = "message"; constexpr char16_t newTextKey[] = u"newText";
constexpr char methodKey[] = "method"; constexpr char16_t onTypeFormattingKey[] = u"onTypeFormatting";
constexpr char moreTriggerCharacterKey[] = "moreTriggerCharacter"; constexpr char16_t onlyKey[] = u"only";
constexpr char multiLineTokenSupportKey[] = "multiLineTokenSupport"; constexpr char16_t openCloseKey[] = u"openClose";
constexpr char nameKey[] = "name"; constexpr char16_t optionsKey[] = u"options";
constexpr char newNameKey[] = "newName"; constexpr char16_t overlappingTokenSupportKey[] = u"overlappingTokenSupport";
constexpr char newTextKey[] = "newText"; constexpr char16_t parametersKey[] = u"parameters";
constexpr char onTypeFormattingKey[] = "onTypeFormatting"; constexpr char16_t paramsKey[] = u"params";
constexpr char onlyKey[] = "only"; constexpr char16_t patternKey[] = u"pattern";
constexpr char openCloseKey[] = "openClose"; constexpr char16_t percentageKey[] = u"percentage";
constexpr char optionsKey[] = "options"; constexpr char16_t placeHolderKey[] = u"placeHolder";
constexpr char overlappingTokenSupportKey[] = "overlappingTokenSupport"; constexpr char16_t positionKey[] = u"position";
constexpr char parametersKey[] = "parameters"; constexpr char16_t prepareProviderKey[] = u"prepareProvider";
constexpr char paramsKey[] = "params"; constexpr char16_t prepareSupportKey[] = u"prepareSupport";
constexpr char patternKey[] = "pattern"; constexpr char16_t previousResultIdKey[] = u"previousResultId";
constexpr char percentageKey[] = "percentage"; constexpr char16_t processIdKey[] = u"processId";
constexpr char placeHolderKey[] = "placeHolder"; constexpr char16_t queryKey[] = u"query";
constexpr char positionKey[] = "position"; constexpr char16_t rangeFormattingKey[] = u"rangeFormatting";
constexpr char prepareProviderKey[] = "prepareProvider"; constexpr char16_t rangeKey[] = u"range";
constexpr char prepareSupportKey[] = "prepareSupport"; constexpr char16_t rangeLengthKey[] = u"rangeLength";
constexpr char previousResultIdKey[] = "previousResultId"; constexpr char16_t reasonKey[] = u"reason";
constexpr char processIdKey[] = "processId"; constexpr char16_t redKey[] = u"red";
constexpr char queryKey[] = "query"; constexpr char16_t referencesKey[] = u"references";
constexpr char rangeFormattingKey[] = "rangeFormatting"; constexpr char16_t referencesProviderKey[] = u"referencesProvider";
constexpr char rangeKey[] = "range"; constexpr char16_t refreshSupportKey[] = u"refreshSupport";
constexpr char rangeLengthKey[] = "rangeLength"; constexpr char16_t registerOptionsKey[] = u"registerOptions";
constexpr char reasonKey[] = "reason"; constexpr char16_t registrationsKey[] = u"registrations";
constexpr char redKey[] = "red"; constexpr char16_t removedKey[] = u"removed";
constexpr char referencesKey[] = "references"; constexpr char16_t renameKey[] = u"rename";
constexpr char referencesProviderKey[] = "referencesProvider"; constexpr char16_t renameProviderKey[] = u"renameProvider";
constexpr char refreshSupportKey[] = "refreshSupport"; constexpr char16_t requestsKey[] = u"requests";
constexpr char registerOptionsKey[] = "registerOptions"; constexpr char16_t resolveProviderKey[] = u"resolveProvider";
constexpr char registrationsKey[] = "registrations"; constexpr char16_t resultIdKey[] = u"resultId";
constexpr char removedKey[] = "removed"; constexpr char16_t resultKey[] = u"result";
constexpr char renameKey[] = "rename"; constexpr char16_t retryKey[] = u"retry";
constexpr char renameProviderKey[] = "renameProvider"; constexpr char16_t rootPathKey[] = u"rootPath";
constexpr char requestsKey[] = "requests"; constexpr char16_t rootUriKey[] = u"rootUri";
constexpr char resolveProviderKey[] = "resolveProvider"; constexpr char16_t saveKey[] = u"save";
constexpr char resultIdKey[] = "resultId"; constexpr char16_t schemeKey[] = u"scheme";
constexpr char resultKey[] = "result"; constexpr char16_t scopeUriKey[] = u"scopeUri";
constexpr char retryKey[] = "retry"; constexpr char16_t sectionKey[] = u"section";
constexpr char rootPathKey[] = "rootPath"; constexpr char16_t selectionRangeKey[] = u"selectionRange";
constexpr char rootUriKey[] = "rootUri"; constexpr char16_t semanticTokensKey[] = u"semanticTokens";
constexpr char saveKey[] = "save"; constexpr char16_t semanticTokensProviderKey[] = u"semanticTokensProvider";
constexpr char schemeKey[] = "scheme"; constexpr char16_t serverInfoKey[] = u"serverInfo";
constexpr char scopeUriKey[] = "scopeUri"; constexpr char16_t settingsKey[] = u"settings";
constexpr char sectionKey[] = "section"; constexpr char16_t severityKey[] = u"severity";
constexpr char selectionRangeKey[] = "selectionRange"; constexpr char16_t signatureHelpKey[] = u"signatureHelp";
constexpr char semanticTokensKey[] = "semanticTokens"; constexpr char16_t signatureHelpProviderKey[] = u"signatureHelpProvider";
constexpr char semanticTokensProviderKey[] = "semanticTokensProvider"; constexpr char16_t signatureInformationKey[] = u"signatureInformation";
constexpr char serverInfoKey[] = "serverInfo"; constexpr char16_t signaturesKey[] = u"signatures";
constexpr char settingsKey[] = "settings"; constexpr char16_t snippetSupportKey[] = u"snippetSupport";
constexpr char severityKey[] = "severity"; constexpr char16_t sortTextKey[] = u"sortText";
constexpr char signatureHelpKey[] = "signatureHelp"; constexpr char16_t sourceKey[] = u"source";
constexpr char signatureHelpProviderKey[] = "signatureHelpProvider"; constexpr char16_t startKey[] = u"start";
constexpr char signatureInformationKey[] = "signatureInformation"; constexpr char16_t supportedKey[] = u"supported";
constexpr char signaturesKey[] = "signatures"; constexpr char16_t symbolKey[] = u"symbol";
constexpr char snippetSupportKey[] = "snippetSupport"; constexpr char16_t symbolKindKey[] = u"symbolKind";
constexpr char sortTextKey[] = "sortText"; constexpr char16_t syncKindKey[] = u"syncKind";
constexpr char sourceKey[] = "source"; constexpr char16_t synchronizationKey[] = u"synchronization";
constexpr char startKey[] = "start"; constexpr char16_t tabSizeKey[] = u"tabSize";
constexpr char supportedKey[] = "supported"; constexpr char16_t tagsKey[] = u"tags";
constexpr char symbolKey[] = "symbol"; constexpr char16_t targetKey[] = u"target";
constexpr char symbolKindKey[] = "symbolKind"; constexpr char16_t textDocumentKey[] = u"textDocument";
constexpr char syncKindKey[] = "syncKind"; constexpr char16_t textDocumentSyncKey[] = u"textDocumentSync";
constexpr char synchronizationKey[] = "synchronization"; constexpr char16_t textEditKey[] = u"textEdit";
constexpr char tabSizeKey[] = "tabSize"; constexpr char16_t textKey[] = u"text";
constexpr char tagsKey[] = "tags"; constexpr char16_t titleKey[] = u"title";
constexpr char targetKey[] = "target"; constexpr char16_t tokenKey[] = u"token";
constexpr char textDocumentKey[] = "textDocument"; constexpr char16_t tokenModifiersKey[] = u"tokenModifiers";
constexpr char textDocumentSyncKey[] = "textDocumentSync"; constexpr char16_t tokenTypesKey[] = u"tokenTypes";
constexpr char textEditKey[] = "textEdit"; constexpr char16_t traceKey[] = u"trace";
constexpr char textKey[] = "text"; constexpr char16_t triggerCharacterKey[] = u"triggerCharacter";
constexpr char titleKey[] = "title"; constexpr char16_t triggerCharactersKey[] = u"triggerCharacters";
constexpr char tokenKey[] = "token"; constexpr char16_t triggerKindKey[] = u"triggerKind";
constexpr char tokenModifiersKey[] = "tokenModifiers"; constexpr char16_t trimFinalNewlinesKey[] = u"trimFinalNewlines";
constexpr char tokenTypesKey[] = "tokenTypes"; constexpr char16_t trimTrailingWhitespaceKey[] = u"trimTrailingWhitespace";
constexpr char traceKey[] = "trace"; constexpr char16_t typeDefinitionKey[] = u"typeDefinition";
constexpr char triggerCharacterKey[] = "triggerCharacter"; constexpr char16_t typeDefinitionProviderKey[] = u"typeDefinitionProvider";
constexpr char triggerCharactersKey[] = "triggerCharacters"; constexpr char16_t typeKey[] = u"type";
constexpr char triggerKindKey[] = "triggerKind"; constexpr char16_t unregistrationsKey[] = u"unregistrations";
constexpr char trimFinalNewlinesKey[] = "trimFinalNewlines"; constexpr char16_t uriKey[] = u"uri";
constexpr char trimTrailingWhitespaceKey[] = "trimTrailingWhitespace"; constexpr char16_t valueKey[] = u"value";
constexpr char typeDefinitionKey[] = "typeDefinition"; constexpr char16_t valueSetKey[] = u"valueSet";
constexpr char typeDefinitionProviderKey[] = "typeDefinitionProvider"; constexpr char16_t versionKey[] = u"version";
constexpr char typeKey[] = "type"; constexpr char16_t willSaveKey[] = u"willSave";
constexpr char unregistrationsKey[] = "unregistrations"; constexpr char16_t willSaveWaitUntilKey[] = u"willSaveWaitUntil";
constexpr char uriKey[] = "uri"; constexpr char16_t windowKey[] = u"window";
constexpr char valueKey[] = "value"; constexpr char16_t workDoneProgressKey[] = u"workDoneProgress";
constexpr char valueSetKey[] = "valueSet"; constexpr char16_t workspaceEditKey[] = u"workspaceEdit";
constexpr char versionKey[] = "version"; constexpr char16_t workspaceFoldersKey[] = u"workspaceFolders";
constexpr char willSaveKey[] = "willSave"; constexpr char16_t workspaceKey[] = u"workspace";
constexpr char willSaveWaitUntilKey[] = "willSaveWaitUntil"; constexpr char16_t workspaceSymbolProviderKey[] = u"workspaceSymbolProvider";
constexpr char windowKey[] = "window";
constexpr char workDoneProgressKey[] = "workDoneProgress";
constexpr char workspaceEditKey[] = "workspaceEdit";
constexpr char workspaceFoldersKey[] = "workspaceFolders";
constexpr char workspaceKey[] = "workspace";
constexpr char workspaceSymbolProviderKey[] = "workspaceSymbolProvider";
} // namespace LanguageServerProtocol } // namespace LanguageServerProtocol

View File

@@ -37,12 +37,12 @@ JsonObject &JsonObject::operator=(JsonObject &&other)
return *this; return *this;
} }
QJsonObject::iterator JsonObject::insert(const QString &key, const JsonObject &object) QJsonObject::iterator JsonObject::insert(const QStringView key, const JsonObject &object)
{ {
return m_jsonObject.insert(key, object.m_jsonObject); return m_jsonObject.insert(key, object.m_jsonObject);
} }
QJsonObject::iterator JsonObject::insert(const QString &key, const QJsonValue &value) QJsonObject::iterator JsonObject::insert(const QStringView key, const QJsonValue &value)
{ {
return m_jsonObject.insert(key, value); return m_jsonObject.insert(key, value);
} }

View File

@@ -67,88 +67,88 @@ public:
const_iterator end() const { return m_jsonObject.end(); } const_iterator end() const { return m_jsonObject.end(); }
protected: protected:
iterator insert(const QString &key, const JsonObject &value); iterator insert(const QStringView key, const JsonObject &value);
iterator insert(const QString &key, const QJsonValue &value); iterator insert(const QStringView key, const QJsonValue &value);
template <typename T, typename V> template <typename T, typename V>
iterator insertVariant(const QString &key, const V &variant); iterator insertVariant(const QStringView key, const V &variant);
template <typename T1, typename T2, typename... Args, typename V> template <typename T1, typename T2, typename... Args, typename V>
iterator insertVariant(const QString &key, const V &variant); iterator insertVariant(const QStringView key, const V &variant);
// QJSonObject redirections // QJSonObject redirections
QJsonValue value(const QString &key) const { return m_jsonObject.value(key); } QJsonValue value(const QStringView key) const { return m_jsonObject.value(key); }
bool contains(const QString &key) const { return m_jsonObject.contains(key); } bool contains(const QStringView key) const { return m_jsonObject.contains(key); }
iterator find(const QString &key) { return m_jsonObject.find(key); } iterator find(const QStringView key) { return m_jsonObject.find(key); }
const_iterator find(const QString &key) const { return m_jsonObject.find(key); } const_iterator find(const QStringView key) const { return m_jsonObject.find(key); }
void remove(const QString &key) { m_jsonObject.remove(key); } void remove(const QStringView key) { m_jsonObject.remove(key); }
QStringList keys() const { return m_jsonObject.keys(); } QStringList keys() const { return m_jsonObject.keys(); }
// convenience value access // convenience value access
template<typename T> template<typename T>
T typedValue(const QString &key) const; T typedValue(const QStringView key) const;
template<typename T> template<typename T>
Utils::optional<T> optionalValue(const QString &key) const; Utils::optional<T> optionalValue(const QStringView key) const;
template<typename T> template<typename T>
LanguageClientValue<T> clientValue(const QString &key) const; LanguageClientValue<T> clientValue(const QStringView key) const;
template<typename T> template<typename T>
Utils::optional<LanguageClientValue<T>> optionalClientValue(const QString &key) const; Utils::optional<LanguageClientValue<T>> optionalClientValue(const QStringView key) const;
template<typename T> template<typename T>
QList<T> array(const QString &key) const; QList<T> array(const QStringView key) const;
template<typename T> template<typename T>
Utils::optional<QList<T>> optionalArray(const QString &key) const; Utils::optional<QList<T>> optionalArray(const QStringView key) const;
template<typename T> template<typename T>
LanguageClientArray<T> clientArray(const QString &key) const; LanguageClientArray<T> clientArray(const QStringView key) const;
template<typename T> template<typename T>
Utils::optional<LanguageClientArray<T>> optionalClientArray(const QString &key) const; Utils::optional<LanguageClientArray<T>> optionalClientArray(const QStringView key) const;
template<typename T> template<typename T>
void insertArray(const QString &key, const QList<T> &array); void insertArray(const QStringView key, const QList<T> &array);
template<typename> template<typename>
void insertArray(const QString &key, const QList<JsonObject> &array); void insertArray(const QStringView key, const QList<JsonObject> &array);
private: private:
QJsonObject m_jsonObject; QJsonObject m_jsonObject;
}; };
template<typename T, typename V> template<typename T, typename V>
JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant) JsonObject::iterator JsonObject::insertVariant(const QStringView key, const V &variant)
{ {
return Utils::holds_alternative<T>(variant) ? insert(key, Utils::get<T>(variant)) : end(); return Utils::holds_alternative<T>(variant) ? insert(key, Utils::get<T>(variant)) : end();
} }
template<typename T1, typename T2, typename... Args, typename V> template<typename T1, typename T2, typename... Args, typename V>
JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant) JsonObject::iterator JsonObject::insertVariant(const QStringView key, const V &variant)
{ {
auto result = insertVariant<T1>(key, variant); auto result = insertVariant<T1>(key, variant);
return result != end() ? result : insertVariant<T2, Args...>(key, variant); return result != end() ? result : insertVariant<T2, Args...>(key, variant);
} }
template<typename T> template<typename T>
T JsonObject::typedValue(const QString &key) const T JsonObject::typedValue(const QStringView key) const
{ {
return fromJsonValue<T>(value(key)); return fromJsonValue<T>(value(key));
} }
template<typename T> template<typename T>
Utils::optional<T> JsonObject::optionalValue(const QString &key) const Utils::optional<T> JsonObject::optionalValue(const QStringView key) const
{ {
const QJsonValue &val = value(key); const QJsonValue &val = value(key);
return val.isUndefined() ? Utils::nullopt : Utils::make_optional(fromJsonValue<T>(val)); return val.isUndefined() ? Utils::nullopt : Utils::make_optional(fromJsonValue<T>(val));
} }
template<typename T> template<typename T>
LanguageClientValue<T> JsonObject::clientValue(const QString &key) const LanguageClientValue<T> JsonObject::clientValue(const QStringView key) const
{ {
return LanguageClientValue<T>(value(key)); return LanguageClientValue<T>(value(key));
} }
template<typename T> template<typename T>
Utils::optional<LanguageClientValue<T>> JsonObject::optionalClientValue(const QString &key) const Utils::optional<LanguageClientValue<T>> JsonObject::optionalClientValue(const QStringView key) const
{ {
return contains(key) ? Utils::make_optional(clientValue<T>(key)) : Utils::nullopt; return contains(key) ? Utils::make_optional(clientValue<T>(key)) : Utils::nullopt;
} }
template<typename T> template<typename T>
QList<T> JsonObject::array(const QString &key) const QList<T> JsonObject::array(const QStringView key) const
{ {
if (const Utils::optional<QList<T>> &array = optionalArray<T>(key)) if (const Utils::optional<QList<T>> &array = optionalArray<T>(key))
return *array; return *array;
@@ -157,7 +157,7 @@ QList<T> JsonObject::array(const QString &key) const
} }
template<typename T> template<typename T>
Utils::optional<QList<T>> JsonObject::optionalArray(const QString &key) const Utils::optional<QList<T>> JsonObject::optionalArray(const QStringView key) const
{ {
const QJsonValue &jsonValue = value(key); const QJsonValue &jsonValue = value(key);
if (jsonValue.isUndefined()) if (jsonValue.isUndefined())
@@ -166,13 +166,13 @@ Utils::optional<QList<T>> JsonObject::optionalArray(const QString &key) const
} }
template<typename T> template<typename T>
LanguageClientArray<T> JsonObject::clientArray(const QString &key) const LanguageClientArray<T> JsonObject::clientArray(const QStringView key) const
{ {
return LanguageClientArray<T>(value(key)); return LanguageClientArray<T>(value(key));
} }
template<typename T> template<typename T>
Utils::optional<LanguageClientArray<T>> JsonObject::optionalClientArray(const QString &key) const Utils::optional<LanguageClientArray<T>> JsonObject::optionalClientArray(const QStringView key) const
{ {
const QJsonValue &val = value(key); const QJsonValue &val = value(key);
return !val.isUndefined() ? Utils::make_optional(LanguageClientArray<T>(value(key))) return !val.isUndefined() ? Utils::make_optional(LanguageClientArray<T>(value(key)))
@@ -180,7 +180,7 @@ Utils::optional<LanguageClientArray<T>> JsonObject::optionalClientArray(const QS
} }
template<typename T> template<typename T>
void JsonObject::insertArray(const QString &key, const QList<T> &array) void JsonObject::insertArray(const QStringView key, const QList<T> &array)
{ {
QJsonArray jsonArray; QJsonArray jsonArray;
for (const T &item : array) for (const T &item : array)
@@ -189,7 +189,7 @@ void JsonObject::insertArray(const QString &key, const QList<T> &array)
} }
template<typename > template<typename >
void JsonObject::insertArray(const QString &key, const QList<JsonObject> &array) void JsonObject::insertArray(const QStringView key, const QList<JsonObject> &array)
{ {
QJsonArray jsonArray; QJsonArray jsonArray;
for (const JsonObject &item : array) for (const JsonObject &item : array)

View File

@@ -188,7 +188,7 @@ public:
QString query() const { return typedValue<QString>(queryKey); } QString query() const { return typedValue<QString>(queryKey); }
void setQuery(const QString &query) { insert(queryKey, query); } void setQuery(const QString &query) { insert(queryKey, query); }
void setLimit(int limit) { insert("limit", limit); } // clangd extension void setLimit(int limit) { insert(u"limit", limit); } // clangd extension
bool isValid() const override { return contains(queryKey); } bool isValid() const override { return contains(queryKey); }
}; };

View File

@@ -169,23 +169,27 @@ Icon::Icon(const FilePath &imageFileName)
QIcon Icon::icon() const QIcon Icon::icon() const
{ {
if (m_iconSourceList.isEmpty()) { if (m_iconSourceList.isEmpty())
return QIcon(); return QIcon();
} else if (m_style == None) {
return QIcon(m_iconSourceList.constFirst().first.toString());
} else {
QIcon result;
const int maxDpr = qRound(qApp->devicePixelRatio());
for (int dpr = 1; dpr <= maxDpr; dpr++) {
const MasksAndColors masks = masksAndColors(m_iconSourceList, dpr);
const QPixmap combinedMask = Utils::combinedMask(masks, m_style);
result.addPixmap(masksToIcon(masks, combinedMask, m_style));
const QColor disabledColor = creatorTheme()->color(Theme::IconsDisabledColor); if (m_style == None)
result.addPixmap(maskToColorAndAlpha(combinedMask, disabledColor), QIcon::Disabled); return QIcon(m_iconSourceList.constFirst().first.toString());
}
return result; const int maxDpr = qRound(qApp->devicePixelRatio());
if (maxDpr == m_lastDevicePixelRatio)
return m_lastIcon;
m_lastDevicePixelRatio = maxDpr;
m_lastIcon = QIcon();
for (int dpr = 1; dpr <= maxDpr; dpr++) {
const MasksAndColors masks = masksAndColors(m_iconSourceList, dpr);
const QPixmap combinedMask = Utils::combinedMask(masks, m_style);
m_lastIcon.addPixmap(masksToIcon(masks, combinedMask, m_style));
const QColor disabledColor = creatorTheme()->color(Theme::IconsDisabledColor);
m_lastIcon.addPixmap(maskToColorAndAlpha(combinedMask, disabledColor), QIcon::Disabled);
} }
return m_lastIcon;
} }
QPixmap Icon::pixmap(QIcon::Mode iconMode) const QPixmap Icon::pixmap(QIcon::Mode iconMode) const

View File

@@ -86,6 +86,8 @@ public:
private: private:
QVector<IconMaskAndColor> m_iconSourceList; QVector<IconMaskAndColor> m_iconSourceList;
IconStyleOptions m_style = None; IconStyleOptions m_style = None;
mutable int m_lastDevicePixelRatio = -1;
mutable QIcon m_lastIcon;
}; };
} // namespace Utils } // namespace Utils

View File

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

View File

@@ -111,7 +111,7 @@ class SymbolDetails : public JsonObject
public: public:
using JsonObject::JsonObject; using JsonObject::JsonObject;
static constexpr char usrKey[] = "usr"; static constexpr char16_t usrKey[] = u"usr";
// the unqualified name of the symbol // the unqualified name of the symbol
QString name() const { return typedValue<QString>(nameKey); } QString name() const { return typedValue<QString>(nameKey); }
@@ -190,8 +190,8 @@ class DiagnosticsCapabilities : public JsonObject
{ {
public: public:
using JsonObject::JsonObject; using JsonObject::JsonObject;
void enableCategorySupport() { insert("categorySupport", true); } void enableCategorySupport() { insert(u"categorySupport", true); }
void enableCodeActionsInline() {insert("codeActionsInline", true);} void enableCodeActionsInline() {insert(u"codeActionsInline", true);}
}; };
class ClangdTextDocumentClientCapabilities : public TextDocumentClientCapabilities class ClangdTextDocumentClientCapabilities : public TextDocumentClientCapabilities
@@ -201,7 +201,7 @@ public:
void setPublishDiagnostics(const DiagnosticsCapabilities &caps) void setPublishDiagnostics(const DiagnosticsCapabilities &caps)
{ insert("publishDiagnostics", caps); } { insert(u"publishDiagnostics", caps); }
}; };
static qint64 getRevision(const TextDocument *doc) static qint64 getRevision(const TextDocument *doc)
@@ -1338,7 +1338,7 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc,
Utils::optional<QList<CodeAction> > ClangdDiagnostic::codeActions() const Utils::optional<QList<CodeAction> > ClangdDiagnostic::codeActions() const
{ {
auto actions = optionalArray<LanguageServerProtocol::CodeAction>("codeActions"); auto actions = optionalArray<LanguageServerProtocol::CodeAction>(u"codeActions");
if (!actions) if (!actions)
return actions; return actions;
static const QStringList badCodeActions{ static const QStringList badCodeActions{
@@ -1355,7 +1355,7 @@ Utils::optional<QList<CodeAction> > ClangdDiagnostic::codeActions() const
QString ClangdDiagnostic::category() const QString ClangdDiagnostic::category() const
{ {
return typedValue<QString>("category"); return typedValue<QString>(u"category");
} }
MessageId ClangdClient::Private::getAndHandleAst(const TextDocOrFile &doc, MessageId ClangdClient::Private::getAndHandleAst(const TextDocOrFile &doc,

View File

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

View File

@@ -277,7 +277,7 @@ Task createTask(const ClangDiagnostic &diagnostic)
return Task(taskType, return Task(taskType,
diagnosticCategoryPrefixRemoved(diagnostic.text), diagnosticCategoryPrefixRemoved(diagnostic.text),
FilePath::fromString(diagnostic.location.targetFilePath.toString()), diagnostic.location.targetFilePath,
diagnostic.location.targetLine, diagnostic.location.targetLine,
Constants::TASK_CATEGORY_DIAGNOSTICS, Constants::TASK_CATEGORY_DIAGNOSTICS,
icon, icon,
@@ -295,7 +295,7 @@ ClangdTextMark::ClangdTextMark(const FilePath &filePath,
, m_diagnostic(convertDiagnostic(ClangdDiagnostic(diagnostic), filePath)) , m_diagnostic(convertDiagnostic(ClangdDiagnostic(diagnostic), filePath))
, m_client(client) , m_client(client)
{ {
setSettingsPage(CppEditor::Constants::CPP_CODE_MODEL_SETTINGS_ID); setSettingsPage(CppEditor::Constants::CPP_CLANGD_SETTINGS_ID);
const bool isError = diagnostic.severity() const bool isError = diagnostic.severity()
&& *diagnostic.severity() == DiagnosticSeverity::Error; && *diagnostic.severity() == DiagnosticSeverity::Error;
@@ -310,31 +310,32 @@ ClangdTextMark::ClangdTextMark(const FilePath &filePath,
client->addTask(createTask(m_diagnostic)); client->addTask(createTask(m_diagnostic));
} }
// Copy to clipboard action setActionsProvider([diag = m_diagnostic] {
QVector<QAction *> actions; // Copy to clipboard action
QAction *action = new QAction(); QList<QAction *> actions;
action->setIcon(QIcon::fromTheme("edit-copy", Icons::COPY.icon())); QAction *action = new QAction();
action->setToolTip(tr("Copy to Clipboard", "Clang Code Model Marks")); action->setIcon(QIcon::fromTheme("edit-copy", Icons::COPY.icon()));
QObject::connect(action, &QAction::triggered, [diag = m_diagnostic]() { action->setToolTip(tr("Copy to Clipboard", "Clang Code Model Marks"));
const QString text = ClangDiagnosticWidget::createText({diag}, QObject::connect(action, &QAction::triggered, [diag] {
ClangDiagnosticWidget::InfoBar); const QString text = ClangDiagnosticWidget::createText({diag},
setClipboardAndSelection(text); ClangDiagnosticWidget::InfoBar);
}); setClipboardAndSelection(text);
actions << action;
// Remove diagnostic warning action
Project *project = projectForCurrentEditor();
if (project && isDiagnosticConfigChangable(project, m_diagnostic)) {
action = new QAction();
action->setIcon(Icons::BROKEN.icon());
action->setToolTip(tr("Disable Diagnostic in Current Project"));
QObject::connect(action, &QAction::triggered, [diag = m_diagnostic]() {
disableDiagnosticInCurrentProjectConfig(diag);
}); });
actions << action; actions << action;
}
setActions(actions); // Remove diagnostic warning action
Project *project = projectForCurrentEditor();
if (project && isDiagnosticConfigChangable(project, diag)) {
action = new QAction();
action->setIcon(Icons::BROKEN.icon());
action->setToolTip(tr("Disable Diagnostic in Current Project"));
QObject::connect(action, &QAction::triggered, [diag] {
disableDiagnosticInCurrentProjectConfig(diag);
});
actions << action;
}
return actions;
});
} }
bool ClangdTextMark::addToolTipContent(QLayout *target) const bool ClangdTextMark::addToolTipContent(QLayout *target) const

View File

@@ -76,15 +76,14 @@ QString diagnosticCategoryPrefixRemoved(const QString &text)
// Prefixes are taken from $LLVM_SOURCE_DIR/tools/clang/lib/Frontend/TextDiagnostic.cpp, // Prefixes are taken from $LLVM_SOURCE_DIR/tools/clang/lib/Frontend/TextDiagnostic.cpp,
// function TextDiagnostic::printDiagnosticLevel (llvm-3.6.2). // function TextDiagnostic::printDiagnosticLevel (llvm-3.6.2).
static const QStringList categoryPrefixes = { static const QStringList categoryPrefixes = {
QStringLiteral("note"), QStringLiteral("note: "),
QStringLiteral("remark"), QStringLiteral("remark: "),
QStringLiteral("warning"), QStringLiteral("warning: "),
QStringLiteral("error"), QStringLiteral("error: "),
QStringLiteral("fatal error") QStringLiteral("fatal error: ")
}; };
for (const QString &prefix : categoryPrefixes) { for (const QString &fullPrefix : categoryPrefixes) {
const QString fullPrefix = prefix + QStringLiteral(": ");
if (theText.startsWith(fullPrefix)) { if (theText.startsWith(fullPrefix)) {
theText.remove(0, fullPrefix.length()); theText.remove(0, fullPrefix.length());
return theText; return theText;

View File

@@ -54,28 +54,28 @@ DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic)
setIcon(markIcon.isNull() ? Utils::Icons::CODEMODEL_WARNING.icon() : markIcon); setIcon(markIcon.isNull() ? Utils::Icons::CODEMODEL_WARNING.icon() : markIcon);
setToolTip(createDiagnosticToolTipString(diagnostic, Utils::nullopt, true)); setToolTip(createDiagnosticToolTipString(diagnostic, Utils::nullopt, true));
setLineAnnotation(diagnostic.description); setLineAnnotation(diagnostic.description);
setActionsProvider([diagnostic] {
// Copy to clipboard action
QList<QAction *> actions;
QAction *action = new QAction();
action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()));
action->setToolTip(tr("Copy to Clipboard"));
QObject::connect(action, &QAction::triggered, [diagnostic]() {
const QString text = createFullLocationString(diagnostic.location)
+ ": "
+ diagnostic.description;
Utils::setClipboardAndSelection(text);
});
actions << action;
// Copy to clipboard action // Disable diagnostic action
QVector<QAction *> actions; action = new QAction();
QAction *action = new QAction(); action->setIcon(Utils::Icons::BROKEN.icon());
action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon())); action->setToolTip(tr("Disable Diagnostic"));
action->setToolTip(tr("Copy to Clipboard")); QObject::connect(action, &QAction::triggered, [diagnostic] { disableChecks({diagnostic}); });
QObject::connect(action, &QAction::triggered, [diagnostic]() { actions << action;
const QString text = createFullLocationString(diagnostic.location) return actions;
+ ": "
+ diagnostic.description;
Utils::setClipboardAndSelection(text);
}); });
actions << action;
// Disable diagnostic action
action = new QAction();
action->setIcon(Utils::Icons::BROKEN.icon());
action->setToolTip(tr("Disable Diagnostic"));
QObject::connect(action, &QAction::triggered, [diagnostic] { disableChecks({diagnostic}); });
actions << action;
setActions(actions);
} }
void DiagnosticMark::disable() void DiagnosticMark::disable()

View File

@@ -434,6 +434,7 @@ public:
private: private:
void updateQchFilePath(); void updateQchFilePath();
void reload();
CMakeToolItemModel *m_model; CMakeToolItemModel *m_model;
QLineEdit *m_displayNameLineEdit; QLineEdit *m_displayNameLineEdit;
@@ -479,8 +480,8 @@ CMakeToolItemConfigWidget::CMakeToolItemConfigWidget(CMakeToolItemModel *model)
connect(m_binaryChooser, &PathChooser::rawPathChanged, this, [this]() { connect(m_binaryChooser, &PathChooser::rawPathChanged, this, [this]() {
updateQchFilePath(); updateQchFilePath();
m_qchFileChooser->setBaseDirectory(m_binaryChooser->filePath().parentDir());
store(); store();
reload();
}); });
connect(m_qchFileChooser, &PathChooser::rawPathChanged, this, &CMakeToolItemConfigWidget::store); connect(m_qchFileChooser, &PathChooser::rawPathChanged, this, &CMakeToolItemConfigWidget::store);
connect(m_displayNameLineEdit, &QLineEdit::textChanged, this, &CMakeToolItemConfigWidget::store); connect(m_displayNameLineEdit, &QLineEdit::textChanged, this, &CMakeToolItemConfigWidget::store);
@@ -504,6 +505,18 @@ void CMakeToolItemConfigWidget::updateQchFilePath()
m_qchFileChooser->setFilePath(CMakeTool::searchQchFile(m_binaryChooser->filePath())); m_qchFileChooser->setFilePath(CMakeTool::searchQchFile(m_binaryChooser->filePath()));
} }
void CMakeToolItemConfigWidget::reload()
{
if (!m_id.isValid())
return;
const CMakeToolTreeItem *item = m_model->cmakeToolItem(m_id);
if (!item)
return;
load(item);
}
void CMakeToolItemConfigWidget::load(const CMakeToolTreeItem *item) void CMakeToolItemConfigWidget::load(const CMakeToolTreeItem *item)
{ {
m_loadingItem = true; // avoid intermediate signal handling m_loadingItem = true; // avoid intermediate signal handling

View File

@@ -260,7 +260,7 @@ public:
void enableCodecoverageSupport() void enableCodecoverageSupport()
{ {
JsonObject coverageSupport(QJsonObject{{"codeCoverageSupport", true}}); JsonObject coverageSupport(QJsonObject{{"codeCoverageSupport", true}});
insert("publishDiagnostics", coverageSupport); insert(u"publishDiagnostics", coverageSupport);
} }
}; };

View File

@@ -79,19 +79,20 @@ CppcheckTextMark::CppcheckTextMark (const Diagnostic &diagnostic)
setToolTip(toolTipText(diagnostic.severityText)); setToolTip(toolTipText(diagnostic.severityText));
setLineAnnotation(diagnostic.message); setLineAnnotation(diagnostic.message);
setSettingsPage(Constants::OPTIONS_PAGE_ID); setSettingsPage(Constants::OPTIONS_PAGE_ID);
setActionsProvider([diagnostic] {
// Copy to clipboard action // Copy to clipboard action
QAction *action = new QAction(); QAction *action = new QAction;
action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon())); action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()));
action->setToolTip(TextMark::tr("Copy to Clipboard")); action->setToolTip(TextMark::tr("Copy to Clipboard"));
QObject::connect(action, &QAction::triggered, [diagnostic]() { QObject::connect(action, &QAction::triggered, [diagnostic]() {
const QString text = QString("%1:%2: %3") const QString text = QString("%1:%2: %3")
.arg(diagnostic.fileName.toUserOutput()) .arg(diagnostic.fileName.toUserOutput())
.arg(diagnostic.lineNumber) .arg(diagnostic.lineNumber)
.arg(diagnostic.message); .arg(diagnostic.message);
Utils::setClipboardAndSelection(text); Utils::setClipboardAndSelection(text);
});
return QList<QAction *>{action};
}); });
setActions({action});
} }
QString CppcheckTextMark::toolTipText(const QString &severityText) const QString CppcheckTextMark::toolTipText(const QString &severityText) const

View File

@@ -145,14 +145,16 @@ TextEditor::TextMark *DiagnosticManager::createTextMark(const FilePath &filePath
{ {
static const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()); static const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon());
static const QString tooltip = tr("Copy to Clipboard"); static const QString tooltip = tr("Copy to Clipboard");
QAction *action = new QAction();
action->setIcon(icon);
action->setToolTip(tooltip);
QObject::connect(action, &QAction::triggered, [text = diagnostic.message()]() {
setClipboardAndSelection(text);
});
auto mark = new TextMark(filePath, diagnostic, m_client->id()); auto mark = new TextMark(filePath, diagnostic, m_client->id());
mark->setActions({action}); mark->setActionsProvider([text = diagnostic.message()] {
QAction *action = new QAction();
action->setIcon(icon);
action->setToolTip(tooltip);
QObject::connect(action, &QAction::triggered, [text] {
setClipboardAndSelection(text);
});
return QList<QAction *>{action};
});
return mark; return mark;
} }

View File

@@ -549,7 +549,7 @@ QString LspLogMessage::displayText() const
if (!m_displayText.has_value()) { if (!m_displayText.has_value()) {
m_displayText = QString(time.toString("hh:mm:ss.zzz") + '\n'); m_displayText = QString(time.toString("hh:mm:ss.zzz") + '\n');
m_displayText->append( m_displayText->append(
message.toJsonObject().value(QString{methodKey}).toString(id().toString())); message.toJsonObject().value(methodKey).toString(id().toString()));
} }
return *m_displayText; return *m_displayText;
} }

View File

@@ -249,14 +249,11 @@ QVariant read(int variantType, const QString &str)
if (str == "false") if (str == "false")
return false; return false;
auto tmp = QVariant(str); if (auto f = QVariant(str).toDouble(&conversionOk); conversionOk)
conversionOk = tmp.isValid(); return f;
value = QVariant(tmp); else if (auto c = colorFromString(str, &conversionOk); conversionOk)
return c;
if (tmp.canConvert(QMetaType::Double))
value.convert(QMetaType::Double);
else if (tmp.canConvert(QMetaType::QColor))
value.convert(QMetaType::QColor);
break; break;
} }
case QMetaType::QPoint: case QMetaType::QPoint:

View File

@@ -970,6 +970,13 @@ void TextDocument::updateLayout() const
documentLayout->requestUpdate(); documentLayout->requestUpdate();
} }
void TextDocument::scheduleUpdateLayout() const
{
auto documentLayout = qobject_cast<TextDocumentLayout*>(d->m_document.documentLayout());
QTC_ASSERT(documentLayout, return);
documentLayout->scheduleUpdate();
}
TextMarks TextDocument::marks() const TextMarks TextDocument::marks() const
{ {
return d->m_marksCache; return d->m_marksCache;
@@ -999,7 +1006,7 @@ bool TextDocument::addMark(TextMark *mark)
bool fullUpdate = !documentLayout->hasMarks; bool fullUpdate = !documentLayout->hasMarks;
documentLayout->hasMarks = true; documentLayout->hasMarks = true;
if (fullUpdate) if (fullUpdate)
documentLayout->requestUpdate(); documentLayout->scheduleUpdate();
else else
documentLayout->requestExtraAreaUpdate(); documentLayout->requestExtraAreaUpdate();
return true; return true;
@@ -1056,7 +1063,7 @@ void TextDocument::removeMark(TextMark *mark)
removeMarkFromMarksCache(mark); removeMarkFromMarksCache(mark);
emit markRemoved(mark); emit markRemoved(mark);
mark->setBaseTextDocument(nullptr); mark->setBaseTextDocument(nullptr);
updateLayout(); scheduleUpdateLayout();
} }
void TextDocument::updateMark(TextMark *mark) void TextDocument::updateMark(TextMark *mark)
@@ -1068,7 +1075,7 @@ void TextDocument::updateMark(TextMark *mark)
userData->removeMark(mark); userData->removeMark(mark);
userData->addMark(mark); userData->addMark(mark);
} }
updateLayout(); scheduleUpdateLayout();
} }
void TextDocument::moveMark(TextMark *mark, int previousLine) void TextDocument::moveMark(TextMark *mark, int previousLine)

View File

@@ -112,6 +112,7 @@ public:
TextMarks marksAt(int line) const; TextMarks marksAt(int line) const;
void removeMark(TextMark *mark); void removeMark(TextMark *mark);
void updateLayout() const; void updateLayout() const;
void scheduleUpdateLayout() const;
void updateMark(TextMark *mark); void updateMark(TextMark *mark);
void moveMark(TextMark *mark, int previousLine); void moveMark(TextMark *mark, int previousLine);
void removeMarkFromMarksCache(TextMark *mark); void removeMarkFromMarksCache(TextMark *mark);

View File

@@ -638,6 +638,20 @@ void TextDocumentLayout::updateMarksBlock(const QTextBlock &block)
} }
} }
void TextDocumentLayout::scheduleUpdate()
{
if (m_updateScheduled)
return;
m_updateScheduled = true;
QMetaObject::invokeMethod(this, &TextDocumentLayout::requestUpdateNow, Qt::QueuedConnection);
}
void TextDocumentLayout::requestUpdateNow()
{
m_updateScheduled = false;
requestUpdate();
}
QRectF TextDocumentLayout::blockBoundingRect(const QTextBlock &block) const QRectF TextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
{ {
QRectF boundingRect = QPlainTextDocumentLayout::blockBoundingRect(block); QRectF boundingRect = QPlainTextDocumentLayout::blockBoundingRect(block);

View File

@@ -236,6 +236,11 @@ public:
void documentReloaded(TextMarks marks, TextDocument *baseextDocument); void documentReloaded(TextMarks marks, TextDocument *baseextDocument);
void updateMarksLineNumber(); void updateMarksLineNumber();
void updateMarksBlock(const QTextBlock &block); void updateMarksBlock(const QTextBlock &block);
void scheduleUpdate();
void requestUpdateNow();
private:
bool m_updateScheduled = false;
signals: signals:
void updateExtraArea(); void updateExtraArea();

View File

@@ -96,9 +96,6 @@ TextMark::TextMark(const FilePath &fileName, int lineNumber, Id category)
TextMark::~TextMark() TextMark::~TextMark()
{ {
qDeleteAll(m_actions);
m_actions.clear();
delete m_settingsAction;
if (!m_fileName.isEmpty()) if (!m_fileName.isEmpty())
TextMarkRegistry::remove(this); TextMarkRegistry::remove(this);
if (m_baseTextDocument) if (m_baseTextDocument)
@@ -241,7 +238,7 @@ void TextMark::removedFromEditor()
void TextMark::updateMarker() void TextMark::updateMarker()
{ {
if (m_baseTextDocument) if (m_baseTextDocument)
m_baseTextDocument->updateLayout(); m_baseTextDocument->scheduleUpdateLayout();
} }
void TextMark::setPriority(TextMark::Priority prioriy) void TextMark::setPriority(TextMark::Priority prioriy)
@@ -300,19 +297,29 @@ void TextMark::addToToolTipLayout(QGridLayout *target) const
target->addLayout(contentLayout, row, 1); target->addLayout(contentLayout, row, 1);
// Right column: action icons/button // Right column: action icons/button
QVector<QAction *> actions = m_actions; QList<QAction *> actions{m_actions.begin(), m_actions.end()};
if (m_settingsAction) if (m_actionsProvider)
actions << m_settingsAction; actions = m_actionsProvider();
if (m_settingsPage.isValid()) {
auto settingsAction = new QAction;
settingsAction->setIcon(Utils::Icons::SETTINGS_TOOLBAR.icon());
settingsAction->setToolTip(tr("Show Diagnostic Settings"));
QObject::connect(settingsAction, &QAction::triggered, Core::ICore::instance(),
[id = m_settingsPage] { Core::ICore::showOptionsDialog(id); },
Qt::QueuedConnection);
actions.append(settingsAction);
}
if (!actions.isEmpty()) { if (!actions.isEmpty()) {
auto actionsLayout = new QHBoxLayout; auto actionsLayout = new QHBoxLayout;
QMargins margins = actionsLayout->contentsMargins(); QMargins margins = actionsLayout->contentsMargins();
margins.setLeft(margins.left() + 5); margins.setLeft(margins.left() + 5);
actionsLayout->setContentsMargins(margins); actionsLayout->setContentsMargins(margins);
for (QAction *action : qAsConst(actions)) { for (QAction *action : qAsConst(actions)) {
QTC_ASSERT(!action->icon().isNull(), continue); QTC_ASSERT(!action->icon().isNull(), delete action; continue);
auto button = new QToolButton; auto button = new QToolButton;
button->setIcon(action->icon()); button->setIcon(action->icon());
button->setToolTip(action->toolTip()); button->setToolTip(action->toolTip());
action->setParent(button);
QObject::connect(button, &QToolButton::clicked, action, &QAction::triggered); QObject::connect(button, &QToolButton::clicked, action, &QAction::triggered);
QObject::connect(button, &QToolButton::clicked, []() { QObject::connect(button, &QToolButton::clicked, []() {
Utils::ToolTip::hideImmediately(); Utils::ToolTip::hideImmediately();
@@ -414,15 +421,14 @@ void TextMark::setActions(const QVector<QAction *> &actions)
m_actions = actions; m_actions = actions;
} }
void TextMark::setActionsProvider(const std::function<QList<QAction *>()> &actionsProvider)
{
m_actionsProvider = actionsProvider;
}
void TextMark::setSettingsPage(Id settingsPage) void TextMark::setSettingsPage(Id settingsPage)
{ {
delete m_settingsAction; m_settingsPage = settingsPage;
m_settingsAction = new QAction;
m_settingsAction->setIcon(Utils::Icons::SETTINGS.icon());
m_settingsAction->setToolTip(tr("Show Diagnostic Settings"));
QObject::connect(m_settingsAction, &QAction::triggered, Core::ICore::instance(),
[settingsPage] { Core::ICore::showOptionsDialog(settingsPage); },
Qt::QueuedConnection);
} }
TextMarkRegistry::TextMarkRegistry(QObject *parent) TextMarkRegistry::TextMarkRegistry(QObject *parent)

View File

@@ -130,6 +130,7 @@ public:
QVector<QAction *> actions() const; QVector<QAction *> actions() const;
void setActions(const QVector<QAction *> &actions); // Takes ownership void setActions(const QVector<QAction *> &actions); // Takes ownership
void setActionsProvider(const std::function<QList<QAction *>()> &actionsProvider); // Takes ownership
protected: protected:
void setSettingsPage(Utils::Id settingsPage); void setSettingsPage(Utils::Id settingsPage);
@@ -150,8 +151,9 @@ private:
QString m_toolTip; QString m_toolTip;
std::function<QString()> m_toolTipProvider; std::function<QString()> m_toolTipProvider;
QString m_defaultToolTip; QString m_defaultToolTip;
QVector<QAction *> m_actions; QVector<QAction *> m_actions; // FIXME Remove in master
QAction *m_settingsAction = nullptr; std::function<QList<QAction *>()> m_actionsProvider;
Utils::Id m_settingsPage;
}; };
} // namespace TextEditor } // namespace TextEditor

View File

@@ -4251,7 +4251,7 @@ void tst_Dumpers::dumper_data()
//+ Check("var72", "", "@QVariant (QRegion)") FIXME //+ Check("var72", "", "@QVariant (QRegion)") FIXME
+ Check("var73", "", "@QVariant (QBitmap)") + Check("var73", "", "@QVariant (QBitmap)")
+ Check("var74", "", "@QVariant (QCursor)") + Check("var74", "", "@QVariant (QCursor)")
+ Check("var75", "", "@QVariant (QKeySequence)") % NoLldbEngine // FIXME + Check("var75", "(0x0, 0x0, 0x0, 0x0)", "@QVariant (QKeySequence)")
+ Check("var76", "", "@QVariant (QPen)") + Check("var76", "", "@QVariant (QPen)")
+ Check("var77", "", "@QVariant (QTextLength)") + Check("var77", "", "@QVariant (QTextLength)")
//+ Check("var78", Value5(""), "@QVariant (QTextFormat)") //+ Check("var78", Value5(""), "@QVariant (QTextFormat)")

View File

@@ -105,20 +105,20 @@ void tst_FlameGraphView::testZoom()
QWindow *window = widget.windowHandle(); QWindow *window = widget.windowHandle();
QCOMPARE(selectedTypeId(), -1); QCOMPARE(selectedTypeId(), -1);
QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() - 15, QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() - 25,
widget.height() - 15)); widget.height() - 25));
QTRY_VERIFY(selectedTypeId() != -1); QTRY_VERIFY(selectedTypeId() != -1);
const int typeId1 = selectedTypeId(); const int typeId1 = selectedTypeId();
QTest::mouseDClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(15, widget.height() - 15)); QTest::mouseDClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(25, widget.height() - 25));
QTRY_VERIFY(selectedTypeId() != typeId1); QTRY_VERIFY(selectedTypeId() != typeId1);
QVERIFY(selectedTypeId() != -1); QVERIFY(selectedTypeId() != -1);
QTest::mouseDClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() / 2, QTest::mouseDClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() / 2,
widget.height() / 2)); widget.height() / 2));
QTRY_COMPARE(selectedTypeId(), -1); QTRY_COMPARE(selectedTypeId(), -1);
QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() - 15, QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() - 25,
widget.height() - 15)); widget.height() - 25));
QTRY_COMPARE(selectedTypeId(), typeId1); QTRY_COMPARE(selectedTypeId(), typeId1);
} }