Files
tsl-devkit/lsp-server/src/protocol/text_document/inline_features.cppm
T
2025-12-07 23:07:03 +08:00

168 lines
4.1 KiB
C++

module;
export module lsp.protocol.text_document.inline_features;
import std;
import lsp.protocol.common.basic_types;
import lsp.protocol.text_document.document_sync;
import lsp.protocol.window.progress;
import lsp.protocol.common.registration;
export namespace lsp::protocol
{
// Inlay Hints
struct InlayHintClientCapabilities
{
struct ResolveSupport
{
std::vector<string> properties;
};
std::optional<boolean> dynamicRegistration;
std::optional<ResolveSupport> resolveSupport;
};
struct InlayHintOptions : WorkDoneProgressOptions
{
std::optional<boolean> resolveProvider;
};
struct InlayHintRegistrationOptions : TextDocumentRegistrationOptions, InlayHintOptions, StaticRegistrationOptions
{
};
struct InlayHintParams : WorkDoneProgressParams
{
TextDocumentIdentifier textDocument;
Range range;
};
struct InlayHintLabelPart
{
string value;
std::optional<std::variant<string, MarkupContent>> tooltip;
std::optional<Location> location;
std::optional<Command> command;
};
enum class InlayHintKind
{
Type = 1,
Parameter = 2
};
struct InlayHint
{
Position position;
std::variant<string, std::vector<InlayHintLabelPart>> label;
std::optional<InlayHintKind> kind;
std::optional<std::vector<TextEdit>> textEdits;
std::optional<std::variant<string, MarkupContent>> tooltip;
std::optional<boolean> paddingLeft;
std::optional<boolean> paddingRight;
std::optional<LSPAny> data;
};
struct InlayHintWorkspaceClientCapabilities
{
std::optional<boolean> refreshSupport;
};
// Inline Values
struct InlineValueClientCapabilities
{
std::optional<boolean> dynamicRegistration;
};
struct InlineValueOptions : WorkDoneProgressOptions
{
};
struct InlineValueRegistrationOptions : TextDocumentRegistrationOptions, InlineValueOptions, StaticRegistrationOptions
{
};
struct InlineValueContent
{
integer frameId;
Range stoppedLocation;
};
struct InlineValueText
{
Range range;
string text;
};
struct InlineValueParams : WorkDoneProgressParams
{
TextDocumentIdentifier textDocument;
Range range;
InlineValueContent context;
};
struct InlineValueVariableLookup
{
Range range;
std::optional<string> variableName;
std::optional<boolean> caseSensitiveLookup;
};
struct InlineValueEvaluatableExpression
{
Range range;
std::optional<string> expression;
};
using InlineValue = std::variant<InlineValueText, InlineValueVariableLookup, InlineValueEvaluatableExpression>;
struct InlineValueWorkspaceClientCapabilities
{
std::optional<boolean> refreshSupport;
};
// Moniker
struct MonikerClientCapabilities
{
std::optional<boolean> dynamicRegistration;
};
struct MonikerOptions : WorkDoneProgressOptions
{
};
struct MonikerRegistrationOptions : TextDocumentRegistrationOptions, MonikerOptions
{
};
struct MonikerParams : TextDocumentPositionParams, WorkDoneProgressParams, PartialResultParams
{
};
using UniquenessLevel = std::string_view;
namespace UniquenessLevelLiterals
{
inline constexpr UniquenessLevel Document = "document";
inline constexpr UniquenessLevel Project = "project";
inline constexpr UniquenessLevel Group = "group";
inline constexpr UniquenessLevel Scheme = "scheme";
inline constexpr UniquenessLevel Global = "global";
}
using MonikerKind = std::string_view;
namespace MonikerKindLiterals
{
inline constexpr MonikerKind Import = "import";
inline constexpr MonikerKind Export = "export";
inline constexpr MonikerKind Local = "local";
}
struct Moniker
{
string scheme;
string identifier;
UniquenessLevel unique;
std::optional<MonikerKind> kind;
};
}