diff --git a/README.md b/README.md index e1ccc00db..8f63902b5 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Difftastic supports the following languages: * CSS * Emacs Lisp * Go +* Java * JavaScript (including JSX) * JSON * OCaml diff --git a/build.rs b/build.rs index e36ddf858..971bd09f2 100644 --- a/build.rs +++ b/build.rs @@ -43,6 +43,11 @@ fn main() { ); build("tree-sitter-elisp", "vendor/tree-sitter-elisp-src", &[]); build("tree-sitter-go", "vendor/tree-sitter-go-src", &[]); + build( + "tree-sitter-java", + "vendor/tree-sitter-java-src", + &[], + ); build( "tree-sitter-javascript", "vendor/tree-sitter-javascript-src", diff --git a/src/tree_sitter_parser.rs b/src/tree_sitter_parser.rs index 72fecf8f2..10425deb4 100644 --- a/src/tree_sitter_parser.rs +++ b/src/tree_sitter_parser.rs @@ -27,6 +27,7 @@ extern "C" { fn tree_sitter_css() -> Language; fn tree_sitter_elisp() -> Language; fn tree_sitter_go() -> Language; + fn tree_sitter_java() -> Language; fn tree_sitter_javascript() -> Language; fn tree_sitter_json() -> Language; fn tree_sitter_ocaml() -> Language; @@ -65,6 +66,12 @@ pub fn from_extension(extension: &OsStr) -> Option { .collect(), open_delimiter_tokens: (vec!["{", "[", "("]).into_iter().collect(), }), + "java" => Some(TreeSitterConfig { + name: "Java", + language: unsafe { tree_sitter_java() }, + atom_nodes: (vec![]).into_iter().collect(), + open_delimiter_tokens: (vec!["(", "{"]).into_iter().collect(), + }), "js" | "jsx" => Some(TreeSitterConfig { name: "JavaScript", language: unsafe { tree_sitter_javascript() }, diff --git a/vendor/tree-sitter-java-src b/vendor/tree-sitter-java-src new file mode 120000 index 000000000..6fb00c98d --- /dev/null +++ b/vendor/tree-sitter-java-src @@ -0,0 +1 @@ +tree-sitter-java/src \ No newline at end of file