1#![allow(non_upper_case_globals)]
9#![allow(
10 clippy::large_enum_variant,
11 clippy::doc_lazy_continuation,
12 clippy::field_reassign_with_default,
13 clippy::mutable_key_type
14)]
15#![forbid(unsafe_code)]
16#[macro_use]
17extern crate bitflags;
18
19use std::{collections::HashMap, fmt::Debug};
20
21use serde::{de, de::Error, Deserialize, Serialize};
22use serde_json::Value;
23
24pub use uri::Uri;
25pub type Url = Uri;
26mod uri;
27
28pub mod types;
29pub use types::*;
30
31pub mod protocol;
32pub use protocol::*;
33
34type PascalCaseBuf = [u8; 32];
36const fn fmt_pascal_case_const(name: &str) -> (PascalCaseBuf, usize) {
37 let mut buf = [0; 32];
38 let mut buf_i = 0;
39 let mut name_i = 0;
40 let name = name.as_bytes();
41 while name_i < name.len() {
42 let first = name[name_i];
43 name_i += 1;
44
45 buf[buf_i] = first;
46 buf_i += 1;
47
48 while name_i < name.len() {
49 let rest = name[name_i];
50 name_i += 1;
51 if rest == b'_' {
52 break;
53 }
54
55 buf[buf_i] = rest.to_ascii_lowercase();
56 buf_i += 1;
57 }
58 }
59 (buf, buf_i)
60}
61
62fn fmt_pascal_case(f: &mut std::fmt::Formatter<'_>, name: &str) -> std::fmt::Result {
63 for word in name.split('_') {
64 let mut chars = word.chars();
65 let first = chars.next().unwrap();
66 write!(f, "{}", first)?;
67 for rest in chars {
68 write!(f, "{}", rest.to_lowercase())?;
69 }
70 }
71 Ok(())
72}
73
74macro_rules! lsp_enum {
75 (impl $typ: ident { $( $(#[$attr:meta])* pub const $name: ident : $enum_type: ty = $value: expr; )* }) => {
76 impl $typ {
77 $(
78 $(#[$attr])*
79 pub const $name: $enum_type = $value;
80 )*
81 }
82
83 impl std::fmt::Debug for $typ {
84 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
85 match *self {
86 $(
87 Self::$name => crate::fmt_pascal_case(f, stringify!($name)),
88 )*
89 _ => write!(f, "{}({})", stringify!($typ), self.0),
90 }
91 }
92 }
93
94 impl std::convert::TryFrom<&str> for $typ {
95 type Error = &'static str;
96 fn try_from(value: &str) -> Result<Self, Self::Error> {
97 match () {
98 $(
99 _ if {
100 const X: (crate::PascalCaseBuf, usize) = crate::fmt_pascal_case_const(stringify!($name));
101 let (buf, len) = X;
102 &buf[..len] == value.as_bytes()
103 } => Ok(Self::$name),
104 )*
105 _ => Err("unknown enum variant"),
106 }
107 }
108 }
109
110 }
111}
112
113pub mod error_codes;
114pub mod notification;
115pub mod request;
116
117mod call_hierarchy;
118pub use call_hierarchy::*;
119
120pub mod code_action;
121pub use code_action::*;
122
123mod code_lens;
124pub use code_lens::*;
125
126mod color;
127pub use color::*;
128
129mod completion;
130pub use completion::*;
131
132mod document_diagnostic;
133pub use document_diagnostic::*;
134
135mod document_highlight;
136pub use document_highlight::*;
137
138mod document_link;
139pub use document_link::*;
140
141mod document_symbols;
142pub use document_symbols::*;
143
144pub mod notebook;
145pub use notebook::*;
146
147mod file_operations;
148pub use file_operations::*;
149
150mod folding_range;
151pub use folding_range::*;
152
153pub mod formatting;
154pub use formatting::*;
155
156mod hover;
157pub use hover::*;
158
159mod inlay_hint;
160pub use inlay_hint::*;
161
162mod inline_value;
163pub use inline_value::*;
164
165#[cfg(feature = "proposed")]
166pub mod inline_completion;
167
168mod moniker;
169pub use moniker::*;
170
171mod progress;
172pub use progress::*;
173
174mod references;
175pub use references::*;
176
177mod rename;
178pub use rename::*;
179
180pub mod selection_range;
181pub use selection_range::*;
182
183mod semantic_tokens;
184pub use semantic_tokens::*;
185
186mod signature_help;
187pub use signature_help::*;
188
189mod type_hierarchy;
190pub use type_hierarchy::*;
191
192mod linked_editing;
193pub use linked_editing::*;
194
195mod window;
196pub use window::*;
197
198mod workspace_diagnostic;
199pub use workspace_diagnostic::*;
200
201mod workspace_folders;
202pub use workspace_folders::*;
203
204mod workspace_symbols;
205pub use workspace_symbols::*;
206
207pub mod lsif;
208
209mod trace;
210pub use trace::*;
211
212#[derive(Debug, Eq, Hash, PartialEq, Clone, Deserialize, Serialize)]
215#[serde(untagged)]
216pub enum NumberOrString {
217 Number(i32),
218 String(String),
219}
220
221#[derive(Debug, Eq, Hash, PartialEq, Clone, Deserialize, Serialize)]
222#[serde(rename_all = "camelCase")]
223pub struct StringValue {
224 pub kind: String,
225 pub value: String,
226}
227
228#[derive(Debug, Eq, Hash, PartialEq, Clone, Deserialize, Serialize)]
229#[serde(untagged)]
230pub enum StringOrStringValue {
231 String(String),
232 StringValue(StringValue),
233}
234
235#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
238pub struct CancelParams {
239 pub id: NumberOrString,
241}
242
243pub type LSPAny = serde_json::Value;
249
250pub type LSPObject = serde_json::Map<String, serde_json::Value>;
254
255pub type LSPArray = Vec<serde_json::Value>;
259
260pub mod base {
262 pub use crate::{
263 LSPAny as BaseAny, LSPArray as BaseArray, LSPObject as BaseObject, Uri as URI,
264 Uri as DocumentUri,
265 };
266}
267
268#[derive(
271 Debug, Eq, PartialEq, Ord, PartialOrd, Copy, Clone, Default, Deserialize, Serialize, Hash,
272)]
273pub struct Position {
274 pub line: u32,
276 pub character: u32,
282}
283
284impl Position {
285 pub fn new(line: u32, character: u32) -> Position {
286 Position { line, character }
287 }
288}
289
290#[derive(Debug, Eq, PartialEq, Copy, Clone, Default, Deserialize, Serialize, Hash)]
293pub struct Range {
294 pub start: Position,
296 pub end: Position,
298}
299
300impl Range {
301 pub fn new(start: Position, end: Position) -> Range {
302 Range { start, end }
303 }
304}
305
306#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize, Hash)]
308pub struct Location {
309 pub uri: Uri,
310 pub range: Range,
311}
312
313impl Location {
314 pub fn new(uri: Uri, range: Range) -> Location {
315 Location { uri, range }
316 }
317}
318
319#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
321#[serde(rename_all = "camelCase")]
322pub struct LocationLink {
323 #[serde(skip_serializing_if = "Option::is_none")]
328 pub origin_selection_range: Option<Range>,
329
330 pub target_uri: Uri,
332
333 pub target_range: Range,
335
336 pub target_selection_range: Range,
338}
339
340#[derive(Debug, Eq, PartialEq, Hash, PartialOrd, Clone, Deserialize, Serialize)]
345pub struct PositionEncodingKind(std::borrow::Cow<'static, str>);
346
347impl PositionEncodingKind {
348 pub const UTF8: PositionEncodingKind = PositionEncodingKind::new("utf-8");
350
351 pub const UTF16: PositionEncodingKind = PositionEncodingKind::new("utf-16");
356
357 pub const UTF32: PositionEncodingKind = PositionEncodingKind::new("utf-32");
363
364 pub const fn new(tag: &'static str) -> Self {
365 PositionEncodingKind(std::borrow::Cow::Borrowed(tag))
366 }
367
368 pub fn as_str(&self) -> &str {
369 &self.0
370 }
371}
372
373impl From<String> for PositionEncodingKind {
374 fn from(from: String) -> Self {
375 PositionEncodingKind(std::borrow::Cow::from(from))
376 }
377}
378
379impl From<&'static str> for PositionEncodingKind {
380 fn from(from: &'static str) -> Self {
381 PositionEncodingKind::new(from)
382 }
383}
384
385#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
388#[serde(rename_all = "camelCase")]
389pub struct Diagnostic {
390 pub range: Range,
392
393 #[serde(skip_serializing_if = "Option::is_none")]
396 pub severity: Option<DiagnosticSeverity>,
397
398 #[serde(skip_serializing_if = "Option::is_none")]
400 pub code: Option<NumberOrString>,
401
402 #[serde(skip_serializing_if = "Option::is_none")]
406 pub code_description: Option<CodeDescription>,
407
408 #[serde(skip_serializing_if = "Option::is_none")]
411 pub source: Option<String>,
412
413 pub message: String,
415
416 #[serde(skip_serializing_if = "Option::is_none")]
419 pub related_information: Option<Vec<DiagnosticRelatedInformation>>,
420
421 #[serde(skip_serializing_if = "Option::is_none")]
423 pub tags: Option<Vec<DiagnosticTag>>,
424
425 #[serde(skip_serializing_if = "Option::is_none")]
430 pub data: Option<serde_json::Value>,
431}
432
433#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
434#[serde(rename_all = "camelCase")]
435pub struct CodeDescription {
436 pub href: Uri,
437}
438
439impl Diagnostic {
440 pub fn new(
441 range: Range,
442 severity: Option<DiagnosticSeverity>,
443 code: Option<NumberOrString>,
444 source: Option<String>,
445 message: String,
446 related_information: Option<Vec<DiagnosticRelatedInformation>>,
447 tags: Option<Vec<DiagnosticTag>>,
448 ) -> Diagnostic {
449 Diagnostic {
450 range,
451 severity,
452 code,
453 source,
454 message,
455 related_information,
456 tags,
457 ..Diagnostic::default()
458 }
459 }
460
461 pub fn new_simple(range: Range, message: String) -> Diagnostic {
462 Self::new(range, None, None, None, message, None, None)
463 }
464
465 pub fn new_with_code_number(
466 range: Range,
467 severity: DiagnosticSeverity,
468 code_number: i32,
469 source: Option<String>,
470 message: String,
471 ) -> Diagnostic {
472 let code = Some(NumberOrString::Number(code_number));
473 Self::new(range, Some(severity), code, source, message, None, None)
474 }
475}
476
477#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Deserialize, Serialize)]
479#[serde(transparent)]
480pub struct DiagnosticSeverity(i32);
481lsp_enum! {
482impl DiagnosticSeverity {
483 pub const ERROR: DiagnosticSeverity = DiagnosticSeverity(1);
485 pub const WARNING: DiagnosticSeverity = DiagnosticSeverity(2);
487 pub const INFORMATION: DiagnosticSeverity = DiagnosticSeverity(3);
489 pub const HINT: DiagnosticSeverity = DiagnosticSeverity(4);
491}
492}
493
494#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
498pub struct DiagnosticRelatedInformation {
499 pub location: Location,
501
502 pub message: String,
504}
505
506#[derive(Eq, PartialEq, Clone, Deserialize, Serialize)]
508#[serde(transparent)]
509pub struct DiagnosticTag(i32);
510lsp_enum! {
511impl DiagnosticTag {
512 pub const UNNECESSARY: DiagnosticTag = DiagnosticTag(1);
516
517 pub const DEPRECATED: DiagnosticTag = DiagnosticTag(2);
520}
521}
522
523#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize, Eq)]
529pub struct Command {
530 pub title: String,
532 pub command: String,
534 #[serde(skip_serializing_if = "Option::is_none")]
537 pub arguments: Option<Vec<Value>>,
538}
539
540impl Command {
541 pub fn new(title: String, command: String, arguments: Option<Vec<Value>>) -> Command {
542 Command {
543 title,
544 command,
545 arguments,
546 }
547 }
548}
549
550#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
556#[serde(rename_all = "camelCase")]
557pub struct TextEdit {
558 pub range: Range,
561 pub new_text: String,
564}
565
566impl TextEdit {
567 pub fn new(range: Range, new_text: String) -> TextEdit {
568 TextEdit { range, new_text }
569 }
570}
571
572pub type ChangeAnnotationIdentifier = String;
577
578#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
582#[serde(rename_all = "camelCase")]
583pub struct AnnotatedTextEdit {
584 #[serde(flatten)]
585 pub text_edit: TextEdit,
586
587 pub annotation_id: ChangeAnnotationIdentifier,
589}
590
591#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
597#[serde(rename_all = "camelCase")]
598pub struct TextDocumentEdit {
599 pub text_document: OptionalVersionedTextDocumentIdentifier,
601
602 pub edits: Vec<OneOf3<TextEdit, AnnotatedTextEdit, SnippetTextEdit>>,
607}
608
609#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
613#[serde(rename_all = "camelCase")]
614pub struct ChangeAnnotation {
615 pub label: String,
618
619 #[serde(skip_serializing_if = "Option::is_none")]
622 pub needs_confirmation: Option<bool>,
623
624 #[serde(skip_serializing_if = "Option::is_none")]
627 pub description: Option<String>,
628}
629
630#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
631#[serde(rename_all = "camelCase")]
632pub struct ChangeAnnotationWorkspaceEditClientCapabilities {
633 #[serde(skip_serializing_if = "Option::is_none")]
637 pub groups_on_label: Option<bool>,
638}
639
640#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
642#[serde(rename_all = "camelCase")]
643pub struct CreateFileOptions {
644 #[serde(skip_serializing_if = "Option::is_none")]
646 pub overwrite: Option<bool>,
647 #[serde(skip_serializing_if = "Option::is_none")]
649 pub ignore_if_exists: Option<bool>,
650}
651
652#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
654#[serde(rename_all = "camelCase")]
655pub struct CreateFile {
656 pub uri: Uri,
658 #[serde(skip_serializing_if = "Option::is_none")]
660 pub options: Option<CreateFileOptions>,
661
662 #[serde(skip_serializing_if = "Option::is_none")]
666 pub annotation_id: Option<ChangeAnnotationIdentifier>,
667}
668
669#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
671#[serde(rename_all = "camelCase")]
672pub struct RenameFileOptions {
673 #[serde(skip_serializing_if = "Option::is_none")]
675 pub overwrite: Option<bool>,
676 #[serde(skip_serializing_if = "Option::is_none")]
678 pub ignore_if_exists: Option<bool>,
679}
680
681#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
683#[serde(rename_all = "camelCase")]
684pub struct RenameFile {
685 pub old_uri: Uri,
687 pub new_uri: Uri,
689 #[serde(skip_serializing_if = "Option::is_none")]
691 pub options: Option<RenameFileOptions>,
692
693 #[serde(skip_serializing_if = "Option::is_none")]
697 pub annotation_id: Option<ChangeAnnotationIdentifier>,
698}
699
700#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
702#[serde(rename_all = "camelCase")]
703pub struct DeleteFileOptions {
704 #[serde(skip_serializing_if = "Option::is_none")]
706 pub recursive: Option<bool>,
707 #[serde(skip_serializing_if = "Option::is_none")]
709 pub ignore_if_not_exists: Option<bool>,
710
711 #[serde(skip_serializing_if = "Option::is_none")]
715 pub annotation_id: Option<ChangeAnnotationIdentifier>,
716}
717
718#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
720#[serde(rename_all = "camelCase")]
721pub struct DeleteFile {
722 pub uri: Uri,
724 #[serde(skip_serializing_if = "Option::is_none")]
726 pub options: Option<DeleteFileOptions>,
727}
728
729#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
734#[serde(rename_all = "camelCase")]
735pub struct WorkspaceEdit {
736 #[serde(skip_serializing_if = "Option::is_none")]
738 #[serde(default)]
739 pub changes: Option<HashMap<Uri, Vec<TextEdit>>>, #[serde(skip_serializing_if = "Option::is_none")]
752 pub document_changes: Option<DocumentChanges>,
753
754 #[serde(skip_serializing_if = "Option::is_none")]
763 pub change_annotations: Option<HashMap<ChangeAnnotationIdentifier, ChangeAnnotation>>,
764
765 #[serde(skip_serializing_if = "Option::is_none")]
769 pub metadata: Option<WorkspaceEditMetadata>,
770}
771
772#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
773#[serde(untagged)]
774pub enum DocumentChanges {
775 Edits(Vec<TextDocumentEdit>),
776 Operations(Vec<DocumentChangeOperation>),
777}
778
779#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
795#[serde(untagged, rename_all = "lowercase")]
796pub enum DocumentChangeOperation {
797 Op(ResourceOp),
798 Edit(TextDocumentEdit),
799}
800
801#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
802#[serde(tag = "kind", rename_all = "lowercase")]
803pub enum ResourceOp {
804 Create(CreateFile),
805 Rename(RenameFile),
806 Delete(DeleteFile),
807}
808
809pub type DidChangeConfigurationClientCapabilities = DynamicRegistrationClientCapabilities;
810
811#[derive(Debug, Default, Eq, PartialEq, Clone, Deserialize, Serialize)]
812#[serde(rename_all = "camelCase")]
813pub struct ConfigurationParams {
814 pub items: Vec<ConfigurationItem>,
815}
816
817#[derive(Debug, Default, Eq, PartialEq, Clone, Deserialize, Serialize)]
818#[serde(rename_all = "camelCase")]
819pub struct ConfigurationItem {
820 #[serde(skip_serializing_if = "Option::is_none")]
822 pub scope_uri: Option<Uri>,
823
824 #[serde(skip_serializing_if = "Option::is_none")]
826 pub section: Option<String>,
827}
828
829impl WorkspaceEdit {
830 pub fn new(changes: HashMap<Uri, Vec<TextEdit>>) -> WorkspaceEdit {
831 WorkspaceEdit {
832 changes: Some(changes),
833 document_changes: None,
834 ..Default::default()
835 }
836 }
837}
838
839#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
841pub struct TextDocumentIdentifier {
842 pub uri: Uri,
848}
849
850impl TextDocumentIdentifier {
851 pub fn new(uri: Uri) -> TextDocumentIdentifier {
852 TextDocumentIdentifier { uri }
853 }
854}
855
856#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
858#[serde(rename_all = "camelCase")]
859pub struct TextDocumentItem {
860 pub uri: Uri,
862
863 pub language_id: String,
865
866 pub version: i32,
869
870 pub text: String,
872}
873
874impl TextDocumentItem {
875 pub fn new(uri: Uri, language_id: String, version: i32, text: String) -> TextDocumentItem {
876 TextDocumentItem {
877 uri,
878 language_id,
879 version,
880 text,
881 }
882 }
883}
884
885#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
887pub struct VersionedTextDocumentIdentifier {
888 pub uri: Uri,
891
892 pub version: i32,
897}
898
899impl VersionedTextDocumentIdentifier {
900 pub fn new(uri: Uri, version: i32) -> VersionedTextDocumentIdentifier {
901 VersionedTextDocumentIdentifier { uri, version }
902 }
903}
904
905#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
907pub struct OptionalVersionedTextDocumentIdentifier {
908 pub uri: Uri,
911
912 pub version: Option<i32>,
922}
923
924impl OptionalVersionedTextDocumentIdentifier {
925 pub fn new(uri: Uri, version: i32) -> OptionalVersionedTextDocumentIdentifier {
926 OptionalVersionedTextDocumentIdentifier {
927 uri,
928 version: Some(version),
929 }
930 }
931}
932
933#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
935#[serde(rename_all = "camelCase")]
936pub struct TextDocumentPositionParams {
937 pub text_document: TextDocumentIdentifier,
943
944 pub position: Position,
946}
947
948impl TextDocumentPositionParams {
949 pub fn new(
950 text_document: TextDocumentIdentifier,
951 position: Position,
952 ) -> TextDocumentPositionParams {
953 TextDocumentPositionParams {
954 text_document,
955 position,
956 }
957 }
958}
959
960#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
967pub struct DocumentFilter {
968 #[serde(skip_serializing_if = "Option::is_none")]
970 pub language: Option<String>,
971
972 #[serde(skip_serializing_if = "Option::is_none")]
974 pub scheme: Option<String>,
975
976 #[serde(skip_serializing_if = "Option::is_none")]
980 pub pattern: Option<GlobPattern>,
981}
982
983pub type DocumentSelector = Vec<DocumentFilter>;
985
986#[derive(Debug, PartialEq, Clone, Deserialize, Serialize, Default)]
989#[serde(rename_all = "camelCase")]
990pub struct InitializeParams {
991 pub process_id: Option<u32>,
995
996 #[serde(skip_serializing_if = "Option::is_none")]
999 #[deprecated(note = "Use `root_uri` instead when possible")]
1000 pub root_path: Option<String>,
1001
1002 #[serde(default)]
1006 #[deprecated(note = "Use `workspace_folders` instead when possible")]
1007 pub root_uri: Option<Uri>,
1008
1009 #[serde(skip_serializing_if = "Option::is_none")]
1011 pub initialization_options: Option<Value>,
1012
1013 pub capabilities: ClientCapabilities,
1015
1016 #[serde(default)]
1018 #[serde(skip_serializing_if = "Option::is_none")]
1019 pub trace: Option<TraceValue>,
1020
1021 #[serde(skip_serializing_if = "Option::is_none")]
1026 pub workspace_folders: Option<Vec<WorkspaceFolder>>,
1027
1028 #[serde(skip_serializing_if = "Option::is_none")]
1030 pub client_info: Option<ClientInfo>,
1031
1032 #[serde(skip_serializing_if = "Option::is_none")]
1041 pub locale: Option<String>,
1042
1043 #[serde(flatten)]
1046 pub work_done_progress_params: WorkDoneProgressParams,
1047}
1048
1049#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
1050pub struct ClientInfo {
1051 pub name: String,
1053 #[serde(skip_serializing_if = "Option::is_none")]
1055 pub version: Option<String>,
1056}
1057
1058#[derive(Debug, PartialEq, Clone, Copy, Deserialize, Serialize)]
1059pub struct InitializedParams {}
1060
1061#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
1062pub struct GenericRegistrationOptions {
1063 #[serde(flatten)]
1064 pub text_document_registration_options: TextDocumentRegistrationOptions,
1065
1066 #[serde(flatten)]
1067 pub options: GenericOptions,
1068
1069 #[serde(flatten)]
1070 pub static_registration_options: StaticRegistrationOptions,
1071}
1072
1073#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
1074pub struct GenericOptions {
1075 #[serde(flatten)]
1076 pub work_done_progress_options: WorkDoneProgressOptions,
1077}
1078
1079#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
1080pub struct GenericParams {
1081 #[serde(flatten)]
1082 pub text_document_position_params: TextDocumentPositionParams,
1083
1084 #[serde(flatten)]
1085 pub work_done_progress_params: WorkDoneProgressParams,
1086
1087 #[serde(flatten)]
1088 pub partial_result_params: PartialResultParams,
1089}
1090
1091#[derive(Debug, Eq, PartialEq, Clone, Copy, Default, Deserialize, Serialize)]
1092#[serde(rename_all = "camelCase")]
1093pub struct DynamicRegistrationClientCapabilities {
1094 #[serde(skip_serializing_if = "Option::is_none")]
1096 pub dynamic_registration: Option<bool>,
1097}
1098
1099#[derive(Debug, Eq, PartialEq, Clone, Copy, Default, Deserialize, Serialize)]
1100#[serde(rename_all = "camelCase")]
1101pub struct GotoCapability {
1102 #[serde(skip_serializing_if = "Option::is_none")]
1103 pub dynamic_registration: Option<bool>,
1104
1105 #[serde(skip_serializing_if = "Option::is_none")]
1107 pub link_support: Option<bool>,
1108}
1109
1110#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1111#[serde(rename_all = "camelCase")]
1112pub struct WorkspaceEditClientCapabilities {
1113 #[serde(skip_serializing_if = "Option::is_none")]
1115 pub document_changes: Option<bool>,
1116
1117 #[serde(skip_serializing_if = "Option::is_none")]
1120 pub resource_operations: Option<Vec<ResourceOperationKind>>,
1121
1122 #[serde(skip_serializing_if = "Option::is_none")]
1124 pub failure_handling: Option<FailureHandlingKind>,
1125
1126 #[serde(skip_serializing_if = "Option::is_none")]
1133 pub normalizes_line_endings: Option<bool>,
1134
1135 #[serde(skip_serializing_if = "Option::is_none")]
1140 pub change_annotation_support: Option<ChangeAnnotationWorkspaceEditClientCapabilities>,
1141}
1142
1143#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Copy, Clone)]
1144#[serde(rename_all = "lowercase")]
1145pub enum ResourceOperationKind {
1146 Create,
1147 Rename,
1148 Delete,
1149}
1150
1151#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Copy, Clone)]
1152#[serde(rename_all = "camelCase")]
1153pub enum FailureHandlingKind {
1154 Abort,
1155 Transactional,
1156 TextOnlyTransactional,
1157 Undo,
1158}
1159
1160#[derive(Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
1162#[serde(transparent)]
1163pub struct SymbolKind(i32);
1164lsp_enum! {
1165impl SymbolKind {
1166 pub const FILE: SymbolKind = SymbolKind(1);
1167 pub const MODULE: SymbolKind = SymbolKind(2);
1168 pub const NAMESPACE: SymbolKind = SymbolKind(3);
1169 pub const PACKAGE: SymbolKind = SymbolKind(4);
1170 pub const CLASS: SymbolKind = SymbolKind(5);
1171 pub const METHOD: SymbolKind = SymbolKind(6);
1172 pub const PROPERTY: SymbolKind = SymbolKind(7);
1173 pub const FIELD: SymbolKind = SymbolKind(8);
1174 pub const CONSTRUCTOR: SymbolKind = SymbolKind(9);
1175 pub const ENUM: SymbolKind = SymbolKind(10);
1176 pub const INTERFACE: SymbolKind = SymbolKind(11);
1177 pub const FUNCTION: SymbolKind = SymbolKind(12);
1178 pub const VARIABLE: SymbolKind = SymbolKind(13);
1179 pub const CONSTANT: SymbolKind = SymbolKind(14);
1180 pub const STRING: SymbolKind = SymbolKind(15);
1181 pub const NUMBER: SymbolKind = SymbolKind(16);
1182 pub const BOOLEAN: SymbolKind = SymbolKind(17);
1183 pub const ARRAY: SymbolKind = SymbolKind(18);
1184 pub const OBJECT: SymbolKind = SymbolKind(19);
1185 pub const KEY: SymbolKind = SymbolKind(20);
1186 pub const NULL: SymbolKind = SymbolKind(21);
1187 pub const ENUM_MEMBER: SymbolKind = SymbolKind(22);
1188 pub const STRUCT: SymbolKind = SymbolKind(23);
1189 pub const EVENT: SymbolKind = SymbolKind(24);
1190 pub const OPERATOR: SymbolKind = SymbolKind(25);
1191 pub const TYPE_PARAMETER: SymbolKind = SymbolKind(26);
1192}
1193}
1194
1195#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1199#[serde(rename_all = "camelCase")]
1200pub struct SymbolKindCapability {
1201 pub value_set: Option<Vec<SymbolKind>>,
1210}
1211
1212#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1214#[serde(rename_all = "camelCase")]
1215pub struct WorkspaceClientCapabilities {
1216 #[serde(skip_serializing_if = "Option::is_none")]
1219 pub apply_edit: Option<bool>,
1220
1221 #[serde(skip_serializing_if = "Option::is_none")]
1223 pub workspace_edit: Option<WorkspaceEditClientCapabilities>,
1224
1225 #[serde(skip_serializing_if = "Option::is_none")]
1227 pub did_change_configuration: Option<DidChangeConfigurationClientCapabilities>,
1228
1229 #[serde(skip_serializing_if = "Option::is_none")]
1231 pub did_change_watched_files: Option<DidChangeWatchedFilesClientCapabilities>,
1232
1233 #[serde(skip_serializing_if = "Option::is_none")]
1235 pub symbol: Option<WorkspaceSymbolClientCapabilities>,
1236
1237 #[serde(skip_serializing_if = "Option::is_none")]
1239 pub execute_command: Option<ExecuteCommandClientCapabilities>,
1240
1241 #[serde(skip_serializing_if = "Option::is_none")]
1245 pub workspace_folders: Option<bool>,
1246
1247 #[serde(skip_serializing_if = "Option::is_none")]
1251 pub configuration: Option<bool>,
1252
1253 #[serde(skip_serializing_if = "Option::is_none")]
1257 pub semantic_tokens: Option<SemanticTokensWorkspaceClientCapabilities>,
1258
1259 #[serde(skip_serializing_if = "Option::is_none")]
1263 pub code_lens: Option<CodeLensWorkspaceClientCapabilities>,
1264
1265 #[serde(skip_serializing_if = "Option::is_none")]
1269 pub file_operations: Option<WorkspaceFileOperationsClientCapabilities>,
1270
1271 #[serde(skip_serializing_if = "Option::is_none")]
1275 pub inline_value: Option<InlineValueWorkspaceClientCapabilities>,
1276
1277 #[serde(skip_serializing_if = "Option::is_none")]
1281 pub inlay_hint: Option<InlayHintWorkspaceClientCapabilities>,
1282
1283 #[serde(skip_serializing_if = "Option::is_none")]
1286 pub diagnostic: Option<DiagnosticWorkspaceClientCapabilities>,
1287
1288 #[serde(skip_serializing_if = "Option::is_none")]
1292 pub folding_range: Option<FoldingRangeWorkspaceClientCapabilities>,
1293
1294 #[serde(skip_serializing_if = "Option::is_none")]
1298 pub text_document_content: Option<TextDocumentContentClientCapabilities>,
1299}
1300
1301#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1302#[serde(rename_all = "camelCase")]
1303pub struct TextDocumentSyncClientCapabilities {
1304 #[serde(skip_serializing_if = "Option::is_none")]
1306 pub dynamic_registration: Option<bool>,
1307
1308 #[serde(skip_serializing_if = "Option::is_none")]
1310 pub will_save: Option<bool>,
1311
1312 #[serde(skip_serializing_if = "Option::is_none")]
1316 pub will_save_wait_until: Option<bool>,
1317
1318 #[serde(skip_serializing_if = "Option::is_none")]
1320 pub did_save: Option<bool>,
1321}
1322
1323#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1324#[serde(rename_all = "camelCase")]
1325pub struct PublishDiagnosticsClientCapabilities {
1326 #[serde(skip_serializing_if = "Option::is_none")]
1328 pub related_information: Option<bool>,
1329
1330 #[serde(
1333 default,
1334 skip_serializing_if = "Option::is_none",
1335 deserialize_with = "TagSupport::deserialize_compat"
1336 )]
1337 pub tag_support: Option<TagSupport<DiagnosticTag>>,
1338
1339 #[serde(skip_serializing_if = "Option::is_none")]
1344 pub version_support: Option<bool>,
1345
1346 #[serde(skip_serializing_if = "Option::is_none")]
1350 pub code_description_support: Option<bool>,
1351
1352 #[serde(skip_serializing_if = "Option::is_none")]
1358 pub data_support: Option<bool>,
1359}
1360
1361#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1362#[serde(rename_all = "camelCase")]
1363pub struct TagSupport<T> {
1364 pub value_set: Vec<T>,
1366}
1367
1368impl<T> TagSupport<T> {
1369 fn deserialize_compat<'de, S>(serializer: S) -> Result<Option<TagSupport<T>>, S::Error>
1373 where
1374 S: serde::Deserializer<'de>,
1375 T: serde::Deserialize<'de>,
1376 {
1377 Ok(
1378 match Option::<Value>::deserialize(serializer).map_err(serde::de::Error::custom)? {
1379 Some(Value::Bool(false)) => None,
1380 Some(Value::Bool(true)) => Some(TagSupport { value_set: vec![] }),
1381 Some(other) => {
1382 Some(TagSupport::<T>::deserialize(other).map_err(serde::de::Error::custom)?)
1383 }
1384 None => None,
1385 },
1386 )
1387 }
1388}
1389
1390#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1392#[serde(rename_all = "camelCase")]
1393pub struct TextDocumentClientCapabilities {
1394 #[serde(skip_serializing_if = "Option::is_none")]
1395 pub synchronization: Option<TextDocumentSyncClientCapabilities>,
1396 #[serde(skip_serializing_if = "Option::is_none")]
1398 pub completion: Option<CompletionClientCapabilities>,
1399
1400 #[serde(skip_serializing_if = "Option::is_none")]
1402 pub hover: Option<HoverClientCapabilities>,
1403
1404 #[serde(skip_serializing_if = "Option::is_none")]
1406 pub signature_help: Option<SignatureHelpClientCapabilities>,
1407
1408 #[serde(skip_serializing_if = "Option::is_none")]
1410 pub references: Option<ReferenceClientCapabilities>,
1411
1412 #[serde(skip_serializing_if = "Option::is_none")]
1414 pub document_highlight: Option<DocumentHighlightClientCapabilities>,
1415
1416 #[serde(skip_serializing_if = "Option::is_none")]
1418 pub document_symbol: Option<DocumentSymbolClientCapabilities>,
1419 #[serde(skip_serializing_if = "Option::is_none")]
1421 pub formatting: Option<DocumentFormattingClientCapabilities>,
1422
1423 #[serde(skip_serializing_if = "Option::is_none")]
1425 pub range_formatting: Option<DocumentRangeFormattingClientCapabilities>,
1426
1427 #[serde(skip_serializing_if = "Option::is_none")]
1431 pub ranges_formatting: Option<DocumentRangesFormattingClientCapabilities>,
1432
1433 #[serde(skip_serializing_if = "Option::is_none")]
1435 pub on_type_formatting: Option<DocumentOnTypeFormattingClientCapabilities>,
1436
1437 #[serde(skip_serializing_if = "Option::is_none")]
1439 pub declaration: Option<GotoCapability>,
1440
1441 #[serde(skip_serializing_if = "Option::is_none")]
1443 pub definition: Option<GotoCapability>,
1444
1445 #[serde(skip_serializing_if = "Option::is_none")]
1447 pub type_definition: Option<GotoCapability>,
1448
1449 #[serde(skip_serializing_if = "Option::is_none")]
1451 pub implementation: Option<GotoCapability>,
1452
1453 #[serde(skip_serializing_if = "Option::is_none")]
1455 pub code_action: Option<CodeActionClientCapabilities>,
1456
1457 #[serde(skip_serializing_if = "Option::is_none")]
1459 pub code_lens: Option<CodeLensClientCapabilities>,
1460
1461 #[serde(skip_serializing_if = "Option::is_none")]
1463 pub document_link: Option<DocumentLinkClientCapabilities>,
1464
1465 #[serde(skip_serializing_if = "Option::is_none")]
1468 pub color_provider: Option<DocumentColorClientCapabilities>,
1469
1470 #[serde(skip_serializing_if = "Option::is_none")]
1472 pub rename: Option<RenameClientCapabilities>,
1473
1474 #[serde(skip_serializing_if = "Option::is_none")]
1476 pub publish_diagnostics: Option<PublishDiagnosticsClientCapabilities>,
1477
1478 #[serde(skip_serializing_if = "Option::is_none")]
1480 pub folding_range: Option<FoldingRangeClientCapabilities>,
1481
1482 #[serde(skip_serializing_if = "Option::is_none")]
1486 pub selection_range: Option<SelectionRangeClientCapabilities>,
1487
1488 #[serde(skip_serializing_if = "Option::is_none")]
1492 pub linked_editing_range: Option<LinkedEditingRangeClientCapabilities>,
1493
1494 #[serde(skip_serializing_if = "Option::is_none")]
1498 pub call_hierarchy: Option<CallHierarchyClientCapabilities>,
1499
1500 #[serde(skip_serializing_if = "Option::is_none")]
1502 pub semantic_tokens: Option<SemanticTokensClientCapabilities>,
1503
1504 #[serde(skip_serializing_if = "Option::is_none")]
1508 pub moniker: Option<MonikerClientCapabilities>,
1509
1510 #[serde(skip_serializing_if = "Option::is_none")]
1514 pub type_hierarchy: Option<TypeHierarchyClientCapabilities>,
1515
1516 #[serde(skip_serializing_if = "Option::is_none")]
1520 pub inline_value: Option<InlineValueClientCapabilities>,
1521
1522 #[serde(skip_serializing_if = "Option::is_none")]
1526 pub inlay_hint: Option<InlayHintClientCapabilities>,
1527
1528 #[serde(skip_serializing_if = "Option::is_none")]
1532 pub diagnostic: Option<DiagnosticClientCapabilities>,
1533
1534 #[serde(skip_serializing_if = "Option::is_none")]
1538 #[cfg(feature = "proposed")]
1539 pub inline_completion: Option<InlineCompletionClientCapabilities>,
1540}
1541
1542#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
1544#[serde(rename_all = "camelCase")]
1545pub struct ClientCapabilities {
1546 #[serde(skip_serializing_if = "Option::is_none")]
1548 pub workspace: Option<WorkspaceClientCapabilities>,
1549
1550 #[serde(skip_serializing_if = "Option::is_none")]
1552 pub text_document: Option<TextDocumentClientCapabilities>,
1553
1554 #[serde(skip_serializing_if = "Option::is_none")]
1558 pub notebook_document: Option<NotebookDocumentClientCapabilities>,
1559
1560 #[serde(skip_serializing_if = "Option::is_none")]
1562 pub window: Option<WindowClientCapabilities>,
1563
1564 #[serde(skip_serializing_if = "Option::is_none")]
1566 pub general: Option<GeneralClientCapabilities>,
1567
1568 #[serde(skip_serializing_if = "Option::is_none")]
1572 #[cfg(feature = "proposed")]
1573 pub offset_encoding: Option<Vec<String>>,
1574
1575 #[serde(skip_serializing_if = "Option::is_none")]
1577 pub experimental: Option<Value>,
1578}
1579
1580#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
1581#[serde(rename_all = "camelCase")]
1582pub struct GeneralClientCapabilities {
1583 #[serde(skip_serializing_if = "Option::is_none")]
1587 pub regular_expressions: Option<RegularExpressionsClientCapabilities>,
1588
1589 #[serde(skip_serializing_if = "Option::is_none")]
1593 pub markdown: Option<MarkdownClientCapabilities>,
1594
1595 #[serde(skip_serializing_if = "Option::is_none")]
1600 pub stale_request_support: Option<StaleRequestSupportClientCapabilities>,
1601
1602 #[serde(skip_serializing_if = "Option::is_none")]
1621 pub position_encodings: Option<Vec<PositionEncodingKind>>,
1622
1623 #[serde(skip_serializing_if = "Option::is_none")]
1627 pub relative_pattern_support: Option<bool>,
1628}
1629
1630#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
1637#[serde(rename_all = "camelCase")]
1638pub struct StaleRequestSupportClientCapabilities {
1639 pub cancel: bool,
1641
1642 pub retry_on_content_modified: Vec<String>,
1646}
1647
1648#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
1649#[serde(rename_all = "camelCase")]
1650pub struct RegularExpressionsClientCapabilities {
1651 pub engine: String,
1653
1654 #[serde(skip_serializing_if = "Option::is_none")]
1656 pub version: Option<String>,
1657}
1658
1659#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
1660#[serde(rename_all = "camelCase")]
1661pub struct MarkdownClientCapabilities {
1662 pub parser: String,
1664
1665 #[serde(skip_serializing_if = "Option::is_none")]
1667 pub version: Option<String>,
1668
1669 #[serde(skip_serializing_if = "Option::is_none")]
1674 pub allowed_tags: Option<Vec<String>>,
1675}
1676
1677#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
1678#[serde(rename_all = "camelCase")]
1679pub struct InitializeResult {
1680 pub capabilities: ServerCapabilities,
1682
1683 #[serde(skip_serializing_if = "Option::is_none")]
1685 pub server_info: Option<ServerInfo>,
1686
1687 #[serde(skip_serializing_if = "Option::is_none")]
1691 #[cfg(feature = "proposed")]
1692 pub offset_encoding: Option<String>,
1693}
1694
1695#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1696pub struct ServerInfo {
1697 pub name: String,
1699 #[serde(skip_serializing_if = "Option::is_none")]
1701 pub version: Option<String>,
1702}
1703
1704#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1705pub struct InitializeError {
1706 pub retry: bool,
1712}
1713
1714#[derive(Eq, PartialEq, Clone, Copy, Deserialize, Serialize)]
1718#[serde(transparent)]
1719pub struct TextDocumentSyncKind(i32);
1720lsp_enum! {
1721impl TextDocumentSyncKind {
1722 pub const NONE: TextDocumentSyncKind = TextDocumentSyncKind(0);
1724
1725 pub const FULL: TextDocumentSyncKind = TextDocumentSyncKind(1);
1727
1728 pub const INCREMENTAL: TextDocumentSyncKind = TextDocumentSyncKind(2);
1731}
1732}
1733
1734pub type ExecuteCommandClientCapabilities = DynamicRegistrationClientCapabilities;
1735
1736#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1738pub struct ExecuteCommandOptions {
1739 pub commands: Vec<String>,
1741
1742 #[serde(flatten)]
1743 pub work_done_progress_options: WorkDoneProgressOptions,
1744}
1745
1746#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1748#[serde(rename_all = "camelCase")]
1749pub struct SaveOptions {
1750 #[serde(skip_serializing_if = "Option::is_none")]
1752 pub include_text: Option<bool>,
1753}
1754
1755#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
1756#[serde(untagged)]
1757pub enum TextDocumentSyncSaveOptions {
1758 Supported(bool),
1759 SaveOptions(SaveOptions),
1760}
1761
1762impl From<SaveOptions> for TextDocumentSyncSaveOptions {
1763 fn from(from: SaveOptions) -> Self {
1764 Self::SaveOptions(from)
1765 }
1766}
1767
1768impl From<bool> for TextDocumentSyncSaveOptions {
1769 fn from(from: bool) -> Self {
1770 Self::Supported(from)
1771 }
1772}
1773
1774#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
1775#[serde(rename_all = "camelCase")]
1776pub struct TextDocumentSyncOptions {
1777 #[serde(skip_serializing_if = "Option::is_none")]
1779 pub open_close: Option<bool>,
1780
1781 #[serde(skip_serializing_if = "Option::is_none")]
1784 pub change: Option<TextDocumentSyncKind>,
1785
1786 #[serde(skip_serializing_if = "Option::is_none")]
1788 pub will_save: Option<bool>,
1789
1790 #[serde(skip_serializing_if = "Option::is_none")]
1792 pub will_save_wait_until: Option<bool>,
1793
1794 #[serde(skip_serializing_if = "Option::is_none")]
1796 pub save: Option<TextDocumentSyncSaveOptions>,
1797}
1798
1799#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Clone, Deserialize, Serialize)]
1800#[serde(untagged)]
1801pub enum OneOf<A, B> {
1802 Left(A),
1803 Right(B),
1804}
1805
1806#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Clone, Deserialize, Serialize)]
1807#[serde(untagged)]
1808pub enum OneOf3<A, B, C> {
1809 A(A),
1810 B(B),
1811 C(C),
1812}
1813
1814#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
1815#[serde(untagged)]
1816pub enum TextDocumentSyncCapability {
1817 Kind(TextDocumentSyncKind),
1818 Options(TextDocumentSyncOptions),
1819}
1820
1821impl From<TextDocumentSyncOptions> for TextDocumentSyncCapability {
1822 fn from(from: TextDocumentSyncOptions) -> Self {
1823 Self::Options(from)
1824 }
1825}
1826
1827impl From<TextDocumentSyncKind> for TextDocumentSyncCapability {
1828 fn from(from: TextDocumentSyncKind) -> Self {
1829 Self::Kind(from)
1830 }
1831}
1832
1833#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
1834#[serde(untagged)]
1835pub enum ImplementationProviderCapability {
1836 Simple(bool),
1837 Options(StaticTextDocumentRegistrationOptions),
1838}
1839
1840impl From<StaticTextDocumentRegistrationOptions> for ImplementationProviderCapability {
1841 fn from(from: StaticTextDocumentRegistrationOptions) -> Self {
1842 Self::Options(from)
1843 }
1844}
1845
1846impl From<bool> for ImplementationProviderCapability {
1847 fn from(from: bool) -> Self {
1848 Self::Simple(from)
1849 }
1850}
1851
1852#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
1853#[serde(untagged)]
1854pub enum TypeDefinitionProviderCapability {
1855 Simple(bool),
1856 Options(StaticTextDocumentRegistrationOptions),
1857}
1858
1859impl From<StaticTextDocumentRegistrationOptions> for TypeDefinitionProviderCapability {
1860 fn from(from: StaticTextDocumentRegistrationOptions) -> Self {
1861 Self::Options(from)
1862 }
1863}
1864
1865impl From<bool> for TypeDefinitionProviderCapability {
1866 fn from(from: bool) -> Self {
1867 Self::Simple(from)
1868 }
1869}
1870
1871#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
1872#[serde(rename_all = "camelCase")]
1873pub struct ServerCapabilities {
1874 #[serde(skip_serializing_if = "Option::is_none")]
1884 pub position_encoding: Option<PositionEncodingKind>,
1885
1886 #[serde(skip_serializing_if = "Option::is_none")]
1888 pub text_document_sync: Option<TextDocumentSyncCapability>,
1889
1890 #[serde(skip_serializing_if = "Option::is_none")]
1894 pub notebook_document_sync:
1895 Option<OneOf<NotebookDocumentSyncOptions, NotebookDocumentSyncRegistrationOptions>>,
1896
1897 #[serde(skip_serializing_if = "Option::is_none")]
1899 pub selection_range_provider: Option<SelectionRangeProviderCapability>,
1900
1901 #[serde(skip_serializing_if = "Option::is_none")]
1903 pub hover_provider: Option<HoverProviderCapability>,
1904
1905 #[serde(skip_serializing_if = "Option::is_none")]
1907 pub completion_provider: Option<CompletionOptions>,
1908
1909 #[serde(skip_serializing_if = "Option::is_none")]
1911 pub signature_help_provider: Option<SignatureHelpOptions>,
1912
1913 #[serde(skip_serializing_if = "Option::is_none")]
1915 pub definition_provider: Option<OneOf<bool, DefinitionOptions>>,
1916
1917 #[serde(skip_serializing_if = "Option::is_none")]
1919 pub type_definition_provider: Option<TypeDefinitionProviderCapability>,
1920
1921 #[serde(skip_serializing_if = "Option::is_none")]
1923 pub implementation_provider: Option<ImplementationProviderCapability>,
1924
1925 #[serde(skip_serializing_if = "Option::is_none")]
1927 pub references_provider: Option<OneOf<bool, ReferencesOptions>>,
1928
1929 #[serde(skip_serializing_if = "Option::is_none")]
1931 pub document_highlight_provider: Option<OneOf<bool, DocumentHighlightOptions>>,
1932
1933 #[serde(skip_serializing_if = "Option::is_none")]
1935 pub document_symbol_provider: Option<OneOf<bool, DocumentSymbolOptions>>,
1936
1937 #[serde(skip_serializing_if = "Option::is_none")]
1939 pub workspace_symbol_provider: Option<OneOf<bool, WorkspaceSymbolOptions>>,
1940
1941 #[serde(skip_serializing_if = "Option::is_none")]
1943 pub code_action_provider: Option<CodeActionProviderCapability>,
1944
1945 #[serde(skip_serializing_if = "Option::is_none")]
1947 pub code_lens_provider: Option<CodeLensOptions>,
1948
1949 #[serde(skip_serializing_if = "Option::is_none")]
1951 pub document_formatting_provider: Option<OneOf<bool, DocumentFormattingOptions>>,
1952
1953 #[serde(skip_serializing_if = "Option::is_none")]
1955 pub document_range_formatting_provider: Option<OneOf<bool, DocumentRangeFormattingOptions>>,
1956
1957 #[serde(skip_serializing_if = "Option::is_none")]
1959 pub document_on_type_formatting_provider: Option<DocumentOnTypeFormattingOptions>,
1960
1961 #[serde(skip_serializing_if = "Option::is_none")]
1963 pub rename_provider: Option<OneOf<bool, RenameOptions>>,
1964
1965 #[serde(skip_serializing_if = "Option::is_none")]
1967 pub document_link_provider: Option<DocumentLinkOptions>,
1968
1969 #[serde(skip_serializing_if = "Option::is_none")]
1971 pub color_provider: Option<ColorProviderCapability>,
1972
1973 #[serde(skip_serializing_if = "Option::is_none")]
1975 pub folding_range_provider: Option<FoldingRangeProviderCapability>,
1976
1977 #[serde(skip_serializing_if = "Option::is_none")]
1979 pub declaration_provider: Option<DeclarationCapability>,
1980
1981 #[serde(skip_serializing_if = "Option::is_none")]
1983 pub execute_command_provider: Option<ExecuteCommandOptions>,
1984
1985 #[serde(skip_serializing_if = "Option::is_none")]
1987 pub workspace: Option<WorkspaceServerCapabilities>,
1988
1989 #[serde(skip_serializing_if = "Option::is_none")]
1991 pub call_hierarchy_provider: Option<CallHierarchyServerCapability>,
1992
1993 #[serde(skip_serializing_if = "Option::is_none")]
1995 pub semantic_tokens_provider: Option<SemanticTokensServerCapabilities>,
1996
1997 #[serde(skip_serializing_if = "Option::is_none")]
1999 pub moniker_provider: Option<OneOf<bool, MonikerServerCapabilities>>,
2000
2001 #[serde(skip_serializing_if = "Option::is_none")]
2005 pub linked_editing_range_provider: Option<LinkedEditingRangeServerCapabilities>,
2006
2007 #[serde(skip_serializing_if = "Option::is_none")]
2011 pub inline_value_provider: Option<OneOf<bool, InlineValueServerCapabilities>>,
2012
2013 #[serde(skip_serializing_if = "Option::is_none")]
2017 pub inlay_hint_provider: Option<OneOf<bool, InlayHintServerCapabilities>>,
2018
2019 #[serde(skip_serializing_if = "Option::is_none")]
2023 pub diagnostic_provider: Option<DiagnosticServerCapabilities>,
2024
2025 #[serde(skip_serializing_if = "Option::is_none")]
2029 pub document_ranges_formatting_provider: Option<OneOf<bool, DocumentRangesFormattingOptions>>,
2030
2031 #[serde(skip_serializing_if = "Option::is_none")]
2035 pub text_document_content_provider:
2036 Option<OneOf<TextDocumentContentOptions, TextDocumentContentRegistrationOptions>>,
2037
2038 #[serde(skip_serializing_if = "Option::is_none")]
2042 pub notebook_diagnostic_provider:
2043 Option<OneOf<NotebookDiagnosticOptions, NotebookDiagnosticRegistrationOptions>>,
2044
2045 #[serde(skip_serializing_if = "Option::is_none")]
2049 #[cfg(feature = "proposed")]
2050 pub inline_completion_provider: Option<OneOf<bool, InlineCompletionOptions>>,
2051
2052 #[serde(skip_serializing_if = "Option::is_none")]
2054 pub experimental: Option<Value>,
2055}
2056
2057#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
2058#[serde(rename_all = "camelCase")]
2059pub struct WorkspaceServerCapabilities {
2060 #[serde(skip_serializing_if = "Option::is_none")]
2062 pub workspace_folders: Option<WorkspaceFoldersServerCapabilities>,
2063
2064 #[serde(skip_serializing_if = "Option::is_none")]
2065 pub file_operations: Option<WorkspaceFileOperationsServerCapabilities>,
2066
2067 #[serde(skip_serializing_if = "Option::is_none")]
2068 #[cfg(feature = "proposed")]
2069 pub text_document_content: Option<OneOf<bool, TextDocumentContentRegistrationOptions>>,
2070}
2071
2072#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
2074#[serde(rename_all = "camelCase")]
2075pub struct Registration {
2076 pub id: String,
2079
2080 pub method: String,
2082
2083 #[serde(skip_serializing_if = "Option::is_none")]
2085 pub register_options: Option<Value>,
2086}
2087
2088#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
2089pub struct RegistrationParams {
2090 pub registrations: Vec<Registration>,
2091}
2092
2093#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
2096#[serde(rename_all = "camelCase")]
2097pub struct TextDocumentRegistrationOptions {
2098 pub document_selector: Option<DocumentSelector>,
2101}
2102
2103#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2104#[serde(untagged)]
2105pub enum DeclarationCapability {
2106 Simple(bool),
2107 RegistrationOptions(DeclarationRegistrationOptions),
2108 Options(DeclarationOptions),
2109}
2110
2111#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2112#[serde(rename_all = "camelCase")]
2113pub struct DeclarationRegistrationOptions {
2114 #[serde(flatten)]
2115 pub declaration_options: DeclarationOptions,
2116
2117 #[serde(flatten)]
2118 pub text_document_registration_options: TextDocumentRegistrationOptions,
2119
2120 #[serde(flatten)]
2121 pub static_registration_options: StaticRegistrationOptions,
2122}
2123
2124#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2125#[serde(rename_all = "camelCase")]
2126pub struct DeclarationOptions {
2127 #[serde(flatten)]
2128 pub work_done_progress_options: WorkDoneProgressOptions,
2129}
2130
2131#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
2132#[serde(rename_all = "camelCase")]
2133pub struct StaticRegistrationOptions {
2134 #[serde(skip_serializing_if = "Option::is_none")]
2135 pub id: Option<String>,
2136}
2137
2138#[derive(Debug, Default, Eq, PartialEq, Clone, Deserialize, Serialize, Copy)]
2139#[serde(rename_all = "camelCase")]
2140pub struct WorkDoneProgressOptions {
2141 #[serde(skip_serializing_if = "Option::is_none")]
2142 pub work_done_progress: Option<bool>,
2143}
2144
2145#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)]
2146#[serde(rename_all = "camelCase")]
2147pub struct DocumentFormattingOptions {
2148 #[serde(flatten)]
2149 pub work_done_progress_options: WorkDoneProgressOptions,
2150}
2151
2152#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2153#[serde(rename_all = "camelCase")]
2154pub struct DocumentRangeFormattingOptions {
2155 #[serde(flatten)]
2156 pub work_done_progress_options: WorkDoneProgressOptions,
2157}
2158
2159#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2160#[serde(rename_all = "camelCase")]
2161pub struct DefinitionOptions {
2162 #[serde(flatten)]
2163 pub work_done_progress_options: WorkDoneProgressOptions,
2164}
2165
2166#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2167#[serde(rename_all = "camelCase")]
2168pub struct DocumentSymbolOptions {
2169 #[serde(skip_serializing_if = "Option::is_none")]
2174 pub label: Option<String>,
2175
2176 #[serde(flatten)]
2177 pub work_done_progress_options: WorkDoneProgressOptions,
2178}
2179
2180#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2181#[serde(rename_all = "camelCase")]
2182pub struct ReferencesOptions {
2183 #[serde(flatten)]
2184 pub work_done_progress_options: WorkDoneProgressOptions,
2185}
2186
2187#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2188#[serde(rename_all = "camelCase")]
2189pub struct DocumentHighlightOptions {
2190 #[serde(flatten)]
2191 pub work_done_progress_options: WorkDoneProgressOptions,
2192}
2193
2194#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2195#[serde(rename_all = "camelCase")]
2196pub struct WorkspaceSymbolOptions {
2197 #[serde(flatten)]
2198 pub work_done_progress_options: WorkDoneProgressOptions,
2199
2200 #[serde(skip_serializing_if = "Option::is_none")]
2205 pub resolve_provider: Option<bool>,
2206}
2207
2208#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2209#[serde(rename_all = "camelCase")]
2210pub struct StaticTextDocumentRegistrationOptions {
2211 pub document_selector: Option<DocumentSelector>,
2214
2215 #[serde(skip_serializing_if = "Option::is_none")]
2216 pub id: Option<String>,
2217}
2218
2219#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2221pub struct Unregistration {
2222 pub id: String,
2225
2226 pub method: String,
2228}
2229
2230#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2231pub struct UnregistrationParams {
2232 pub unregisterations: Vec<Unregistration>,
2233}
2234
2235#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
2236pub struct DidChangeConfigurationParams {
2237 pub settings: Value,
2239}
2240
2241#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2242#[serde(rename_all = "camelCase")]
2243pub struct DidOpenTextDocumentParams {
2244 pub text_document: TextDocumentItem,
2246}
2247
2248#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2249#[serde(rename_all = "camelCase")]
2250pub struct DidChangeTextDocumentParams {
2251 pub text_document: VersionedTextDocumentIdentifier,
2255 pub content_changes: Vec<TextDocumentContentChangeEvent>,
2257}
2258
2259#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2262#[serde(rename_all = "camelCase")]
2263pub struct TextDocumentContentChangeEvent {
2264 #[serde(skip_serializing_if = "Option::is_none")]
2266 pub range: Option<Range>,
2267
2268 #[serde(skip_serializing_if = "Option::is_none")]
2272 pub range_length: Option<u32>,
2273
2274 pub text: String,
2276}
2277
2278#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2282#[serde(rename_all = "camelCase")]
2283pub struct TextDocumentChangeRegistrationOptions {
2284 pub document_selector: Option<DocumentSelector>,
2287
2288 pub sync_kind: TextDocumentSyncKind,
2291}
2292
2293#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2295#[serde(rename_all = "camelCase")]
2296pub struct WillSaveTextDocumentParams {
2297 pub text_document: TextDocumentIdentifier,
2299
2300 pub reason: TextDocumentSaveReason,
2302}
2303
2304#[derive(Copy, Eq, PartialEq, Clone, Deserialize, Serialize)]
2306#[serde(transparent)]
2307pub struct TextDocumentSaveReason(i32);
2308lsp_enum! {
2309impl TextDocumentSaveReason {
2310 pub const MANUAL: TextDocumentSaveReason = TextDocumentSaveReason(1);
2313
2314 pub const AFTER_DELAY: TextDocumentSaveReason = TextDocumentSaveReason(2);
2316
2317 pub const FOCUS_OUT: TextDocumentSaveReason = TextDocumentSaveReason(3);
2319}
2320}
2321
2322#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2323#[serde(rename_all = "camelCase")]
2324pub struct DidCloseTextDocumentParams {
2325 pub text_document: TextDocumentIdentifier,
2327}
2328
2329#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2330#[serde(rename_all = "camelCase")]
2331pub struct DidSaveTextDocumentParams {
2332 pub text_document: TextDocumentIdentifier,
2334
2335 #[serde(skip_serializing_if = "Option::is_none")]
2338 pub text: Option<String>,
2339}
2340
2341#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2342#[serde(rename_all = "camelCase")]
2343pub struct TextDocumentSaveRegistrationOptions {
2344 #[serde(skip_serializing_if = "Option::is_none")]
2346 pub include_text: Option<bool>,
2347
2348 #[serde(flatten)]
2349 pub text_document_registration_options: TextDocumentRegistrationOptions,
2350}
2351
2352#[derive(Debug, Eq, PartialEq, Clone, Copy, Default, Deserialize, Serialize)]
2353#[serde(rename_all = "camelCase")]
2354pub struct DidChangeWatchedFilesClientCapabilities {
2355 #[serde(skip_serializing_if = "Option::is_none")]
2359 pub dynamic_registration: Option<bool>,
2360
2361 #[serde(skip_serializing_if = "Option::is_none")]
2366 pub relative_pattern_support: Option<bool>,
2367}
2368
2369#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2370pub struct DidChangeWatchedFilesParams {
2371 pub changes: Vec<FileEvent>,
2373}
2374
2375#[derive(Eq, PartialEq, Hash, Copy, Clone, Deserialize, Serialize)]
2377#[serde(transparent)]
2378pub struct FileChangeType(i32);
2379lsp_enum! {
2380impl FileChangeType {
2381 pub const CREATED: FileChangeType = FileChangeType(1);
2383
2384 pub const CHANGED: FileChangeType = FileChangeType(2);
2386
2387 pub const DELETED: FileChangeType = FileChangeType(3);
2389}
2390}
2391
2392#[derive(Debug, Eq, Hash, PartialEq, Clone, Deserialize, Serialize)]
2394pub struct FileEvent {
2395 pub uri: Uri,
2397
2398 #[serde(rename = "type")]
2400 pub typ: FileChangeType,
2401}
2402
2403impl FileEvent {
2404 pub fn new(uri: Uri, typ: FileChangeType) -> FileEvent {
2405 FileEvent { uri, typ }
2406 }
2407}
2408
2409#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Deserialize, Serialize)]
2411pub struct DidChangeWatchedFilesRegistrationOptions {
2412 pub watchers: Vec<FileSystemWatcher>,
2414}
2415
2416#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Deserialize, Serialize)]
2417#[serde(rename_all = "camelCase")]
2418pub struct FileSystemWatcher {
2419 pub glob_pattern: GlobPattern,
2424
2425 #[serde(skip_serializing_if = "Option::is_none")]
2428 pub kind: Option<WatchKind>,
2429}
2430
2431#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Deserialize, Serialize)]
2435#[serde(untagged)]
2436pub enum GlobPattern {
2437 String(Pattern),
2438 Relative(RelativePattern),
2439}
2440
2441impl From<Pattern> for GlobPattern {
2442 #[inline]
2443 fn from(from: Pattern) -> Self {
2444 Self::String(from)
2445 }
2446}
2447
2448impl From<RelativePattern> for GlobPattern {
2449 #[inline]
2450 fn from(from: RelativePattern) -> Self {
2451 Self::Relative(from)
2452 }
2453}
2454
2455#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Deserialize, Serialize)]
2461#[serde(rename_all = "camelCase")]
2462pub struct RelativePattern {
2463 pub base_uri: OneOf<WorkspaceFolder, Uri>,
2466
2467 pub pattern: Pattern,
2469}
2470
2471pub type Pattern = String;
2486
2487bitflags! {
2488pub struct WatchKind: u8 {
2489 const Create = 1;
2491 const Change = 2;
2493 const Delete = 4;
2495}
2496}
2497
2498impl<'de> serde::Deserialize<'de> for WatchKind {
2499 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2500 where
2501 D: serde::Deserializer<'de>,
2502 {
2503 let i = u8::deserialize(deserializer)?;
2504 WatchKind::from_bits(i).ok_or_else(|| {
2505 D::Error::invalid_value(de::Unexpected::Unsigned(u64::from(i)), &"Unknown flag")
2506 })
2507 }
2508}
2509
2510impl serde::Serialize for WatchKind {
2511 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
2512 where
2513 S: serde::Serializer,
2514 {
2515 serializer.serialize_u8(self.bits())
2516 }
2517}
2518
2519#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2520pub struct PublishDiagnosticsParams {
2521 pub uri: Uri,
2523
2524 pub diagnostics: Vec<Diagnostic>,
2526
2527 #[serde(skip_serializing_if = "Option::is_none")]
2529 pub version: Option<i32>,
2530}
2531
2532impl PublishDiagnosticsParams {
2533 pub fn new(
2534 uri: Uri,
2535 diagnostics: Vec<Diagnostic>,
2536 version: Option<i32>,
2537 ) -> PublishDiagnosticsParams {
2538 PublishDiagnosticsParams {
2539 uri,
2540 diagnostics,
2541 version,
2542 }
2543 }
2544}
2545
2546#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Clone)]
2547#[serde(untagged)]
2548pub enum Documentation {
2549 String(String),
2550 MarkupContent(MarkupContent),
2551}
2552
2553#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2564#[serde(untagged)]
2565pub enum MarkedString {
2566 String(String),
2567 LanguageString(LanguageString),
2568}
2569
2570#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2571pub struct LanguageString {
2572 pub language: String,
2573 pub value: String,
2574}
2575
2576impl MarkedString {
2577 pub fn from_markdown(markdown: String) -> MarkedString {
2578 MarkedString::String(markdown)
2579 }
2580
2581 pub fn from_language_code(language: String, code_block: String) -> MarkedString {
2582 MarkedString::LanguageString(LanguageString {
2583 language,
2584 value: code_block,
2585 })
2586 }
2587}
2588
2589#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2590#[serde(rename_all = "camelCase")]
2591pub struct GotoDefinitionParams {
2592 #[serde(flatten)]
2593 pub text_document_position_params: TextDocumentPositionParams,
2594
2595 #[serde(flatten)]
2596 pub work_done_progress_params: WorkDoneProgressParams,
2597
2598 #[serde(flatten)]
2599 pub partial_result_params: PartialResultParams,
2600
2601 #[serde(skip_serializing_if = "Option::is_none")]
2602 pub context: Option<serde_json::Value>,
2603}
2604
2605#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
2607#[serde(untagged)]
2608pub enum GotoDefinitionResponse {
2609 Scalar(Location),
2610 Array(Vec<Location>),
2611 Link(Vec<LocationLink>),
2612}
2613
2614impl From<Location> for GotoDefinitionResponse {
2615 fn from(location: Location) -> Self {
2616 GotoDefinitionResponse::Scalar(location)
2617 }
2618}
2619
2620impl From<Vec<Location>> for GotoDefinitionResponse {
2621 fn from(locations: Vec<Location>) -> Self {
2622 GotoDefinitionResponse::Array(locations)
2623 }
2624}
2625
2626impl From<Vec<LocationLink>> for GotoDefinitionResponse {
2627 fn from(locations: Vec<LocationLink>) -> Self {
2628 GotoDefinitionResponse::Link(locations)
2629 }
2630}
2631
2632#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize)]
2633pub struct ExecuteCommandParams {
2634 pub command: String,
2636 #[serde(default)]
2638 pub arguments: Vec<Value>,
2639
2640 #[serde(flatten)]
2641 pub work_done_progress_params: WorkDoneProgressParams,
2642}
2643
2644#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2646pub struct ExecuteCommandRegistrationOptions {
2647 pub commands: Vec<String>,
2649
2650 #[serde(flatten)]
2651 pub execute_command_options: ExecuteCommandOptions,
2652}
2653
2654#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2655#[serde(rename_all = "camelCase")]
2656pub struct ApplyWorkspaceEditParams {
2657 #[serde(skip_serializing_if = "Option::is_none")]
2661 pub label: Option<String>,
2662
2663 pub edit: WorkspaceEdit,
2665}
2666
2667#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
2668#[serde(rename_all = "camelCase")]
2669pub struct ApplyWorkspaceEditResponse {
2670 pub applied: bool,
2672
2673 #[serde(skip_serializing_if = "Option::is_none")]
2678 pub failure_reason: Option<String>,
2679
2680 #[serde(skip_serializing_if = "Option::is_none")]
2684 pub failed_change: Option<u32>,
2685}
2686
2687#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Clone)]
2693#[serde(rename_all = "lowercase")]
2694pub enum MarkupKind {
2695 PlainText,
2697 Markdown,
2699}
2700
2701#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Clone)]
2725pub struct MarkupContent {
2726 pub kind: MarkupKind,
2727 pub value: String,
2728}
2729
2730#[derive(Debug, Eq, PartialEq, Default, Clone)]
2731pub struct PartialResultParams {
2732 pub partial_result_token: Option<ProgressToken>,
2733 pub is_partial_result_token_null: bool,
2734}
2735
2736impl serde::Serialize for PartialResultParams {
2737 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
2738 where
2739 S: serde::Serializer,
2740 {
2741 use serde::ser::SerializeStruct;
2742 if self.is_partial_result_token_null {
2743 let mut state = serializer.serialize_struct("PartialResultParams", 1)?;
2744 state.serialize_field("partialResultToken", &serde_json::Value::Null)?;
2745 state.end()
2746 } else if let Some(ref token) = self.partial_result_token {
2747 let mut state = serializer.serialize_struct("PartialResultParams", 1)?;
2748 state.serialize_field("partialResultToken", token)?;
2749 state.end()
2750 } else {
2751 let state = serializer.serialize_struct("PartialResultParams", 0)?;
2752 state.end()
2753 }
2754 }
2755}
2756
2757#[derive(Clone, Debug, Serialize)]
2758pub enum NullableValue {
2759 Missing,
2760 Null,
2761 Value(serde_json::Value),
2762}
2763
2764impl<'de> de::Deserialize<'de> for NullableValue {
2765 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2766 where
2767 D: de::Deserializer<'de>,
2768 {
2769 let val = serde_json::Value::deserialize(deserializer)?;
2770 match val {
2771 serde_json::Value::Null => Ok(NullableValue::Null),
2772 other => Ok(NullableValue::Value(other)),
2773 }
2774 }
2775}
2776
2777fn nullable_value_missing() -> NullableValue {
2778 NullableValue::Missing
2779}
2780
2781impl<'de> de::Deserialize<'de> for PartialResultParams {
2782 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2783 where
2784 D: de::Deserializer<'de>,
2785 {
2786 #[derive(Deserialize)]
2787 #[serde(rename_all = "camelCase")]
2788 struct RawParams {
2789 #[serde(default = "nullable_value_missing")]
2790 partial_result_token: NullableValue,
2791 }
2792 let raw_val = serde_json::Value::deserialize(deserializer)?;
2793 let raw: RawParams = serde_json::from_value(raw_val).unwrap_or(RawParams {
2794 partial_result_token: NullableValue::Missing,
2795 });
2796 let mut token = None;
2797 let mut is_null = false;
2798 match raw.partial_result_token {
2799 NullableValue::Missing => {}
2800 NullableValue::Null => {
2801 is_null = true;
2802 }
2803 NullableValue::Value(val) => match val {
2804 serde_json::Value::Number(n) => {
2805 if let Some(i) = n.as_i64() {
2806 token = Some(ProgressToken::Number(i as i32));
2807 }
2808 }
2809 serde_json::Value::String(s) => {
2810 token = Some(ProgressToken::String(s));
2811 }
2812 _ => {}
2813 },
2814 }
2815
2816 Ok(PartialResultParams {
2817 partial_result_token: token,
2818 is_partial_result_token_null: is_null,
2819 })
2820 }
2821}
2822
2823#[derive(Eq, PartialEq, Clone, Deserialize, Serialize)]
2827#[serde(transparent)]
2828pub struct SymbolTag(i32);
2829lsp_enum! {
2830impl SymbolTag {
2831 pub const DEPRECATED: SymbolTag = SymbolTag(1);
2833}
2834}
2835
2836#[cfg(test)]
2837mod tests {
2838 use serde::{Deserialize, Serialize};
2839
2840 use super::*;
2841
2842 pub(crate) fn test_serialization<SER>(ms: &SER, expected: &str)
2843 where
2844 SER: Serialize + for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug,
2845 {
2846 let json_str = serde_json::to_string(ms).unwrap();
2847 assert_eq!(&json_str, expected);
2848 let deserialized: SER = serde_json::from_str(&json_str).unwrap();
2849 assert_eq!(&deserialized, ms);
2850 }
2851
2852 pub(crate) fn test_deserialization<T>(json: &str, expected: &T)
2853 where
2854 T: for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug,
2855 {
2856 let value = serde_json::from_str::<T>(json).unwrap();
2857 assert_eq!(&value, expected);
2858 }
2859
2860 #[test]
2861 fn one_of() {
2862 test_serialization(&OneOf::<bool, ()>::Left(true), r#"true"#);
2863 test_serialization(&OneOf::<String, ()>::Left("abcd".into()), r#""abcd""#);
2864 test_serialization(
2865 &OneOf::<String, WorkDoneProgressOptions>::Right(WorkDoneProgressOptions {
2866 work_done_progress: Some(false),
2867 }),
2868 r#"{"workDoneProgress":false}"#,
2869 );
2870 }
2871
2872 #[test]
2873 fn number_or_string() {
2874 test_serialization(&NumberOrString::Number(123), r#"123"#);
2875
2876 test_serialization(&NumberOrString::String("abcd".into()), r#""abcd""#);
2877 }
2878
2879 #[test]
2880 fn marked_string() {
2881 test_serialization(&MarkedString::from_markdown("xxx".into()), r#""xxx""#);
2882
2883 test_serialization(
2884 &MarkedString::from_language_code("lang".into(), "code".into()),
2885 r#"{"language":"lang","value":"code"}"#,
2886 );
2887 }
2888
2889 #[test]
2890 fn language_string() {
2891 test_serialization(
2892 &LanguageString {
2893 language: "LL".into(),
2894 value: "VV".into(),
2895 },
2896 r#"{"language":"LL","value":"VV"}"#,
2897 );
2898 }
2899
2900 #[test]
2901 fn workspace_edit() {
2902 test_serialization(
2903 &WorkspaceEdit {
2904 changes: Some(vec![].into_iter().collect()),
2905 document_changes: None,
2906 ..Default::default()
2907 },
2908 r#"{"changes":{}}"#,
2909 );
2910
2911 test_serialization(
2912 &WorkspaceEdit {
2913 changes: None,
2914 document_changes: None,
2915 ..Default::default()
2916 },
2917 r#"{}"#,
2918 );
2919
2920 test_serialization(
2921 &WorkspaceEdit {
2922 changes: Some(
2923 vec![("file://test".parse().unwrap(), vec![])]
2924 .into_iter()
2925 .collect(),
2926 ),
2927 document_changes: None,
2928 ..Default::default()
2929 },
2930 r#"{"changes":{"file://test":[]}}"#,
2931 );
2932 }
2933
2934 #[test]
2935 fn root_uri_can_be_missing() {
2936 serde_json::from_str::<InitializeParams>(r#"{ "capabilities": {} }"#).unwrap();
2937 }
2938
2939 #[test]
2940 fn test_watch_kind() {
2941 test_serialization(&WatchKind::Create, "1");
2942 test_serialization(&(WatchKind::Create | WatchKind::Change), "3");
2943 test_serialization(
2944 &(WatchKind::Create | WatchKind::Change | WatchKind::Delete),
2945 "7",
2946 );
2947 }
2948
2949 #[test]
2950 fn test_resource_operation_kind() {
2951 test_serialization(
2952 &vec![
2953 ResourceOperationKind::Create,
2954 ResourceOperationKind::Rename,
2955 ResourceOperationKind::Delete,
2956 ],
2957 r#"["create","rename","delete"]"#,
2958 );
2959 }
2960}
2961
2962pub mod base_spec;
2964pub use base_spec::*;
2965
2966pub mod open_set_types;
2968pub use open_set_types::*;
2969
2970#[allow(unused_imports)]
2972pub mod agent1_inline;
2973#[allow(unused_imports)]
2974pub use agent1_inline::*;
2975#[allow(unused_imports)]
2976pub mod agent2_td_content;
2977#[allow(unused_imports)]
2978pub use agent2_td_content::*;
2979#[allow(unused_imports)]
2980pub mod agent3_ranges_format;
2981#[allow(unused_imports)]
2982pub use agent3_ranges_format::*;
2983#[allow(unused_imports)]
2984pub mod agent4_folding_refresh;
2985#[allow(unused_imports)]
2986pub use agent4_folding_refresh::*;
2987#[allow(unused_imports)]
2988pub mod agent5_notebook_sync;
2989#[allow(unused_imports)]
2990pub use agent5_notebook_sync::*;
2991#[allow(unused_imports)]
2992pub mod agent6_cell_diag;
2993#[allow(unused_imports)]
2994pub use agent6_cell_diag::*;
2995#[allow(unused_imports)]
2996pub mod agent7_code_action_ext;
2997#[allow(unused_imports)]
2998pub use agent7_code_action_ext::*;
2999#[allow(unused_imports)]
3000pub mod agent8_snippet_edit;
3001#[allow(unused_imports)]
3002pub use agent8_snippet_edit::*;
3003#[allow(unused_imports)]
3004pub mod agent9_completion_ext;
3005#[allow(unused_imports)]
3006pub use agent9_completion_ext::*;
3007#[allow(unused_imports)]
3008pub mod agent10_misc_ext;
3009#[allow(unused_imports)]
3010pub use agent10_misc_ext::*;
3011
3012pub use agent6_cell_diag::{
3014 NotebookCellDiagnosticReport, NotebookDiagnosticClientCapabilities, NotebookDiagnosticOptions,
3015 NotebookDiagnosticParams, NotebookDiagnosticRegistrationOptions, NotebookDiagnosticReport,
3016 NotebookDiagnosticReportPartialResult, NotebookDiagnosticRequest,
3017 NotebookDocumentDiagnosticReport,
3018};
3019#[cfg(feature = "proposed")]
3020pub use code_action::CodeActionTag;
3021pub use code_action::{
3022 CodeAction, CodeActionClientCapabilities, CodeActionContext, CodeActionKind,
3023 CodeActionKindDocumentation, CodeActionKindLiteralSupport, CodeActionLiteralSupport,
3024 CodeActionOptions, CodeActionOrCommand, CodeActionParams, CodeActionResponse,
3025};
3026pub use completion::{
3027 CompletionList, CompletionListItemDefaults, CompletionListItemDefaultsEditRange,
3028};
3029#[cfg(feature = "proposed")]
3030pub use inline_completion::{
3031 InlineCompletionClientCapabilities, InlineCompletionContext, InlineCompletionItem,
3032 InlineCompletionList, InlineCompletionOptions, InlineCompletionParams,
3033 InlineCompletionRegistrationOptions, InlineCompletionResponse, InlineCompletionTriggerKind,
3034 SelectedCompletionInfo,
3035};
3036pub use notebook::{
3037 DidChangeNotebookDocumentParams, DidCloseNotebookDocumentParams, DidOpenNotebookDocumentParams,
3038 DidSaveNotebookDocumentParams, ExecutionSummary, Notebook, NotebookCell,
3039 NotebookCellArrayChange, NotebookCellKind, NotebookCellSelector,
3040 NotebookCellTextDocumentFilter, NotebookDocument, NotebookDocumentCellChange,
3041 NotebookDocumentCellChangeStructure, NotebookDocumentChangeEvent,
3042 NotebookDocumentClientCapabilities, NotebookDocumentFilter, NotebookDocumentIdentifier,
3043 NotebookDocumentSyncClientCapabilities, NotebookDocumentSyncOptions,
3044 NotebookDocumentSyncRegistrationOptions, NotebookSelector, VersionedNotebookDocumentIdentifier,
3045};