A simple CPU rendered GUI IDE experience.
Diffstat (limited to 'src/edi/lsp_impl.rs')
| -rw-r--r-- | src/edi/lsp_impl.rs | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/edi/lsp_impl.rs b/src/edi/lsp_impl.rs index d0e506e..1498458 100644 --- a/src/edi/lsp_impl.rs +++ b/src/edi/lsp_impl.rs @@ -32,9 +32,10 @@ pub struct Requests { (), RequestError<SignatureHelpRequest>, >, // vo, lines - // #[serde(serialize_with = "serialize_tokens")] - // #[serde(deserialize_with = "deserialize_tokens")] - #[serde(skip)] + #[serde(serialize_with = "serialize_tokens")] + #[serde(deserialize_with = "deserialize_tokens")] + #[serde(default)] + // #[serde(skip)] pub semantic_tokens: Rq< Box<[SemanticToken]>, Box<[SemanticToken]>, @@ -47,7 +48,7 @@ pub struct Requests { (), RequestError<DocumentDiagnosticRequest>, >, - #[serde(skip)] + #[serde(default)] pub inlay: Rq< Vec<InlayHint>, Vec<InlayHint>, @@ -70,6 +71,34 @@ pub struct Requests { #[serde(skip)] pub git_diff: Rq<imara_diff::Diff, imara_diff::Diff, (), ()>, } +pub fn deserialize_tokens<'de, D: serde::Deserializer<'de>>( + ser: D, +) -> Result< + Rq< + Box<[SemanticToken]>, + Box<[SemanticToken]>, + (), + RequestError<SemanticTokensFullRequest>, + >, + D::Error, +> { + SemanticToken::deserialize_tokens_opt(ser) + .map(|x| Rq { result: x.map(Into::into), request: None }) +} +pub fn serialize_tokens<S: serde::Serializer>( + s: &Rq< + Box<[SemanticToken]>, + Box<[SemanticToken]>, + (), + RequestError<SemanticTokensFullRequest>, + >, + ser: S, +) -> Result<S::Ok, S::Error> { + SemanticToken::serialize_tokens_opt( + &s.result.clone().map(|x| x.to_vec()), + ser, + ) +} impl crate::edi::Editor { pub fn poll(&mut self) { let Some((l, ..)) = self.lsp else { return }; |