treesitter: add ocaml

This commit is contained in:
Maciej Jur 2024-10-01 21:05:35 +02:00
parent be2963d931
commit 618925d8ef
Signed by: kamov
GPG key ID: 191CBFF5F72ECAFD
3 changed files with 221 additions and 197 deletions

22
Cargo.lock generated
View file

@ -988,6 +988,8 @@ dependencies = [
"tree-sitter-html", "tree-sitter-html",
"tree-sitter-javascript", "tree-sitter-javascript",
"tree-sitter-language", "tree-sitter-language",
"tree-sitter-md",
"tree-sitter-ocaml",
"tree-sitter-python", "tree-sitter-python",
"tree-sitter-regex", "tree-sitter-regex",
"tree-sitter-rust", "tree-sitter-rust",
@ -1788,6 +1790,26 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2545046bd1473dac6c626659cc2567c6c0ff302fc8b84a56c4243378276f7f57" 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]] [[package]]
name = "tree-sitter-python" name = "tree-sitter-python"
version = "0.23.2" version = "0.23.2"

View file

@ -34,8 +34,9 @@ tree-sitter-css = "0.23"
tree-sitter-haskell = "0.23" tree-sitter-haskell = "0.23"
tree-sitter-html = "0.23" tree-sitter-html = "0.23"
tree-sitter-javascript = "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-nix = { package = "npezza93-tree-sitter-nix", version = "0.0.2" }
tree-sitter-ocaml = "0.23.1"
tree-sitter-python = "0.23" tree-sitter-python = "0.23"
tree-sitter-regex = "0.23" tree-sitter-regex = "0.23"
tree-sitter-rust = "0.23" tree-sitter-rust = "0.23"

View file

@ -1,25 +1,24 @@
use std::collections::HashMap;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use std::collections::HashMap;
use tree_sitter_highlight::HighlightConfiguration; use tree_sitter_highlight::HighlightConfiguration;
use super::captures; use super::captures;
macro_rules! query { macro_rules! query {
($path:literal) => { ($path:literal) => {
include_str!(concat!( include_str!(concat!(
env!("CARGO_MANIFEST_DIR"), env!("CARGO_MANIFEST_DIR"),
"/queries/", "/queries/",
$path, $path,
".scm" ".scm"
)) ))
}; };
} }
macro_rules! insert { macro_rules! insert {
($_:tt $str:literal) => { ($_:tt $str:literal) => {
$str $str
}; };
} }
macro_rules! merge { macro_rules! merge {
@ -29,192 +28,194 @@ macro_rules! merge {
} }
macro_rules! language { macro_rules! language {
($name:expr, $lang:expr, $highlights:expr, $injections:expr, $locals:expr $(,)?) => { ($name:expr, $lang:expr, $highlights:expr, $injections:expr, $locals:expr $(,)?) => {
( ($name, {
$name, let mut config =
{ HighlightConfiguration::new($lang, $name, $highlights, $injections, $locals)
let mut config = HighlightConfiguration::new( .unwrap();
$lang, config.configure(captures::NAMES);
$name, config
$highlights, })
$injections, };
$locals,
).unwrap();
config.configure(captures::NAMES);
config
}
)
};
} }
static EXTENSIONS: Lazy<HashMap<&'static str, &'static str>> = Lazy::new(|| static EXTENSIONS: Lazy<HashMap<&'static str, &'static str>> = Lazy::new(|| {
HashMap::from([ HashMap::from([
("hs", "haskell"), ("hs", "haskell"),
("js", "javascript"), ("js", "javascript"),
("md", "markdown"), ("md", "markdown"),
("mdx", "markdown"), ("mdx", "markdown"),
("py", "python"), ("ml", "ocaml"),
("scm", "scheme"), ("mli", "ocaml_interface"),
("ts", "typescript"), ("py", "python"),
("typescript", "javascript") ("scm", "scheme"),
]) ("ts", "typescript"),
); ("typescript", "javascript"),
])
static CONFIGS: Lazy<HashMap<&'static str, HighlightConfiguration>> = 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 CONFIGS: Lazy<HashMap<&'static str, HighlightConfiguration>> = 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> { pub fn get_config(name: &str) -> Option<&'static HighlightConfiguration> {
match EXTENSIONS.get(name) { match EXTENSIONS.get(name) {
Some(name) => CONFIGS.get(name), Some(name) => CONFIGS.get(name),
None => CONFIGS.get(name), None => CONFIGS.get(name),
} }
} }