From 833573134dfe282b2c831f502c0398f3ac76799d Mon Sep 17 00:00:00 2001 From: Freddie Ridell Date: Sun, 14 Jul 2024 12:35:48 +0100 Subject: [PATCH] update to newest rescript treesitter library and queries --- languages.toml | 2 +- runtime/queries/rescript/highlights.scm | 81 ++++++++------- runtime/queries/rescript/injections.scm | 33 ++++-- runtime/queries/rescript/locals.scm | 8 +- runtime/queries/rescript/textobjects.scm | 122 ++++++++++++----------- 5 files changed, 137 insertions(+), 109 deletions(-) diff --git a/languages.toml b/languages.toml index 97ee3e54a1bef..bc7a08209a696 100644 --- a/languages.toml +++ b/languages.toml @@ -1758,7 +1758,7 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "rescript" -source = { git = "https://github.com/jaredramirez/tree-sitter-rescript", rev = "467dcf99f68c47823d7b378779a6b282d7ef9782" } +source = { git = "https://github.com/rescript-lang/tree-sitter-rescript", rev = "5e2a44a9d886b0a509f5bfd0437d33b4871fbac5" } [[language]] name = "erlang" diff --git a/runtime/queries/rescript/highlights.scm b/runtime/queries/rescript/highlights.scm index ed41322b45a9d..0b4fe45076691 100644 --- a/runtime/queries/rescript/highlights.scm +++ b/runtime/queries/rescript/highlights.scm @@ -4,34 +4,33 @@ ;------------ ; Escaped identifiers like \"+." -((value_identifier) @function.macro - (#match? @function.macro "^\\.*$")) +((value_identifier) @constant.macro + (#match? @constant.macro "^\\.*$")) [ (type_identifier) (unit_type) + (list) + (list_pattern) ] @type -(list ["list{" "}"] @type) -(list_pattern ["list{" "}"] @type) - [ (variant_identifier) (polyvar_identifier) -] @constructor +] @constant -(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) +(record_type_field (property_identifier) @property) +(record_field (property_identifier) @property) +(object (field (property_identifier) @property)) +(object_type (field (property_identifier) @property)) +(member_expression (property_identifier) @property) (module_identifier) @namespace ; Parameters ;---------------- -(list_pattern (value_identifier) @variable.parameter) -(spread_pattern (value_identifier) @variable.parameter) +(list_pattern (value_identifier) @parameter) +(spread_pattern (value_identifier) @parameter) ; String literals ;---------------- @@ -46,7 +45,7 @@ "}" @punctuation.bracket) @embedded (character) @string.special -(escape_sequence) @string.special +(escape_sequence) @string.escape ; Other literals ;--------------- @@ -56,7 +55,7 @@ (false) ] @constant.builtin -(number) @constant.numeric +(number) @number (polyvar) @constant (polyvar_string) @constant @@ -67,19 +66,21 @@ [ (parameter (value_identifier)) (labeled_parameter (value_identifier)) -] @variable.parameter +] @parameter ; single parameter with no parens -(function parameter: (value_identifier) @variable.parameter) +(function parameter: (value_identifier) @parameter) + +; first-level descructuring (required for nvim-tree-sitter as it only matches direct +; children and the above patterns do not match destructuring patterns in NeoVim) +(parameter (tuple_pattern (tuple_item_pattern (value_identifier) @parameter))) +(parameter (array_pattern (value_identifier) @parameter)) +(parameter (record_pattern (value_identifier) @parameter)) ; Meta ;----- -[ - "@" - "@@" - (decorator_identifier) -] @keyword.directive +(decorator_identifier) @annotation (extension_identifier) @keyword ("%") @keyword @@ -87,13 +88,13 @@ ; Misc ;----- -; (subscript_expression index: (string) @attribute) +(subscript_expression index: (string) @property) (polyvar_type_pattern "#" @constant) [ ("include") ("open") -] @keyword.control.import +] @include [ "as" @@ -101,18 +102,21 @@ "external" "let" "module" + "mutable" "private" "rec" "type" "and" "assert" - "async" "await" "with" - "unpack" -] @keyword.storage.type + "lazy" + "constraint" +] @keyword -"mutable" @keyword.storage.modifier +((function "async" @keyword)) + +(module_unpack "unpack" @keyword) [ "if" @@ -125,11 +129,11 @@ "exception" "try" "catch" -] @keyword.control.exception +] @exception (call_expression - function: (value_identifier) @keyword.control.exception - (#eq? @keyword.control.exception "raise")) + function: (value_identifier) @exception + (#eq? @exception "raise")) [ "for" @@ -137,7 +141,7 @@ "to" "downto" "while" -] @keyword.control.conditional +] @repeat [ "." @@ -169,6 +173,7 @@ "->" "|>" ":>" + "+=" (uncurry) ] @operator @@ -207,14 +212,14 @@ ;---------- (jsx_identifier) @tag (jsx_element - open_tag: (jsx_opening_element ["<" ">"] @punctuation.special)) + open_tag: (jsx_opening_element ["<" ">"] @tag.delimiter)) (jsx_element - close_tag: (jsx_closing_element ["<" "/" ">"] @punctuation.special)) -(jsx_self_closing_element ["/" ">" "<"] @punctuation.special) -(jsx_fragment [">" "<" "/"] @punctuation.special) -(jsx_attribute (property_identifier) @attribute) + close_tag: (jsx_closing_element ["<" "/" ">"] @tag.delimiter)) +(jsx_self_closing_element ["/" ">" "<"] @tag.delimiter) +(jsx_fragment [">" "<" "/"] @tag.delimiter) +(jsx_attribute (property_identifier) @tag.attribute) ; Error ;---------- -(ERROR) @keyword.control.exception +(ERROR) @error diff --git a/runtime/queries/rescript/injections.scm b/runtime/queries/rescript/injections.scm index 03e29b0084af6..67f530d3b3dc0 100644 --- a/runtime/queries/rescript/injections.scm +++ b/runtime/queries/rescript/injections.scm @@ -1,8 +1,29 @@ -((comment) @injection.content - (#set! injection.language "comment")) +((comment) @injection.content (#set! injection.language "comment")) -((raw_js) @injection.content - (#set! injection.language "javascript")) +; %re +(extension_expression + (extension_identifier) @_name + (#eq? @_name "re") + (expression_statement (_) @injection.content (#set! injection.language "regex"))) + +; %raw +(extension_expression + (extension_identifier) @_name + (#eq? @_name "raw") + (expression_statement + (_ (_) @injection.content (#set! injection.language "javascript")))) + +; %graphql +(extension_expression + (extension_identifier) @_name + (#eq? @_name "graphql") + (expression_statement + (_ (_) @injection.content (#set! injection.language "graphql")))) + +; %relay +(extension_expression + (extension_identifier) @_name + (#eq? @_name "relay") + (expression_statement + (_ (_) @injection.content (#set! injection.language "graphql") ))) -((raw_gql) @injection.content - (#set! injection.language "graphql")) \ No newline at end of file diff --git a/runtime/queries/rescript/locals.scm b/runtime/queries/rescript/locals.scm index 1240ed16010cd..13ba8bc2ad48d 100644 --- a/runtime/queries/rescript/locals.scm +++ b/runtime/queries/rescript/locals.scm @@ -1,7 +1,7 @@ -(switch_expression) @local.scope -(if_expression) @local.scope +(switch_expression) @scope ; Definitions ;------------ -(type_declaration) @local.defintion -(let_binding) @local.defintion +(type_declaration) @definition.type +(let_binding) @definition.var +(module_declaration) @definition.namespace diff --git a/runtime/queries/rescript/textobjects.scm b/runtime/queries/rescript/textobjects.scm index 4f1d8c53a81bb..7f03caec0fc8a 100644 --- a/runtime/queries/rescript/textobjects.scm +++ b/runtime/queries/rescript/textobjects.scm @@ -1,112 +1,114 @@ +; Queries for nvim-treesitter/nvim-treesitter-textobjects +;-------------------------------------------------------- + ; Classes (modules) ;------------------ -(module_declaration definition: ((_) @class.inside)) @class.around +(module_binding definition: ((_) @class.inner)) @class.outer ; Blocks ;------- -(block (_) @function.inside) @function.around +(block (_) @block.inner) @block.outer ; Functions ;---------- -(function body: (_) @function.inside) @function.around +(function body: (_) @function.inner) @function.outer ; Calls ;------ -(call_expression arguments: ((_) @parameter.inside)) @parameter.around +(call_expression arguments: ((_) @call.inner)) @call.outer ; Comments ;--------- -(comment) @comment.inside -(comment)+ @comment.around +(comment) @comment.outer ; Parameters ;----------- -(function parameter: (_) @parameter.inside @parameter.around) +(function parameter: (_) @parameter.inner @parameter.outer) (formal_parameters - "," - . (_) @parameter.inside - @parameter.around) + "," @_formal_parameters_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_formal_parameters_start @parameter.inner)) (formal_parameters - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_formal_parameters_end + (#make-range! "parameter.outer" @parameter.inner @_formal_parameters_end)) (arguments "," @_arguments_start - . (_) @parameter.inside - @parameter.around) + . (_) @parameter.inner + (#make-range! "parameter.outer" @_arguments_start @parameter.inner)) (arguments - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_arguments_end + (#make-range! "parameter.outer" @parameter.inner @_arguments_end)) (function_type_parameters - "," - . (_) @parameter.inside - @parameter.around) + "," @_function_type_parameters_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_function_type_parameters_start @parameter.inner)) (function_type_parameters - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_function_type_parameters_end + (#make-range! "parameter.outer" @parameter.inner @_function_type_parameters_end)) (functor_parameters - "," - . (_) @parameter.inside - @parameter.around) + "," @_functor_parameters_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_functor_parameters_start @parameter.inner)) (functor_parameters - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_functor_parameters_end + (#make-range! "parameter.outer" @parameter.inner @_functor_parameters_end)) (type_parameters - "," - . (_) @parameter.inside - @parameter.around) + "," @_type_parameters_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_type_parameters_start @parameter.inner)) (type_parameters - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_type_parameters_end + (#make-range! "parameter.outer" @parameter.inner @_type_parameters_end)) (type_arguments - "," - . (_) @parameter.inside - @parameter.around) + "," @_type_arguments_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_type_arguments_start @parameter.inner)) (type_arguments - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_type_arguments_end + (#make-range! "parameter.outer" @parameter.inner @_type_arguments_end)) (decorator_arguments - "," - . (_) @parameter.inside - @parameter.around) + "," @_decorator_arguments_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_decorator_arguments_start @parameter.inner)) (decorator_arguments - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_arguments_end + (#make-range! "parameter.outer" @parameter.inner @_arguments_end)) (variant_parameters - "," - . (_) @parameter.inside - @parameter.around) + "," @_variant_parameters_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_variant_parameters_start @parameter.inner)) (variant_parameters - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_variant_parameters_end + (#make-range! "parameter.outer" @parameter.inner @_variant_parameters_end)) (polyvar_parameters - "," - . (_) @parameter.inside - @parameter.around) + "," @_polyvar_parameters_start + . (_) @parameter.inner + (#make-range! "parameter.outer" @_polyvar_parameters_start @parameter.inner)) (polyvar_parameters - . (_) @parameter.inside - . ","? - @parameter.around) + . (_) @parameter.inner + . ","? @_polyvar_parameters_end + (#make-range! "parameter.outer" @parameter.inner @_polyvar_parameters_end))