From 1bffcf4e2b7c12127cdc58366dfe44b847920d70 Mon Sep 17 00:00:00 2001 From: Breno Reis Date: Wed, 20 Sep 2023 14:26:43 -0300 Subject: [PATCH] add support for SCSS --- build.rs | 5 +++++ src/parse/guess_language.rs | 4 ++++ src/parse/tree_sitter_parser.rs | 17 +++++++++++++++++ vendored_parsers/highlights/scss.scm | 1 + vendored_parsers/tree-sitter-scss-src | 1 + 5 files changed, 28 insertions(+) create mode 120000 vendored_parsers/highlights/scss.scm create mode 120000 vendored_parsers/tree-sitter-scss-src diff --git a/build.rs b/build.rs index 45562709b..b08fa5eeb 100644 --- a/build.rs +++ b/build.rs @@ -311,6 +311,11 @@ fn main() { src_dir: "vendored_parsers/tree-sitter-scala-src", extra_files: vec!["scanner.c"], }, + TreeSitterParser { + name: "tree-sitter-scss", + src_dir: "vendored_parsers/tree-sitter-scss-src", + extra_files: vec!["scanner.c"], + }, TreeSitterParser { name: "tree-sitter-sql", src_dir: "vendored_parsers/tree-sitter-sql-src", diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index 470dc1dad..b840d68e0 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -64,6 +64,7 @@ pub enum Language { Ruby, Rust, Scala, + Scss, Solidity, Sql, Swift, @@ -149,6 +150,7 @@ pub fn language_name(language: Language) -> &'static str { Ruby => "Ruby", Rust => "Rust", Scala => "Scala", + Scss => "Scss", Solidity => "Solidity", Sql => "SQL", Swift => "Swift", @@ -331,6 +333,7 @@ pub fn language_globs(language: Language) -> Vec { ], Rust => &["*.rs"], Scala => &["*.scala", "*.sbt", "*.sc"], + Scss => &["*.scss"], Solidity => &["*.sol"], Sql => &["*.sql", "*.pgsql"], Swift => &["*.swift"], @@ -468,6 +471,7 @@ fn from_emacs_mode_header(src: &str) -> Option { "ruby" => Some(Ruby), "rust" => Some(Rust), "scala" => Some(Scala), + "scss" => Some(Scss), "sh" => Some(Bash), "solidity" => Some(Solidity), "sql" => Some(Sql), diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index 699abb798..ee4e3b9aa 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -105,6 +105,7 @@ extern "C" { fn tree_sitter_ruby() -> ts::Language; fn tree_sitter_rust() -> ts::Language; fn tree_sitter_scala() -> ts::Language; + fn tree_sitter_scss() -> ts::Language; fn tree_sitter_solidity() -> ts::Language; fn tree_sitter_sql() -> ts::Language; fn tree_sitter_swift() -> ts::Language; @@ -906,6 +907,22 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig { sub_languages: vec![], } } + Scss => { + let language = unsafe { tree_sitter_scss() }; + TreeSitterConfig { + language, + atom_nodes: vec!["integer_value", "float_value", "color_value"] + .into_iter() + .collect(), + delimiter_tokens: vec![("{", "}"), ("(", ")")], + highlight_query: ts::Query::new( + language, + include_str!("../../vendored_parsers/highlights/scss.scm"), + ) + .unwrap(), + sub_languages: vec![], + } + } Solidity => { let language = unsafe { tree_sitter_solidity() }; TreeSitterConfig { diff --git a/vendored_parsers/highlights/scss.scm b/vendored_parsers/highlights/scss.scm new file mode 120000 index 000000000..099fd3758 --- /dev/null +++ b/vendored_parsers/highlights/scss.scm @@ -0,0 +1 @@ +../tree-sitter-scss/queries/highlights.scm \ No newline at end of file diff --git a/vendored_parsers/tree-sitter-scss-src b/vendored_parsers/tree-sitter-scss-src new file mode 120000 index 000000000..f1b2f0be6 --- /dev/null +++ b/vendored_parsers/tree-sitter-scss-src @@ -0,0 +1 @@ +tree-sitter-scss/src \ No newline at end of file