Skip to content

Commit

Permalink
Add support for D (#4372)
Browse files Browse the repository at this point in the history
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
  • Loading branch information
gdamore and the-mikedavis authored Oct 20, 2022
1 parent de60783 commit 36f97b6
Show file tree
Hide file tree
Showing 6 changed files with 275 additions and 0 deletions.
1 change: 1 addition & 0 deletions book/src/generated/lang-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
| cpp |||| `clangd` |
| css || | | `vscode-css-language-server` |
| cue || | | `cuelsp` |
| d |||| `serve-d` |
| dart || || `dart` |
| devicetree || | | |
| diff || | | |
Expand Down
15 changes: 15 additions & 0 deletions languages.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1835,3 +1835,18 @@ roots = []
[[grammar]]
name = "wast"
source = { git = "https://github.com/wasm-lsp/tree-sitter-wasm", rev = "2ca28a9f9d709847bf7a3de0942a84e912f59088", subpath = "wast" }

[[language]]
name = "d"
scope = "source.d"
file-types = [ "d", "dd" ]
roots = []
comment-token = "//"
injection-regex = "d"
indent = { tab-width = 4, unit = " "}
language-server = { command = "serve-d" }
formatter = { command = "dfmt" }

[[grammar]]
name = "d"
source = { git = "https://github.com/gdamore/tree-sitter-d", rev="601c4a1e8310fb2f3c43fa8a923d0d27497f3c04" }
231 changes: 231 additions & 0 deletions runtime/queries/d/highlights.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
; highlights.scm
;
; Highlighting queries for D code for use by Tree-Sitter.
;
; Copyright 2022 Garrett D'Amore
;
; Distributed under the MIT License.
; (See accompanying file LICENSE.txt or https://opensource.org/licenses/MIT)
; SPDX-License-Identifier: MIT

; these are listed first, because they override keyword queries
(identity_expression (in) @operator)
(identity_expression (is) @operator)

(storage_class) @keyword.storage

(function_declaration (identifier) @function)

(call_expression (identifier) @function)
(call_expression (type (identifier) @function))

(module_fqn) @namespace

[
(abstract)
(alias)
(align)
(asm)
(assert)
(auto)
(cast)
(const)
(debug)
(delete)
(deprecated)
(export)
(extern)
(final)
(immutable)
(in)
(inout)
(invariant)
(is)
(lazy)
; "macro" - obsolete
(mixin)
(module)
(new)
(nothrow)
(out)
(override)
(package)
(pragma)
(private)
(protected)
(public)
(pure)
(ref)
(scope)
(shared)
(static)
(super)
(synchronized)
(template)
(this)
(throw)
(typeid)
(typeof)
(unittest)
(version)
(with)
(gshared)
(traits)
(vector)
(parameters_)
] @keyword

[
(class)
(struct)
(interface)
(union)
(enum)
(function)
(delegate)
] @keyword.storage.type

[
(break)
(case)
(catch)
(continue)
(do)
(default)
(finally)
(else)
(goto)
(if)
(switch)
(try)
] @keyword.control

(return) @keyword.control.return

(import) @keyword.control.import

[
(for)
(foreach)
(foreach_reverse)
(while)
] @keyword.control.repeat

[
(not_in)
(not_is)
"/="
"/"
".."
"..."
"&"
"&="
"&&"
"|"
"|="
"||"
"-"
"-="
"--"
"+"
"+="
"++"
"<"
"<="
"<<"
"<<="
">"
">="
">>="
">>>="
">>"
">>>"
"!"
"!="
"?"
"$"
"="
"=="
"*"
"*="
"%"
"%="
"^"
"^="
"^^"
"^^="
"~"
"~="
"@"
"=>"
] @operator

[
"("
")"
"["
"]"
] @punctuation.bracket

[
";"
"."
":"
","
] @punctuation.delimiter

[
(true)
(false)
] @constant.builtin.boolean

(null) @constant.builtin

(special_keyword) @constant.builtin

(directive) @keyword.directive
(shebang) @keyword.directive

(comment) @comment

[
(void)
(bool)
(byte)
(ubyte)
(char)
(short)
(ushort)
(wchar)
(dchar)
(int)
(uint)
(long)
(ulong)
(real)
(double)
] @type.builtin

[
(cent)
(ucent)
(ireal)
(idouble)
(ifloat)
(creal)
(double)
(cfloat)
] @warning ; these types are deprecated

(label (identifier) @label)
(goto_statement (goto) @keyword (identifier) @label)

(string_literal) @string
(int_literal) @constant.numeric.integer
(float_literal) @constant.numeric.float
(char_literal) @constant.character
(identifier) @variable
(at_attribute) @attribute

; everything after __EOF_ is plain text
(end_file) @ui.text
17 changes: 17 additions & 0 deletions runtime/queries/d/indents.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[
(parameters)
(template_parameters)
(expression_statement)
(aggregate_body)
(function_body)
(scope_statement)
(block_statement)
(case_statement)
] @indent

[
(case)
(default)
"}"
"]"
] @outdent
2 changes: 2 additions & 0 deletions runtime/queries/d/injections.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
((comment) @injection.content
(#set! injection.language "comment"))
9 changes: 9 additions & 0 deletions runtime/queries/d/textobjects.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(function_declaration (function_body) @function.inside) @function.around
(comment) @comment.inside
(comment)+ @comment.around
(class_declaration (aggregate_body) @class.inside) @class.around
(interface_declaration (aggregate_body) @class.inside) @class.around
(struct_declaration (aggregate_body) @class.inside) @class.around
(unittest_declaration (block_statement) @test.insid) @test.around
(parameter) @parameter.inside
(template_parameter) @parameter.inside

0 comments on commit 36f97b6

Please sign in to comment.