ripr 0.3.0

Static RIPR mutation-exposure analysis for Rust workspaces
Documentation
mod actions;
mod backend;
mod capabilities;
mod diagnostics;
mod hover;
mod state;
#[cfg(test)]
mod tests;
mod uri;

use backend::Backend;
pub use diagnostics::{DiagnosticBatch, workspace_diagnostic_batches};
use tower_lsp_server::{LspService, Server};

const COPY_CONTEXT_COMMAND: &str = "ripr.copyContext";
const REFRESH_COMMAND: &str = "ripr.refresh";
const HOVER_TEXT: &str = "ripr estimates static RIPR exposure for changed Rust behavior. Run `ripr check --format json` for current findings.";

pub fn serve() -> Result<(), String> {
    let runtime = tokio::runtime::Builder::new_multi_thread()
        .enable_all()
        .build()
        .map_err(|err| format!("failed to start LSP runtime: {err}"))?;
    runtime.block_on(serve_stdio())
}

async fn serve_stdio() -> Result<(), String> {
    let root =
        std::env::current_dir().map_err(|err| format!("failed to get current dir: {err}"))?;
    let stdin = tokio::io::stdin();
    let stdout = tokio::io::stdout();
    let (service, socket) = LspService::new(|client| Backend::new(client, root.clone()));

    Server::new(stdin, stdout, socket).serve(service).await;
    Ok(())
}