From eb1e5992518742d3483a6650e7d1a3c5a48393fb Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Sun, 26 Mar 2023 18:37:15 -0400 Subject: [PATCH] feat: add FIRRTL --- lockfile.json | 3 + lua/nvim-treesitter/parsers.lua | 8 ++ queries/firrtl/folds.scm | 6 + queries/firrtl/highlights.scm | 189 ++++++++++++++++++++++++++++++++ queries/firrtl/indents.scm | 12 ++ queries/firrtl/injections.scm | 1 + queries/firrtl/locals.scm | 38 +++++++ 7 files changed, 257 insertions(+) create mode 100644 queries/firrtl/folds.scm create mode 100644 queries/firrtl/highlights.scm create mode 100644 queries/firrtl/indents.scm create mode 100644 queries/firrtl/injections.scm create mode 100644 queries/firrtl/locals.scm diff --git a/lockfile.json b/lockfile.json index 32885b6e9..87b940098 100644 --- a/lockfile.json +++ b/lockfile.json @@ -122,6 +122,9 @@ "fennel": { "revision": "517195970428aacca60891b050aa53eabf4ba78d" }, + "firrtl": { + "revision": "58e9655caa6b6d0ef8dc0e6bd3d8e060beb6b40d" + }, "fish": { "revision": "f9176908c9eb2e11eb684d79e1d00f3b29bd65c9" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 2c770dc82..c3c9bab6c 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -415,6 +415,14 @@ list.fennel = { maintainers = { "@TravonteD" }, } +list.firrtl = { + install_info = { + url = "https://github.com/amaanq/tree-sitter-firrtl", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@amaanq" }, +} + list.fish = { install_info = { url = "https://github.com/ram02z/tree-sitter-fish", diff --git a/queries/firrtl/folds.scm b/queries/firrtl/folds.scm new file mode 100644 index 000000000..437b2c81c --- /dev/null +++ b/queries/firrtl/folds.scm @@ -0,0 +1,6 @@ +[ + (circuit) + (module) + (when) + (else) +] @fold diff --git a/queries/firrtl/highlights.scm b/queries/firrtl/highlights.scm new file mode 100644 index 000000000..551b2e751 --- /dev/null +++ b/queries/firrtl/highlights.scm @@ -0,0 +1,189 @@ +; Namespaces + +(circuit (identifier) @namespace) + +(module (identifier) @namespace) + +; Types + +((identifier) @type + (#lua-match? @type "^[A-Z][A-Za-z0-9_$]*$")) + +; Keywords + +[ + "circuit" + "module" + "extmodule" + + "flip" + "parameter" + "reset" + "wire" + + "cmem" + "smem" + "mem" + + "reg" + "with" + "mport" + "inst" + "of" + "node" + "is" + "invalid" + "skip" + + "infer" + "read" + "write" + "rdwr" + + "defname" +] @keyword + +; Qualifiers + +(qualifier) @type.qualifier + +; Storageclasses + +[ + "input" + "output" +] @storageclass + +; Conditionals + +[ + "when" + "else" +] @conditional + +; Annotations + +(info) @attribute + +; Builtins + +[ + "stop" + "printf" + "assert" + "assume" + "cover" + "attach" + "mux" + "validif" +] @function.builtin + +[ + "UInt" + "SInt" + "Analog" + "Fixed" + "Clock" + "AsyncReset" + "Reset" +] @type.builtin + +; Fields + +[ + "data-type" + "depth" + "read-latency" + "write-latency" + "read-under-write" + "reader" + "writer" + "readwriter" +] @field.builtin + +((field_id) @field + (#set! "priority" 105)) + +(port (identifier) @field) + +(wire (identifier) @field) + +(cmem (identifier) @field) + +(smem (identifier) @field) + +(memory (identifier) @field) + +(register (identifier) @field) + +; Parameters + +(primitive_operation (identifier) @parameter) + +(mux (identifier) @parameter) +(printf (identifier) @parameter) +(reset (identifier) @parameter) +(stop (identifier) @parameter) + +; Variables + +(identifier) @variable + +; Operators + +(primop) @keyword.operator + +[ + "+" + "-" + "=" + "=>" + "<=" + "<-" +] @operator + +; Literals + +[ + (uint) + (number) +] @number + +(number_str) @string.special + +(double) @float + +(string) @string + +(escape_sequence) @string.escape + +[ + "old" + "new" + "undefined" +] @constant.builtin + +; Punctuation + +[ "{" "}" ] @punctuation.bracket + +[ "[" "]" ] @punctuation.bracket + +[ "<" ">" ] @punctuation.bracket + +[ "(" ")" ] @punctuation.bracket + +[ + "," + "." + ":" +] @punctuation.delimiter + +; Comments + +(comment) @comment @spell + +["=>" "<=" "="] @operator + +; Error +(ERROR) @error diff --git a/queries/firrtl/indents.scm b/queries/firrtl/indents.scm new file mode 100644 index 000000000..8bc1e2019 --- /dev/null +++ b/queries/firrtl/indents.scm @@ -0,0 +1,12 @@ +[ + (circuit) + (module) + (memory) + (when) + (else) +] @indent.begin + +[ + (ERROR) + (comment) +] @indent.auto diff --git a/queries/firrtl/injections.scm b/queries/firrtl/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/queries/firrtl/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/queries/firrtl/locals.scm b/queries/firrtl/locals.scm new file mode 100644 index 000000000..bb7fc56bd --- /dev/null +++ b/queries/firrtl/locals.scm @@ -0,0 +1,38 @@ +; Scopes + +[ + (source_file) + (circuit) + (module) + + (else) + (when) +] @scope + +; References + +(identifier) @reference + +; Definitions + +(port (identifier) @definition.field) + +(wire (identifier) @definition.field) + +(cmem (identifier) @definition.field) + +(smem (identifier) @definition.field) + +(memory (identifier) @definition.field) + +(register (identifier) @definition.field) + +(circuit (identifier) @definition.namespace) + +(module (identifier) @definition.namespace) + +(parameter (identifier) @definition.parameter) + +(rdwr (identifier) @definition.var) + +(node (identifier) @definition.var)