// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant

// this file was generated by the generate.ts script

#ifndef QLANGUAGESERVERSPEC_P_H
#define QLANGUAGESERVERSPEC_P_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <QtLanguageServer/qtlanguageserverglobal.h>
#include <QtLanguageServer/private/qlanguageserverspectypes_p.h>

QT_BEGIN_NAMESPACE

namespace QLspSpecification {
namespace Requests {
// C++ types for the LSP method "callHierarchy/incomingCalls"
constexpr auto CallHierarchyIncomingCallsMethod = QLatin1String("callHierarchy/incomingCalls");
using CallHierarchyIncomingCallsParamsType = CallHierarchyIncomingCallsParams;
using CallHierarchyIncomingCallsResultType =
        std::variant<std::nullptr_t, QList<CallHierarchyIncomingCall>>;
using CallHierarchyIncomingCallsPartialResultType = QList<CallHierarchyIncomingCall>;
using CallHierarchyIncomingCallsResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<CallHierarchyIncomingCall>>,
                           QList<CallHierarchyIncomingCall>>;

// C++ types for the LSP method "callHierarchy/outgoingCalls"
constexpr auto CallHierarchyOutgoingCallsMethod = QLatin1String("callHierarchy/outgoingCalls");
using CallHierarchyOutgoingCallsParamsType = CallHierarchyOutgoingCallsParams;
using CallHierarchyOutgoingCallsResultType =
        std::variant<std::nullptr_t, QList<CallHierarchyOutgoingCall>>;
using CallHierarchyOutgoingCallsPartialResultType = QList<CallHierarchyOutgoingCall>;
using CallHierarchyOutgoingCallsResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<CallHierarchyOutgoingCall>>,
                           QList<CallHierarchyOutgoingCall>>;

// C++ types for the LSP method "client/registerCapability"
constexpr auto RegistrationMethod = QLatin1String("client/registerCapability");
using RegistrationParamsType = RegistrationParams;
using RegistrationResultType = std::nullptr_t;
using RegistrationResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "client/unregisterCapability"
constexpr auto UnregistrationMethod = QLatin1String("client/unregisterCapability");
using UnregistrationParamsType = UnregistrationParams;
using UnregistrationResultType = std::nullptr_t;
using UnregistrationResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "codeAction/resolve"
constexpr auto CodeActionResolveMethod = QLatin1String("codeAction/resolve");
using CodeActionResolveParamsType = CodeAction;
using CodeActionResolveResultType = CodeAction;
using CodeActionResolveResponseType = LSPResponse<CodeAction>;

// C++ types for the LSP method "codeLens/resolve"
constexpr auto CodeLensResolveMethod = QLatin1String("codeLens/resolve");
using CodeLensResolveParamsType = CodeLens;
using CodeLensResolveResultType = CodeLens;
using CodeLensResolveResponseType = LSPResponse<CodeLens>;

// C++ types for the LSP method "completionItem/resolve"
constexpr auto CompletionItemResolveMethod = QLatin1String("completionItem/resolve");
using CompletionItemResolveParamsType = CompletionItem;
using CompletionItemResolveResultType = CompletionItem;
using CompletionItemResolveResponseType = LSPResponse<CompletionItem>;

// C++ types for the LSP method "documentLink/resolve"
constexpr auto DocumentLinkResolveMethod = QLatin1String("documentLink/resolve");
using DocumentLinkResolveParamsType = DocumentLink;
using DocumentLinkResolveResultType = DocumentLink;
using DocumentLinkResolveResponseType = LSPResponse<DocumentLink>;

// C++ types for the LSP method "initialize"
constexpr auto InitializeMethod = QLatin1String("initialize");
using InitializeParamsType = InitializeParams;
using InitializeResultType = InitializeResult;
using InitializeResponseType = LSPResponse<InitializeResult>;

// C++ types for the LSP method "inlayHint/resolve"
constexpr auto InlayHintResolveMethod = QLatin1String("inlayHint/resolve");
using InlayHintResolveParamsType = InlayHint;
using InlayHintResolveResultType = InlayHint;
using InlayHintResolveResponseType = LSPResponse<InlayHint>;

// C++ types for the LSP method "shutdown"
constexpr auto ShutdownMethod = QLatin1String("shutdown");
using ShutdownParamsType = std::nullptr_t;
using ShutdownResultType = std::nullptr_t;
using ShutdownResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "textDocument/codeAction"
constexpr auto CodeActionMethod = QLatin1String("textDocument/codeAction");
using CodeActionParamsType = CodeActionParams;
using CodeActionResultType = std::variant<std::nullptr_t, QList<std::variant<Command, CodeAction>>>;
using CodeActionPartialResultType = QList<std::variant<Command, CodeAction>>;
using CodeActionResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<std::variant<Command, CodeAction>>>,
                           QList<std::variant<Command, CodeAction>>>;

// C++ types for the LSP method "textDocument/codeLens"
constexpr auto CodeLensMethod = QLatin1String("textDocument/codeLens");
using CodeLensParamsType = CodeLensParams;
using CodeLensResultType = std::variant<std::nullptr_t, QList<CodeLens>>;
using CodeLensPartialResultType = QList<CodeLens>;
using CodeLensResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<CodeLens>>, QList<CodeLens>>;

// C++ types for the LSP method "textDocument/colorPresentation"
constexpr auto ColorPresentationMethod = QLatin1String("textDocument/colorPresentation");
using ColorPresentationParamsType = ColorPresentationParams;
using ColorPresentationResultType = QList<ColorPresentation>;
using ColorPresentationPartialResultType = QList<ColorPresentation>;
using ColorPresentationResponseType =
        LSPPartialResponse<QList<ColorPresentation>, QList<ColorPresentation>>;

// C++ types for the LSP method "textDocument/completion"
constexpr auto CompletionMethod = QLatin1String("textDocument/completion");
using CompletionParamsType = CompletionParams;
using CompletionResultType = std::variant<std::nullptr_t, QList<CompletionItem>, CompletionList>;
using CompletionPartialResultType = QList<CompletionItem>;
using CompletionResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<CompletionItem>, CompletionList>,
                           QList<CompletionItem>>;

// C++ types for the LSP method "textDocument/declaration"
constexpr auto DeclarationMethod = QLatin1String("textDocument/declaration");
using DeclarationParamsType = DeclarationParams;
using DeclarationResultType = std::variant<std::nullptr_t, Declaration, QList<DeclarationLink>>;
using DeclarationPartialResultType = std::variant<QList<Location>, QList<DeclarationLink>>;
using DeclarationResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, Declaration, QList<DeclarationLink>>,
                           std::variant<QList<Location>, QList<DeclarationLink>>>;

// C++ types for the LSP method "textDocument/definition"
constexpr auto DefinitionMethod = QLatin1String("textDocument/definition");
using DefinitionParamsType = DefinitionParams;
using DefinitionResultType = std::variant<std::nullptr_t, Definition, QList<DefinitionLink>>;
using DefinitionPartialResultType = std::variant<QList<Location>, QList<DefinitionLink>>;
using DefinitionResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, Definition, QList<DefinitionLink>>,
                           std::variant<QList<Location>, QList<DefinitionLink>>>;

// C++ types for the LSP method "textDocument/diagnostic"
constexpr auto DocumentDiagnosticMethod = QLatin1String("textDocument/diagnostic");
using DocumentDiagnosticParamsType = DocumentDiagnosticParams;
using DocumentDiagnosticResultType = DocumentDiagnosticReport;
using DocumentDiagnosticPartialResultType = DocumentDiagnosticReportPartialResult;
using DocumentDiagnosticResponseType =
        LSPPartialResponse<DocumentDiagnosticReport, DocumentDiagnosticReportPartialResult>;

// C++ types for the LSP method "textDocument/documentColor"
constexpr auto DocumentColorMethod = QLatin1String("textDocument/documentColor");
using DocumentColorParamsType = DocumentColorParams;
using DocumentColorResultType = QList<ColorInformation>;
using DocumentColorPartialResultType = QList<ColorInformation>;
using DocumentColorResponseType =
        LSPPartialResponse<QList<ColorInformation>, QList<ColorInformation>>;

// C++ types for the LSP method "textDocument/documentHighlight"
constexpr auto DocumentHighlightMethod = QLatin1String("textDocument/documentHighlight");
using DocumentHighlightParamsType = DocumentHighlightParams;
using DocumentHighlightResultType = std::variant<std::nullptr_t, QList<DocumentHighlight>>;
using DocumentHighlightPartialResultType = QList<DocumentHighlight>;
using DocumentHighlightResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<DocumentHighlight>>,
                           QList<DocumentHighlight>>;

// C++ types for the LSP method "textDocument/documentLink"
constexpr auto DocumentLinkMethod = QLatin1String("textDocument/documentLink");
using DocumentLinkParamsType = DocumentLinkParams;
using DocumentLinkResultType = std::variant<std::nullptr_t, QList<DocumentLink>>;
using DocumentLinkPartialResultType = QList<DocumentLink>;
using DocumentLinkResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<DocumentLink>>, QList<DocumentLink>>;

// C++ types for the LSP method "textDocument/documentSymbol"
constexpr auto DocumentSymbolMethod = QLatin1String("textDocument/documentSymbol");
using DocumentSymbolParamsType = DocumentSymbolParams;
using DocumentSymbolResultType =
        std::variant<std::nullptr_t, QList<SymbolInformation>, QList<DocumentSymbol>>;
using DocumentSymbolPartialResultType =
        std::variant<QList<SymbolInformation>, QList<DocumentSymbol>>;
using DocumentSymbolResponseType = LSPPartialResponse<
        std::variant<std::nullptr_t, QList<SymbolInformation>, QList<DocumentSymbol>>,
        std::variant<QList<SymbolInformation>, QList<DocumentSymbol>>>;

// C++ types for the LSP method "textDocument/foldingRange"
constexpr auto FoldingRangeMethod = QLatin1String("textDocument/foldingRange");
using FoldingRangeParamsType = FoldingRangeParams;
using FoldingRangeResultType = std::variant<std::nullptr_t, QList<FoldingRange>>;
using FoldingRangePartialResultType = QList<FoldingRange>;
using FoldingRangeResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<FoldingRange>>, QList<FoldingRange>>;

// C++ types for the LSP method "textDocument/formatting"
constexpr auto DocumentFormattingMethod = QLatin1String("textDocument/formatting");
using DocumentFormattingParamsType = DocumentFormattingParams;
using DocumentFormattingResultType = std::variant<std::nullptr_t, QList<TextEdit>>;
using DocumentFormattingResponseType = LSPResponse<std::variant<std::nullptr_t, QList<TextEdit>>>;

// C++ types for the LSP method "textDocument/hover"
constexpr auto HoverMethod = QLatin1String("textDocument/hover");
using HoverParamsType = HoverParams;
using HoverResultType = std::variant<std::nullptr_t, Hover>;
using HoverResponseType = LSPResponse<std::variant<std::nullptr_t, Hover>>;

// C++ types for the LSP method "textDocument/implementation"
constexpr auto ImplementationMethod = QLatin1String("textDocument/implementation");
using ImplementationParamsType = ImplementationParams;
using ImplementationResultType = std::variant<std::nullptr_t, Definition, QList<DefinitionLink>>;
using ImplementationPartialResultType = std::variant<QList<Location>, QList<DefinitionLink>>;
using ImplementationResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, Definition, QList<DefinitionLink>>,
                           std::variant<QList<Location>, QList<DefinitionLink>>>;

// C++ types for the LSP method "textDocument/inlayHint"
constexpr auto InlayHintMethod = QLatin1String("textDocument/inlayHint");
using InlayHintParamsType = InlayHintParams;
using InlayHintResultType = std::variant<std::nullptr_t, QList<InlayHint>>;
using InlayHintPartialResultType = QList<InlayHint>;
using InlayHintResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<InlayHint>>, QList<InlayHint>>;

// C++ types for the LSP method "textDocument/inlineCompletion"
constexpr auto InlineCompletionMethod = QLatin1String("textDocument/inlineCompletion");
using InlineCompletionParamsType = InlineCompletionParams;
using InlineCompletionResultType =
        std::variant<std::nullptr_t, InlineCompletionList, QList<InlineCompletionItem>>;
using InlineCompletionPartialResultType = QList<InlineCompletionItem>;
using InlineCompletionResponseType = LSPPartialResponse<
        std::variant<std::nullptr_t, InlineCompletionList, QList<InlineCompletionItem>>,
        QList<InlineCompletionItem>>;

// C++ types for the LSP method "textDocument/inlineValue"
constexpr auto InlineValueMethod = QLatin1String("textDocument/inlineValue");
using InlineValueParamsType = InlineValueParams;
using InlineValueResultType = std::variant<std::nullptr_t, QList<InlineValue>>;
using InlineValuePartialResultType = QList<InlineValue>;
using InlineValueResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<InlineValue>>, QList<InlineValue>>;

// C++ types for the LSP method "textDocument/linkedEditingRange"
constexpr auto LinkedEditingRangeMethod = QLatin1String("textDocument/linkedEditingRange");
using LinkedEditingRangeParamsType = LinkedEditingRangeParams;
using LinkedEditingRangeResultType = std::variant<std::nullptr_t, LinkedEditingRanges>;
using LinkedEditingRangeResponseType =
        LSPResponse<std::variant<std::nullptr_t, LinkedEditingRanges>>;

// C++ types for the LSP method "textDocument/moniker"
constexpr auto MonikerMethod = QLatin1String("textDocument/moniker");
using MonikerParamsType = MonikerParams;
using MonikerResultType = std::variant<std::nullptr_t, QList<Moniker>>;
using MonikerPartialResultType = QList<Moniker>;
using MonikerResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<Moniker>>, QList<Moniker>>;

// C++ types for the LSP method "textDocument/onTypeFormatting"
constexpr auto DocumentOnTypeFormattingMethod = QLatin1String("textDocument/onTypeFormatting");
using DocumentOnTypeFormattingParamsType = DocumentOnTypeFormattingParams;
using DocumentOnTypeFormattingResultType = std::variant<std::nullptr_t, QList<TextEdit>>;
using DocumentOnTypeFormattingResponseType =
        LSPResponse<std::variant<std::nullptr_t, QList<TextEdit>>>;

// C++ types for the LSP method "textDocument/prepareCallHierarchy"
constexpr auto CallHierarchyPrepareMethod = QLatin1String("textDocument/prepareCallHierarchy");
using CallHierarchyPrepareParamsType = CallHierarchyPrepareParams;
using CallHierarchyPrepareResultType = std::variant<std::nullptr_t, QList<CallHierarchyItem>>;
using CallHierarchyPrepareResponseType =
        LSPResponse<std::variant<std::nullptr_t, QList<CallHierarchyItem>>>;

// C++ types for the LSP method "textDocument/prepareRename"
constexpr auto PrepareRenameMethod = QLatin1String("textDocument/prepareRename");
using PrepareRenameParamsType = PrepareRenameParams;
using PrepareRenameResultType = std::variant<std::nullptr_t, PrepareRenameResult>;
using PrepareRenameResponseType = LSPResponse<std::variant<std::nullptr_t, PrepareRenameResult>>;

// C++ types for the LSP method "textDocument/prepareTypeHierarchy"
constexpr auto TypeHierarchyPrepareMethod = QLatin1String("textDocument/prepareTypeHierarchy");
using TypeHierarchyPrepareParamsType = TypeHierarchyPrepareParams;
using TypeHierarchyPrepareResultType = std::variant<std::nullptr_t, QList<TypeHierarchyItem>>;
using TypeHierarchyPrepareResponseType =
        LSPResponse<std::variant<std::nullptr_t, QList<TypeHierarchyItem>>>;

// C++ types for the LSP method "textDocument/rangeFormatting"
constexpr auto DocumentRangeFormattingMethod = QLatin1String("textDocument/rangeFormatting");
using DocumentRangeFormattingParamsType = DocumentRangeFormattingParams;
using DocumentRangeFormattingResultType = std::variant<std::nullptr_t, QList<TextEdit>>;
using DocumentRangeFormattingResponseType =
        LSPResponse<std::variant<std::nullptr_t, QList<TextEdit>>>;

// C++ types for the LSP method "textDocument/rangesFormatting"
constexpr auto DocumentRangesFormattingMethod = QLatin1String("textDocument/rangesFormatting");
using DocumentRangesFormattingParamsType = DocumentRangesFormattingParams;
using DocumentRangesFormattingResultType = std::variant<std::nullptr_t, QList<TextEdit>>;
using DocumentRangesFormattingResponseType =
        LSPResponse<std::variant<std::nullptr_t, QList<TextEdit>>>;

// C++ types for the LSP method "textDocument/references"
constexpr auto ReferenceMethod = QLatin1String("textDocument/references");
using ReferenceParamsType = ReferenceParams;
using ReferenceResultType = std::variant<std::nullptr_t, QList<Location>>;
using ReferencePartialResultType = QList<Location>;
using ReferenceResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<Location>>, QList<Location>>;

// C++ types for the LSP method "textDocument/rename"
constexpr auto RenameMethod = QLatin1String("textDocument/rename");
using RenameParamsType = RenameParams;
using RenameResultType = std::variant<std::nullptr_t, WorkspaceEdit>;
using RenameResponseType = LSPResponse<std::variant<std::nullptr_t, WorkspaceEdit>>;

// C++ types for the LSP method "textDocument/selectionRange"
constexpr auto SelectionRangeMethod = QLatin1String("textDocument/selectionRange");
using SelectionRangeParamsType = SelectionRangeParams;
using SelectionRangeResultType = std::variant<std::nullptr_t, QList<SelectionRange>>;
using SelectionRangePartialResultType = QList<SelectionRange>;
using SelectionRangeResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<SelectionRange>>,
                           QList<SelectionRange>>;

// C++ types for the LSP method "textDocument/semanticTokens/full"
constexpr auto SemanticTokensMethod = QLatin1String("textDocument/semanticTokens/full");
using SemanticTokensParamsType = SemanticTokensParams;
using SemanticTokensResultType = std::variant<std::nullptr_t, SemanticTokens>;
using SemanticTokensPartialResultType = SemanticTokensPartialResult;
using SemanticTokensResponseType = LSPPartialResponse<std::variant<std::nullptr_t, SemanticTokens>,
                                                      SemanticTokensPartialResult>;

// C++ types for the LSP method "textDocument/semanticTokens/full/delta"
constexpr auto SemanticTokensDeltaMethod = QLatin1String("textDocument/semanticTokens/full/delta");
using SemanticTokensDeltaParamsType = SemanticTokensDeltaParams;
using SemanticTokensDeltaResultType =
        std::variant<std::nullptr_t, SemanticTokens, SemanticTokensDelta>;
using SemanticTokensDeltaPartialResultType =
        std::variant<SemanticTokensPartialResult, SemanticTokensDeltaPartialResult>;
using SemanticTokensDeltaResponseType = LSPPartialResponse<
        std::variant<std::nullptr_t, SemanticTokens, SemanticTokensDelta>,
        std::variant<SemanticTokensPartialResult, SemanticTokensDeltaPartialResult>>;

// C++ types for the LSP method "textDocument/semanticTokens/range"
constexpr auto SemanticTokensRangeMethod = QLatin1String("textDocument/semanticTokens/range");
using SemanticTokensRangeParamsType = SemanticTokensRangeParams;
using SemanticTokensRangeResultType = std::variant<std::nullptr_t, SemanticTokens>;
using SemanticTokensRangePartialResultType = SemanticTokensPartialResult;
using SemanticTokensRangeResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, SemanticTokens>,
                           SemanticTokensPartialResult>;

// C++ types for the LSP method "textDocument/signatureHelp"
constexpr auto SignatureHelpMethod = QLatin1String("textDocument/signatureHelp");
using SignatureHelpParamsType = SignatureHelpParams;
using SignatureHelpResultType = std::variant<std::nullptr_t, SignatureHelp>;
using SignatureHelpResponseType = LSPResponse<std::variant<std::nullptr_t, SignatureHelp>>;

// C++ types for the LSP method "textDocument/typeDefinition"
constexpr auto TypeDefinitionMethod = QLatin1String("textDocument/typeDefinition");
using TypeDefinitionParamsType = TypeDefinitionParams;
using TypeDefinitionResultType = std::variant<std::nullptr_t, Definition, QList<DefinitionLink>>;
using TypeDefinitionPartialResultType = std::variant<QList<Location>, QList<DefinitionLink>>;
using TypeDefinitionResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, Definition, QList<DefinitionLink>>,
                           std::variant<QList<Location>, QList<DefinitionLink>>>;

// C++ types for the LSP method "textDocument/willSaveWaitUntil"
constexpr auto WillSaveTextDocumentMethod = QLatin1String("textDocument/willSaveWaitUntil");
using WillSaveTextDocumentParamsType = WillSaveTextDocumentParams;
using WillSaveTextDocumentResultType = std::variant<std::nullptr_t, QList<TextEdit>>;
using WillSaveTextDocumentResponseType = LSPResponse<std::variant<std::nullptr_t, QList<TextEdit>>>;

// C++ types for the LSP method "typeHierarchy/subtypes"
constexpr auto TypeHierarchySubtypesMethod = QLatin1String("typeHierarchy/subtypes");
using TypeHierarchySubtypesParamsType = TypeHierarchySubtypesParams;
using TypeHierarchySubtypesResultType = std::variant<std::nullptr_t, QList<TypeHierarchyItem>>;
using TypeHierarchySubtypesPartialResultType = QList<TypeHierarchyItem>;
using TypeHierarchySubtypesResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<TypeHierarchyItem>>,
                           QList<TypeHierarchyItem>>;

// C++ types for the LSP method "typeHierarchy/supertypes"
constexpr auto TypeHierarchySupertypesMethod = QLatin1String("typeHierarchy/supertypes");
using TypeHierarchySupertypesParamsType = TypeHierarchySupertypesParams;
using TypeHierarchySupertypesResultType = std::variant<std::nullptr_t, QList<TypeHierarchyItem>>;
using TypeHierarchySupertypesPartialResultType = QList<TypeHierarchyItem>;
using TypeHierarchySupertypesResponseType =
        LSPPartialResponse<std::variant<std::nullptr_t, QList<TypeHierarchyItem>>,
                           QList<TypeHierarchyItem>>;

// C++ types for the LSP method "window/showDocument"
constexpr auto ShowDocumentMethod = QLatin1String("window/showDocument");
using ShowDocumentParamsType = ShowDocumentParams;
using ShowDocumentResultType = ShowDocumentResult;
using ShowDocumentResponseType = LSPResponse<ShowDocumentResult>;

// C++ types for the LSP method "window/showMessageRequest"
constexpr auto ShowMessageRequestMethod = QLatin1String("window/showMessageRequest");
using ShowMessageRequestParamsType = ShowMessageRequestParams;
using ShowMessageRequestResultType = std::variant<std::nullptr_t, MessageActionItem>;
using ShowMessageRequestResponseType = LSPResponse<std::variant<std::nullptr_t, MessageActionItem>>;

// C++ types for the LSP method "window/workDoneProgress/create"
constexpr auto WorkDoneProgressCreateMethod = QLatin1String("window/workDoneProgress/create");
using WorkDoneProgressCreateParamsType = WorkDoneProgressCreateParams;
using WorkDoneProgressCreateResultType = std::nullptr_t;
using WorkDoneProgressCreateResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "workspace/applyEdit"
constexpr auto ApplyWorkspaceEditMethod = QLatin1String("workspace/applyEdit");
using ApplyWorkspaceEditParamsType = ApplyWorkspaceEditParams;
using ApplyWorkspaceEditResultType = ApplyWorkspaceEditResult;
using ApplyWorkspaceEditResponseType = LSPResponse<ApplyWorkspaceEditResult>;

// C++ types for the LSP method "workspace/codeLens/refresh"
constexpr auto WorkspaceCodeLensRefreshMethod = QLatin1String("workspace/codeLens/refresh");
using WorkspaceCodeLensRefreshParamsType = std::nullptr_t;
using WorkspaceCodeLensRefreshResultType = std::nullptr_t;
using WorkspaceCodeLensRefreshResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "workspace/configuration"
constexpr auto ConfigurationMethod = QLatin1String("workspace/configuration");
using ConfigurationParamsType = ConfigurationParams;
using ConfigurationResultType = QList<QJsonValue>;
using ConfigurationResponseType = LSPResponse<QList<QJsonValue>>;

// C++ types for the LSP method "workspace/diagnostic"
constexpr auto WorkspaceDiagnosticMethod = QLatin1String("workspace/diagnostic");
using WorkspaceDiagnosticParamsType = WorkspaceDiagnosticParams;
using WorkspaceDiagnosticResultType = WorkspaceDiagnosticReport;
using WorkspaceDiagnosticPartialResultType = WorkspaceDiagnosticReportPartialResult;
using WorkspaceDiagnosticResponseType =
        LSPPartialResponse<WorkspaceDiagnosticReport, WorkspaceDiagnosticReportPartialResult>;

// C++ types for the LSP method "workspace/diagnostic/refresh"
constexpr auto WorkspaceDiagnosticRefreshMethod = QLatin1String("workspace/diagnostic/refresh");
using WorkspaceDiagnosticRefreshParamsType = std::nullptr_t;
using WorkspaceDiagnosticRefreshResultType = std::nullptr_t;
using WorkspaceDiagnosticRefreshResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "workspace/executeCommand"
constexpr auto ExecuteCommandMethod = QLatin1String("workspace/executeCommand");
using ExecuteCommandParamsType = ExecuteCommandParams;
using ExecuteCommandResultType = std::variant<std::nullptr_t, QJsonValue>;
using ExecuteCommandResponseType = LSPResponse<std::variant<std::nullptr_t, QJsonValue>>;

// C++ types for the LSP method "workspace/foldingRange/refresh"
constexpr auto WorkspaceFoldingRangeRefreshMethod = QLatin1String("workspace/foldingRange/refresh");
using WorkspaceFoldingRangeRefreshParamsType = std::nullptr_t;
using WorkspaceFoldingRangeRefreshResultType = std::nullptr_t;
using WorkspaceFoldingRangeRefreshResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "workspace/inlayHint/refresh"
constexpr auto WorkspaceInlayHintRefreshMethod = QLatin1String("workspace/inlayHint/refresh");
using WorkspaceInlayHintRefreshParamsType = std::nullptr_t;
using WorkspaceInlayHintRefreshResultType = std::nullptr_t;
using WorkspaceInlayHintRefreshResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "workspace/inlineValue/refresh"
constexpr auto WorkspaceInlineValueRefreshMethod = QLatin1String("workspace/inlineValue/refresh");
using WorkspaceInlineValueRefreshParamsType = std::nullptr_t;
using WorkspaceInlineValueRefreshResultType = std::nullptr_t;
using WorkspaceInlineValueRefreshResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "workspace/semanticTokens/refresh"
constexpr auto WorkspaceSemanticTokensRefreshMethod =
        QLatin1String("workspace/semanticTokens/refresh");
using WorkspaceSemanticTokensRefreshParamsType = std::nullptr_t;
using WorkspaceSemanticTokensRefreshResultType = std::nullptr_t;
using WorkspaceSemanticTokensRefreshResponseType = LSPResponse<std::nullptr_t>;

// C++ types for the LSP method "workspace/symbol"
constexpr auto WorkspaceSymbolMethod = QLatin1String("workspace/symbol");
using WorkspaceSymbolParamsType = WorkspaceSymbolParams;
using WorkspaceSymbolResultType =
        std::variant<std::nullptr_t, QList<SymbolInformation>, QList<WorkspaceSymbol>>;
using WorkspaceSymbolPartialResultType =
        std::variant<QList<SymbolInformation>, QList<WorkspaceSymbol>>;
using WorkspaceSymbolResponseType = LSPPartialResponse<
        std::variant<std::nullptr_t, QList<SymbolInformation>, QList<WorkspaceSymbol>>,
        std::variant<QList<SymbolInformation>, QList<WorkspaceSymbol>>>;

// C++ types for the LSP method "workspace/willCreateFiles"
constexpr auto CreateFilesMethod = QLatin1String("workspace/willCreateFiles");
using CreateFilesParamsType = CreateFilesParams;
using CreateFilesResultType = std::variant<std::nullptr_t, WorkspaceEdit>;
using CreateFilesResponseType = LSPResponse<std::variant<std::nullptr_t, WorkspaceEdit>>;

// C++ types for the LSP method "workspace/willDeleteFiles"
constexpr auto DeleteFilesMethod = QLatin1String("workspace/willDeleteFiles");
using DeleteFilesParamsType = DeleteFilesParams;
using DeleteFilesResultType = std::variant<std::nullptr_t, WorkspaceEdit>;
using DeleteFilesResponseType = LSPResponse<std::variant<std::nullptr_t, WorkspaceEdit>>;

// C++ types for the LSP method "workspace/willRenameFiles"
constexpr auto RenameFilesMethod = QLatin1String("workspace/willRenameFiles");
using RenameFilesParamsType = RenameFilesParams;
using RenameFilesResultType = std::variant<std::nullptr_t, WorkspaceEdit>;
using RenameFilesResponseType = LSPResponse<std::variant<std::nullptr_t, WorkspaceEdit>>;

// C++ types for the LSP method "workspace/workspaceFolders"
constexpr auto WorkspaceWorkspaceFoldersMethod = QLatin1String("workspace/workspaceFolders");
using WorkspaceWorkspaceFoldersParamsType = std::nullptr_t;
using WorkspaceWorkspaceFoldersResultType = std::variant<std::nullptr_t, QList<WorkspaceFolder>>;
using WorkspaceWorkspaceFoldersResponseType =
        LSPResponse<std::variant<std::nullptr_t, QList<WorkspaceFolder>>>;

// C++ types for the LSP method "workspaceSymbol/resolve"
constexpr auto WorkspaceSymbolResolveMethod = QLatin1String("workspaceSymbol/resolve");
using WorkspaceSymbolResolveParamsType = WorkspaceSymbol;
using WorkspaceSymbolResolveResultType = WorkspaceSymbol;
using WorkspaceSymbolResolveResponseType = LSPResponse<WorkspaceSymbol>;

} // namespace Requests
// for compatibility reasons:
namespace Responses {
using namespace Requests;
}

namespace Notifications {
// C++ types for the LSP method "$/cancelRequest"
constexpr auto CancelMethod = "$/cancelRequest";
using CancelParamsType = CancelParams;

// C++ types for the LSP method "$/logTrace"
constexpr auto LogTraceMethod = "$/logTrace";
using LogTraceParamsType = LogTraceParams;

// C++ types for the LSP method "$/progress"
constexpr auto ProgressMethod = "$/progress";
using ProgressParamsType = ProgressParams;

// C++ types for the LSP method "$/setTrace"
constexpr auto SetTraceMethod = "$/setTrace";
using SetTraceParamsType = SetTraceParams;

// C++ types for the LSP method "exit"
constexpr auto ExitMethod = "exit";
using ExitParamsType = std::nullptr_t;

// C++ types for the LSP method "initialized"
constexpr auto InitializedMethod = "initialized";
using InitializedParamsType = InitializedParams;

// C++ types for the LSP method "notebookDocument/didChange"
constexpr auto DidChangeNotebookDocumentMethod = "notebookDocument/didChange";
using DidChangeNotebookDocumentParamsType = DidChangeNotebookDocumentParams;

// C++ types for the LSP method "notebookDocument/didClose"
constexpr auto DidCloseNotebookDocumentMethod = "notebookDocument/didClose";
using DidCloseNotebookDocumentParamsType = DidCloseNotebookDocumentParams;

// C++ types for the LSP method "notebookDocument/didOpen"
constexpr auto DidOpenNotebookDocumentMethod = "notebookDocument/didOpen";
using DidOpenNotebookDocumentParamsType = DidOpenNotebookDocumentParams;

// C++ types for the LSP method "notebookDocument/didSave"
constexpr auto DidSaveNotebookDocumentMethod = "notebookDocument/didSave";
using DidSaveNotebookDocumentParamsType = DidSaveNotebookDocumentParams;

// C++ types for the LSP method "telemetry/event"
constexpr auto TelemetryEventMethod = "telemetry/event";
using TelemetryEventParamsType = QJsonValue;

// C++ types for the LSP method "textDocument/didChange"
constexpr auto DidChangeTextDocumentMethod = "textDocument/didChange";
using DidChangeTextDocumentParamsType = DidChangeTextDocumentParams;

// C++ types for the LSP method "textDocument/didClose"
constexpr auto DidCloseTextDocumentMethod = "textDocument/didClose";
using DidCloseTextDocumentParamsType = DidCloseTextDocumentParams;

// C++ types for the LSP method "textDocument/didOpen"
constexpr auto DidOpenTextDocumentMethod = "textDocument/didOpen";
using DidOpenTextDocumentParamsType = DidOpenTextDocumentParams;

// C++ types for the LSP method "textDocument/didSave"
constexpr auto DidSaveTextDocumentMethod = "textDocument/didSave";
using DidSaveTextDocumentParamsType = DidSaveTextDocumentParams;

// C++ types for the LSP method "textDocument/publishDiagnostics"
constexpr auto PublishDiagnosticsMethod = "textDocument/publishDiagnostics";
using PublishDiagnosticsParamsType = PublishDiagnosticsParams;

// C++ types for the LSP method "textDocument/willSave"
constexpr auto WillSaveTextDocumentMethod = "textDocument/willSave";
using WillSaveTextDocumentParamsType = WillSaveTextDocumentParams;

// C++ types for the LSP method "window/logMessage"
constexpr auto LogMessageMethod = "window/logMessage";
using LogMessageParamsType = LogMessageParams;

// C++ types for the LSP method "window/showMessage"
constexpr auto ShowMessageMethod = "window/showMessage";
using ShowMessageParamsType = ShowMessageParams;

// C++ types for the LSP method "window/workDoneProgress/cancel"
constexpr auto WorkDoneProgressCancelMethod = "window/workDoneProgress/cancel";
using WorkDoneProgressCancelParamsType = WorkDoneProgressCancelParams;

// C++ types for the LSP method "workspace/didChangeConfiguration"
constexpr auto DidChangeConfigurationMethod = "workspace/didChangeConfiguration";
using DidChangeConfigurationParamsType = DidChangeConfigurationParams;

// C++ types for the LSP method "workspace/didChangeWatchedFiles"
constexpr auto DidChangeWatchedFilesMethod = "workspace/didChangeWatchedFiles";
using DidChangeWatchedFilesParamsType = DidChangeWatchedFilesParams;

// C++ types for the LSP method "workspace/didChangeWorkspaceFolders"
constexpr auto DidChangeWorkspaceFoldersMethod = "workspace/didChangeWorkspaceFolders";
using DidChangeWorkspaceFoldersParamsType = DidChangeWorkspaceFoldersParams;

// C++ types for the LSP method "workspace/didCreateFiles"
constexpr auto CreateFilesMethod = "workspace/didCreateFiles";
using CreateFilesParamsType = CreateFilesParams;

// C++ types for the LSP method "workspace/didDeleteFiles"
constexpr auto DeleteFilesMethod = "workspace/didDeleteFiles";
using DeleteFilesParamsType = DeleteFilesParams;

// C++ types for the LSP method "workspace/didRenameFiles"
constexpr auto RenameFilesMethod = "workspace/didRenameFiles";
using RenameFilesParamsType = RenameFilesParams;

} // namespace Notifications

// Variant over all possible request parameters, required by the generic handlers.
// This variant is used like a generic argument type that can be constructed from
// any argument type... except when it contains duplicate, in that case the
// constructors are deleted. Therefore ensure that each variant type only occurs
// once in the variant.
using RequestParams = std::variant<
        ApplyWorkspaceEditParams, CallHierarchyIncomingCallsParams,
        CallHierarchyOutgoingCallsParams, CallHierarchyPrepareParams, CodeAction, CodeActionParams,
        CodeLens, CodeLensParams, ColorPresentationParams, CompletionItem, CompletionParams,
        ConfigurationParams, CreateFilesParams, DeclarationParams, DefinitionParams,
        DeleteFilesParams, DocumentColorParams, DocumentDiagnosticParams, DocumentFormattingParams,
        DocumentHighlightParams, DocumentLink, DocumentLinkParams, DocumentOnTypeFormattingParams,
        DocumentRangeFormattingParams, DocumentRangesFormattingParams, DocumentSymbolParams,
        ExecuteCommandParams, FoldingRangeParams, HoverParams, ImplementationParams,
        InitializeParams, InlayHint, InlayHintParams, InlineCompletionParams, InlineValueParams,
        LinkedEditingRangeParams, MonikerParams, PrepareRenameParams, ReferenceParams,
        RegistrationParams, RenameFilesParams, RenameParams, SelectionRangeParams,
        SemanticTokensDeltaParams, SemanticTokensParams, SemanticTokensRangeParams,
        ShowDocumentParams, ShowMessageRequestParams, SignatureHelpParams, TypeDefinitionParams,
        TypeHierarchyPrepareParams, TypeHierarchySubtypesParams, TypeHierarchySupertypesParams,
        UnregistrationParams, WillSaveTextDocumentParams, WorkDoneProgressCreateParams,
        WorkspaceDiagnosticParams, WorkspaceSymbol, WorkspaceSymbolParams, std::nullptr_t,
        QJsonValue>;

// Variant over all possible notification parameters, required by the generic handlers.
// This can't contain duplicates, see comment on RequestParams.
using NotificationParams = std::variant<
        CancelParams, CreateFilesParams, DeleteFilesParams, DidChangeConfigurationParams,
        DidChangeNotebookDocumentParams, DidChangeTextDocumentParams, DidChangeWatchedFilesParams,
        DidChangeWorkspaceFoldersParams, DidCloseNotebookDocumentParams, DidCloseTextDocumentParams,
        DidOpenNotebookDocumentParams, DidOpenTextDocumentParams, DidSaveNotebookDocumentParams,
        DidSaveTextDocumentParams, InitializedParams, LogMessageParams, LogTraceParams,
        ProgressParams, PublishDiagnosticsParams, QJsonValue, RenameFilesParams, SetTraceParams,
        ShowMessageParams, WillSaveTextDocumentParams, WorkDoneProgressCancelParams,
        std::nullptr_t>;

} // namespace QLspSpecification

QT_END_NAMESPACE

#endif // QLANGUAGESERVERSPEC_P_H
