Add syntax highlighting for TOML

Max Brunsfeld created

Change summary

Cargo.lock                                   | 10 ++++++
crates/zed/Cargo.toml                        |  1 
crates/zed/src/languages.rs                  |  5 +++
crates/zed/src/languages/toml/brackets.scm   |  3 ++
crates/zed/src/languages/toml/config.toml    |  9 ++++++
crates/zed/src/languages/toml/highlights.scm | 33 ++++++++++++++++++++++
crates/zed/src/languages/toml/indents.scm    |  0 
crates/zed/src/languages/toml/outline.scm    | 15 ++++++++++
8 files changed, 76 insertions(+)

Detailed changes

Cargo.lock 🔗

@@ -5228,6 +5228,15 @@ dependencies = [
  "tree-sitter",
 ]
 
+[[package]]
+name = "tree-sitter-toml"
+version = "0.5.1"
+source = "git+https://github.com/tree-sitter/tree-sitter-toml?rev=342d9be207c2dba869b9967124c679b5e6fd0ebe#342d9be207c2dba869b9967124c679b5e6fd0ebe"
+dependencies = [
+ "cc",
+ "tree-sitter",
+]
+
 [[package]]
 name = "tree-sitter-typescript"
 version = "0.20.1"
@@ -5856,6 +5865,7 @@ dependencies = [
  "tree-sitter-json 0.20.0",
  "tree-sitter-markdown",
  "tree-sitter-rust",
+ "tree-sitter-toml",
  "tree-sitter-typescript",
  "unindent",
  "url",

crates/zed/Cargo.toml 🔗

@@ -89,6 +89,7 @@ tree-sitter-c = "0.20.1"
 tree-sitter-json = { git = "https://github.com/tree-sitter/tree-sitter-json", rev = "137e1ce6a02698fc246cdb9c6b886ed1de9a1ed8" }
 tree-sitter-rust = "0.20.1"
 tree-sitter-markdown = { git = "https://github.com/MDeiml/tree-sitter-markdown", rev = "330ecab87a3e3a7211ac69bbadc19eabecdb1cca" }
+tree-sitter-toml = { git = "https://github.com/tree-sitter/tree-sitter-toml", rev = "342d9be207c2dba869b9967124c679b5e6fd0ebe" }
 tree-sitter-typescript = "0.20.1"
 url = "2.2"
 

crates/zed/src/languages.rs 🔗

@@ -37,6 +37,11 @@ pub fn build_language_registry(login_shell_env_loaded: Task<()>) -> LanguageRegi
             tree_sitter_rust::language(),
             Some(Arc::new(rust::RustLspAdapter)),
         ),
+        (
+            "toml",
+            tree_sitter_toml::language(),
+            None, //
+        ),
         (
             "tsx",
             tree_sitter_typescript::language_tsx(),

crates/zed/src/languages/toml/config.toml 🔗

@@ -0,0 +1,9 @@
+name = "TOML"
+path_suffixes = ["toml"]
+line_comment = "# "
+autoclose_before = ",]}"
+brackets = [
+    { start = "{", end = "}", close = true, newline = true },
+    { start = "[", end = "]", close = true, newline = true },
+    { start = "\"", end = "\"", close = true, newline = false },
+]

crates/zed/src/languages/toml/highlights.scm 🔗

@@ -0,0 +1,33 @@
+; Properties
+;-----------
+
+(bare_key) @property
+(quoted_key) @property
+
+; Literals
+;---------
+
+(boolean) @constant
+(comment) @comment
+(string) @string
+(integer) @number
+(float) @number
+(offset_date_time) @string.special
+(local_date_time) @string.special
+(local_date) @string.special
+(local_time) @string.special
+
+; Punctuation
+;------------
+
+"." @punctuation.delimiter
+"," @punctuation.delimiter
+
+"=" @operator
+
+"[" @punctuation.bracket
+"]" @punctuation.bracket
+"[[" @punctuation.bracket
+"]]" @punctuation.bracket
+"{" @punctuation.bracket
+"}" @punctuation.bracket