From 3a878c8d6cb79071c6dc95e76df0017e4c2c2ae2 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 21 Apr 2022 16:39:49 -0700 Subject: [PATCH] Add syntax highlighting for TOML --- 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(+) create mode 100644 crates/zed/src/languages/toml/brackets.scm create mode 100644 crates/zed/src/languages/toml/config.toml create mode 100644 crates/zed/src/languages/toml/highlights.scm create mode 100644 crates/zed/src/languages/toml/indents.scm create mode 100644 crates/zed/src/languages/toml/outline.scm diff --git a/Cargo.lock b/Cargo.lock index 52c11671a8..15b9d1706f 100644 --- a/Cargo.lock +++ b/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", diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 9c27069240..2f0310fd45 100644 --- a/crates/zed/Cargo.toml +++ b/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" diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index e90a1cd737..d0d6de989a 100644 --- a/crates/zed/src/languages.rs +++ b/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(), diff --git a/crates/zed/src/languages/toml/brackets.scm b/crates/zed/src/languages/toml/brackets.scm new file mode 100644 index 0000000000..9e8c9cd93c --- /dev/null +++ b/crates/zed/src/languages/toml/brackets.scm @@ -0,0 +1,3 @@ +("[" @open "]" @close) +("{" @open "}" @close) +("\"" @open "\"" @close) diff --git a/crates/zed/src/languages/toml/config.toml b/crates/zed/src/languages/toml/config.toml new file mode 100644 index 0000000000..cd624aecef --- /dev/null +++ b/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 }, +] diff --git a/crates/zed/src/languages/toml/highlights.scm b/crates/zed/src/languages/toml/highlights.scm new file mode 100644 index 0000000000..9f43b6aa6f --- /dev/null +++ b/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 \ No newline at end of file diff --git a/crates/zed/src/languages/toml/indents.scm b/crates/zed/src/languages/toml/indents.scm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/crates/zed/src/languages/toml/outline.scm b/crates/zed/src/languages/toml/outline.scm new file mode 100644 index 0000000000..d232d489b6 --- /dev/null +++ b/crates/zed/src/languages/toml/outline.scm @@ -0,0 +1,15 @@ +(table + . + "[" + . + (_) @name) @item + +(table_array_element + . + "[[" + . + (_) @name) @item + +(pair + . + (_) @name) @item \ No newline at end of file