aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunrelentingtech2022-04-29 20:08:00 +0000
committerGitHub2022-04-29 20:08:00 +0000
commit8e77e3388c5ea23f22bb5f8e7ff50906ff0116a3 (patch)
tree9bf7c4d7c617685c56f62e54271430455343224e
parent030e7ab9884d9f319993a1987d64fa45956aaefe (diff)
feat(lang): add devicetree (Flattened Device Tree Source) (#2329)
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml13
-rw-r--r--runtime/queries/devicetree/highlights.scm66
-rw-r--r--runtime/queries/devicetree/indents.scm12
4 files changed, 92 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 69ae35c1..fe697cdf 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -8,6 +8,7 @@
| cpp | ✓ | ✓ | ✓ | `clangd` |
| css | ✓ | | | `vscode-css-language-server` |
| dart | ✓ | | ✓ | `dart` |
+| devicetree | ✓ | | ✓ | |
| dockerfile | ✓ | | | `docker-langserver` |
| eex | ✓ | | | |
| ejs | ✓ | | | |
diff --git a/languages.toml b/languages.toml
index 660cb4ca..e5230fba 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1263,3 +1263,16 @@ indent = { tab-width = 4, unit = "\t" }
[[grammar]]
name = "hare"
source = { git = "https://git.sr.ht/~ecmma/tree-sitter-hare", rev = "bc26a6a949f2e0d98b7bfc437d459b250900a165" }
+
+[[language]]
+name = "devicetree"
+scope = "source.devicetree"
+injection-regex = "(dtsi?|devicetree|fdt)"
+file-types = ["dts", "dtsi"]
+roots = []
+comment-token = "//"
+indent = { tab-width = 4, unit = "\t" }
+
+[[grammar]]
+name = "devicetree"
+source = { git = "https://github.com/joelspadin/tree-sitter-devicetree", rev = "877adbfa0174d25894c40fa75ad52d4515a36368" }
diff --git a/runtime/queries/devicetree/highlights.scm b/runtime/queries/devicetree/highlights.scm
new file mode 100644
index 00000000..d27c79e4
--- /dev/null
+++ b/runtime/queries/devicetree/highlights.scm
@@ -0,0 +1,66 @@
+[
+ "/dts-v1/"
+ "/memreserve/"
+ "/delete-node/"
+ "/delete-property/"
+] @keyword
+
+[
+ "#define"
+ "#include"
+] @keyword.directive
+
+[
+ "!"
+ "~"
+ "-"
+ "+"
+ "*"
+ "/"
+ "%"
+ "||"
+ "&&"
+ "|"
+ "^"
+ "&"
+ "=="
+ "!="
+ ">"
+ ">="
+ "<="
+ ">"
+ "<<"
+ ">>"
+] @operator
+
+[
+ ","
+ ";"
+] @punctuation.delimiter
+
+[
+ "("
+ ")"
+ "{"
+ "}"
+ "<"
+ ">"
+] @punctuation.bracket
+
+(string_literal) @string
+
+(integer_literal) @constant.numeric.integer
+
+(call_expression
+ function: (identifier) @function)
+
+(labeled_item
+ label: (identifier) @label)
+
+(identifier) @variable
+
+(unit_address) @tag
+
+(reference) @constant
+
+(comment) @comment
diff --git a/runtime/queries/devicetree/indents.scm b/runtime/queries/devicetree/indents.scm
new file mode 100644
index 00000000..06490889
--- /dev/null
+++ b/runtime/queries/devicetree/indents.scm
@@ -0,0 +1,12 @@
+[
+ (node)
+ (byte_string_literal)
+ (parenthesized_expression)
+ (argument_list)
+] @indent
+
+[
+ "}"
+ "]"
+ ")"
+] @outdent \ No newline at end of file