unsafe-review-cli 0.3.6

CLI adapter for unsafe-review
Documentation
use std::path::PathBuf;

use tower_lsp_server::ls_types::{
    CodeActionProviderCapability, ExecuteCommandOptions, InitializeParams, ServerCapabilities,
    TextDocumentSyncCapability, TextDocumentSyncKind,
};

use super::uri::uri_to_path;
use super::{CMD_OPEN_TEST, CMD_PACKET, CMD_REFRESH, CMD_WITNESS_COMMAND, CMD_WITNESS_ROUTE};

pub(super) fn server_capabilities() -> ServerCapabilities {
    ServerCapabilities {
        text_document_sync: Some(TextDocumentSyncCapability::Kind(TextDocumentSyncKind::FULL)),
        hover_provider: Some(tower_lsp_server::ls_types::HoverProviderCapability::Simple(
            true,
        )),
        code_action_provider: Some(CodeActionProviderCapability::Simple(true)),
        execute_command_provider: Some(ExecuteCommandOptions {
            commands: vec![
                CMD_REFRESH.into(),
                CMD_PACKET.into(),
                CMD_WITNESS_ROUTE.into(),
                CMD_WITNESS_COMMAND.into(),
                CMD_OPEN_TEST.into(),
            ],
            work_done_progress_options: Default::default(),
        }),
        ..Default::default()
    }
}

pub(super) fn root_from_initialize_params(params: &InitializeParams) -> Option<PathBuf> {
    if let Some(folder) = params
        .workspace_folders
        .as_ref()
        .and_then(|folders| folders.first())
        && let Some(path) = uri_to_path(&folder.uri)
    {
        return Some(path);
    }
    deprecated_root_uri(params)
}

#[expect(
    deprecated,
    reason = "root_uri remains the fallback for clients without workspaceFolders"
)]
fn deprecated_root_uri(params: &InitializeParams) -> Option<PathBuf> {
    params.root_uri.as_ref().and_then(uri_to_path)
}