From b89b2eaf68c53a2c10a0f649f9487ad46c85e11e Mon Sep 17 00:00:00 2001
From: Philipp Mildenberger <philipp@mildenberger.me>
Date: Mon, 20 Feb 2023 23:42:54 +0100
Subject: [PATCH] Added yuck language support (for eww) (#6064)

---
 book/src/generated/lang-support.md  |  1 +
 languages.toml                      | 13 ++++++
 runtime/queries/yuck/highlights.scm | 66 +++++++++++++++++++++++++++++
 runtime/queries/yuck/injections.scm |  2 +
 4 files changed, 82 insertions(+)
 create mode 100644 runtime/queries/yuck/highlights.scm
 create mode 100644 runtime/queries/yuck/injections.scm

diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index b9442693dfda..1cdc9e6cabfa 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -147,4 +147,5 @@
 | xit | ✓ |  |  |  |
 | xml | ✓ |  | ✓ |  |
 | yaml | ✓ |  | ✓ | `yaml-language-server` |
+| yuck | ✓ |  |  |  |
 | zig | ✓ | ✓ | ✓ | `zls` |
diff --git a/languages.toml b/languages.toml
index 6aac13970fe9..38dedb44153f 100644
--- a/languages.toml
+++ b/languages.toml
@@ -2180,3 +2180,16 @@ comment-token = "("
 [[grammar]]
 name = "uxntal"
 source = { git = "https://github.com/Jummit/tree-sitter-uxntal", rev = "9297e95ef74380b0ad84c4fd98f91e9f6e4319e6" }
+
+[[language]]
+name = "yuck"
+scope = "source.yuck"
+injection-regex = "yuck"
+file-types = ["yuck"]
+roots = []
+comment-token = ";"
+indent = { tab-width = 2, unit = "  " }
+
+[[grammar]]
+name = "yuck"
+source = { git = "https://github.com/Philipp-M/tree-sitter-yuck", rev = "9e97da5773f82123a8c8cccf8f7e795d140ed7d1" }
diff --git a/runtime/queries/yuck/highlights.scm b/runtime/queries/yuck/highlights.scm
new file mode 100644
index 000000000000..483348a8c563
--- /dev/null
+++ b/runtime/queries/yuck/highlights.scm
@@ -0,0 +1,66 @@
+(ERROR) @error
+
+(line_comment) @comment
+
+; keywords and symbols
+
+(keyword) @keyword
+(symbol) @tag
+
+; literals
+
+(bool_literal) @constant.builtin.boolean
+(num_literal) @constant.numeric
+
+; strings
+(string_interpolation
+  (string_interpolation_start) @punctuation.special
+  (string_interpolation_end) @punctuation.special)
+
+(escape_sequence) @constant.character.escape
+
+(string
+  [
+    (unescaped_single_quote_string_fragment)
+    (unescaped_double_quote_string_fragment)
+    (unescaped_backtick_string_fragment)
+    "\""
+    "'"
+    "`"
+  ]) @string
+
+; operators and general punctuation
+
+(unary_expression
+  operator: _ @operator)
+
+(binary_expression
+  operator: _ @operator)
+
+(ternary_expression
+  operator: _ @operator)
+
+[
+  ":"
+  "."
+  ","
+] @punctuation.delimiter
+
+[
+  "("
+  ")"
+  "["
+  "]"
+  "{"
+  "}"
+] @punctuation.bracket
+[
+  ":"
+  "."
+  ","
+] @punctuation.delimiter
+
+; Rest (general identifiers that are not yet catched)
+
+(index) @variable
+(ident) @variable
diff --git a/runtime/queries/yuck/injections.scm b/runtime/queries/yuck/injections.scm
new file mode 100644
index 000000000000..d3fdb0ca7178
--- /dev/null
+++ b/runtime/queries/yuck/injections.scm
@@ -0,0 +1,2 @@
+((line_comment) @injection.content
+ (#set! injection.language "comment"))