From 94d210c9bf78af1d170534bc3398b334f289be33 Mon Sep 17 00:00:00 2001
From: Phil <me@pnelson.ca>
Date: Mon, 18 Mar 2024 12:13:23 +0000
Subject: [PATCH] Add initial support for SuperCollider (#9329)

---
 book/src/generated/lang-support.md           |  1 +
 languages.toml                               | 12 ++++
 runtime/queries/supercollider/folds.scm      |  7 ++
 runtime/queries/supercollider/highlights.scm | 76 ++++++++++++++++++++
 4 files changed, 96 insertions(+)
 create mode 100644 runtime/queries/supercollider/folds.scm
 create mode 100644 runtime/queries/supercollider/highlights.scm

diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 4a0b4b0a..fdec0270 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -170,6 +170,7 @@
 | sshclientconfig | ✓ |  |  |  |
 | starlark | ✓ | ✓ |  |  |
 | strace | ✓ |  |  |  |
+| supercollider | ✓ |  |  |  |
 | svelte | ✓ |  | ✓ | `svelteserver` |
 | sway | ✓ | ✓ | ✓ | `forc` |
 | swift | ✓ |  |  | `sourcekit-lsp` |
diff --git a/languages.toml b/languages.toml
index 6e6c5793..f0d6771f 100644
--- a/languages.toml
+++ b/languages.toml
@@ -3328,3 +3328,15 @@ grammar = "hyprlang"
 [[grammar]]
 name = "hyprlang"
 source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-hyprlang", rev = "27af9b74acf89fa6bed4fb8cb8631994fcb2e6f3"}
+
+[[language]]
+name = "supercollider"
+scope = "source.supercollider"
+injection-regex = "supercollider"
+file-types = ["scd", "sc", "quark"]
+comment-token = "//"
+indent = { tab-width = 4, unit = "\t" }
+
+[[grammar]]
+name = "supercollider"
+source = { git = "https://github.com/madskjeldgaard/tree-sitter-supercollider", rev = "3b35bd0fded4423c8fb30e9585c7bacbcd0e8095" }
diff --git a/runtime/queries/supercollider/folds.scm b/runtime/queries/supercollider/folds.scm
new file mode 100644
index 00000000..214247bc
--- /dev/null
+++ b/runtime/queries/supercollider/folds.scm
@@ -0,0 +1,7 @@
+[
+(function_call)
+(code_block)
+(function_block)
+(control_structure)
+] @fold
+
diff --git a/runtime/queries/supercollider/highlights.scm b/runtime/queries/supercollider/highlights.scm
new file mode 100644
index 00000000..0128606d
--- /dev/null
+++ b/runtime/queries/supercollider/highlights.scm
@@ -0,0 +1,76 @@
+(line_comment) @comment.line
+(block_comment) @comment.block
+
+(argument name: (identifier) @variable.parameter)
+
+(local_var name: (identifier) @variable)
+(environment_var name:(identifier) @variable.builtin)
+(builtin_var) @constant.builtin
+
+(function_definition name: (variable) @function)
+
+(named_argument name: (identifier) @variable.other.member)
+
+(method_call name: (method_name) @function.method)
+
+(class) @keyword.storage.type
+
+(number) @constant.numeric
+(float) @constant.numeric.float
+
+(string) @string
+(symbol) @string.special.symbol
+
+[
+"&&"
+"||"
+"&"
+"|"
+"^"
+"=="
+"!="
+"<"
+"<="
+">"
+">="
+"<<"
+">>"
+"+"
+"-"
+"*"
+"/"
+"%"
+"="
+"|@|"
+"@@"
+"@|@"
+] @operator
+
+[
+"arg"
+"classvar"
+"const"
+"var"
+] @keyword
+
+[
+  "("
+  ")"
+  "["
+  "]"
+  "{"
+  "}"
+  "|"
+] @punctuation.bracket
+
+[
+  ";"
+  "."
+  ","
+] @punctuation.delimiter
+
+(control_structure) @keyword.control.conditional
+
+(escape_sequence) @string.special
+
+(duplicated_statement) @keyword.control.repeat