Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-lsp-types/src/window.rs')
| -rw-r--r-- | helix-lsp-types/src/window.rs | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/helix-lsp-types/src/window.rs b/helix-lsp-types/src/window.rs new file mode 100644 index 00000000..ac45e608 --- /dev/null +++ b/helix-lsp-types/src/window.rs @@ -0,0 +1,173 @@ +use std::collections::HashMap; + +use serde::{Deserialize, Serialize}; + +use serde_json::Value; + +use url::Url; + +use crate::Range; + +#[derive(Eq, PartialEq, Clone, Copy, Deserialize, Serialize)] +#[serde(transparent)] +pub struct MessageType(i32); +lsp_enum! { +impl MessageType { + /// An error message. + pub const ERROR: MessageType = MessageType(1); + /// A warning message. + pub const WARNING: MessageType = MessageType(2); + /// An information message; + pub const INFO: MessageType = MessageType(3); + /// A log message. + pub const LOG: MessageType = MessageType(4); +} +} + +/// Window specific client capabilities. +#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct WindowClientCapabilities { + /// Whether client supports handling progress notifications. If set + /// servers are allowed to report in `workDoneProgress` property in the + /// request specific server capabilities. + /// + /// @since 3.15.0 + #[serde(skip_serializing_if = "Option::is_none")] + pub work_done_progress: Option<bool>, + + /// Capabilities specific to the showMessage request. + /// + /// @since 3.16.0 + #[serde(skip_serializing_if = "Option::is_none")] + pub show_message: Option<ShowMessageRequestClientCapabilities>, + + /// Client capabilities for the show document request. + /// + /// @since 3.16.0 + #[serde(skip_serializing_if = "Option::is_none")] + pub show_document: Option<ShowDocumentClientCapabilities>, +} + +/// Show message request client capabilities +#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ShowMessageRequestClientCapabilities { + /// Capabilities specific to the `MessageActionItem` type. + #[serde(skip_serializing_if = "Option::is_none")] + pub message_action_item: Option<MessageActionItemCapabilities>, +} + +#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct MessageActionItemCapabilities { + /// Whether the client supports additional attributes which + /// are preserved and send back to the server in the + /// request's response. + #[serde(skip_serializing_if = "Option::is_none")] + pub additional_properties_support: Option<bool>, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct MessageActionItem { + /// A short title like 'Retry', 'Open Log' etc. + pub title: String, + + /// Additional attributes that the client preserves and + /// sends back to the server. This depends on the client + /// capability window.messageActionItem.additionalPropertiesSupport + #[serde(flatten)] + pub properties: HashMap<String, MessageActionItemProperty>, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] +#[serde(untagged)] +pub enum MessageActionItemProperty { + String(String), + Boolean(bool), + Integer(i32), + Object(Value), +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] +pub struct LogMessageParams { + /// The message type. See {@link MessageType} + #[serde(rename = "type")] + pub typ: MessageType, + + /// The actual message + pub message: String, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] +pub struct ShowMessageParams { + /// The message type. See {@link MessageType}. + #[serde(rename = "type")] + pub typ: MessageType, + + /// The actual message. + pub message: String, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] +pub struct ShowMessageRequestParams { + /// The message type. See {@link MessageType} + #[serde(rename = "type")] + pub typ: MessageType, + + /// The actual message + pub message: String, + + /// The message action items to present. + #[serde(skip_serializing_if = "Option::is_none")] + pub actions: Option<Vec<MessageActionItem>>, +} + +/// Client capabilities for the show document request. +#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ShowDocumentClientCapabilities { + /// The client has support for the show document request. + pub support: bool, +} + +/// Params to show a document. +/// +/// @since 3.16.0 +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ShowDocumentParams { + /// The document uri to show. + pub uri: Url, + + /// Indicates to show the resource in an external program. + /// To show for example `https://code.visualstudio.com/` + /// in the default WEB browser set `external` to `true`. + #[serde(skip_serializing_if = "Option::is_none")] + pub external: Option<bool>, + + /// An optional property to indicate whether the editor + /// showing the document should take focus or not. + /// Clients might ignore this property if an external + /// program in started. + #[serde(skip_serializing_if = "Option::is_none")] + pub take_focus: Option<bool>, + + /// An optional selection range if the document is a text + /// document. Clients might ignore the property if an + /// external program is started or the file is not a text + /// file. + #[serde(skip_serializing_if = "Option::is_none")] + pub selection: Option<Range>, +} + +/// The result of an show document request. +/// +/// @since 3.16.0 +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ShowDocumentResult { + /// A boolean indicating if the show was successful. + pub success: bool, +} |