From a0b9df0e29cd6da4f00bb139bc6db8924ae3adb1 Mon Sep 17 00:00:00 2001 From: Franklin Delehelle Date: Thu, 16 Feb 2023 15:52:03 +0000 Subject: [PATCH] Add support for Newick tree files --- build.rs | 5 +++++ src/parse/guess_language.rs | 3 +++ src/parse/tree_sitter_parser.rs | 15 +++++++++++++++ vendored_parsers/highlights/newick.scm | 1 + vendored_parsers/tree-sitter-newick-src | 1 + 5 files changed, 25 insertions(+) create mode 120000 vendored_parsers/highlights/newick.scm create mode 120000 vendored_parsers/tree-sitter-newick-src diff --git a/build.rs b/build.rs index 58b683e0e..7bf0ed688 100644 --- a/build.rs +++ b/build.rs @@ -235,6 +235,11 @@ fn main() { src_dir: "vendored_parsers/tree-sitter-make-src", extra_files: vec![], }, + TreeSitterParser { + name: "tree-sitter-newick", + src_dir: "vendored_parsers/tree-sitter-newick-src", + extra_files: vec![], + }, TreeSitterParser { name: "tree-sitter-nix", src_dir: "vendored_parsers/tree-sitter-nix-src", diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index 60fe0f320..211324f49 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -48,6 +48,7 @@ pub enum Language { Kotlin, Lua, Make, + Newick, Nix, OCaml, OCamlInterface, @@ -102,6 +103,7 @@ pub fn language_name(language: Language) -> &'static str { Kotlin => "Kotlin", Lua => "Lua", Make => "Make", + Newick => "Newick", Nix => "Nix", OCaml => "OCaml", OCamlInterface => "OCaml Interface", @@ -195,6 +197,7 @@ pub const LANG_EXTENSIONS: &[(Language, &[&str])] = &[ (Kotlin, &["kt", "ktm", "kts"]), (Lua, &["lua"]), (Make, &["mak", "d", "make", "makefile", "mk", "mkfile"]), + (Newick, &["nhx", "nwk", "nh"]), (Nix, &["nix"]), (OCaml, &["ml"]), (OCamlInterface, &["mli"]), diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index a26b38cfb..5ac40e6c1 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -91,6 +91,7 @@ extern "C" { fn tree_sitter_kotlin() -> ts::Language; fn tree_sitter_lua() -> ts::Language; fn tree_sitter_make() -> ts::Language; + fn tree_sitter_newick() -> ts::Language; fn tree_sitter_nix() -> ts::Language; fn tree_sitter_ocaml() -> ts::Language; fn tree_sitter_ocaml_interface() -> ts::Language; @@ -619,6 +620,20 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig { }], } } + Newick => { + let language = unsafe { tree_sitter_newick() }; + TreeSitterConfig { + language, + atom_nodes: vec![].into_iter().collect(), + delimiter_tokens: vec![("(", ")")], + highlight_query: ts::Query::new( + language, + include_str!("../../vendored_parsers/highlights/newick.scm"), + ) + .unwrap(), + sub_languages: vec![], + } + } Nix => { let language = unsafe { tree_sitter_nix() }; TreeSitterConfig { diff --git a/vendored_parsers/highlights/newick.scm b/vendored_parsers/highlights/newick.scm new file mode 120000 index 000000000..c78e8aa92 --- /dev/null +++ b/vendored_parsers/highlights/newick.scm @@ -0,0 +1 @@ +../tree-sitter-newick/queries/highlights.scm \ No newline at end of file diff --git a/vendored_parsers/tree-sitter-newick-src b/vendored_parsers/tree-sitter-newick-src new file mode 120000 index 000000000..278a0c330 --- /dev/null +++ b/vendored_parsers/tree-sitter-newick-src @@ -0,0 +1 @@ +tree-sitter-newick/src \ No newline at end of file