diff --git a/build.rs b/build.rs index 96e1a9cf4..24e4f9ab1 100644 --- a/build.rs +++ b/build.rs @@ -306,6 +306,11 @@ fn main() { src_dir: "vendored_parsers/tree-sitter-scala-src", extra_files: vec!["scanner.c"], }, + TreeSitterParser { + name: "tree-sitter-scheme", + src_dir: "vendored_parsers/tree-sitter-scheme-src", + extra_files: vec![], + }, TreeSitterParser { name: "tree-sitter-scss", src_dir: "vendored_parsers/tree-sitter-scss-src", diff --git a/manual/src/languages_supported.md b/manual/src/languages_supported.md index 7f319969a..8a1c9af83 100644 --- a/manual/src/languages_supported.md +++ b/manual/src/languages_supported.md @@ -47,6 +47,7 @@ with `difft --list-languages`. | Ruby | [tree-sitter/tree-sitter-ruby](https://github.com/tree-sitter/tree-sitter-ruby) | | Rust | [tree-sitter/tree-sitter-rust](https://github.com/tree-sitter/tree-sitter-rust) | | Scala | [tree-sitter/tree-sitter-scala](https://github.com/tree-sitter/tree-sitter-scala) | +| Scheme | [6cdh/tree-sitter-scheme](https://github.com/6cdh/tree-sitter-scheme) | | Solidity | [JoranHonig/tree-sitter-solidity](https://github.com/JoranHonig/tree-sitter-solidity) | | SQL | [m-novikov/tree-sitter-sql](https://github.com/m-novikov/tree-sitter-sql) | | Swift | [alex-pinkus/tree-sitter-swift](https://github.com/alex-pinkus/tree-sitter-swift) | diff --git a/sample_files/compare.expected b/sample_files/compare.expected index bbe7516d7..6559224ab 100644 --- a/sample_files/compare.expected +++ b/sample_files/compare.expected @@ -202,6 +202,9 @@ e690af6874c954b271ef7ea8eb1d8af1 - sample_files/scala_before.scala sample_files/scala_after.scala 8b2d6102b120d4a0de790c33409eedc3 - +sample_files/scheme_before.scm sample_files/scheme_after.scm +d00fcfe46aca3e2877bda566f1a3908b - + sample_files/simple_before.js sample_files/simple_after.js c9c5d1c61b7e8a953a361343bcd13c95 - diff --git a/sample_files/scheme_after.scm b/sample_files/scheme_after.scm new file mode 100644 index 000000000..f7ec87318 --- /dev/null +++ b/sample_files/scheme_after.scm @@ -0,0 +1,3 @@ +|# A block comment before a simple function, but changed. #| +(define (sub x y) ; This function returns the difference of its arguments + (- x y)) diff --git a/sample_files/scheme_before.scm b/sample_files/scheme_before.scm new file mode 100644 index 000000000..f7a722d11 --- /dev/null +++ b/sample_files/scheme_before.scm @@ -0,0 +1,3 @@ +|# A block comment before a very simple function. #| +(define (add x y) ; This function returns the sum of its arguments + (+ x y)) diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index c5dbd9bf3..94fc94dea 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -66,6 +66,7 @@ pub(crate) enum Language { Ruby, Rust, Scala, + Scheme, Scss, Solidity, Sql, @@ -155,6 +156,7 @@ pub(crate) fn language_name(language: Language) -> &'static str { Ruby => "Ruby", Rust => "Rust", Scala => "Scala", + Scheme => "Scheme", Scss => "SCSS", Solidity => "Solidity", Sql => "SQL", @@ -341,6 +343,7 @@ pub(crate) fn language_globs(language: Language) -> Vec { ], Rust => &["*.rs"], Scala => &["*.scala", "*.sbt", "*.sc"], + Scheme => &["*.scm"], Scss => &["*.scss"], Solidity => &["*.sol"], Sql => &["*.sql", "*.pgsql"], diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index e89e925c8..3892417fa 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -107,6 +107,7 @@ extern "C" { fn tree_sitter_ruby() -> ts::Language; fn tree_sitter_rust() -> ts::Language; fn tree_sitter_scala() -> ts::Language; + fn tree_sitter_scheme() -> ts::Language; fn tree_sitter_scss() -> ts::Language; fn tree_sitter_solidity() -> ts::Language; fn tree_sitter_sql() -> ts::Language; @@ -962,6 +963,22 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig { sub_languages: vec![], } } + Scheme => { + let language = unsafe { tree_sitter_scheme() }; + TreeSitterConfig { + language, + atom_nodes: vec!["block_comment", "comment", "string"] + .into_iter() + .collect(), + delimiter_tokens: vec![("{", "}"), ("(", ")"), ("[", "]")], + highlight_query: ts::Query::new( + language, + include_str!("../../vendored_parsers/highlights/scheme.scm"), + ) + .unwrap(), + sub_languages: vec![], + } + } Scss => { let language = unsafe { tree_sitter_scss() }; TreeSitterConfig { diff --git a/vendored_parsers/highlights/scheme.scm b/vendored_parsers/highlights/scheme.scm new file mode 120000 index 000000000..09c16f930 --- /dev/null +++ b/vendored_parsers/highlights/scheme.scm @@ -0,0 +1 @@ +../tree-sitter-scheme/queries/highlights.scm \ No newline at end of file diff --git a/vendored_parsers/tree-sitter-scheme-src b/vendored_parsers/tree-sitter-scheme-src new file mode 120000 index 000000000..1a77abda7 --- /dev/null +++ b/vendored_parsers/tree-sitter-scheme-src @@ -0,0 +1 @@ +tree-sitter-scheme/src \ No newline at end of file