Add support for Makefiles

add_libdifftastic
Wilfred Hughes 2022-08-28 16:26:01 +07:00
parent 615daf8880
commit 659f2dd6bd
8 changed files with 33 additions and 3 deletions

@ -5,6 +5,8 @@
Difftastic will now autodetect files in UTF-16-BE and Difftastic will now autodetect files in UTF-16-BE and
UTF-16-LE. Previously it required files to be UTF-8. UTF-16-LE. Previously it required files to be UTF-8.
Added support for Makefiles.
## 0.34 (released 27th August 2022) ## 0.34 (released 27th August 2022)
### Build ### Build

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

@ -26,6 +26,7 @@ Difftastic supports the following programming languages.
| Julia | [tree-sitter/tree-sitter-julia](https://github.com/tree-sitter/tree-sitter-julia) | | Julia | [tree-sitter/tree-sitter-julia](https://github.com/tree-sitter/tree-sitter-julia) |
| Kotlin | [fwcd/tree-sitter-kotlin](https://github.com/fwcd/tree-sitter-kotlin) | | Kotlin | [fwcd/tree-sitter-kotlin](https://github.com/fwcd/tree-sitter-kotlin) |
| Lua | [nvim-treesitter/tree-sitter-lua](https://github.com/nvim-treesitter/tree-sitter-lua) | | Lua | [nvim-treesitter/tree-sitter-lua](https://github.com/nvim-treesitter/tree-sitter-lua) |
| Make | [alemuller/tree-sitter-make](https://github.com/alemuller/tree-sitter-make) |
| Nix | [cstrahan/tree-sitter-nix](https://github.com/cstrahan/tree-sitter-nix) | | 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) | | OCaml | [tree-sitter/tree-sitter-ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) |
| Perl | [ganezdragon/tree-sitter-perl](https://github.com/ganezdragon/tree-sitter-perl) | | Perl | [ganezdragon/tree-sitter-perl](https://github.com/ganezdragon/tree-sitter-perl) |

@ -68,9 +68,9 @@ fn prefer_outer_delimiter(language: guess_language::Language) -> bool {
// languages have syntax like `foo(bar)` or `foo[bar]` where // languages have syntax like `foo(bar)` or `foo[bar]` where
// the inner delimiter is more relevant. // the inner delimiter is more relevant.
Bash | C | CMake | CPlusPlus | CSharp | Css | Dart | Elixir | Elm | Elvish | Gleam | Go Bash | C | CMake | CPlusPlus | CSharp | Css | Dart | Elixir | Elm | Elvish | Gleam | Go
| Hack | Haskell | Html | Java | JavaScript | Jsx | Julia | Kotlin | Lua | Nix | OCaml | Hack | Haskell | Html | Java | JavaScript | Jsx | Julia | Kotlin | Lua | Make | Nix
| OCamlInterface | Perl | Php | Python | Ruby | Rust | Scala | Swift | Tsx | TypeScript | OCaml | OCamlInterface | Perl | Php | Python | Ruby | Rust | Scala | Swift | Tsx
| Yaml | Zig => false, | TypeScript | Yaml | Zig => false,
} }
} }

@ -45,6 +45,7 @@ pub enum Language {
Jsx, Jsx,
Kotlin, Kotlin,
Lua, Lua,
Make,
Nix, Nix,
OCaml, OCaml,
OCamlInterface, OCamlInterface,
@ -202,6 +203,9 @@ fn from_name(path: &Path) -> Option<Language> {
".arcconfig" | ".auto-changelog" | ".c8rc" | ".htmlhintrc" | ".imgbotconfig" ".arcconfig" | ".auto-changelog" | ".c8rc" | ".htmlhintrc" | ".imgbotconfig"
| ".nycrc" | ".tern-config" | ".tern-project" | ".watchmanconfig" | "Pipfile.lock" | ".nycrc" | ".tern-config" | ".tern-project" | ".watchmanconfig" | "Pipfile.lock"
| "composer.lock" | "mcmod.info" => Some(Json), | "composer.lock" | "mcmod.info" => Some(Json),
"BSDmakefile" | "GNUmakefile" | "Kbuild" | "Makefile" | "Makefile.am"
| "Makefile.boot" | "Makefile.frag" | "Makefile.in" | "Makefile.inc"
| "Makefile.wat" | "makefile" | "makefile.sco" | "mkfile" => Some(Make),
"TARGETS" | "BUCK" | "DEPS" => Some(Python), "TARGETS" | "BUCK" | "DEPS" => Some(Python),
"Gemfile" | "Rakefile" => Some(Ruby), "Gemfile" | "Rakefile" => Some(Ruby),
"Cargo.lock" | "Gopkg.lock" | "Pipfile" | "poetry.lock" => Some(Toml), "Cargo.lock" | "Gopkg.lock" | "Pipfile" | "poetry.lock" => Some(Toml),
@ -249,6 +253,7 @@ pub fn from_extension(extension: &OsStr) -> Option<Language> {
"jl" => Some(Julia), "jl" => Some(Julia),
"kt" | "ktm" | "kts" => Some(Kotlin), "kt" | "ktm" | "kts" => Some(Kotlin),
"lua" => Some(Lua), "lua" => Some(Lua),
".mak" | ".d" | ".make" | ".makefile" | ".mk" | ".mkfile" => Some(Make),
"nix" => Some(Nix), "nix" => Some(Nix),
"ml" => Some(OCaml), "ml" => Some(OCaml),
"mli" => Some(OCamlInterface), "mli" => Some(OCamlInterface),

@ -69,6 +69,7 @@ extern "C" {
fn tree_sitter_julia() -> ts::Language; fn tree_sitter_julia() -> ts::Language;
fn tree_sitter_kotlin() -> ts::Language; fn tree_sitter_kotlin() -> ts::Language;
fn tree_sitter_lua() -> ts::Language; fn tree_sitter_lua() -> ts::Language;
fn tree_sitter_make() -> ts::Language;
fn tree_sitter_nix() -> ts::Language; fn tree_sitter_nix() -> ts::Language;
fn tree_sitter_ocaml() -> ts::Language; fn tree_sitter_ocaml() -> ts::Language;
fn tree_sitter_ocaml_interface() -> ts::Language; fn tree_sitter_ocaml_interface() -> ts::Language;
@ -532,6 +533,20 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(), .unwrap(),
} }
} }
Make => {
let language = unsafe { tree_sitter_make() };
TreeSitterConfig {
name: "Makefile",
language,
atom_nodes: vec![].into_iter().collect(),
delimiter_tokens: vec![("(", ")")].into_iter().collect(),
highlight_query: ts::Query::new(
language,
include_str!("../../vendor/highlights/make.scm"),
)
.unwrap(),
}
}
Nix => { Nix => {
let language = unsafe { tree_sitter_nix() }; let language = unsafe { tree_sitter_nix() };
TreeSitterConfig { TreeSitterConfig {

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

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