#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 {
template <typename T>
bool mapOptOrNull(const llvm::json::Value &Params, llvm::StringLiteral Prop,
T &Out, llvm::json::Path P) { … }
}
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) { … }
}
}