Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions extension.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ languages = ["Ruby"]
name = "Herb"
languages = ["HTML+ERB"]

[language_servers.kanayago]
name = "Kanayago"
languages = ["Ruby"]

[grammars.ruby]
repository = "https://github.com/tree-sitter/tree-sitter-ruby"
commit = "71bd32fb7607035768799732addba884a37a6210"
Expand Down
42 changes: 42 additions & 0 deletions src/language_servers/kanayago.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
use super::{language_server::WorktreeLike, LanguageServer};

pub struct Kanayago {}

impl LanguageServer for Kanayago {
const SERVER_ID: &str = "kanayago";
const EXECUTABLE_NAME: &str = "kanayago";
const GEM_NAME: &str = "kanayago";

fn get_executable_args<T: WorktreeLike>(&self, _worktree: &T) -> Vec<String> {
vec!["--lsp".to_string()]
}
}

impl Kanayago {
pub fn new() -> Self {
Self {}
}
}

#[cfg(test)]
mod tests {
use crate::language_servers::{language_server::FakeWorktree, Kanayago, LanguageServer};

#[test]
fn test_server_id() {
assert_eq!(Kanayago::SERVER_ID, "kanayago");
}

#[test]
fn test_executable_name() {
assert_eq!(Kanayago::EXECUTABLE_NAME, "kanayago");
}

#[test]
fn test_executable_args() {
let kanayago = Kanayago::new();
let mock_worktree = FakeWorktree::new("/path/to/project".to_string());

assert_eq!(kanayago.get_executable_args(&mock_worktree), vec!["--lsp"]);
}
}
2 changes: 2 additions & 0 deletions src/language_servers/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
mod herb;
mod kanayago;
mod language_server;
mod rubocop;
mod ruby_lsp;
Expand All @@ -7,6 +8,7 @@ mod sorbet;
mod steep;

pub use herb::Herb;
pub use kanayago::Kanayago;
pub use language_server::LanguageServer;
pub use rubocop::Rubocop;
pub use ruby_lsp::RubyLsp;
Expand Down
9 changes: 8 additions & 1 deletion src/ruby.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ use std::{collections::HashMap, path::PathBuf};
use bundler::Bundler;
use command_executor::RealCommandExecutor;
use gemset::{versioned_gem_home, Gemset};
use language_servers::{Herb, LanguageServer, Rubocop, RubyLsp, Solargraph, Sorbet, Steep};
use language_servers::{
Herb, Kanayago, LanguageServer, Rubocop, RubyLsp, Solargraph, Sorbet, Steep,
};
use serde::{Deserialize, Serialize};
use zed_extension_api::{
self as zed, resolve_tcp_template, DebugAdapterBinary, DebugConfig, DebugRequest,
Expand All @@ -24,6 +26,7 @@ struct RubyExtension {
sorbet: Option<Sorbet>,
steep: Option<Steep>,
herb: Option<Herb>,
kanayago: Option<Kanayago>,
}

#[derive(Serialize, Deserialize)]
Expand Down Expand Up @@ -73,6 +76,10 @@ impl zed::Extension for RubyExtension {
let herb = self.herb.get_or_insert_with(Herb::new);
herb.language_server_command(language_server_id, worktree)
}
Kanayago::SERVER_ID => {
let kanayago = self.kanayago.get_or_insert_with(Kanayago::new);
kanayago.language_server_command(language_server_id, worktree)
}
language_server_id => Err(format!("unknown language server: {language_server_id}")),
}
}
Expand Down