#pragma once #include "./basic_types.hpp" #include "./document_sync.hpp" #include "./progress.hpp" namespace lsp::protocol { enum class CompletionItemTag { kDeprecated = 1 }; enum class InsertTextMode { kAsIs = 1, kAdjustIndentation = 2 }; enum class CompletionItemKind { kText = 1, kMethod = 2, kFunction = 3, kConstructor = 4, kField = 5, kVariable = 6, kClass = 7, kInterface = 8, kModule = 9, kProperty = 10, kUnit = 11, kValue = 12, kEnum = 13, kKeyword = 14, kSnippet = 15, kColor = 16, kFile = 17, kReference = 18, kFolder = 19, kEnumMember = 20, kConstant = 21, kStruct = 22, kEvent = 23, kOperator = 24, kTypeParameter = 25 }; enum class InsertTextFormat { kPlainText = 1, kSnippet = 2 }; enum CompletionTriggerKind { kInvoked = 1, kTriggerCharacter = 2, kTriggerForIncompleteCompletions = 3 }; struct CompletionContext { CompletionTriggerKind triggerKind; std::optional triggerCharacter; }; struct InsertReplaceEdit { string newText; Range insert; Range replace; }; struct CompletionItemLabelDetails { std::optional detail; std::optional description; }; struct CompletionItem { string label; std::optional labelDetails; std::optional kind; std::optional detail; std::optional> documentation; std::optional preselect; std::optional sortText; std::optional filterText; std::optional insertText; std::optional insertTextFormat; std::optional insertTextMode; std::optional> textEdit; std::optional textEditText; std::optional> additionalTextEdits; std::optional> commitCharacters; std::optional command; std::optional data; }; struct CompletionList { struct ItemDefaults { struct EditRange { Range insert; Range replace; }; std::optional> commitCharacters; std::optional> editRange; std::optional insertTextFormat; std::optional insertTextMode; std::optional data; }; boolean isIncomplete; ItemDefaults itemDefaults; std::vector items; }; struct CompletionClientCapabilities { struct CompletionItem { struct TagSupport { std::optional> valueSet; }; struct ResolveSupport { std::vector properties; }; struct InsertTextModeSupport { std::optional> valueSet; }; boolean snippetSupport; std::optional commitCharactersSupport; std::optional> documentationFormat; std::optional deprecatedSupport; std::optional preselectSupport; std::optional tagSupport; boolean insertReplaceSupport; ResolveSupport resolveSupport; std::optional insertTextModeSupport; boolean labelDetailsSupport; }; struct CompletionItemKinds { std::optional> valueSet; }; struct CompletionList { std::vector itemDefault; }; boolean dynamicRegistration; std::optional completionItem; std::optional completionItemKind; std::optional contextSupport; std::optional insertTextMode; std::optional completionList; }; struct CompletionOptions : WorkDoneProgressOptions { struct CompletionItem { std::optional labelDetailsSupport; }; std::optional> triggerCharacters; std::optional> allCommitCharacters; std::optional resolveProvider; std::optional completionItem; }; struct CompletionRegistrationOptions : TextDocumentRegistrationOptions, CompletionOptions { }; struct CompletionParams : TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams { std::optional context; }; }