// ---
// tags: trident, rust
// crystal-type: source
// crystal-domain: comp
// ---
use zed_extension_api::{self as zed, Result};

struct TridentExtension;

impl zed::Extension for TridentExtension {
    fn new() -> Self {
        Self
    }

    fn language_server_command(
        &mut self,
        _language_server_id: &zed::LanguageServerId,
        worktree: &zed::Worktree,
    ) -> Result<zed::Command> {
        let env = worktree.shell_env();
        let cargo_bin = env
            .iter()
            .find(|(k, _)| k == "HOME")
            .map(|(_, home)| format!("{}/.cargo/bin/trident-lsp", home));

        // Prefer the installed release binary โ€” worktree.which() can find
        // target/debug/trident-lsp when editing the trident repo itself,
        // which is a debug build and may fail to spawn.
        if let Some(ref path) = cargo_bin {
            return Ok(zed::Command {
                command: path.clone(),
                args: vec![],
                env,
            });
        }

        if let Some(path) = worktree.which("trident-lsp") {
            return Ok(zed::Command {
                command: path,
                args: vec![],
                env,
            });
        }

        Err("trident-lsp not found. Run: cargo install --path <trident-repo>".into())
    }
}

zed::register_extension!(TridentExtension);

Dimensions

bbg/src/lib.rs
zheng/src/lib.rs
lens/src/lib.rs
kuro/rs/lib.rs
nox/rs/lib.rs
trident/src/lib.rs
nebu/rs/lib.rs
optica/src/lib.rs
kuro/wgsl/src/lib.rs
jali/wgsl/src/lib.rs
rs/macros/src/lib.rs
trop/rs/src/lib.rs
cyb/src-tauri/src/lib.rs
trop/wgsl/src/lib.rs
genies/rs/src/lib.rs
genies/wgsl/src/lib.rs
nebu/wgsl/src/lib.rs
hemera/rs/src/lib.rs
hemera/wgsl/src/lib.rs
jali/rs/src/lib.rs
rs/core/src/lib.rs
rs/mir-format/src/lib.rs
cw-cyber/contracts/cw-cyber-gift/src/lib.rs
cw-cyber/contracts/hub-channels/src/lib.rs
cw-cyber/packages/hub-base/src/lib.rs
cw-cyber/contracts/std-test/src/lib.rs
cw-cyber/contracts/hub-skills/src/lib.rs
cw-cyber/contracts/hub-tokens/src/lib.rs
cw-cyber/contracts/cw-cyber-passport/src/lib.rs
cw-cyber/contracts/litium-core/src/lib.rs
cw-cyber/contracts/litium-mine/src/lib.rs
cw-cyber/contracts/litium-stake/src/lib.rs
cw-cyber/packages/cyber-std/src/lib.rs
cw-cyber/contracts/graph-filter/src/lib.rs
cw-cyber/contracts/cw-cyber-subgraph/src/lib.rs
rs/tests/macro-integration/src/lib.rs
cw-cyber/contracts/hub-networks/src/lib.rs
cw-cyber/packages/cyber-std-test/src/lib.rs
cw-cyber/contracts/litium-wrap/src/lib.rs
cw-cyber/contracts/hub-libs/src/lib.rs
cw-cyber/contracts/hub-protocols/src/lib.rs
cw-cyber/contracts/cybernet/src/lib.rs
cw-cyber/contracts/litium-refer/src/lib.rs

Local Graph