diff options
author | Armin Brauns <armin.brauns@embedded-solutions.at> | 2024-01-08 14:22:07 +0000 |
---|---|---|
committer | Armin Brauns <armin.brauns@embedded-solutions.at> | 2024-01-09 09:23:51 +0000 |
commit | c5638750d6204ff9199f8ad6dd675301edb48054 (patch) | |
tree | c8f6a4b8a059df7b43a741667e9d2441339394d0 | |
parent | 3de60c60ace8dd2c26fad4355ac18977f3a7ecf2 (diff) |
Add tree-sitter-vhdl
-rw-r--r-- | build.rs | 5 | ||||
-rw-r--r-- | manual/src/languages_supported.md | 1 | ||||
-rw-r--r-- | sample_files/compare.expected | 3 | ||||
-rw-r--r-- | sample_files/vhdl_after.vhd | 35 | ||||
-rw-r--r-- | sample_files/vhdl_before.vhd | 27 | ||||
-rw-r--r-- | src/parse/guess_language.rs | 4 | ||||
-rw-r--r-- | src/parse/tree_sitter_parser.rs | 15 | ||||
l--------- | vendored_parsers/highlights/vhdl.scm | 1 | ||||
l--------- | vendored_parsers/tree-sitter-vhdl-src | 1 |
9 files changed, 92 insertions, 0 deletions
@@ -342,6 +342,11 @@ fn main() { extra_files: vec!["scanner.c"], }, TreeSitterParser { + name: "tree-sitter-vhdl", + src_dir: "vendored_parsers/tree-sitter-vhdl-src", + extra_files: vec![], + }, + TreeSitterParser { name: "tree-sitter-xml", src_dir: "vendored_parsers/tree-sitter-xml-src/tree-sitter-xml/src", extra_files: vec!["scanner.c"], diff --git a/manual/src/languages_supported.md b/manual/src/languages_supported.md index 2505c0413..7f319969a 100644 --- a/manual/src/languages_supported.md +++ b/manual/src/languages_supported.md @@ -51,6 +51,7 @@ with `difft --list-languages`. | SQL | [m-novikov/tree-sitter-sql](https://github.com/m-novikov/tree-sitter-sql) | | Swift | [alex-pinkus/tree-sitter-swift](https://github.com/alex-pinkus/tree-sitter-swift) | | TypeScript, TSX | [tree-sitter/tree-sitter-typescript](https://github.com/tree-sitter/tree-sitter-typescript) | +| VHDL | [JLeemaster/tree-sitter-vhdl](https://github.com/JLeemaster/tree-sitter-vhdl) | | Zig | [maxxnino/tree-sitter-zig](https://github.com/maxxnino/tree-sitter-zig) | ## Structured Text Formats diff --git a/sample_files/compare.expected b/sample_files/compare.expected index ce79dac86..79f1f734b 100644 --- a/sample_files/compare.expected +++ b/sample_files/compare.expected @@ -262,6 +262,9 @@ sample_files/typing_before.ml sample_files/typing_after.ml sample_files/utf16_before.py sample_files/utf16_after.py bbf22d2c5003b638c0f8d08f21bbbb66 - +sample_files/vhdl_before.vhd sample_files/vhdl_after.vhd +eb987aa621cfa733bb4fcd52b255fbbf - + sample_files/whitespace_before.tsx sample_files/whitespace_after.tsx 53017b74523e203817d64189142b26ed - diff --git a/sample_files/vhdl_after.vhd b/sample_files/vhdl_after.vhd new file mode 100644 index 000000000..ba7cbd7ba --- /dev/null +++ b/sample_files/vhdl_after.vhd @@ -0,0 +1,35 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity blinky is + port ( + clk: in std_logic; + led: out std_logic_vector(3 downto 0) + ); +end entity; + +architecture a of blinky is + constant CLK_FREQ: positive := 48_000_000; + signal counter1: unsigned(25 downto 0) := (others => '0'); + signal counter2: unsigned(1 downto 0) := (others => '0'); +begin + process(clk) + begin + if rising_edge(clk) then + if to_integer(counter1) = CLK_FREQ / 2 then + counter2 <= counter2 + 1; + counter1 <= (others => '0'); + else + counter1 <= counter1 + 1; + end if; + end if; + end process; + + process(counter2) + begin + for n in 0 to 3 loop + led(n) <= '1' when to_integer(counter2) = n else '0'; + end loop; + end process; +end architecture; diff --git a/sample_files/vhdl_before.vhd b/sample_files/vhdl_before.vhd new file mode 100644 index 000000000..dd43384c6 --- /dev/null +++ b/sample_files/vhdl_before.vhd @@ -0,0 +1,27 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity blinky is + port ( + clk: in std_logic; + led: out std_logic + ); +end entity; + +architecture a of blinky is + constant CLK_FREQ: positive := 12_000_000; + signal counter: unsigned(23 downto 0) := (others => '0'); +begin + process(clk) + begin + if rising_edge(clk) then + if to_integer(counter) = CLK_FREQ / 2 then + led <= not led; + counter <= (others => '0'); + else + counter <= counter + 1; + end if; + end if; + end process; +end architecture; diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index 262fe4973..3d80299e5 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -73,6 +73,7 @@ pub(crate) enum Language { Toml, TypeScript, TypeScriptTsx, + Vhdl, Xml, Yaml, Zig, @@ -161,6 +162,7 @@ pub(crate) fn language_name(language: Language) -> &'static str { Toml => "TOML", TypeScript => "TypeScript", TypeScriptTsx => "TypeScript TSX", + Vhdl => "VHDL", Xml => "XML", Yaml => "YAML", Zig => "Zig", @@ -352,6 +354,7 @@ pub(crate) fn language_globs(language: Language) -> Vec<glob::Pattern> { ], TypeScript => &["*.ts"], TypeScriptTsx => &["*.tsx"], + Vhdl => &["*.vhdl", "*.vhd"], Xml => &[ "*.ant", "*.csproj", @@ -508,6 +511,7 @@ fn from_emacs_mode_header(src: &str) -> Option<Language> { "toml" => Some(Toml), "tuareg" => Some(OCaml), "typescript" => Some(TypeScript), + "vhdl" => Some(Vhdl), "yaml" => Some(Yaml), "zig" => Some(Zig), _ => None, diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index 345f381b1..e59aa1be1 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -114,6 +114,7 @@ extern "C" { fn tree_sitter_toml() -> ts::Language; fn tree_sitter_tsx() -> ts::Language; fn tree_sitter_typescript() -> ts::Language; + fn tree_sitter_vhdl() -> ts::Language; fn tree_sitter_xml() -> ts::Language; fn tree_sitter_yaml() -> ts::Language; fn tree_sitter_zig() -> ts::Language; @@ -1107,6 +1108,20 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig { sub_languages: vec![], } } + Vhdl => { + let language = unsafe { tree_sitter_vhdl() }; + TreeSitterConfig { + language, + atom_nodes: vec![].into_iter().collect(), + delimiter_tokens: vec![("(", ")")], + highlight_query: ts::Query::new( + language, + include_str!("../../vendored_parsers/highlights/vhdl.scm"), + ) + .unwrap(), + sub_languages: vec![], + } + } Zig => { let language = unsafe { tree_sitter_zig() }; TreeSitterConfig { diff --git a/vendored_parsers/highlights/vhdl.scm b/vendored_parsers/highlights/vhdl.scm new file mode 120000 index 000000000..5cd1c36dc --- /dev/null +++ b/vendored_parsers/highlights/vhdl.scm @@ -0,0 +1 @@ +../tree-sitter-vhdl/queries/highlights.scm
\ No newline at end of file diff --git a/vendored_parsers/tree-sitter-vhdl-src b/vendored_parsers/tree-sitter-vhdl-src new file mode 120000 index 000000000..be853316b --- /dev/null +++ b/vendored_parsers/tree-sitter-vhdl-src @@ -0,0 +1 @@ +tree-sitter-vhdl/src/
\ No newline at end of file |