diff --git a/languages.toml b/languages.toml index ce3ba20ad..51ffaef17 100644 --- a/languages.toml +++ b/languages.toml @@ -1140,7 +1140,7 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "rescript" -source = { git = "https://github.com/jaredramirez/tree-sitter-rescript", rev = "4cd7ba91696886fdaca086fb32b5fd8cc294a129" } +source = { git = "https://github.com/jaredramirez/tree-sitter-rescript", rev = "65609807c628477f3b94052e7ef895885ac51c3c" } [[language]] name = "erlang" diff --git a/runtime/queries/rescript/highlights.scm b/runtime/queries/rescript/highlights.scm index a9cbeb5cd..ed41322b4 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 201cce757..03e29b008 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 000000000..1240ed160 --- /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 fa1c4ff0d..4f1d8c53a 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) +