Add support for devicetrees

pull/642/head
Brandon Maier 2024-02-13 22:08:15 +07:00
parent dee4c9bdbc
commit e6b27caf06
9 changed files with 149 additions and 0 deletions

@ -126,6 +126,11 @@ fn main() {
src_dir: "vendored_parsers/tree-sitter-dart-src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-devicetree",
src_dir: "vendored_parsers/tree-sitter-devicetree-src",
extra_files: vec![],
},
TreeSitterParser {
name: "tree-sitter-elisp",
src_dir: "vendored_parsers/tree-sitter-elisp-src",

@ -18,6 +18,7 @@ with `difft --list-languages`.
| CMake | [uyha/tree-sitter-cmake](https://github.com/uyha/tree-sitter-cmake) |
| Common Lisp | [theHamsta/tree-sitter-commonlisp](https://github.com/theHamsta/tree-sitter-commonlisp) |
| Dart | [UserNobody14/tree-sitter-dart](https://github.com/UserNobody14/tree-sitter-dart) |
| Devicetree | [joelspadin/tree-sitter-devicetree](https://github.com/joelspadin/tree-sitter-devicetree) |
| Elixir | [elixir-lang/tree-sitter-elixir](https://github.com/elixir-lang/tree-sitter-elixir) |
| Elm | [elm-tooling/tree-sitter-elm](https://github.com/elm-tooling/tree-sitter-elm) |
| Elvish | [ckafi/tree-sitter-elvish](https://github.com/ckafi/tree-sitter-elvish) |

@ -49,6 +49,9 @@ sample_files/css_before.css sample_files/css_after.css
sample_files/dart_before.dart sample_files/dart_after.dart
73dd776f2587bbaf2d29fbe20dd8de40 -
sample_files/devicetree_before.dts sample_files/devicetree_after.dts
7b5e6987b493b8bb3386f8e56c02578f -
sample_files/elisp_before.el sample_files/elisp_after.el
4342ed34fe5304644afe5b224f0fd83b -

@ -0,0 +1,60 @@
/dts-v1/;
/memreserve/ 0x1000000000000000 0x0000000002000000;
/memreserve/ 0x2000000000000000 0x0100000000000000;
/memreserve/ 0x0000000000000000 0x0000000000000014;
/ {
model = "MyBoardNamev2";
compatible = "MyBoardName", "MyBoardFamilyName", "MyBoardRevision";
#address-cells = <2>;
#size-cells = <2>;
cpus {
linux,phandle = <0x1>;
#address-cells = <1>;
#size-cells = <0>;
PowerPC,970@0 {
name = "PowerPC,970";
device_type = "cpu";
reg = <0x00000000>;
clock-frequency = <1600000000>;
timebase-frequency = <33333333>;
linux,boot-cpu;
i-cache-size = <65536>;
d-cache-size = <32768>;
};
};
randomparentnode {
randomnode {
string = "\xff\0stuffstuff\t\t\t\n\n\n";
blob = [0a 0b 0c 0d de ea ad be ef];
ref = < &{/memory@0} >;
mixed = "abc",
[1234],
<0xa 0xb 0xc>;
new = <12345>;
};
};
memory@0 {
device_type = "memory";
memreg: reg = <
0x00000000 0x00000000
0x00000000 0x20000000>;
};
memory@100000 {
device_type = "memory";
memreg: reg = <
0x00100000 0x00000000
0x00100000 0x20000000>;
};
chosen {
linux,platform = <0x600>;
bootargs = "root=/dev/sda2";
};
};

@ -0,0 +1,58 @@
/dts-v1/;
/memreserve/ 0x1000000000000000 0x0000000002000000;
/memreserve/ 0x2000000000000000 0x0100000000000000;
/memreserve/ 0x0000000000000000 0x0000000000000014;
/ {
model = "MyBoardName";
compatible = "MyBoardName", "MyBoardFamilyName";
#address-cells = <2>;
#size-cells = <2>;
cpus {
linux,phandle = <0x1>;
#address-cells = <1>;
#size-cells = <0>;
PowerPC,970@0 {
name = "PowerPC,970";
device_type = "cpu";
reg = <0x00000000>;
clock-frequency = <1600000000>;
timebase-frequency = <33333333>;
linux,boot-cpu;
i-cache-size = <65536>;
d-cache-size = <32768>;
};
PowerPC,970@1 {
name = "PowerPC,970";
device_type = "cpu";
reg = <0x00000001>;
clock-frequency = <1600000000>;
timebase-frequency = <33333333>;
i-cache-size = <65536>;
d-cache-size = <32768>;
};
};
randomnode {
string = "\xff\0stuffstuff\t\t\t\n\n\n";
blob = [0a 0b 0c 0d de ea ad be ef];
ref = < &{/memory@0} >;
mixed = "abc", [1234], <0xa 0xb 0xc>;
old = <12345>;
};
memory@0 {
device_type = "memory";
memreg: reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
};
chosen {
bootargs = "root=/dev/sda2";
linux,platform = <0x600>;
};
};

@ -29,6 +29,7 @@ pub(crate) enum Language {
CSharp,
Css,
Dart,
Devicetree,
Elixir,
Elm,
Elvish,
@ -119,6 +120,7 @@ pub(crate) fn language_name(language: Language) -> &'static str {
CSharp => "C#",
Css => "CSS",
Dart => "Dart",
Devicetree => "Devicetree",
Elixir => "Elixir",
Elm => "Elm",
Elvish => "Elvish",
@ -243,6 +245,7 @@ pub(crate) fn language_globs(language: Language) -> Vec<glob::Pattern> {
CSharp => &["*.cs"],
Css => &["*.css"],
Dart => &["*.dart"],
Devicetree => &["*.dts", "*.dtsi", "*.dtso", "*.its"],
Elm => &["*.elm"],
EmacsLisp => &["*.el", ".emacs", "_emacs", "Cask"],
Elixir => &["*.ex", "*.exs"],

@ -71,6 +71,7 @@ extern "C" {
fn tree_sitter_commonlisp() -> ts::Language;
fn tree_sitter_css() -> ts::Language;
fn tree_sitter_dart() -> ts::Language;
fn tree_sitter_devicetree() -> ts::Language;
fn tree_sitter_elisp() -> ts::Language;
fn tree_sitter_elixir() -> ts::Language;
fn tree_sitter_elm() -> ts::Language;
@ -314,6 +315,22 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig {
sub_languages: vec![],
}
}
Devicetree => {
let language = unsafe { tree_sitter_devicetree() };
TreeSitterConfig {
language,
atom_nodes: vec!["byte_string_literal", "string_literal"]
.into_iter()
.collect(),
delimiter_tokens: vec![("<", ">"), ("{", "}"), ("(", ")")],
highlight_query: ts::Query::new(
language,
include_str!("../../vendored_parsers/highlights/devicetree.scm"),
)
.unwrap(),
sub_languages: vec![],
}
}
EmacsLisp => {
let language = unsafe { tree_sitter_elisp() };
TreeSitterConfig {

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

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