aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml12
-rw-r--r--runtime/queries/crystal/highlights.scm66
3 files changed, 79 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 1400fa87..73e0bfcd 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -16,6 +16,7 @@
| common-lisp | ✓ | | | `cl-lsp` |
| cpon | ✓ | | ✓ | |
| cpp | ✓ | ✓ | ✓ | `clangd` |
+| crystal | ✓ | | | |
| css | ✓ | | | `vscode-css-language-server` |
| cue | ✓ | | | `cuelsp` |
| d | ✓ | ✓ | ✓ | `serve-d` |
diff --git a/languages.toml b/languages.toml
index d03726e7..42495e5c 100644
--- a/languages.toml
+++ b/languages.toml
@@ -224,6 +224,18 @@ name = "cpp"
source = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev = "d5e90fba898f320db48d81ddedd78d52c67c1fed" }
[[language]]
+name = "crystal"
+scope = "source.cr"
+file-types = ["cr"]
+roots = ["shard.yml", "shard.lock"]
+comment-token = "#"
+indent = { tab-width = 2, unit = " " }
+
+[[grammar]]
+name = "crystal"
+source = { git = "https://github.com/will/tree-sitter-crystal", rev = "15597b307b18028b04d288561f9c29794621562b" }
+
+[[language]]
name = "c-sharp"
scope = "source.csharp"
injection-regex = "c-?sharp"
diff --git a/runtime/queries/crystal/highlights.scm b/runtime/queries/crystal/highlights.scm
new file mode 100644
index 00000000..33a53e7f
--- /dev/null
+++ b/runtime/queries/crystal/highlights.scm
@@ -0,0 +1,66 @@
+[
+ "class"
+ "struct"
+ "module"
+
+ "def"
+ "alias"
+ "do"
+ "end"
+
+ "require"
+ "include"
+ "extend"
+] @keyword
+
+[
+ "[" "]"
+ "(" ")"
+ "{" "}"
+] @punctuation.bracket
+
+(operator) @operator
+
+(comment) @comment
+
+; literals
+
+(nil) @constant.builtin
+(bool) @constant.builtin.boolean
+
+(integer) @constant.numeric.integer
+(float) @constant.numeric.float
+
+[
+ (string)
+ (char)
+ (commandLiteral)
+] @string
+
+(symbol) @string.special.symbol
+
+(regex) @string.special.regex
+
+; variables
+
+(local_variable) @variable
+
+[
+ (instance_variable)
+ (class_variable)
+] @variable.other.member
+
+(constant) @constant
+
+; type defintitions
+
+(type_identifier) @constructor
+
+; method definition/call
+(identifier) @function.method
+
+; types
+(generic_type) @type
+(union_type) @type
+(type_identifier) @type
+