aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml22
-rw-r--r--runtime/queries/wit/highlights.scm67
-rw-r--r--runtime/queries/wit/indents.scm13
4 files changed, 103 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 545ec635..38d121b5 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -126,6 +126,7 @@
| wast | ✓ | | | |
| wat | ✓ | | | |
| wgsl | ✓ | | | `wgsl_analyzer` |
+| wit | ✓ | | ✓ | |
| xit | ✓ | | | |
| xml | ✓ | | ✓ | |
| yaml | ✓ | | ✓ | `yaml-language-server` |
diff --git a/languages.toml b/languages.toml
index 9c0293f0..ee31f372 100644
--- a/languages.toml
+++ b/languages.toml
@@ -1917,3 +1917,25 @@ roots = []
[[grammar]]
name = "xml"
source = { git = "https://github.com/RenjiSann/tree-sitter-xml", rev = "422528a43630db6dcc1e222d1c5ee3babd559473" }
+
+[[language]]
+name = "wit"
+scope = "source.wit"
+injection-regex = "wit"
+file-types = ["wit"]
+roots = []
+comment-token = "//"
+indent = { tab-width = 2, unit = " " }
+
+[language.auto-pairs]
+'(' = ')'
+'{' = '}'
+'[' = ']'
+'"' = '"'
+"'" = "'"
+"<" = ">"
+
+[[grammar]]
+name = "wit"
+source = { git = "https://github.com/hh9527/tree-sitter-wit", rev = "c917790ab9aec50c5fd664cbfad8dd45110cfff3" }
+
diff --git a/runtime/queries/wit/highlights.scm b/runtime/queries/wit/highlights.scm
new file mode 100644
index 00000000..45754a5a
--- /dev/null
+++ b/runtime/queries/wit/highlights.scm
@@ -0,0 +1,67 @@
+(line_comment) @comment.line
+(block_comment) @comment.block
+(ty (ident) @type)
+
+(item_type name: (ident) @type)
+(item_record name: (ident) @type)
+(item_variant name: (ident) @type)
+(item_flags name: (ident) @type)
+(item_enum name: (ident) @type)
+(item_union name: (ident) @type)
+(item_resource name: (ident) @type)
+
+(item_use from: (ident) @namespace)
+(use_item name: (ident) @type)
+(item_func name: (ident) @function)
+(method name: (ident) @function.method)
+(fields (named_ty name: (ident) @variable.other.member))
+(input (args (named_ty name: (ident) @variable.parameter)))
+(output (args (named_ty name: (ident) @variable.other.member)))
+(flags (ident) @constant)
+(enum_items (ident) @constant)
+(variant_item tag: (ident) @type.enum.variant)
+
+[
+ (unit)
+
+ "u8" "u16" "u32" "u64"
+ "s8" "s16" "s32" "s64"
+ "float32" "float64"
+ "char" "bool" "string"
+] @type.builtin
+
+[
+ "list"
+ "option"
+ "result"
+ "tuple"
+ "future"
+ "stream"
+] @function.macro
+
+[ "," ":" ] @punctuation.delimiter
+[ "(" ")" "{" "}" "<" ">" ] @punctuation.bracket
+[ "=" "->" ] @operator
+
+[
+ "record"
+ "flags"
+ "variant"
+ "enum"
+ "union"
+ "type"
+ "resource"
+] @keyword.storage.type
+
+"func" @keyword
+
+[
+ "static"
+] @keyword.storage.modifier
+
+[
+ (star)
+ "use"
+ "as"
+ "from"
+] @keyword.control.import
diff --git a/runtime/queries/wit/indents.scm b/runtime/queries/wit/indents.scm
new file mode 100644
index 00000000..db6c148b
--- /dev/null
+++ b/runtime/queries/wit/indents.scm
@@ -0,0 +1,13 @@
+[
+ (use_items)
+ (fields)
+ (variant_items)
+ (variant_payload)
+ (flags)
+ (enum_items)
+ (union_items)
+ (args)
+ (resource_items)
+] @indent
+
+[ "}" ")" ] @outdent