aboutsummaryrefslogtreecommitdiff
path: root/runtime/queries/rescript
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/queries/rescript')
-rw-r--r--runtime/queries/rescript/highlights.scm84
-rw-r--r--runtime/queries/rescript/injections.scm2
-rw-r--r--runtime/queries/rescript/locals.scm7
-rw-r--r--runtime/queries/rescript/textobjects.scm98
4 files changed, 168 insertions, 23 deletions
diff --git a/runtime/queries/rescript/highlights.scm b/runtime/queries/rescript/highlights.scm
index a9cbeb5c..ed41322b 100644
--- a/runtime/queries/rescript/highlights.scm
+++ b/runtime/queries/rescript/highlights.scm
@@ -10,20 +10,23 @@
[
(type_identifier)
(unit_type)
- "list"
] @type
+(list ["list{" "}"] @type)
+(list_pattern ["list{" "}"] @type)
+
[
(variant_identifier)
(polyvar_identifier)
-] @constant
+] @constructor
-(property_identifier) @variable.other.member
+(record_type_field (property_identifier) @type)
+(object_type (field (property_identifier) @type))
+(record_field (property_identifier) @variable.other.member)
+(object (field (property_identifier) @variable.other.member))
+(member_expression (property_identifier) @variable.other.member)
(module_identifier) @namespace
-(jsx_identifier) @tag
-(jsx_attribute (property_identifier) @variable.parameter)
-
; Parameters
;----------------
@@ -42,8 +45,8 @@
"${" @punctuation.bracket
"}" @punctuation.bracket) @embedded
-(character) @constant.character
-(escape_sequence) @constant.character.escape
+(character) @string.special
+(escape_sequence) @string.special
; Other literals
;---------------
@@ -60,11 +63,13 @@
; Functions
;----------
+; parameter(s) in parens
[
- (formal_parameters (value_identifier))
+ (parameter (value_identifier))
(labeled_parameter (value_identifier))
] @variable.parameter
+; single parameter with no parens
(function parameter: (value_identifier) @variable.parameter)
; Meta
@@ -74,7 +79,7 @@
"@"
"@@"
(decorator_identifier)
-] @label
+] @keyword.directive
(extension_identifier) @keyword
("%") @keyword
@@ -82,13 +87,13 @@
; Misc
;-----
-(subscript_expression index: (string) @variable.other.member)
+; (subscript_expression index: (string) @attribute)
(polyvar_type_pattern "#" @constant)
[
("include")
("open")
-] @keyword
+] @keyword.control.import
[
"as"
@@ -96,25 +101,43 @@
"external"
"let"
"module"
- "mutable"
"private"
"rec"
"type"
"and"
-] @keyword
+ "assert"
+ "async"
+ "await"
+ "with"
+ "unpack"
+] @keyword.storage.type
+
+"mutable" @keyword.storage.modifier
[
"if"
"else"
"switch"
-] @keyword
+ "when"
+] @keyword.control.conditional
[
"exception"
"try"
"catch"
- "raise"
-] @keyword
+] @keyword.control.exception
+
+(call_expression
+ function: (value_identifier) @keyword.control.exception
+ (#eq? @keyword.control.exception "raise"))
+
+[
+ "for"
+ "in"
+ "to"
+ "downto"
+ "while"
+] @keyword.control.conditional
[
"."
@@ -129,17 +152,15 @@
"-"
"-."
"*"
+ "**"
"*."
- "/"
"/."
- "<"
"<="
"=="
"==="
"!"
"!="
"!=="
- ">"
">="
"&&"
"||"
@@ -151,6 +172,10 @@
(uncurry)
] @operator
+; Explicitly enclose these operators with binary_expression
+; to avoid confusion with JSX tag delimiters
+(binary_expression ["<" ">" "/"] @operator)
+
[
"("
")"
@@ -172,7 +197,24 @@
"~"
"?"
"=>"
+ ".."
"..."
-] @punctuation
+] @punctuation.special
(ternary_expression ["?" ":"] @operator)
+
+; JSX
+;----------
+(jsx_identifier) @tag
+(jsx_element
+ open_tag: (jsx_opening_element ["<" ">"] @punctuation.special))
+(jsx_element
+ close_tag: (jsx_closing_element ["<" "/" ">"] @punctuation.special))
+(jsx_self_closing_element ["/" ">" "<"] @punctuation.special)
+(jsx_fragment [">" "<" "/"] @punctuation.special)
+(jsx_attribute (property_identifier) @attribute)
+
+; Error
+;----------
+
+(ERROR) @keyword.control.exception
diff --git a/runtime/queries/rescript/injections.scm b/runtime/queries/rescript/injections.scm
index 201cce75..03e29b00 100644
--- a/runtime/queries/rescript/injections.scm
+++ b/runtime/queries/rescript/injections.scm
@@ -5,4 +5,4 @@
(#set! injection.language "javascript"))
((raw_gql) @injection.content
- (#set! injection.language "graphql"))
+ (#set! injection.language "graphql")) \ No newline at end of file
diff --git a/runtime/queries/rescript/locals.scm b/runtime/queries/rescript/locals.scm
new file mode 100644
index 00000000..1240ed16
--- /dev/null
+++ b/runtime/queries/rescript/locals.scm
@@ -0,0 +1,7 @@
+(switch_expression) @local.scope
+(if_expression) @local.scope
+
+; Definitions
+;------------
+(type_declaration) @local.defintion
+(let_binding) @local.defintion
diff --git a/runtime/queries/rescript/textobjects.scm b/runtime/queries/rescript/textobjects.scm
index fa1c4ff0..4f1d8c53 100644
--- a/runtime/queries/rescript/textobjects.scm
+++ b/runtime/queries/rescript/textobjects.scm
@@ -3,14 +3,110 @@
(module_declaration definition: ((_) @class.inside)) @class.around
+; Blocks
+;-------
+
+(block (_) @function.inside) @function.around
+
; Functions
;----------
(function body: (_) @function.inside) @function.around
+; Calls
+;------
+
+(call_expression arguments: ((_) @parameter.inside)) @parameter.around
+
; Comments
;---------
(comment) @comment.inside
-
(comment)+ @comment.around
+
+; Parameters
+;-----------
+
+(function parameter: (_) @parameter.inside @parameter.around)
+
+(formal_parameters
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(formal_parameters
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(arguments
+ "," @_arguments_start
+ . (_) @parameter.inside
+ @parameter.around)
+(arguments
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(function_type_parameters
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(function_type_parameters
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(functor_parameters
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(functor_parameters
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(type_parameters
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(type_parameters
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(type_arguments
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(type_arguments
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(decorator_arguments
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(decorator_arguments
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(variant_parameters
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(variant_parameters
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+
+(polyvar_parameters
+ ","
+ . (_) @parameter.inside
+ @parameter.around)
+(polyvar_parameters
+ . (_) @parameter.inside
+ . ","?
+ @parameter.around)
+