From 618925d8efa97aa7a8136ce0b7e9f20479f5052e Mon Sep 17 00:00:00 2001 From: Maciej Jur Date: Tue, 1 Oct 2024 21:05:35 +0200 Subject: [PATCH] treesitter: add ocaml --- Cargo.lock | 22 +++ Cargo.toml | 3 +- src/ts/configs.rs | 393 +++++++++++++++++++++++----------------------- 3 files changed, 221 insertions(+), 197 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 968222d..a58d4ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -988,6 +988,8 @@ dependencies = [ "tree-sitter-html", "tree-sitter-javascript", "tree-sitter-language", + "tree-sitter-md", + "tree-sitter-ocaml", "tree-sitter-python", "tree-sitter-regex", "tree-sitter-rust", @@ -1788,6 +1790,26 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2545046bd1473dac6c626659cc2567c6c0ff302fc8b84a56c4243378276f7f57" +[[package]] +name = "tree-sitter-md" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f968c22a01010b83fc960455ae729db08dbeb6388617d9113897cb9204b030" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-ocaml" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0534f94f006cf4d4994e964212e91d4626efcaf6769b023d3f17530399a4d6e1" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "tree-sitter-python" version = "0.23.2" diff --git a/Cargo.toml b/Cargo.toml index 72cfca2..10d923d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,8 +34,9 @@ tree-sitter-css = "0.23" tree-sitter-haskell = "0.23" tree-sitter-html = "0.23" tree-sitter-javascript = "0.23" -# tree-sitter-md = "0.2" +tree-sitter-md = "0.3" # tree-sitter-nix = { package = "npezza93-tree-sitter-nix", version = "0.0.2" } +tree-sitter-ocaml = "0.23.1" tree-sitter-python = "0.23" tree-sitter-regex = "0.23" tree-sitter-rust = "0.23" diff --git a/src/ts/configs.rs b/src/ts/configs.rs index 8133777..cca9b4f 100644 --- a/src/ts/configs.rs +++ b/src/ts/configs.rs @@ -1,25 +1,24 @@ -use std::collections::HashMap; use once_cell::sync::Lazy; +use std::collections::HashMap; use tree_sitter_highlight::HighlightConfiguration; use super::captures; - macro_rules! query { - ($path:literal) => { - include_str!(concat!( - env!("CARGO_MANIFEST_DIR"), - "/queries/", - $path, - ".scm" - )) - }; + ($path:literal) => { + include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/queries/", + $path, + ".scm" + )) + }; } macro_rules! insert { - ($_:tt $str:literal) => { - $str - }; + ($_:tt $str:literal) => { + $str + }; } macro_rules! merge { @@ -29,192 +28,194 @@ macro_rules! merge { } macro_rules! language { - ($name:expr, $lang:expr, $highlights:expr, $injections:expr, $locals:expr $(,)?) => { - ( - $name, - { - let mut config = HighlightConfiguration::new( - $lang, - $name, - $highlights, - $injections, - $locals, - ).unwrap(); - config.configure(captures::NAMES); - config - } - ) - }; + ($name:expr, $lang:expr, $highlights:expr, $injections:expr, $locals:expr $(,)?) => { + ($name, { + let mut config = + HighlightConfiguration::new($lang, $name, $highlights, $injections, $locals) + .unwrap(); + config.configure(captures::NAMES); + config + }) + }; } -static EXTENSIONS: Lazy> = Lazy::new(|| - HashMap::from([ - ("hs", "haskell"), - ("js", "javascript"), - ("md", "markdown"), - ("mdx", "markdown"), - ("py", "python"), - ("scm", "scheme"), - ("ts", "typescript"), - ("typescript", "javascript") - ]) -); - -static CONFIGS: Lazy> = Lazy::new(|| - HashMap::from([ - // ( - // "astro", - // config_for( - // tree_sitter_astro::language(), - // query!("astro/highlights"), - // query!("astro/injections"), - // "", - // ) - // ), - language!( - "css", - tree_sitter_css::LANGUAGE.into(), - tree_sitter_css::HIGHLIGHTS_QUERY, - "", - "", - ), - language!( - "haskell", - tree_sitter_haskell::LANGUAGE.into(), - tree_sitter_haskell::HIGHLIGHTS_QUERY, - tree_sitter_haskell::INJECTIONS_QUERY, - tree_sitter_haskell::LOCALS_QUERY, - ), - language!( - "html", - tree_sitter_html::LANGUAGE.into(), - "", - "", - "", - ), - language!( - "javascript", - tree_sitter_javascript::LANGUAGE.into(), - merge![ - query!("ecma/highlights"), - tree_sitter_javascript::HIGHLIGHT_QUERY, - ], - tree_sitter_javascript::INJECTIONS_QUERY, - tree_sitter_javascript::LOCALS_QUERY, - ), - language!( - "jsx", - tree_sitter_javascript::LANGUAGE.into(), - merge![ - query!("ecma/highlights"), - tree_sitter_javascript::HIGHLIGHT_QUERY, - tree_sitter_javascript::JSX_HIGHLIGHT_QUERY, - ], - tree_sitter_javascript::INJECTIONS_QUERY, - tree_sitter_javascript::LOCALS_QUERY, - ), - // language!( - // "markdown", - // tree_sitter_md::language(), - // tree_sitter_md::HIGHLIGHT_QUERY_BLOCK, - // tree_sitter_md::INJECTION_QUERY_BLOCK, - // "", - // ), - // language!( - // "markdown_inline", - // tree_sitter_md::inline_language(), - // tree_sitter_md::HIGHLIGHT_QUERY_INLINE, - // tree_sitter_md::INJECTION_QUERY_INLINE, - // "", - // ), - // language!( - // "nix", - // tree_sitter_nix::language(), - // tree_sitter_nix::HIGHLIGHTS_QUERY, - // "", - // "", - // ), - language!( - "python", - tree_sitter_python::LANGUAGE.into(), - tree_sitter_python::HIGHLIGHTS_QUERY, - "", - "", - ), - language!( - "regex", - tree_sitter_regex::LANGUAGE.into(), - tree_sitter_regex::HIGHLIGHTS_QUERY, - "", - "", - ), - language!( - "rust", - tree_sitter_rust::LANGUAGE.into(), - tree_sitter_rust::HIGHLIGHTS_QUERY, - tree_sitter_rust::INJECTIONS_QUERY, - "", - ), - // language!( - // "scss", - // tree_sitter_scss::, - // merge![ - // tree_sitter_css::HIGHLIGHTS_QUERY, - // tree_sitter_scss::HIGHLIGHTS_QUERY, - // ], - // "", - // "", - // ), - // language!( - // "query", - // tree_sitter_query::language(), - // tree_sitter_query::HIGHLIGHTS_QUERY, - // tree_sitter_query::INJECTIONS_QUERY, - // "", - // ), - // language!( - // "toml", - // tree_sitter_toml_ng::language(), - // tree_sitter_toml_ng::HIGHLIGHTS_QUERY, - // "", - // "", - // ), - language!( - "typescript", - tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into(), - merge![ - query!("ecma/highlights"), - tree_sitter_javascript::HIGHLIGHT_QUERY, - tree_sitter_typescript::HIGHLIGHTS_QUERY, - ], - tree_sitter_javascript::INJECTIONS_QUERY, - merge![ - tree_sitter_javascript::LOCALS_QUERY, - tree_sitter_typescript::LOCALS_QUERY, - ] - ), - language!( - "tsx", - tree_sitter_typescript::LANGUAGE_TSX.into(), - merge![ - query!("ecma/highlights"), - tree_sitter_javascript::HIGHLIGHT_QUERY, - tree_sitter_javascript::JSX_HIGHLIGHT_QUERY, - tree_sitter_typescript::HIGHLIGHTS_QUERY, - ], - tree_sitter_javascript::INJECTIONS_QUERY, - merge![ - tree_sitter_javascript::LOCALS_QUERY, - tree_sitter_typescript::LOCALS_QUERY, - ], - ), - ]) -); +static EXTENSIONS: Lazy> = Lazy::new(|| { + HashMap::from([ + ("hs", "haskell"), + ("js", "javascript"), + ("md", "markdown"), + ("mdx", "markdown"), + ("ml", "ocaml"), + ("mli", "ocaml_interface"), + ("py", "python"), + ("scm", "scheme"), + ("ts", "typescript"), + ("typescript", "javascript"), + ]) +}); +static CONFIGS: Lazy> = Lazy::new(|| { + HashMap::from([ + // ( + // "astro", + // config_for( + // tree_sitter_astro::language(), + // query!("astro/highlights"), + // query!("astro/injections"), + // "", + // ) + // ), + language!( + "css", + tree_sitter_css::LANGUAGE.into(), + tree_sitter_css::HIGHLIGHTS_QUERY, + "", + "", + ), + language!( + "haskell", + tree_sitter_haskell::LANGUAGE.into(), + tree_sitter_haskell::HIGHLIGHTS_QUERY, + tree_sitter_haskell::INJECTIONS_QUERY, + tree_sitter_haskell::LOCALS_QUERY, + ), + language!("html", tree_sitter_html::LANGUAGE.into(), "", "", "",), + language!( + "javascript", + tree_sitter_javascript::LANGUAGE.into(), + merge![ + query!("ecma/highlights"), + tree_sitter_javascript::HIGHLIGHT_QUERY, + ], + tree_sitter_javascript::INJECTIONS_QUERY, + tree_sitter_javascript::LOCALS_QUERY, + ), + language!( + "jsx", + tree_sitter_javascript::LANGUAGE.into(), + merge![ + query!("ecma/highlights"), + tree_sitter_javascript::HIGHLIGHT_QUERY, + tree_sitter_javascript::JSX_HIGHLIGHT_QUERY, + ], + tree_sitter_javascript::INJECTIONS_QUERY, + tree_sitter_javascript::LOCALS_QUERY, + ), + language!( + "markdown", + tree_sitter_md::LANGUAGE.into(), + tree_sitter_md::HIGHLIGHT_QUERY_BLOCK, + tree_sitter_md::INJECTION_QUERY_BLOCK, + "", + ), + language!( + "markdown_inline", + tree_sitter_md::INLINE_LANGUAGE.into(), + tree_sitter_md::HIGHLIGHT_QUERY_INLINE, + tree_sitter_md::INJECTION_QUERY_INLINE, + "", + ), + // language!( + // "nix", + // tree_sitter_nix::language(), + // tree_sitter_nix::HIGHLIGHTS_QUERY, + // "", + // "", + // ), + language!( + "ocaml", + tree_sitter_ocaml::LANGUAGE_OCAML.into(), + tree_sitter_ocaml::HIGHLIGHTS_QUERY, + tree_sitter_ocaml::LOCALS_QUERY, + "", + ), + language!( + "ocaml_interface", + tree_sitter_ocaml::LANGUAGE_OCAML_INTERFACE.into(), + tree_sitter_ocaml::HIGHLIGHTS_QUERY, + tree_sitter_ocaml::LOCALS_QUERY, + "", + ), + language!( + "python", + tree_sitter_python::LANGUAGE.into(), + tree_sitter_python::HIGHLIGHTS_QUERY, + "", + "", + ), + language!( + "regex", + tree_sitter_regex::LANGUAGE.into(), + tree_sitter_regex::HIGHLIGHTS_QUERY, + "", + "", + ), + language!( + "rust", + tree_sitter_rust::LANGUAGE.into(), + tree_sitter_rust::HIGHLIGHTS_QUERY, + tree_sitter_rust::INJECTIONS_QUERY, + "", + ), + // language!( + // "scss", + // tree_sitter_scss::, + // merge![ + // tree_sitter_css::HIGHLIGHTS_QUERY, + // tree_sitter_scss::HIGHLIGHTS_QUERY, + // ], + // "", + // "", + // ), + // language!( + // "query", + // tree_sitter_query::language(), + // tree_sitter_query::HIGHLIGHTS_QUERY, + // tree_sitter_query::INJECTIONS_QUERY, + // "", + // ), + // language!( + // "toml", + // tree_sitter_toml_ng::language(), + // tree_sitter_toml_ng::HIGHLIGHTS_QUERY, + // "", + // "", + // ), + language!( + "typescript", + tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into(), + merge![ + query!("ecma/highlights"), + tree_sitter_javascript::HIGHLIGHT_QUERY, + tree_sitter_typescript::HIGHLIGHTS_QUERY, + ], + tree_sitter_javascript::INJECTIONS_QUERY, + merge![ + tree_sitter_javascript::LOCALS_QUERY, + tree_sitter_typescript::LOCALS_QUERY, + ] + ), + language!( + "tsx", + tree_sitter_typescript::LANGUAGE_TSX.into(), + merge![ + query!("ecma/highlights"), + tree_sitter_javascript::HIGHLIGHT_QUERY, + tree_sitter_javascript::JSX_HIGHLIGHT_QUERY, + tree_sitter_typescript::HIGHLIGHTS_QUERY, + ], + tree_sitter_javascript::INJECTIONS_QUERY, + merge![ + tree_sitter_javascript::LOCALS_QUERY, + tree_sitter_typescript::LOCALS_QUERY, + ], + ), + ]) +}); pub fn get_config(name: &str) -> Option<&'static HighlightConfiguration> { - match EXTENSIONS.get(name) { - Some(name) => CONFIGS.get(name), - None => CONFIGS.get(name), - } + match EXTENSIONS.get(name) { + Some(name) => CONFIGS.get(name), + None => CONFIGS.get(name), + } }