use serde::{Deserialize, Serialize};
use tatara_lisp::DeriveTataraDomain;
#[derive(DeriveTataraDomain, Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[tatara(keyword = "deflsp")]
pub struct LspServerSpec {
pub name: String,
pub command: String,
#[serde(default)]
pub args: Vec<String>,
#[serde(default)]
pub filetypes: Vec<String>,
#[serde(default)]
pub root_markers: Vec<String>,
#[serde(default)]
pub init_options: String,
#[serde(default)]
pub manual_only: bool,
}
pub const KNOWN_SERVERS: &[&str] = &[
"rust-analyzer",
"typescript-language-server",
"pyright",
"gopls",
"lua-language-server",
"nil", "nixd",
"clangd",
"zls",
"bash-language-server",
"yaml-language-server",
"jsonls",
"tailwindcss-language-server",
"svelte-language-server",
"taplo", "marksman",
"terraformls",
"ansiblels",
"dockerls",
"graphql-language-service-cli",
"elmls",
"ocamllsp",
"ruff-lsp",
"solargraph",
"prismals",
];
#[must_use]
pub fn is_known_server(name: &str) -> bool {
KNOWN_SERVERS.iter().any(|s| *s == name)
}