aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml15
-rw-r--r--runtime/queries/nickel/highlights.scm67
-rw-r--r--runtime/queries/nickel/indents.scm17
4 files changed, 100 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 55b92862..a1746c4c 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -46,6 +46,7 @@
| make | ✓ | | | |
| markdown | ✓ | | | |
| mint | | | | `mint` |
+| nickel | ✓ | | ✓ | `nls` |
| nix | ✓ | | ✓ | `rnix-lsp` |
| ocaml | ✓ | | ✓ | `ocamllsp` |
| ocaml-interface | ✓ | | | `ocamllsp` |
diff --git a/languages.toml b/languages.toml
index 6e78e78a..fb54427d 100644
--- a/languages.toml
+++ b/languages.toml
@@ -381,6 +381,21 @@ name = "python"
source = { git = "https://github.com/tree-sitter/tree-sitter-python", rev = "d6210ceab11e8d812d4ab59c07c81458ec6e5184" }
[[language]]
+name = "nickel"
+scope = "source.nickel"
+injection-regex = "nickel"
+file-types = ["ncl"]
+shebangs = []
+roots = []
+comment-token = "#"
+language-server = { command = "nls" }
+indent = { tab-width = 2, unit = " " }
+
+[[grammar]]
+name = "nickel"
+source = { git = "https://github.com/nickel-lang/tree-sitter-nickel", rev = "85348774ccf7624fac72703b2264d18b6f572be6" }
+
+[[language]]
name = "nix"
scope = "source.nix"
injection-regex = "nix"
diff --git a/runtime/queries/nickel/highlights.scm b/runtime/queries/nickel/highlights.scm
new file mode 100644
index 00000000..a204dfca
--- /dev/null
+++ b/runtime/queries/nickel/highlights.scm
@@ -0,0 +1,67 @@
+(types) @type
+(type_builtin) @type.builtin
+"Array" @type.builtin
+
+(enum_tag) @constructor
+
+"null" @constant.builtin
+(bool) @constant.builtin.boolean
+(str_esc_char) @constant.character.escape
+(num_literal) @constant.numeric
+
+(str_chunks) @string
+
+; NOTE: Nickel has no block comments
+(comment) @comment.line
+; Nickel doesn't use comments for documentation, ideally this would be
+; `@documentation` or something similar
+(annot_atom
+ doc: (static_string) @comment.block.documentation
+)
+
+(record_operand (atom (ident) @variable))
+(let_expr
+ "let" @keyword
+ pat: (pattern
+ (ident) @variable
+ )
+ "in" @keyword
+)
+(fun_expr
+ "fun" @keyword.function
+ pats:
+ (pattern
+ id: (ident) @variable.parameter
+ )+
+ "=>" @operator
+)
+(record_field) @variable.other.member
+
+[
+ "."
+] @punctuation.delimiter
+[
+ "{" "}"
+ "(" ")"
+ "[|" "|]"
+ "[" "]"
+] @punctuation.bracket
+(multstr_start) @punctuation.bracket
+(multstr_end) @punctuation.bracket
+(interpolation_start) @punctuation.bracket
+(interpolation_end) @punctuation.bracket
+
+["forall" "default" "doc"] @keyword
+["if" "then" "else" "switch"] @keyword.control.conditional
+"import" @keyword.control.import
+
+(infix_expr
+ op: (_) @operator
+)
+
+(applicative
+ t1: (applicative
+ (record_operand) @function
+ )
+)
+(builtin) @function.builtin
diff --git a/runtime/queries/nickel/indents.scm b/runtime/queries/nickel/indents.scm
new file mode 100644
index 00000000..8be5a6bd
--- /dev/null
+++ b/runtime/queries/nickel/indents.scm
@@ -0,0 +1,17 @@
+[
+ (fun_expr)
+ (let_expr)
+ (switch_expr)
+ (ite_expr)
+
+ (uni_record)
+ (str_chunks_multi)
+ "["
+ "[|"
+] @indent
+
+[
+ "}"
+ "]"
+ "|]"
+] @outdent