Add support for Nix

Closes #196
pull/206/head
Wilfred Hughes 2022-03-29 22:46:09 +07:00
parent 641ba87416
commit ecdf993ff1
11 changed files with 91 additions and 2 deletions

@ -15,8 +15,7 @@ syntactic changes".
Fixed an issue in C and C++ where blank lines were highlighted after
novel preprocessor lines.
Added support for Janet.
Added support for Lua.
Added support for Janet, Lua and Nix.
## 0.24 (release 26th March 2022)

@ -55,6 +55,7 @@ Difftastic supports the following languages:
* JavaScript (and JSX)
* JSON
* Lua
* Nix
* OCaml
* PHP
* Python

@ -139,6 +139,11 @@ fn main() {
src_dir: "vendor/tree-sitter-lua-src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-nix",
src_dir: "vendor/tree-sitter-nix-src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-ocaml",
src_dir: "vendor/tree-sitter-ocaml-src/ocaml/src",

@ -21,6 +21,7 @@ Difftastic uses the following tree-sitter parsers:
| 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) |
| Lua | [nvim-treesitter/tree-sitter-lua](https://github.com/nvim-treesitter/tree-sitter-lua) |
| Nix | [cstrahan/tree-sitter-nix](https://github.com/cstrahan/tree-sitter-nix) |
| OCaml | [tree-sitter/tree-sitter-ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) |
| PHP | [tree-sitter/tree-sitter-php](https://github.com/tree-sitter/tree-sitter-php) |
| Python | [tree-sitter/tree-sitter-python](https://github.com/tree-sitter/tree-sitter-python) |

@ -85,6 +85,9 @@ sample_files/nest_before.rs sample_files/nest_after.rs
sample_files/nesting_before.el sample_files/nesting_after.el
6af3112dad0de540b4104655119970e8 -
sample_files/nix_before.nix sample_files/nix_after.nix
2f8e64ce28f4067210e9f12f10cb4579 -
sample_files/ocaml_before.ml sample_files/ocaml_after.ml
2e415fe09d7cee050f8143a8d8c209bd -

@ -0,0 +1,24 @@
{ lib, fetchFromGitHub, rustPlatform, tree-sitter }:
rustPlatform.buildRustPackage rec {
pname = "difftastic";
version = "0.24.0";
src = fetchFromGitHub {
owner = "wilfred";
repo = pname;
rev = version;
sha256 = "sha256-Yp0WwzGo8nuRZuiHdUPxPM1SYBeeVA3SMDfHnQmqUqY=";
};
cargoSha256 = "sha256-m80PT2UQYhA5KEh7ax/fhh6vuse0DXhbFsh2x4pwkWY=";
meta = with lib; {
description = "A syntax-aware diff";
homepage = "https://github.com/Wilfred/difftastic";
changelog = "https://github.com/Wilfred/difftastic/raw/${version}/CHANGELOG.md";
license = licenses.mit;
maintainers = with maintainers; [ ethancedwards8 figsoda ];
mainProgram = "difft";
};
}

@ -0,0 +1,35 @@
{ lib, fetchFromGitHub, rustPlatform, tree-sitter }:
rustPlatform.buildRustPackage rec {
pname = "difftastic";
version = "0.12.0";
src = fetchFromGitHub {
owner = "wilfred";
repo = pname;
rev = version;
sha256 = "sha256-A6Z3g6fbYBynyN4OhRrZNO0ZghvT3XnIahdUQ8SE8tU=";
};
cargoSha256 = "sha256-6/JwrPymtpj/CXqx3Pe43v+MJTNONArU2WEo/zgJhT4=";
postPatch = ''
pushd vendor
for grammar in */; do
if [ -d "${tree-sitter.grammars}/$grammar" ]; then
rm -r "$grammar"
ln -s "${tree-sitter.grammars}/$grammar"
fi
done
popd
'';
meta = with lib; {
description = "A syntax-aware diff";
homepage = "https://github.com/Wilfred/difftastic";
changelog = "https://github.com/Wilfred/difftastic/raw/${version}/CHANGELOG.md";
license = licenses.mit;
maintainers = with maintainers; [ ethancedwards8 figsoda ];
mainProgram = "difft";
};
}

@ -36,6 +36,7 @@ pub enum Language {
Json,
Jsx,
Lua,
Nix,
OCaml,
OCamlInterface,
Php,
@ -197,6 +198,7 @@ fn from_extension(extension: &OsStr, src: &str) -> Option<Language> {
"jsx" => Some(Jsx),
"json" => Some(Json),
"lua" => Some(Lua),
"nix" => Some(Nix),
"ml" => Some(OCaml),
"mli" => Some(OCamlInterface),
"php" if !src.starts_with("<?hh") => Some(Php),

@ -60,6 +60,7 @@ extern "C" {
fn tree_sitter_javascript() -> ts::Language;
fn tree_sitter_json() -> ts::Language;
fn tree_sitter_lua() -> ts::Language;
fn tree_sitter_nix() -> ts::Language;
fn tree_sitter_ocaml() -> ts::Language;
fn tree_sitter_ocaml_interface() -> ts::Language;
fn tree_sitter_php() -> ts::Language;
@ -366,6 +367,22 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Nix => {
let language = unsafe { tree_sitter_nix() };
TreeSitterConfig {
name: "Nix",
language,
atom_nodes: vec!["string_expression", "indented_string_expression"]
.into_iter()
.collect(),
delimiter_tokens: vec![("{", "}"), ("[", "]")].into_iter().collect(),
highlight_query: ts::Query::new(
language,
include_str!("../vendor/highlights/nix.scm"),
)
.unwrap(),
}
}
OCaml => {
let language = unsafe { tree_sitter_ocaml() };
TreeSitterConfig {

@ -0,0 +1 @@
../tree-sitter-nix/queries/highlights.scm

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