#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_PROTOCOL_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_PROTOCOL_H
#include "URI.h"
#include "index/SymbolID.h"
#include "support/MemoryTree.h"
#include "clang/Index/IndexSymbol.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/JSON.h"
#include "llvm/Support/raw_ostream.h"
#include <bitset>
#include <memory>
#include <optional>
#include <string>
#include <vector>
namespace clang {
namespace clangd {
enum class ErrorCode { … };
class LSPError : public llvm::ErrorInfo<LSPError> { … };
bool fromJSON(const llvm::json::Value &, SymbolID &, llvm::json::Path);
llvm::json::Value toJSON(const SymbolID &);
struct URIForFile { … };
llvm::json::Value toJSON(const URIForFile &U);
bool fromJSON(const llvm::json::Value &, URIForFile &, llvm::json::Path);
struct TextDocumentIdentifier { … };
llvm::json::Value toJSON(const TextDocumentIdentifier &);
bool fromJSON(const llvm::json::Value &, TextDocumentIdentifier &,
llvm::json::Path);
struct VersionedTextDocumentIdentifier : public TextDocumentIdentifier { … };
llvm::json::Value toJSON(const VersionedTextDocumentIdentifier &);
bool fromJSON(const llvm::json::Value &, VersionedTextDocumentIdentifier &,
llvm::json::Path);
struct Position { … };
bool fromJSON(const llvm::json::Value &, Position &, llvm::json::Path);
llvm::json::Value toJSON(const Position &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Position &);
struct Range { … };
bool fromJSON(const llvm::json::Value &, Range &, llvm::json::Path);
llvm::json::Value toJSON(const Range &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Range &);
struct Location { … };
llvm::json::Value toJSON(const Location &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Location &);
struct ReferenceLocation : Location { … };
llvm::json::Value toJSON(const ReferenceLocation &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const ReferenceLocation &);
ChangeAnnotationIdentifier;
struct TextEdit { … };
inline bool operator==(const TextEdit &L, const TextEdit &R) { … }
bool fromJSON(const llvm::json::Value &, TextEdit &, llvm::json::Path);
llvm::json::Value toJSON(const TextEdit &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const TextEdit &);
struct ChangeAnnotation { … };
bool fromJSON(const llvm::json::Value &, ChangeAnnotation &, llvm::json::Path);
llvm::json::Value toJSON(const ChangeAnnotation &);
struct TextDocumentEdit { … };
bool fromJSON(const llvm::json::Value &, TextDocumentEdit &, llvm::json::Path);
llvm::json::Value toJSON(const TextDocumentEdit &);
struct TextDocumentItem { … };
bool fromJSON(const llvm::json::Value &, TextDocumentItem &, llvm::json::Path);
enum class TraceLevel { … };
bool fromJSON(const llvm::json::Value &E, TraceLevel &Out, llvm::json::Path);
struct NoParams { … };
inline llvm::json::Value toJSON(const NoParams &) { … }
inline bool fromJSON(const llvm::json::Value &, NoParams &, llvm::json::Path) { … }
InitializedParams;
enum class TextDocumentSyncKind { … };
enum class CompletionItemKind { … };
bool fromJSON(const llvm::json::Value &, CompletionItemKind &,
llvm::json::Path);
constexpr auto CompletionItemKindMin = …;
constexpr auto CompletionItemKindMax = …;
CompletionItemKindBitset;
bool fromJSON(const llvm::json::Value &, CompletionItemKindBitset &,
llvm::json::Path);
CompletionItemKind
adjustKindToCapability(CompletionItemKind Kind,
CompletionItemKindBitset &SupportedCompletionItemKinds);
enum class SymbolKind { … };
bool fromJSON(const llvm::json::Value &, SymbolKind &, llvm::json::Path);
constexpr auto SymbolKindMin = …;
constexpr auto SymbolKindMax = …;
SymbolKindBitset;
bool fromJSON(const llvm::json::Value &, SymbolKindBitset &, llvm::json::Path);
SymbolKind adjustKindToCapability(SymbolKind Kind,
SymbolKindBitset &supportedSymbolKinds);
SymbolKind indexSymbolKindToSymbolKind(index::SymbolKind Kind);
enum class OffsetEncoding { … };
llvm::json::Value toJSON(const OffsetEncoding &);
bool fromJSON(const llvm::json::Value &, OffsetEncoding &, llvm::json::Path);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, OffsetEncoding);
enum class MarkupKind { … };
bool fromJSON(const llvm::json::Value &, MarkupKind &, llvm::json::Path);
llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, MarkupKind);
struct ClientCapabilities { … };
bool fromJSON(const llvm::json::Value &, ClientCapabilities &,
llvm::json::Path);
struct ClangdCompileCommand { … };
bool fromJSON(const llvm::json::Value &, ClangdCompileCommand &,
llvm::json::Path);
struct ConfigurationSettings { … };
bool fromJSON(const llvm::json::Value &, ConfigurationSettings &,
llvm::json::Path);
struct InitializationOptions { … };
bool fromJSON(const llvm::json::Value &, InitializationOptions &,
llvm::json::Path);
struct InitializeParams { … };
bool fromJSON(const llvm::json::Value &, InitializeParams &, llvm::json::Path);
struct WorkDoneProgressCreateParams { … };
llvm::json::Value toJSON(const WorkDoneProgressCreateParams &P);
template <typename T> struct ProgressParams { … };
template <typename T> llvm::json::Value toJSON(const ProgressParams<T> &P) { … }
struct WorkDoneProgressBegin { … };
llvm::json::Value toJSON(const WorkDoneProgressBegin &);
struct WorkDoneProgressReport { … };
llvm::json::Value toJSON(const WorkDoneProgressReport &);
struct WorkDoneProgressEnd { … };
llvm::json::Value toJSON(const WorkDoneProgressEnd &);
enum class MessageType { … };
llvm::json::Value toJSON(const MessageType &);
struct ShowMessageParams { … };
llvm::json::Value toJSON(const ShowMessageParams &);
struct DidOpenTextDocumentParams { … };
bool fromJSON(const llvm::json::Value &, DidOpenTextDocumentParams &,
llvm::json::Path);
struct DidCloseTextDocumentParams { … };
bool fromJSON(const llvm::json::Value &, DidCloseTextDocumentParams &,
llvm::json::Path);
struct DidSaveTextDocumentParams { … };
bool fromJSON(const llvm::json::Value &, DidSaveTextDocumentParams &,
llvm::json::Path);
struct TextDocumentContentChangeEvent { … };
bool fromJSON(const llvm::json::Value &, TextDocumentContentChangeEvent &,
llvm::json::Path);
struct DidChangeTextDocumentParams { … };
bool fromJSON(const llvm::json::Value &, DidChangeTextDocumentParams &,
llvm::json::Path);
enum class FileChangeType { … };
bool fromJSON(const llvm::json::Value &E, FileChangeType &Out,
llvm::json::Path);
struct FileEvent { … };
bool fromJSON(const llvm::json::Value &, FileEvent &, llvm::json::Path);
struct DidChangeWatchedFilesParams { … };
bool fromJSON(const llvm::json::Value &, DidChangeWatchedFilesParams &,
llvm::json::Path);
struct DidChangeConfigurationParams { … };
bool fromJSON(const llvm::json::Value &, DidChangeConfigurationParams &,
llvm::json::Path);
struct DocumentRangeFormattingParams { … };
bool fromJSON(const llvm::json::Value &, DocumentRangeFormattingParams &,
llvm::json::Path);
struct DocumentOnTypeFormattingParams { … };
bool fromJSON(const llvm::json::Value &, DocumentOnTypeFormattingParams &,
llvm::json::Path);
struct DocumentFormattingParams { … };
bool fromJSON(const llvm::json::Value &, DocumentFormattingParams &,
llvm::json::Path);
struct DocumentSymbolParams { … };
bool fromJSON(const llvm::json::Value &, DocumentSymbolParams &,
llvm::json::Path);
struct DiagnosticRelatedInformation { … };
llvm::json::Value toJSON(const DiagnosticRelatedInformation &);
enum DiagnosticTag { … };
llvm::json::Value toJSON(DiagnosticTag Tag);
struct CodeDescription { … };
llvm::json::Value toJSON(const CodeDescription &);
struct CodeAction;
struct Diagnostic { … };
llvm::json::Value toJSON(const Diagnostic &);
bool fromJSON(const llvm::json::Value &, Diagnostic &, llvm::json::Path);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Diagnostic &);
struct PublishDiagnosticsParams { … };
llvm::json::Value toJSON(const PublishDiagnosticsParams &);
struct CodeActionContext { … };
bool fromJSON(const llvm::json::Value &, CodeActionContext &, llvm::json::Path);
struct CodeActionParams { … };
bool fromJSON(const llvm::json::Value &, CodeActionParams &, llvm::json::Path);
struct WorkspaceEdit { … };
bool fromJSON(const llvm::json::Value &, WorkspaceEdit &, llvm::json::Path);
llvm::json::Value toJSON(const WorkspaceEdit &WE);
struct TweakArgs { … };
bool fromJSON(const llvm::json::Value &, TweakArgs &, llvm::json::Path);
llvm::json::Value toJSON(const TweakArgs &A);
struct ExecuteCommandParams { … };
bool fromJSON(const llvm::json::Value &, ExecuteCommandParams &,
llvm::json::Path);
struct Command : public ExecuteCommandParams { … };
llvm::json::Value toJSON(const Command &C);
struct CodeAction { … };
llvm::json::Value toJSON(const CodeAction &);
struct DocumentSymbol { … };
llvm::raw_ostream &operator<<(llvm::raw_ostream &O, const DocumentSymbol &S);
llvm::json::Value toJSON(const DocumentSymbol &S);
struct SymbolInformation { … };
llvm::json::Value toJSON(const SymbolInformation &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const SymbolInformation &);
struct SymbolDetails { … };
llvm::json::Value toJSON(const SymbolDetails &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const SymbolDetails &);
bool operator==(const SymbolDetails &, const SymbolDetails &);
struct WorkspaceSymbolParams { … };
bool fromJSON(const llvm::json::Value &, WorkspaceSymbolParams &,
llvm::json::Path);
struct ApplyWorkspaceEditParams { … };
llvm::json::Value toJSON(const ApplyWorkspaceEditParams &);
struct ApplyWorkspaceEditResponse { … };
bool fromJSON(const llvm::json::Value &, ApplyWorkspaceEditResponse &,
llvm::json::Path);
struct TextDocumentPositionParams { … };
bool fromJSON(const llvm::json::Value &, TextDocumentPositionParams &,
llvm::json::Path);
enum class CompletionTriggerKind { … };
struct CompletionContext { … };
bool fromJSON(const llvm::json::Value &, CompletionContext &, llvm::json::Path);
struct CompletionParams : TextDocumentPositionParams { … };
bool fromJSON(const llvm::json::Value &, CompletionParams &, llvm::json::Path);
struct MarkupContent { … };
llvm::json::Value toJSON(const MarkupContent &MC);
struct Hover { … };
llvm::json::Value toJSON(const Hover &H);
enum class InsertTextFormat { … };
struct CompletionItemLabelDetails { … };
llvm::json::Value toJSON(const CompletionItemLabelDetails &);
struct CompletionItem { … };
llvm::json::Value toJSON(const CompletionItem &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const CompletionItem &);
void removeCompletionLabelDetails(CompletionItem &);
bool operator<(const CompletionItem &, const CompletionItem &);
struct CompletionList { … };
llvm::json::Value toJSON(const CompletionList &);
struct ParameterInformation { … };
llvm::json::Value toJSON(const ParameterInformation &);
struct SignatureInformation { … };
llvm::json::Value toJSON(const SignatureInformation &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &,
const SignatureInformation &);
struct SignatureHelp { … };
llvm::json::Value toJSON(const SignatureHelp &);
struct RenameParams { … };
bool fromJSON(const llvm::json::Value &, RenameParams &, llvm::json::Path);
llvm::json::Value toJSON(const RenameParams &);
struct PrepareRenameResult { … };
llvm::json::Value toJSON(const PrepareRenameResult &PRR);
enum class DocumentHighlightKind { … };
struct DocumentHighlight { … };
llvm::json::Value toJSON(const DocumentHighlight &DH);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const DocumentHighlight &);
enum class TypeHierarchyDirection { … };
bool fromJSON(const llvm::json::Value &E, TypeHierarchyDirection &Out,
llvm::json::Path);
struct TypeHierarchyPrepareParams : public TextDocumentPositionParams { … };
bool fromJSON(const llvm::json::Value &, TypeHierarchyPrepareParams &,
llvm::json::Path);
struct TypeHierarchyItem { … };
llvm::json::Value toJSON(const TypeHierarchyItem::ResolveParams &);
bool fromJSON(const TypeHierarchyItem::ResolveParams &);
llvm::json::Value toJSON(const TypeHierarchyItem &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const TypeHierarchyItem &);
bool fromJSON(const llvm::json::Value &, TypeHierarchyItem &, llvm::json::Path);
struct ResolveTypeHierarchyItemParams { … };
bool fromJSON(const llvm::json::Value &, ResolveTypeHierarchyItemParams &,
llvm::json::Path);
enum class SymbolTag { … };
llvm::json::Value toJSON(SymbolTag);
struct CallHierarchyPrepareParams : public TextDocumentPositionParams { … };
struct CallHierarchyItem { … };
llvm::json::Value toJSON(const CallHierarchyItem &);
bool fromJSON(const llvm::json::Value &, CallHierarchyItem &, llvm::json::Path);
struct CallHierarchyIncomingCallsParams { … };
bool fromJSON(const llvm::json::Value &, CallHierarchyIncomingCallsParams &,
llvm::json::Path);
struct CallHierarchyIncomingCall { … };
llvm::json::Value toJSON(const CallHierarchyIncomingCall &);
struct CallHierarchyOutgoingCallsParams { … };
bool fromJSON(const llvm::json::Value &, CallHierarchyOutgoingCallsParams &,
llvm::json::Path);
struct CallHierarchyOutgoingCall { … };
llvm::json::Value toJSON(const CallHierarchyOutgoingCall &);
struct InlayHintsParams { … };
bool fromJSON(const llvm::json::Value &, InlayHintsParams &, llvm::json::Path);
enum class InlayHintKind { … };
llvm::json::Value toJSON(const InlayHintKind &);
struct InlayHintLabelPart { … };
llvm::json::Value toJSON(const InlayHintLabelPart &);
bool operator==(const InlayHintLabelPart &, const InlayHintLabelPart &);
bool operator<(const InlayHintLabelPart &, const InlayHintLabelPart &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const InlayHintLabelPart &);
struct InlayHint { … };
llvm::json::Value toJSON(const InlayHint &);
bool operator==(const InlayHint &, const InlayHint &);
bool operator<(const InlayHint &, const InlayHint &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, InlayHintKind);
struct ReferenceContext { … };
struct ReferenceParams : public TextDocumentPositionParams { … };
bool fromJSON(const llvm::json::Value &, ReferenceParams &, llvm::json::Path);
struct FileStatus { … };
llvm::json::Value toJSON(const FileStatus &);
struct SemanticToken { … };
bool operator==(const SemanticToken &, const SemanticToken &);
struct SemanticTokens { … };
llvm::json::Value toJSON(const SemanticTokens &);
struct SemanticTokensParams { … };
bool fromJSON(const llvm::json::Value &, SemanticTokensParams &,
llvm::json::Path);
struct SemanticTokensDeltaParams { … };
bool fromJSON(const llvm::json::Value &Params, SemanticTokensDeltaParams &R,
llvm::json::Path);
struct SemanticTokensEdit { … };
llvm::json::Value toJSON(const SemanticTokensEdit &);
struct SemanticTokensOrDelta { … };
llvm::json::Value toJSON(const SemanticTokensOrDelta &);
struct InactiveRegionsParams { … };
llvm::json::Value toJSON(const InactiveRegionsParams &InactiveRegions);
struct SelectionRangeParams { … };
bool fromJSON(const llvm::json::Value &, SelectionRangeParams &,
llvm::json::Path);
struct SelectionRange { … };
llvm::json::Value toJSON(const SelectionRange &);
struct DocumentLinkParams { … };
bool fromJSON(const llvm::json::Value &, DocumentLinkParams &,
llvm::json::Path);
struct DocumentLink { … };
llvm::json::Value toJSON(const DocumentLink &DocumentLink);
struct FoldingRangeParams { … };
bool fromJSON(const llvm::json::Value &, FoldingRangeParams &,
llvm::json::Path);
struct FoldingRange { … };
llvm::json::Value toJSON(const FoldingRange &Range);
llvm::json::Value toJSON(const MemoryTree &MT);
struct ASTParams { … };
bool fromJSON(const llvm::json::Value &, ASTParams &, llvm::json::Path);
struct ASTNode { … };
llvm::json::Value toJSON(const ASTNode &);
llvm::raw_ostream &operator<<(llvm::raw_ostream &, const ASTNode &);
}
}
namespace llvm {
template <> struct DenseMapInfo<clang::clangd::Range> { … };
template <> struct format_provider<clang::clangd::Position> { … };
}
#endif