llvm/clang-tools-extra/clangd/Protocol.cpp

//===--- Protocol.cpp - Language Server Protocol Implementation -----------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file contains the serialization code for the LSP structs.
//
//===----------------------------------------------------------------------===//

#include "Protocol.h"
#include "URI.h"
#include "support/Logger.h"
#include "clang/Basic/LLVM.h"
#include "clang/Index/IndexSymbol.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/JSON.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"

namespace clang {
namespace clangd {
namespace {

// Helper that doesn't treat `null` and absent fields as failures.
template <typename T>
bool mapOptOrNull(const llvm::json::Value &Params, llvm::StringLiteral Prop,
                  T &Out, llvm::json::Path P) {}
} // namespace

char LSPError::ID;

URIForFile URIForFile::canonicalize(llvm::StringRef AbsPath,
                                    llvm::StringRef TUPath) {}

llvm::Expected<URIForFile> URIForFile::fromURI(const URI &U,
                                               llvm::StringRef HintPath) {}

bool fromJSON(const llvm::json::Value &E, URIForFile &R, llvm::json::Path P) {}

llvm::json::Value toJSON(const URIForFile &U) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const URIForFile &U) {}

llvm::json::Value toJSON(const TextDocumentIdentifier &R) {}

bool fromJSON(const llvm::json::Value &Params, TextDocumentIdentifier &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const VersionedTextDocumentIdentifier &R) {}

bool fromJSON(const llvm::json::Value &Params,
              VersionedTextDocumentIdentifier &R, llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, Position &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const Position &P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Position &P) {}

bool fromJSON(const llvm::json::Value &Params, Range &R, llvm::json::Path P) {}

llvm::json::Value toJSON(const Range &P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Range &R) {}

llvm::json::Value toJSON(const Location &P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Location &L) {}

llvm::json::Value toJSON(const ReferenceLocation &P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                              const ReferenceLocation &L) {}

bool fromJSON(const llvm::json::Value &Params, TextDocumentItem &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, TextEdit &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const TextEdit &P) {}

bool fromJSON(const llvm::json::Value &Params, ChangeAnnotation &R,
              llvm::json::Path P) {}
llvm::json::Value toJSON(const ChangeAnnotation & CA) {}

bool fromJSON(const llvm::json::Value &Params, TextDocumentEdit &R,
              llvm::json::Path P) {}
llvm::json::Value toJSON(const TextDocumentEdit &P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const TextEdit &TE) {}

bool fromJSON(const llvm::json::Value &E, TraceLevel &Out, llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &E, SymbolKind &Out, llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &E, SymbolKindBitset &Out,
              llvm::json::Path P) {}

SymbolKind adjustKindToCapability(SymbolKind Kind,
                                  SymbolKindBitset &SupportedSymbolKinds) {}

SymbolKind indexSymbolKindToSymbolKind(index::SymbolKind Kind) {}

bool fromJSON(const llvm::json::Value &Params, ClientCapabilities &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, InitializeParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const WorkDoneProgressCreateParams &P) {}

llvm::json::Value toJSON(const WorkDoneProgressBegin &P) {}

llvm::json::Value toJSON(const WorkDoneProgressReport &P) {}

llvm::json::Value toJSON(const WorkDoneProgressEnd &P) {}

llvm::json::Value toJSON(const MessageType &R) {}

llvm::json::Value toJSON(const ShowMessageParams &R) {}

bool fromJSON(const llvm::json::Value &Params, DidOpenTextDocumentParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, DidCloseTextDocumentParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, DidSaveTextDocumentParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, DidChangeTextDocumentParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &E, FileChangeType &Out,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, FileEvent &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, DidChangeWatchedFilesParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params,
              TextDocumentContentChangeEvent &R, llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, DocumentRangeFormattingParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params,
              DocumentOnTypeFormattingParams &R, llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, DocumentFormattingParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, DocumentSymbolParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const DiagnosticRelatedInformation &DRI) {}

llvm::json::Value toJSON(DiagnosticTag Tag) {}

llvm::json::Value toJSON(const CodeDescription &D) {}

llvm::json::Value toJSON(const Diagnostic &D) {}

bool fromJSON(const llvm::json::Value &Params, Diagnostic &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const PublishDiagnosticsParams &PDP) {}

bool fromJSON(const llvm::json::Value &Params, CodeActionContext &R,
              llvm::json::Path P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Diagnostic &D) {}

bool fromJSON(const llvm::json::Value &Params, CodeActionParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, WorkspaceEdit &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, ExecuteCommandParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const SymbolInformation &P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &O,
                              const SymbolInformation &SI) {}

bool operator==(const SymbolDetails &LHS, const SymbolDetails &RHS) {}

llvm::json::Value toJSON(const SymbolDetails &P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &O, const SymbolDetails &S) {}

bool fromJSON(const llvm::json::Value &Params, WorkspaceSymbolParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const Command &C) {}

const llvm::StringLiteral CodeAction::QUICKFIX_KIND =;
const llvm::StringLiteral CodeAction::REFACTOR_KIND =;
const llvm::StringLiteral CodeAction::INFO_KIND =;

llvm::json::Value toJSON(const CodeAction &CA) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &O, const DocumentSymbol &S) {}

llvm::json::Value toJSON(const DocumentSymbol &S) {}

llvm::json::Value toJSON(const WorkspaceEdit &WE) {}

bool fromJSON(const llvm::json::Value &Params, TweakArgs &A,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const TweakArgs &A) {}

llvm::json::Value toJSON(const ApplyWorkspaceEditParams &Params) {}

bool fromJSON(const llvm::json::Value &Response, ApplyWorkspaceEditResponse &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, TextDocumentPositionParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, CompletionContext &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, CompletionParams &R,
              llvm::json::Path P) {}

static llvm::StringRef toTextKind(MarkupKind Kind) {}

bool fromJSON(const llvm::json::Value &V, MarkupKind &K, llvm::json::Path P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, MarkupKind K) {}

llvm::json::Value toJSON(const MarkupContent &MC) {}

llvm::json::Value toJSON(const Hover &H) {}

bool fromJSON(const llvm::json::Value &E, CompletionItemKind &Out,
              llvm::json::Path P) {}

CompletionItemKind
adjustKindToCapability(CompletionItemKind Kind,
                       CompletionItemKindBitset &SupportedCompletionItemKinds) {}

bool fromJSON(const llvm::json::Value &E, CompletionItemKindBitset &Out,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const CompletionItemLabelDetails &CD) {}

void removeCompletionLabelDetails(CompletionItem &C) {}

llvm::json::Value toJSON(const CompletionItem &CI) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &O, const CompletionItem &I) {}

bool operator<(const CompletionItem &L, const CompletionItem &R) {}

llvm::json::Value toJSON(const CompletionList &L) {}

llvm::json::Value toJSON(const ParameterInformation &PI) {}

llvm::json::Value toJSON(const SignatureInformation &SI) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &O,
                              const SignatureInformation &I) {}

llvm::json::Value toJSON(const SignatureHelp &SH) {}

bool fromJSON(const llvm::json::Value &Params, RenameParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const RenameParams &R) {}

llvm::json::Value toJSON(const PrepareRenameResult &PRR) {}

llvm::json::Value toJSON(const DocumentHighlight &DH) {}

llvm::json::Value toJSON(const FileStatus &FStatus) {}

constexpr unsigned SemanticTokenEncodingSize =;
static llvm::json::Value encodeTokens(llvm::ArrayRef<SemanticToken> Toks) {}

bool operator==(const SemanticToken &L, const SemanticToken &R) {}

llvm::json::Value toJSON(const SemanticTokens &Tokens) {}

llvm::json::Value toJSON(const SemanticTokensEdit &Edit) {}

llvm::json::Value toJSON(const SemanticTokensOrDelta &TE) {}

bool fromJSON(const llvm::json::Value &Params, SemanticTokensParams &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, SemanticTokensDeltaParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const InactiveRegionsParams &InactiveRegions) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &O,
                              const DocumentHighlight &V) {}

bool fromJSON(const llvm::json::Value &Params,
              DidChangeConfigurationParams &CCP, llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, ClangdCompileCommand &CDbUpdate,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, ConfigurationSettings &S,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, InitializationOptions &Opts,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &E, TypeHierarchyDirection &Out,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, TypeHierarchyPrepareParams &R,
              llvm::json::Path P) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &O,
                              const TypeHierarchyItem &I) {}

llvm::json::Value toJSON(const TypeHierarchyItem::ResolveParams &RP) {}
bool fromJSON(const llvm::json::Value &Params,
              TypeHierarchyItem::ResolveParams &RP, llvm::json::Path P) {}

llvm::json::Value toJSON(const TypeHierarchyItem &I) {}

bool fromJSON(const llvm::json::Value &Params, TypeHierarchyItem &I,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params,
              ResolveTypeHierarchyItemParams &R, llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, ReferenceContext &R,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params, ReferenceParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(SymbolTag Tag) {}

llvm::json::Value toJSON(const CallHierarchyItem &I) {}

bool fromJSON(const llvm::json::Value &Params, CallHierarchyItem &I,
              llvm::json::Path P) {}

bool fromJSON(const llvm::json::Value &Params,
              CallHierarchyIncomingCallsParams &C, llvm::json::Path P) {}

llvm::json::Value toJSON(const CallHierarchyIncomingCall &C) {}

bool fromJSON(const llvm::json::Value &Params,
              CallHierarchyOutgoingCallsParams &C, llvm::json::Path P) {}

llvm::json::Value toJSON(const CallHierarchyOutgoingCall &C) {}

bool fromJSON(const llvm::json::Value &Params, InlayHintsParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const InlayHintKind &Kind) {}

llvm::json::Value toJSON(const InlayHint &H) {}
bool operator==(const InlayHint &A, const InlayHint &B) {}
bool operator<(const InlayHint &A, const InlayHint &B) {}
std::string InlayHint::joinLabels() const {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, InlayHintKind Kind) {}

llvm::json::Value toJSON(const InlayHintLabelPart &L) {}

bool operator==(const InlayHintLabelPart &LHS, const InlayHintLabelPart &RHS) {}

bool operator<(const InlayHintLabelPart &LHS, const InlayHintLabelPart &RHS) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                              const InlayHintLabelPart &L) {}

static const char *toString(OffsetEncoding OE) {}
llvm::json::Value toJSON(const OffsetEncoding &OE) {}
bool fromJSON(const llvm::json::Value &V, OffsetEncoding &OE,
              llvm::json::Path P) {}
llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, OffsetEncoding Enc) {}

bool fromJSON(const llvm::json::Value &Params, SelectionRangeParams &S,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const SelectionRange &Out) {}

bool fromJSON(const llvm::json::Value &Params, DocumentLinkParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const DocumentLink &DocumentLink) {}

bool fromJSON(const llvm::json::Value &Params, FoldingRangeParams &R,
              llvm::json::Path P) {}

const llvm::StringLiteral FoldingRange::REGION_KIND =;
const llvm::StringLiteral FoldingRange::COMMENT_KIND =;
const llvm::StringLiteral FoldingRange::IMPORT_KIND =;

llvm::json::Value toJSON(const FoldingRange &Range) {}

llvm::json::Value toJSON(const MemoryTree &MT) {}

bool fromJSON(const llvm::json::Value &Params, ASTParams &R,
              llvm::json::Path P) {}

llvm::json::Value toJSON(const ASTNode &N) {}

llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const ASTNode &Root) {}

bool fromJSON(const llvm::json::Value &E, SymbolID &S, llvm::json::Path P) {}
llvm::json::Value toJSON(const SymbolID &S) {}

} // namespace clangd
} // namespace clang