lsp_types/
file_operations.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
4#[serde(rename_all = "camelCase")]
5pub struct WorkspaceFileOperationsClientCapabilities {
6    /// Whether the client supports dynamic registration for file
7    /// requests/notifications.
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub dynamic_registration: Option<bool>,
10
11    /// The client has support for sending didCreateFiles notifications.
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub did_create: Option<bool>,
14
15    /// The server is interested in receiving willCreateFiles requests.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub will_create: Option<bool>,
18
19    /// The server is interested in receiving didRenameFiles requests.
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub did_rename: Option<bool>,
22
23    /// The server is interested in receiving willRenameFiles requests.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub will_rename: Option<bool>,
26
27    /// The server is interested in receiving didDeleteFiles requests.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub did_delete: Option<bool>,
30
31    /// The server is interested in receiving willDeleteFiles requests.
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub will_delete: Option<bool>,
34}
35
36#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
37#[serde(rename_all = "camelCase")]
38pub struct WorkspaceFileOperationsServerCapabilities {
39    /// The server is interested in receiving didCreateFiles
40    /// notifications.
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub did_create: Option<FileOperationRegistrationOptions>,
43
44    /// The server is interested in receiving willCreateFiles requests.
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub will_create: Option<FileOperationRegistrationOptions>,
47
48    /// The server is interested in receiving didRenameFiles
49    /// notifications.
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub did_rename: Option<FileOperationRegistrationOptions>,
52
53    /// The server is interested in receiving willRenameFiles requests.
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub will_rename: Option<FileOperationRegistrationOptions>,
56
57    /// The server is interested in receiving didDeleteFiles file
58    /// notifications.
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub did_delete: Option<FileOperationRegistrationOptions>,
61
62    /// The server is interested in receiving willDeleteFiles file
63    /// requests.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub will_delete: Option<FileOperationRegistrationOptions>,
66}
67
68/// The options to register for file operations.
69///
70/// @since 3.16.0
71#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
72#[serde(rename_all = "camelCase")]
73pub struct FileOperationRegistrationOptions {
74    /// The actual filters.
75    pub filters: Vec<FileOperationFilter>,
76}
77
78/// A filter to describe in which file operation requests or notifications
79/// the server is interested in.
80///
81/// @since 3.16.0
82#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
83#[serde(rename_all = "camelCase")]
84pub struct FileOperationFilter {
85    /// A Uri like `file` or `untitled`.
86    pub scheme: Option<String>,
87
88    /// The actual file operation pattern.
89    pub pattern: FileOperationPattern,
90}
91
92/// A pattern kind describing if a glob pattern matches a file a folder or
93/// both.
94///
95/// @since 3.16.0
96#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Clone)]
97#[serde(rename_all = "lowercase")]
98pub enum FileOperationPatternKind {
99    /// The pattern matches a file only.
100    File,
101
102    /// The pattern matches a folder only.
103    Folder,
104}
105
106/// Matching options for the file operation pattern.
107///
108/// @since 3.16.0
109///
110#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
111#[serde(rename_all = "camelCase")]
112pub struct FileOperationPatternOptions {
113    /// The pattern should be matched ignoring casing.
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub ignore_case: Option<bool>,
116}
117
118/// A pattern to describe in which file operation requests or notifications
119/// the server is interested in.
120///
121/// @since 3.16.0
122#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
123#[serde(rename_all = "camelCase")]
124pub struct FileOperationPattern {
125    /// The glob pattern to match. Glob patterns can have the following syntax:
126    /// - `*` to match one or more characters in a path segment
127    /// - `?` to match on one character in a path segment
128    /// - `**` to match any number of path segments, including none
129    /// - `{}` to group conditions (e.g. `**​/*.{ts,js}` matches all TypeScript
130    ///   and JavaScript files)
131    /// - `[]` to declare a range of characters to match in a path segment
132    ///   (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …)
133    /// - `[!...]` to negate a range of characters to match in a path segment
134    ///   (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but
135    ///   not `example.0`)
136    pub glob: String,
137
138    /// Whether to match files or folders with this pattern.
139    ///
140    /// Matches both if undefined.
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub matches: Option<FileOperationPatternKind>,
143
144    /// Additional options used during matching.
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub options: Option<FileOperationPatternOptions>,
147}
148
149/// The parameters sent in notifications/requests for user-initiated creation
150/// of files.
151///
152/// @since 3.16.0
153#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
154#[serde(rename_all = "camelCase")]
155pub struct CreateFilesParams {
156    /// An array of all files/folders created in this operation.
157    pub files: Vec<FileCreate>,
158}
159/// Represents information on a file/folder create.
160///
161/// @since 3.16.0
162#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
163#[serde(rename_all = "camelCase")]
164pub struct FileCreate {
165    /// A file:// URI for the location of the file/folder being created.
166    pub uri: String,
167}
168
169/// The parameters sent in notifications/requests for user-initiated renames
170/// of files.
171///
172/// @since 3.16.0
173#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
174#[serde(rename_all = "camelCase")]
175pub struct RenameFilesParams {
176    /// An array of all files/folders renamed in this operation. When a folder
177    /// is renamed, only the folder will be included, and not its children.
178    pub files: Vec<FileRename>,
179}
180
181/// Represents information on a file/folder rename.
182///
183/// @since 3.16.0
184#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
185#[serde(rename_all = "camelCase")]
186pub struct FileRename {
187    /// A file:// URI for the original location of the file/folder being renamed.
188    pub old_uri: String,
189
190    /// A file:// URI for the new location of the file/folder being renamed.
191    pub new_uri: String,
192}
193
194/// The parameters sent in notifications/requests for user-initiated deletes
195/// of files.
196///
197/// @since 3.16.0
198#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
199#[serde(rename_all = "camelCase")]
200pub struct DeleteFilesParams {
201    /// An array of all files/folders deleted in this operation.
202    pub files: Vec<FileDelete>,
203}
204
205/// Represents information on a file/folder delete.
206///
207/// @since 3.16.0
208#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
209#[serde(rename_all = "camelCase")]
210pub struct FileDelete {
211    /// A file:// URI for the location of the file/folder being deleted.
212    pub uri: String,
213}