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
43 changes: 43 additions & 0 deletions src/language_servers/kanayago.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
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, LanguageServer, Kanayago};

#[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,3 +1,4 @@
mod kanayago;
mod herb;
mod language_server;
mod rubocop;
Expand All @@ -6,6 +7,7 @@ mod solargraph;
mod sorbet;
mod steep;

pub use kanayago::Kanayago;
pub use herb::Herb;
pub use language_server::LanguageServer;
pub use rubocop::Rubocop;
Expand Down
7 changes: 6 additions & 1 deletion src/ruby.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use std::{collections::HashMap, path::PathBuf};
use bundler::Bundler;
use command_executor::RealCommandExecutor;
use gemset::Gemset;
use language_servers::{Herb, LanguageServer, Rubocop, RubyLsp, Solargraph, Sorbet, Steep};
use language_servers::{Kanayago, Herb, 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 +24,7 @@ struct RubyExtension {
sorbet: Option<Sorbet>,
steep: Option<Steep>,
herb: Option<Herb>,
kanayago: Option<Kanayago>,
}

#[derive(Serialize, Deserialize)]
Expand Down Expand Up @@ -73,6 +74,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