#pragma once #include "./basic_types.hpp" #include "./document_sync.hpp" #include "./progress.hpp" #include "./completion.hpp" namespace lsp::protocol { enum class SymbolKind { kFile = 1, kModule = 2, kNamespace = 3, kPackage = 4, kClass = 5, kMethod = 6, kProperty = 7, kField = 8, kConstructor = 9, kEnum = 10, kInterface = 11, kFunction = 12, kVariable = 13, kConstant = 14, kString = 15, kNumber = 16, kBoolean = 17, kArray = 18, kObject = 19, kKey = 20, kNull = 21, kEnumMember = 22, kStruct = 23, kEvent = 24, kOperator = 25, kTypeParameter = 26 }; enum class SymbolTag { Deprecated = 1 }; struct DocumentSymbol { string name; std::optional detail; SymbolKind kind; std::optional> tags; std::optional deprecated; Range range; Range selectionRange; std::optional> children; }; struct SymbolInformation { string name; SymbolKind kind; std::optional> tags; std::optional deprecated; Location location; std::optional containerName; }; struct DocumentSymbolClientCapabilities { struct SymbolKinds { std::vector valueSet; }; struct TagSupport { std::optional> valueSet; }; std::optional dynamicRegistration; std::optional symbolKind; std::optional hierarchicalDocumentSymbolSupport; std::optional tagSupport; std::optional labelSupport; }; struct DocumentSymbolOptions : WorkDoneProgressOptions { std::optional label; }; struct DocumentSymbolRegistrationOptions : TextDocumentRegistrationOptions, DocumentSymbolOptions { }; struct DocumentSymbolParams : WorkDoneProgressParams, PartialResultParams { TextDocumentIdentifier textDocument; }; struct WorkspaceSymbolClientCapabilities { struct SymbolKinds { std::vector valueSet; }; struct TagSupport { std::optional> valueSet; }; struct ResolveSupport { std::vector properties; }; std::optional dynamicRegistration; std::optional symbolKind; std::optional tagSupport; std::optional resolveSupport; }; struct WorkspaceSymbolOptions : WorkDoneProgressOptions { std::optional resolveProvider; }; struct WorkspaceSymbolRegistrationOptions : WorkspaceSymbolOptions { }; struct WorkspaceSymbolParams : WorkDoneProgressParams, PartialResultParams { string query; }; struct WorkspaceSymbol { struct LocationUriOnly { DocumentUri uri; }; string name; SymbolKind kind; std::optional> tags; std::optional containerName; std::variant location; std::optional data; }; }