aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHilmar Wiegand <me@hwgnd.de>2024-05-13 10:47:04 +0200
committerChristian Clason <c.clason@uni-graz.at>2024-05-14 19:38:17 +0200
commitc26cfc75bc77b3538f4f288b013bc927a371bf2e (patch)
tree1e999002f1ffd9831c82477a991f5c619accc3b8
parentbot(lockfile): update idl, php, php_only, wit (diff)
downloadnvim-treesitter-c26cfc75bc77b3538f4f288b013bc927a371bf2e.tar
nvim-treesitter-c26cfc75bc77b3538f4f288b013bc927a371bf2e.tar.gz
nvim-treesitter-c26cfc75bc77b3538f4f288b013bc927a371bf2e.tar.bz2
nvim-treesitter-c26cfc75bc77b3538f4f288b013bc927a371bf2e.tar.lz
nvim-treesitter-c26cfc75bc77b3538f4f288b013bc927a371bf2e.tar.xz
nvim-treesitter-c26cfc75bc77b3538f4f288b013bc927a371bf2e.tar.zst
nvim-treesitter-c26cfc75bc77b3538f4f288b013bc927a371bf2e.zip
feat(typespec): add support for typespec
-rw-r--r--README.md1
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/typespec/highlights.scm135
-rw-r--r--queries/typespec/indents.scm18
-rw-r--r--queries/typespec/injections.scm5
6 files changed, 170 insertions, 0 deletions
diff --git a/README.md b/README.md
index e04e700d3..955d6628c 100644
--- a/README.md
+++ b/README.md
@@ -424,6 +424,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [turtle](https://github.com/BonaBeavis/tree-sitter-turtle) (maintained by @BonaBeavis)
- [x] [twig](https://github.com/gbprod/tree-sitter-twig) (maintained by @gbprod)
- [x] [typescript](https://github.com/tree-sitter/tree-sitter-typescript) (maintained by @steelsojka)
+- [x] [typespec](https://github.com/happenslol/tree-sitter-typespec) (maintained by @happenslol)
- [x] [typoscript](https://github.com/Teddytrombone/tree-sitter-typoscript) (maintained by @Teddytrombone)
- [x] [typst](https://github.com/uben0/tree-sitter-typst) (maintained by @uben0, @RaafatTurki)
- [x] [udev](https://github.com/ObserverOfTime/tree-sitter-udev) (maintained by @ObserverOfTime)
diff --git a/lockfile.json b/lockfile.json
index 6b16d920f..5da794a4a 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -752,6 +752,9 @@
"typescript": {
"revision": "7b4275d077ae196fc0ce42ab3ad091574e3ec519"
},
+ "typespec": {
+ "revision": "fd9a83c6c0aaaff4b1354454b5b9f130f59dd553"
+ },
"typoscript": {
"revision": "43b221c0b76e77244efdaa9963e402a17c930fbc"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 031b2658e..a3351d176 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -2181,6 +2181,14 @@ list.typescript = {
maintainers = { "@steelsojka" },
}
+list.typespec = {
+ install_info = {
+ url = "https://github.com/happenslol/tree-sitter-typespec",
+ files = { "src/parser.c" },
+ },
+ maintainers = { "@happenslol" },
+}
+
list.typoscript = {
install_info = {
url = "https://github.com/Teddytrombone/tree-sitter-typoscript",
diff --git a/queries/typespec/highlights.scm b/queries/typespec/highlights.scm
new file mode 100644
index 000000000..68c67c0d1
--- /dev/null
+++ b/queries/typespec/highlights.scm
@@ -0,0 +1,135 @@
+(identifier_or_member_expression) @type
+
+[
+ "is"
+ "extends"
+ "valueof"
+] @keyword.operator
+
+[
+ "namespace"
+ "model"
+ "scalar"
+ "interface"
+ "enum"
+ "union"
+ "alias"
+] @keyword.type
+
+[
+ "op"
+ "fn"
+ "dec"
+] @keyword.function
+
+"extern" @keyword.modifier
+
+[
+ "import"
+ "using"
+] @keyword.import
+
+[
+ "("
+ ")"
+ "{"
+ "}"
+ "<"
+ ">"
+ "["
+ "]"
+] @punctuation.bracket
+
+[
+ ","
+ ";"
+ "."
+ ":"
+] @punctuation.delimiter
+
+[
+ "|"
+ "&"
+ "="
+ "..."
+] @operator
+
+"?" @punctuation.special
+
+[
+ (single_line_comment)
+ (multi_line_comment)
+] @comment @spell
+
+[
+ (quoted_string_literal)
+ (triple_quoted_string_literal)
+] @string
+
+(boolean_literal) @boolean
+
+[
+ (decimal_literal)
+ (hex_integer_literal)
+ (binary_integer_literal)
+] @number
+
+(escape_sequence) @string.escape
+
+(builtin_type) @type.builtin
+
+(decorator
+ "@" @attribute
+ name: (identifier_or_member_expression) @attribute)
+
+(augment_decorator_statement
+ name: (identifier_or_member_expression) @attribute)
+
+(using_statement
+ module: (identifier_or_member_expression) @module)
+
+(namespace_statement
+ name: (identifier_or_member_expression) @module)
+
+(model_statement
+ name: (identifier) @type)
+
+(model_property
+ name: (identifier) @variable.member)
+
+(union_statement
+ name: (identifier) @type)
+
+(union_variant
+ name: (identifier) @variable.member)
+
+(scalar_statement
+ name: (identifier) @type)
+
+(interface_statement
+ name: (identifier) @type)
+
+(enum_statement
+ name: (identifier) @type)
+
+(enum_member
+ name: (identifier) @constant)
+
+(operation_statement
+ name: (identifier) @function)
+
+(template_parameter
+ name: (identifier) @type)
+
+(alias_statement
+ name: (identifier) @type)
+
+(decorator_declaration_statement
+ name: (identifier) @attribute)
+
+(function_parameter
+ name: (identifier) @variable.parameter)
+
+(operation_arguments
+ (model_property
+ name: (identifier) @variable.parameter))
diff --git a/queries/typespec/indents.scm b/queries/typespec/indents.scm
new file mode 100644
index 000000000..aee01f35a
--- /dev/null
+++ b/queries/typespec/indents.scm
@@ -0,0 +1,18 @@
+[
+ (model_expression)
+ (tuple_expression)
+ (namespace_body)
+ (interface_body)
+ (union_body)
+ (enum_body)
+ (template_arguments)
+ (template_parameters)
+ (operation_arguments)
+] @indent.begin
+
+[
+ "}"
+ ")"
+ ">"
+ "]"
+] @indent.end
diff --git a/queries/typespec/injections.scm b/queries/typespec/injections.scm
new file mode 100644
index 000000000..81d7734cb
--- /dev/null
+++ b/queries/typespec/injections.scm
@@ -0,0 +1,5 @@
+([
+ (single_line_comment)
+ (multi_line_comment)
+] @injection.content
+ (#set! injection.language "comment"))