cairo-language-server 2.20.0

The Cairo Language Server
Documentation
use cairo_language_server::lsp::ext::{ProvideVirtualFile, ProvideVirtualFileRequest};
use lsp_types::{Diagnostic, Url};
use serde::Serialize;

use crate::support::MockClient;
use crate::support::cursor::text_chunk_at_range;

#[derive(Debug, Serialize)]
pub struct DiagnosticsWithUrl {
    pub url: String,
    pub diagnostics: Vec<DiagnosticAndRelatedInfo>,
}

#[derive(Debug, Serialize)]
pub struct DiagnosticAndRelatedInfo {
    pub related_code: String,
    pub diagnostic: Diagnostic,
}

pub fn get_related_diagnostic_code(
    client: &mut MockClient,
    diagnostic: &Diagnostic,
    file_url: &Url,
) -> String {
    let fixture = client.as_ref();
    let file_content = fixture.maybe_read_file(file_url.path()).unwrap_or_else(|| {
        client
            .send_request::<ProvideVirtualFile>(ProvideVirtualFileRequest { uri: file_url.clone() })
            .content
            .unwrap()
    });
    text_chunk_at_range(file_content, diagnostic.range)
}