Add Scala support

pull/101/head
Hugo van Rijswijk 2022-01-18 12:38:52 +07:00
parent c2ec55f46a
commit cc651ad14a
No known key found for this signature in database
GPG Key ID: C4F58F382650471D
7 changed files with 62 additions and 0 deletions

@ -73,6 +73,7 @@ Difftastic supports the following languages:
* Python
* Ruby
* Rust
* Scala
* TypeScript (and TSX)
If a file has an unrecognised extension, difftastic uses a

@ -149,6 +149,11 @@ fn main() {
src_dir: "vendor/tree-sitter-rust-src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-scala",
src_dir: "vendor/tree-sitter-scala-src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-tsx",
src_dir: "vendor/tree-sitter-typescript-src/tsx/src",

@ -0,0 +1,21 @@
package foo
import foo.Baz
class Foo {
private def blah(): Other {
throw new Exception("after");
}
var result = Option.empty[T]
val fn = pf.lift
object traverser extends SimpleTraverser {
override def apply(t: Tree): Unit = {
result = fn(t).orElse(result)
if (result.nonEmpty) {
super.apply(t)
}
}
}
}

@ -0,0 +1,21 @@
package foo
import foo.Bar
class Foo {
def blah(): Int {
throw new Exception("before");
}
var result = Option.empty[T]
object traverser extends SimpleTraverser {
override def apply(t: Tree): Unit = {
if (result.isEmpty && pf.isDefinedAt(t)) {
result = Some(pf(t))
} else if (result.isEmpty) {
super.apply(t)
}
}
}
}

@ -38,6 +38,7 @@ pub enum Language {
Python,
Ruby,
Rust,
Scala,
Tsx,
TypeScript,
}
@ -139,6 +140,7 @@ fn from_extension(extension: &OsStr) -> Option<Language> {
"py" | "py3" | "pyi" | "bzl" => Some(Python),
"rb" | "builder" | "spec" | "rake" => Some(Ruby),
"rs" => Some(Rust),
"scala" | "sbt" | "sc" => Some(Scala),
"ts" => Some(TypeScript),
"tsx" => Some(Tsx),
_ => None,

@ -62,6 +62,7 @@ extern "C" {
fn tree_sitter_python() -> ts::Language;
fn tree_sitter_ruby() -> ts::Language;
fn tree_sitter_rust() -> ts::Language;
fn tree_sitter_scala() -> ts::Language;
fn tree_sitter_tsx() -> ts::Language;
fn tree_sitter_typescript() -> ts::Language;
}
@ -379,6 +380,16 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Scala => {
let language = unsafe { tree_sitter_scala() };
TreeSitterConfig {
name: "Rust",
language: unsafe { tree_sitter_scala() },
atom_nodes: (vec!["string", "template_string"]).into_iter().collect(),
delimiter_tokens: (vec![("{", "}"), ("(", ")"), ("[", "]")]),
highlight_query: ts::Query::new(language, "").unwrap(),
}
}
TypeScript => {
let language = unsafe { tree_sitter_typescript() };
TreeSitterConfig {

@ -0,0 +1 @@
tree-sitter-scala/src