summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArmin Brauns <armin.brauns@embedded-solutions.at>2024-01-08 14:22:07 +0000
committerArmin Brauns <armin.brauns@embedded-solutions.at>2024-01-09 09:23:51 +0000
commitc5638750d6204ff9199f8ad6dd675301edb48054 (patch)
treec8f6a4b8a059df7b43a741667e9d2441339394d0
parent3de60c60ace8dd2c26fad4355ac18977f3a7ecf2 (diff)
Add tree-sitter-vhdl
-rw-r--r--build.rs5
-rw-r--r--manual/src/languages_supported.md1
-rw-r--r--sample_files/compare.expected3
-rw-r--r--sample_files/vhdl_after.vhd35
-rw-r--r--sample_files/vhdl_before.vhd27
-rw-r--r--src/parse/guess_language.rs4
-rw-r--r--src/parse/tree_sitter_parser.rs15
l---------vendored_parsers/highlights/vhdl.scm1
l---------vendored_parsers/tree-sitter-vhdl-src1
9 files changed, 92 insertions, 0 deletions
diff --git a/build.rs b/build.rs
index dc3321fa0..96e1a9cf4 100644
--- a/build.rs
+++ b/build.rs
@@ -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