Skip to content

Commit ca2f41b

Browse files
committed
Add language support for D
Implement support in difftastic for the D programming language using the treesitter grammar provided in https://github.com/gdamore/tree-sitter-d
1 parent b842758 commit ca2f41b

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

build.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ fn main() {
8282
src_dir: "vendored_parsers/tree-sitter-cmake-src",
8383
extra_files: vec!["scanner.c"],
8484
},
85+
TreeSitterParser {
86+
name: "tree-sitter-d",
87+
src_dir: "vendored_parsers/tree-sitter-d-src",
88+
extra_files: vec!["scanner.c"],
89+
},
8590
TreeSitterParser {
8691
name: "tree-sitter-dart",
8792
src_dir: "vendored_parsers/tree-sitter-dart-src",

src/parse/guess_language.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ pub(crate) enum Language {
2828
CPlusPlus,
2929
CSharp,
3030
Css,
31+
D,
3132
Dart,
3233
DeviceTree,
3334
Elixir,
@@ -128,6 +129,7 @@ pub(crate) fn language_name(language: Language) -> &'static str {
128129
CPlusPlus => "C++",
129130
CSharp => "C#",
130131
Css => "CSS",
132+
D => "D",
131133
Dart => "Dart",
132134
DeviceTree => "Device Tree",
133135
Elixir => "Elixir",
@@ -258,6 +260,7 @@ pub(crate) fn language_globs(language: Language) -> Vec<glob::Pattern> {
258260
],
259261
CSharp => &["*.cs"],
260262
Css => &["*.css"],
263+
D => &["*.d", "*.di"],
261264
Dart => &["*.dart"],
262265
DeviceTree => &["*.dts", "*.dtsi", "*.dtso", "*.its"],
263266
Elm => &["*.elm"],

src/parse/tree_sitter_parser.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ extern "C" {
7373
fn tree_sitter_apex() -> ts::Language;
7474
fn tree_sitter_clojure() -> ts::Language;
7575
fn tree_sitter_cmake() -> ts::Language;
76+
fn tree_sitter_d() -> ts::Language;
7677
fn tree_sitter_dart() -> ts::Language;
7778
fn tree_sitter_devicetree() -> ts::Language;
7879
fn tree_sitter_elisp() -> ts::Language;
@@ -278,6 +279,20 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig {
278279
sub_languages: vec![],
279280
}
280281
}
282+
D => {
283+
let language = unsafe { tree_sitter_d() };
284+
TreeSitterConfig {
285+
language: language.clone(),
286+
atom_nodes: ["string_literal", "char_literal"].into_iter().collect(),
287+
delimiter_tokens: vec![("(", ")"), ("{", "}"), ("[", "]")],
288+
highlight_query: ts::Query::new(
289+
&language,
290+
include_str!("../../vendored_parsers/highlights/d.scm"),
291+
)
292+
.unwrap(),
293+
sub_languages: vec![],
294+
}
295+
}
281296
Dart => {
282297
let language = unsafe { tree_sitter_dart() };
283298
TreeSitterConfig {

0 commit comments

Comments
 (0)