From ca51348724d20ddbe935f97823bec3f7d773ac3f Mon Sep 17 00:00:00 2001 From: Marcel Date: Wed, 11 Jun 2025 16:16:31 +0200 Subject: [PATCH] fish: init --- Cargo.lock | 11 +++++++++++ Cargo.toml | 1 + src/parse/guess_language.rs | 4 ++++ src/parse/tree_sitter_parser.rs | 14 ++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index ffacadd38c..1174a09abd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -289,6 +289,7 @@ dependencies = [ "tree-sitter-elixir", "tree-sitter-elm", "tree-sitter-erlang", + "tree-sitter-fish", "tree-sitter-fsharp", "tree-sitter-gleam", "tree-sitter-go", @@ -1164,6 +1165,16 @@ dependencies = [ "tree-sitter-language", ] +[[package]] +name = "tree-sitter-fish" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014e3b299f251e9c2e372e3b5e1b0323ef21196e9aa2e90a5bc1f6130cbe8b18" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-fsharp" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 6541e170da..cf0a4965ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -90,6 +90,7 @@ tree-sitter-elisp = "1.6.1" tree-sitter-elixir = "0.3.4" tree-sitter-elm = "5.8.0" tree-sitter-erlang = "0.13.0" +tree-sitter-fish = "3.6.0" tree-sitter-fsharp = "0.1.0" tree-sitter-gleam = "1.0.0" tree-sitter-go = "0.23.4" diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index aaf1277afa..92fdd69eb2 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -35,6 +35,7 @@ pub(crate) enum Language { Elvish, EmacsLisp, Erlang, + Fish, FSharp, Gleam, Go, @@ -136,6 +137,7 @@ pub(crate) fn language_name(language: Language) -> &'static str { Elvish => "Elvish", EmacsLisp => "Emacs Lisp", Erlang => "Erlang", + Fish => "fish", FSharp => "F#", Gleam => "Gleam", Go => "Go", @@ -279,6 +281,7 @@ pub(crate) fn language_globs(language: Language) -> Vec { "rebar.config.lock", "rebar.lock", ], + Fish => &["*.fish"], FSharp => &["*.fs", "*.fsx", "*.fsi"], Gleam => &["*.gleam"], Go => &["*.go"], @@ -537,6 +540,7 @@ fn from_emacs_mode_header(src: &str) -> Option { "elm" => Elm, "elvish" => Elvish, "emacs-lisp" => EmacsLisp, + "fish" => Fish, "fsharp" => FSharp, "gleam" => Gleam, "go" => Go, diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index 48a9b215f5..e4698900af 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -375,6 +375,20 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig { sub_languages: vec![], } } + Fish => { + let language = tree_sitter_fish::language(); + + TreeSitterConfig { + language: language.clone(), + atom_nodes: ["single_quote_string", "double_quote_string"] + .into_iter() + .collect(), + delimiter_tokens: vec![("(", ")"), ("{", "}"), ("[", "]")], + highlight_query: ts::Query::new(&language, tree_sitter_fish::HIGHLIGHTS_QUERY) + .unwrap(), + sub_languages: vec![], + } + } FSharp => { let language_fn = tree_sitter_fsharp::LANGUAGE_FSHARP; let language = tree_sitter::Language::new(language_fn);