From 52a43bcdfcc258a2871be468a3e31496dd2d80c8 Mon Sep 17 00:00:00 2001
From: woojiq <122799969+woojiq@users.noreply.github.com>
Date: Mon, 22 Jan 2024 20:51:12 +0200
Subject: [PATCH] bash, make, css: highlight and indent queries improvement
 (#9393)

* highlights(bash): rework keywords section

* Use more specified scope when possible for keywords like @keyword.repeat.
* Add more keywords like "local" or "unsetenv".

Limitation:
* Bash doesn't allow you to have a local variable outside of a function, so maybe we need to have better queries to not highlight the local in this case.
* If we name a function with a keyword (such as unset or local), it will use the highlight scope "keyword" instead of "function".

* indents(css, make): add basic queries

* Despite the fact that queries look simple, they improve indentation in some edge cases that helix couldn't handle correctly by default.
---
 book/src/generated/lang-support.md  |  4 ++--
 runtime/queries/bash/highlights.scm | 36 ++++++++++++++++++++---------
 runtime/queries/css/indents.scm     |  7 ++++++
 runtime/queries/make/indents.scm    |  8 +++++++
 4 files changed, 42 insertions(+), 13 deletions(-)
 create mode 100644 runtime/queries/css/indents.scm
 create mode 100644 runtime/queries/make/indents.scm

diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index ee01c403..6fedace6 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -21,7 +21,7 @@
 | cpon | ✓ |  | ✓ |  |
 | cpp | ✓ | ✓ | ✓ | `clangd` |
 | crystal | ✓ | ✓ |  | `crystalline` |
-| css | ✓ |  |  | `vscode-css-language-server` |
+| css | ✓ |  | ✓ | `vscode-css-language-server` |
 | cue | ✓ |  |  | `cuelsp` |
 | d | ✓ | ✓ | ✓ | `serve-d` |
 | dart | ✓ |  | ✓ | `dart` |
@@ -97,7 +97,7 @@
 | log | ✓ |  |  |  |
 | lpf | ✓ |  |  |  |
 | lua | ✓ | ✓ | ✓ | `lua-language-server` |
-| make | ✓ |  |  |  |
+| make | ✓ |  | ✓ |  |
 | markdoc | ✓ |  |  | `markdoc-ls` |
 | markdown | ✓ |  |  | `marksman` |
 | markdown.inline | ✓ |  |  |  |
diff --git a/runtime/queries/bash/highlights.scm b/runtime/queries/bash/highlights.scm
index 3f2df638..92d61e8b 100644
--- a/runtime/queries/bash/highlights.scm
+++ b/runtime/queries/bash/highlights.scm
@@ -10,23 +10,37 @@
 (variable_name) @variable.other.member
 
 [
+  "if"
+  "then"
+  "else"
+  "elif"
+  "fi"
   "case"
+  "in"
+  "esac"
+] @keyword.control.conditional
+
+[
+  "for"
   "do"
   "done"
-  "elif"
-  "else"
-  "esac"
-  "export"
-  "fi"
-  "for"
-  "function"
-  "if"
-  "in"
-  "unset"
+  "select"
+  "until"
   "while"
-  "then"
+] @keyword.control.repeat
+
+[
+  "declare"
+  "typeset"
+  "export"
+  "readonly"
+  "local"
+  "unset"
+  "unsetenv"
 ] @keyword
 
+"function" @keyword.function
+
 (comment) @comment
 
 (function_definition name: (word) @function)
diff --git a/runtime/queries/css/indents.scm b/runtime/queries/css/indents.scm
new file mode 100644
index 00000000..1dfd977d
--- /dev/null
+++ b/runtime/queries/css/indents.scm
@@ -0,0 +1,7 @@
+[
+  (block)
+] @indent
+
+[
+ "}"
+] @outdent
diff --git a/runtime/queries/make/indents.scm b/runtime/queries/make/indents.scm
new file mode 100644
index 00000000..42b2c60e
--- /dev/null
+++ b/runtime/queries/make/indents.scm
@@ -0,0 +1,8 @@
+[
+  (define_directive)
+  (rule)
+] @indent
+
+[
+  "endef"
+] @outdent