aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/roc/highlights.scm189
-rw-r--r--queries/roc/injections.scm5
-rw-r--r--queries/roc/locals.scm40
6 files changed, 246 insertions, 0 deletions
diff --git a/README.md b/README.md
index 678b436c3..cd86e7612 100644
--- a/README.md
+++ b/README.md
@@ -370,6 +370,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [pip requirements](https://github.com/ObserverOfTime/tree-sitter-requirements) (maintained by @ObserverOfTime)
- [x] [rnoweb](https://github.com/bamonroe/tree-sitter-rnoweb) (maintained by @bamonroe)
- [x] [robot](https://github.com/Hubro/tree-sitter-robot) (maintained by @Hubro)
+- [x] [roc](https://github.com/nat-418/tree-sitter-roc) (maintained by @nat-418)
- [x] [ron](https://github.com/amaanq/tree-sitter-ron) (maintained by @amaanq)
- [x] [rst](https://github.com/stsewd/tree-sitter-rst) (maintained by @stsewd)
- [x] [ruby](https://github.com/tree-sitter/tree-sitter-ruby) (maintained by @TravonteD)
diff --git a/lockfile.json b/lockfile.json
index 0bd368304..58ec40a1b 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -590,6 +590,9 @@
"robot": {
"revision": "322e4cc65754d2b3fdef4f2f8a71e0762e3d13af"
},
+ "roc": {
+ "revision": "14c66eeceb7db2d5c98616036d861863b273bab8"
+ },
"ron": {
"revision": "ce6086b2c9e8e71065b8129d6c2289c5f66d1879"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 70379f1dd..e136ead56 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -1730,6 +1730,14 @@ list.robot = {
maintainers = { "@Hubro" },
}
+list.roc = {
+ install_info = {
+ url = "https://github.com/nat-418/tree-sitter-roc",
+ files = { "src/parser.c", "src/scanner.c" },
+ },
+ maintainers = { "@nat-418" },
+}
+
list.ron = {
install_info = {
url = "https://github.com/amaanq/tree-sitter-ron",
diff --git a/queries/roc/highlights.scm b/queries/roc/highlights.scm
new file mode 100644
index 000000000..d47c8770e
--- /dev/null
+++ b/queries/roc/highlights.scm
@@ -0,0 +1,189 @@
+;---Most generic types---
+(module) @module
+
+(identifier) @variable
+
+(concrete_type) @type
+
+;---annotations----
+(annotation_type_def
+ (annotation_pre_colon
+ (identifier) @type))
+
+(annotation_type_def
+ (annotation_pre_colon
+ (identifier) @function)
+ (function_type))
+
+;----decleration types----
+(value_declaration
+ (decl_left
+ (identifier_pattern
+ (identifier) @variable.parameter)))
+
+;---records----
+(field_name) @variable.member
+
+(record_field_pattern
+ (_
+ (identifier) @variable))
+
+;matches the second identifier and all subsequent ones
+(field_access_expr
+ (identifier) @variable.member)
+
+;----comments----
+(line_comment) @comment @spell
+
+(doc_comment) @comment.documentation @spell
+
+;-----Punctuation----
+[
+ "?"
+ (arrow)
+ (back_arrow)
+ (backslash)
+ ","
+ ":"
+] @punctuation.delimiter
+
+[
+ "("
+ ")"
+ "{"
+ "}"
+ "["
+ "]"
+] @punctuation.bracket
+
+[
+ "|"
+ "&"
+ (operator)
+] @operator
+
+(wildcard_pattern) @constant.builtin
+
+[
+ "if"
+ "then"
+ "else"
+] @keyword.conditional
+
+[
+ (implements)
+ (when)
+ (is)
+ "as"
+ (to)
+] @keyword
+
+;----headers-----
+(interface_header
+ (name) @type.definition)
+
+(imports
+ (imports_entry
+ (module) @module))
+
+(packages
+ (record_pattern
+ (record_field_pattern
+ (field_name) @module)))
+
+(app_name) @string.special
+
+(import_path) @string.special.path
+
+[
+ "app"
+ "packages"
+ "provides"
+ "interface"
+ "exposes"
+ "expect"
+] @keyword
+
+[
+ (import_as)
+ "imports"
+] @keyword.import
+
+(backpassing_expr
+ assignee: (identifier_pattern
+ (identifier) @variable.parameter))
+
+(value_declaration
+ (decl_left
+ (identifier_pattern
+ (identifier) @function))
+ (expr_body
+ (anon_fun_expr)))
+
+;----tags----
+(tags_type
+ (apply_type
+ (concrete_type) @constructor))
+
+[
+ (tag)
+ (opaque_tag)
+] @constructor
+
+;-----builtins----
+(variable_expr
+ (module) @module
+ (identifier) @boolean
+ (#any-of? @boolean "true" "false")
+ (#eq? @module "Bool"))
+
+"dbg" @keyword.debug
+
+;----function invocations ----
+(function_call_expr
+ caller: (variable_expr
+ (identifier) @function.call))
+
+(function_call_expr
+ caller: (field_access_expr
+ (identifier) @function.call .))
+
+(bin_op_expr
+ (operator
+ "|>") @operator
+ (variable_expr
+ (identifier) @function))
+
+;----function arguments----
+(argument_patterns
+ (identifier_pattern
+ (identifier) @variable.parameter))
+
+(argument_patterns
+ (_
+ (identifier_pattern
+ (identifier) @variable.parameter)))
+
+(argument_patterns
+ (_
+ (_
+ (identifier_pattern
+ (identifier) @variable.parameter))))
+
+;-----consts-----
+[
+ (int)
+ (uint)
+ (iint)
+ (xint)
+ (natural)
+] @number
+
+[
+ (decimal)
+ (float)
+] @number.float
+
+(string) @string
+
+(char) @character
diff --git a/queries/roc/injections.scm b/queries/roc/injections.scm
new file mode 100644
index 000000000..326478351
--- /dev/null
+++ b/queries/roc/injections.scm
@@ -0,0 +1,5 @@
+([
+ (line_comment)
+ (doc_comment)
+] @injection.content
+ (#set! injection.language "comment"))
diff --git a/queries/roc/locals.scm b/queries/roc/locals.scm
new file mode 100644
index 000000000..71bb19407
--- /dev/null
+++ b/queries/roc/locals.scm
@@ -0,0 +1,40 @@
+(expr_body) @local.scope
+
+(argument_patterns
+ (identifier_pattern
+ (identifier) @local.definition))
+
+; (argument_patterns(long_identifier)@local.definition)
+(exposes_list
+ (ident) @local.reference)
+
+(opaque_type_def
+ (apply_type
+ (concrete_type) @local.definition.type))
+
+(alias_type_def
+ (apply_type
+ (concrete_type) @local.definition.type))
+
+(value_declaration
+ (decl_left
+ (identifier_pattern
+ (identifier) @local.definition.function))
+ (expr_body
+ (anon_fun_expr)))
+
+(value_declaration
+ (decl_left
+ (identifier_pattern
+ (identifier) @local.definition.var)))
+
+(identifier_pattern
+ (identifier) @local.definition)
+
+(exposes
+ (ident) @local.reference)
+
+(identifier) @local.reference
+
+(tag_expr
+ (tag)) @local.reference