feat(languages): rescript (#1616)

* Add rescript language support

* cargo xtask docgen

* Add textobjects & file line ending

* Fix text objects & rerun docgen

* Fix textobjects queries
This commit is contained in:
Jared Ramirez 2022-02-05 21:24:01 -08:00 committed by GitHub
parent 6c11708fb3
commit f5b95beef6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 213 additions and 0 deletions

4
.gitmodules vendored
View file

@ -222,3 +222,7 @@
path = helix-syntax/languages/tree-sitter-twig
url = https://github.com/eirabben/tree-sitter-twig.git
shallow = true
[submodule "helix-syntax/languages/tree-sitter-rescript"]
path = helix-syntax/languages/tree-sitter-rescript
url = https://github.com/jaredramirez/tree-sitter-rescript
shallow = true

View file

@ -46,6 +46,7 @@
| python | ✓ | ✓ | ✓ | `pylsp` |
| racket | | | | `racket` |
| regex | ✓ | | | |
| rescript | ✓ | ✓ | | `rescript-language-server` |
| ruby | ✓ | | ✓ | `solargraph` |
| rust | ✓ | ✓ | ✓ | `rust-analyzer` |
| scala | ✓ | | ✓ | `metals` |

@ -0,0 +1 @@
Subproject commit 761eb9126b65e078b1b5770ac296b4af8870f933

View file

@ -602,3 +602,14 @@ scope = "source.iex"
injection-regex = "iex"
file-types = ["iex"]
roots = []
[[language]]
name = "rescript"
scope = "source.rescript"
injection-regex = "rescript"
file-types = ["res"]
roots = ["bsconfig.json"]
auto-format = true
comment-token = "//"
language-server = { command = "rescript-language-server", args = ["--stdio"] }
indent = { tab-width = 2, unit = " " }

View file

@ -0,0 +1,179 @@
(comment) @comment
; Identifiers
;------------
; Escaped identifiers like \"+."
((value_identifier) @function.macro
(#match? @function.macro "^\\.*$"))
[
(type_identifier)
(unit_type)
"list"
] @type
[
(variant_identifier)
(polyvar_identifier)
] @constant
(property_identifier) @variable.other.member
(module_identifier) @namespace
(jsx_identifier) @tag
(jsx_attribute (property_identifier) @variable.parameter)
; Parameters
;----------------
(list_pattern (value_identifier) @variable.parameter)
(spread_pattern (value_identifier) @variable.parameter)
; String literals
;----------------
[
(string)
(template_string)
] @string
(template_substitution
"${" @punctuation.bracket
"}" @punctuation.bracket) @embedded
(character) @constant.character
(escape_sequence) @constant.character.escape
; Other literals
;---------------
[
(true)
(false)
] @constant.builtin
(number) @constant.numeric
(polyvar) @constant
(polyvar_string) @constant
; Functions
;----------
[
(formal_parameters (value_identifier))
(positional_parameter (value_identifier))
(labeled_parameter (value_identifier))
] @variable.parameter
(function parameter: (value_identifier) @variable.parameter)
; Meta
;-----
[
"@"
"@@"
(decorator_identifier)
] @label
(extension_identifier) @keyword
("%") @keyword
; Misc
;-----
(subscript_expression index: (string) @variable.other.member)
(polyvar_type_pattern "#" @constant)
[
("include")
("open")
] @keyword
[
"as"
"export"
"external"
"let"
"module"
"mutable"
"private"
"rec"
"type"
"and"
] @keyword
[
"if"
"else"
"switch"
] @keyword
[
"exception"
"try"
"catch"
"raise"
] @keyword
[
"."
","
"|"
] @punctuation.delimiter
[
"++"
"+"
"+."
"-"
"-."
"*"
"*."
"/"
"/."
"<"
"<="
"=="
"==="
"!"
"!="
"!=="
">"
">="
"&&"
"||"
"="
":="
"->"
"|>"
":>"
(uncurry)
] @operator
[
"("
")"
"{"
"}"
"["
"]"
] @punctuation.bracket
(polyvar_type
[
"["
"[>"
"[<"
"]"
] @punctuation.bracket)
[
"~"
"?"
"=>"
"..."
] @punctuation
(ternary_expression ["?" ":"] @operator)

View file

@ -0,0 +1,8 @@
((comment) @injection.content
(#set! injection.language "comment"))
((raw_js) @injection.content
(#set! injection.language "javascript"))
((raw_gql) @injection.content
(#set! injection.language "graphql"))

View file

@ -0,0 +1,9 @@
; Classes (modules)
;------------------
(module_declaration definition: ((_) @class.inside)) @class.around
; Functions
;----------
(function body: (_) @function.inside) @function.around