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.rs173
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,
+}