Add Haskell support

Fixes #36
edge_only_predecessors
Wilfred Hughes 2021-09-22 10:18:48 +07:00
parent 016d2b8be2
commit f6ada434fe
6 changed files with 20 additions and 2 deletions

@ -7,6 +7,8 @@ Added a C parser.
Added a C++ parser. Difftastic prefers the C++ parser for `.h`
files. Please file a bug if you see issues.
Added a Haskell parser.
Removed legacy regex-based parsing backend.
### Diffing

@ -23,6 +23,7 @@ Difftastic supports the following languages:
* Elixir
* Emacs Lisp
* Go
* Haskell
* Java
* JavaScript (and JSX)
* JSON

@ -19,7 +19,8 @@ fn build(package_name: &str, package_dir: &str, extra_files: &[&str]) {
cpp_build
.include(&dir)
.cpp(true)
.flag("-Wno-unused-parameter");
.flag("-Wno-unused-parameter")
.flag("-Wno-ignored-qualifiers");
for file in cpp_files {
cpp_build.file(dir.join(file));
}
@ -58,6 +59,11 @@ fn main() {
&["scanner.cc"],
);
build("tree-sitter-go", "vendor/tree-sitter-go-src", &[]);
build(
"tree-sitter-haskell",
"vendor/tree-sitter-haskell-src",
&["scanner.cc"],
);
build("tree-sitter-java", "vendor/tree-sitter-java-src", &[]);
build(
"tree-sitter-javascript",

@ -1,7 +1,7 @@
# Introduction
Difftastic is a diff tool that understands syntax. It currently
supports 16 languages:
supports 17 languages:
* C
* C++
@ -10,6 +10,7 @@ supports 16 languages:
* Elixir
* Emacs Lisp
* Go
* Haskell
* Java
* JavaScript (and JSX)
* JSON

@ -11,6 +11,7 @@ Difftastic uses the following tree-sitter parsers:
| Elixir | [ananthakumaran/tree-sitter-elixir](https://github.com/ananthakumaran/tree-sitter-elixir) |
| Emacs Lisp | [wilfred/tree-sitter-elisp](https://github.com/Wilfred/tree-sitter-elisp) |
| Go | [tree-sitter/tree-sitter-go](https://github.com/tree-sitter/tree-sitter-go) |
| Haskell | [tree-sitter/tree-sitter-haskell](https://github.com/tree-sitter/tree-sitter-haskell) |
| Java | [tree-sitter/tree-sitter-java](https://github.com/tree-sitter/tree-sitter-java) |
| JavaScript, JSX | [tree-sitter/tree-sitter-javascript](https://github.com/tree-sitter/tree-sitter-javascript) |
| JSON | [tree-sitter/tree-sitter-json](https://github.com/tree-sitter/tree-sitter-json) |

@ -32,6 +32,7 @@ extern "C" {
fn tree_sitter_elisp() -> Language;
fn tree_sitter_elixir() -> Language;
fn tree_sitter_go() -> Language;
fn tree_sitter_haskell() -> Language;
fn tree_sitter_java() -> Language;
fn tree_sitter_javascript() -> Language;
fn tree_sitter_json() -> Language;
@ -106,6 +107,12 @@ pub fn from_extension(extension: &OsStr) -> Option<TreeSitterConfig> {
.collect(),
open_delimiter_tokens: (vec!["{", "[", "("]).into_iter().collect(),
}),
"hs" => Some(TreeSitterConfig {
name: "Haskell",
language: unsafe { tree_sitter_haskell() },
atom_nodes: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec!["[", "("]).into_iter().collect(),
}),
"java" => Some(TreeSitterConfig {
name: "Java",
language: unsafe { tree_sitter_java() },