use crate::{ Command, InsertTextFormat, Range, StaticRegistrationOptions, TextDocumentPositionParams, TextDocumentRegistrationOptions, WorkDoneProgressOptions, WorkDoneProgressParams, }; use serde::{Deserialize, Serialize}; /// Client capabilities specific to inline completions. /// /// @since 3.18.0 #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct InlineCompletionClientCapabilities { /// Whether implementation supports dynamic registration for inline completion providers. #[serde(skip_serializing_if = "Option::is_none")] pub dynamic_registration: Option, } /// Inline completion options used during static registration. /// /// @since 3.18.0 #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] pub struct InlineCompletionOptions { #[serde(flatten)] pub work_done_progress_options: WorkDoneProgressOptions, } /// Inline completion options used during static or dynamic registration. /// // @since 3.18.0 #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] pub struct InlineCompletionRegistrationOptions { #[serde(flatten)] pub inline_completion_options: InlineCompletionOptions, #[serde(flatten)] pub text_document_registration_options: TextDocumentRegistrationOptions, #[serde(flatten)] pub static_registration_options: StaticRegistrationOptions, } /// A parameter literal used in inline completion requests. /// /// @since 3.18.0 #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct InlineCompletionParams { #[serde(flatten)] pub work_done_progress_params: WorkDoneProgressParams, #[serde(flatten)] pub text_document_position: TextDocumentPositionParams, /// Additional information about the context in which inline completions were requested. pub context: InlineCompletionContext, } /// Describes how an [`InlineCompletionItemProvider`] was triggered. /// /// @since 3.18.0 #[derive(Eq, PartialEq, Clone, Copy, Deserialize, Serialize)] pub struct InlineCompletionTriggerKind(i32); lsp_enum! { impl InlineCompletionTriggerKind { /// Completion was triggered explicitly by a user gesture. /// Return multiple completion items to enable cycling through them. pub const Invoked: InlineCompletionTriggerKind = InlineCompletionTriggerKind(1); /// Completion was triggered automatically while editing. /// It is sufficient to return a single completion item in this case. pub const Automatic: InlineCompletionTriggerKind = InlineCompletionTriggerKind(2); } } /// Describes the currently selected completion item. /// /// @since 3.18.0 #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] pub struct SelectedCompletionInfo { /// The range that will be replaced if this completion item is accepted. pub range: Range, /// The text the range will be replaced with if this completion is /// accepted. pub text: String, } /// Provides information about the context in which an inline completion was /// requested. /// /// @since 3.18.0 #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct InlineCompletionContext { /// Describes how the inline completion was triggered. pub trigger_kind: InlineCompletionTriggerKind, /// Provides information about the currently selected item in the /// autocomplete widget if it is visible. /// /// If set, provided inline completions must extend the text of the /// selected item and use the same range, otherwise they are not shown as /// preview. /// As an example, if the document text is `console.` and the selected item /// is `.log` replacing the `.` in the document, the inline completion must /// also replace `.` and start with `.log`, for example `.log()`. /// /// Inline completion providers are requested again whenever the selected /// item changes. #[serde(skip_serializing_if = "Option::is_none")] pub selected_completion_info: Option, } /// InlineCompletion response can be multiple completion items, or a list of completion items #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[serde(untagged)] pub enum InlineCompletionResponse { Array(Vec), List(InlineCompletionList), } /// Represents a collection of [`InlineCompletionItem`] to be presented in the editor. /// /// @since 3.18.0 #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] pub struct InlineCompletionList { /// The inline completion items pub items: Vec, } /// An inline completion item represents a text snippet that is proposed inline /// to complete text that is being typed. /// /// @since 3.18.0 #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InlineCompletionItem { /// The text to replace the range with. Must be set. /// Is used both for the preview and the accept operation. pub insert_text: String, /// A text that is used to decide if this inline completion should be /// shown. When `falsy` the [`InlineCompletionItem::insertText`] is /// used. /// /// An inline completion is shown if the text to replace is a prefix of the /// filter text. #[serde(skip_serializing_if = "Option::is_none")] pub filter_text: Option, /// The range to replace. /// Must begin and end on the same line. /// /// Prefer replacements over insertions to provide a better experience when /// the user deletes typed text. #[serde(skip_serializing_if = "Option::is_none")] pub range: Option, /// An optional command that is executed *after* inserting this /// completion. #[serde(skip_serializing_if = "Option::is_none")] pub command: Option, /// The format of the insert text. The format applies to the `insertText`. /// If omitted defaults to `InsertTextFormat.PlainText`. #[serde(skip_serializing_if = "Option::is_none")] pub insert_text_format: Option, }