feat(r)!: update parser and queries

This commit is contained in:
Christian Clason 2024-06-15 14:39:06 +02:00
parent 173515a5d2
commit 5373c90c55
9 changed files with 117 additions and 132 deletions

View file

@ -57,7 +57,6 @@ jobs:
'./lua/nvim-treesitter/shell_selectors.lua') }}
- name: Compile parsers Unix like
if: ${{ runner.os != 'Windows' && steps.parsers-cache.outputs.cache-hit != 'true' }}
run: |
nvim --headless -c "TSInstallSync all" -c "q"

View file

@ -364,7 +364,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [qmldir](https://github.com/Decodetalkers/tree-sitter-qmldir) (maintained by @amaanq)
- [x] [qmljs](https://github.com/yuja/tree-sitter-qmljs) (maintained by @Decodetalkers)
- [x] [Tree-Sitter query language](https://github.com/nvim-treesitter/tree-sitter-query) (maintained by @steelsojka)
- [x] [r](https://github.com/r-lib/tree-sitter-r) (maintained by @echasnovski)
- [x] [r](https://github.com/r-lib/tree-sitter-r)
- [ ] [racket](https://github.com/6cdh/tree-sitter-racket)
- [x] [ralph](https://github.com/alephium/tree-sitter-ralph) (maintained by @tdroxler)
- [x] [rasi](https://github.com/Fymyte/tree-sitter-rasi) (maintained by @Fymyte)

View file

@ -573,7 +573,7 @@
"revision": "f767fb0ac5e711b6d44c5e0c8d1f349687a86ce0"
},
"r": {
"revision": "391400572538ff9854341a175ed8ab4b1e45f44b"
"revision": "b1e211f52ad8f8e1e182bbbcc16dcd5e3688eb7d"
},
"racket": {
"revision": "171f52a8c0ed635b85cd42d1e36d82f1066a03b4"

View file

@ -1688,7 +1688,6 @@ list.r = {
url = "https://github.com/r-lib/tree-sitter-r",
files = { "src/parser.c", "src/scanner.c" },
},
maintainers = { "@echasnovski" },
}
list.racket = {

View file

@ -1,4 +1,3 @@
; highlights.scm
; Literals
(integer) @number
@ -9,8 +8,10 @@
(string) @string
(string
(escape_sequence) @string.escape)
(string_content
(escape_sequence) @string.escape))
; Comments
(comment) @comment @spell
((program
@ -18,123 +19,113 @@
(comment) @keyword.directive @nospell)
(#lua-match? @keyword.directive "^#!/"))
(identifier) @variable
((dollar
(identifier) @variable.builtin)
(#eq? @variable.builtin "self"))
(dollar
_
(identifier) @variable.member)
; Parameters
(formal_parameters
(identifier) @variable.parameter)
(formal_parameters
(default_parameter
name: (identifier) @variable.parameter))
(default_argument
name: (identifier) @variable.parameter)
; Namespace
(namespace_get
namespace: (identifier) @module)
(namespace_get_internal
namespace: (identifier) @module)
; Operators
[
"?"
":="
"="
"<-"
"<<-"
"->"
] @operator
(unary
operator: [
"-"
"+"
"!"
"~"
"?"
] @operator)
(binary
operator: [
"-"
"+"
"*"
"/"
"^"
"<"
">"
"<="
">="
"=="
"!="
"||"
"|"
"&&"
"&"
":"
"~"
] @operator)
[
"->>"
"~"
"|>"
(special)
"||"
"|"
"&&"
"&"
"<"
"<="
">"
">="
"=="
"!="
"+"
"-"
"*"
"/"
"::"
":::"
"**"
"^"
"$"
"@"
":"
"special"
] @operator
(lambda_function
"\\" @operator)
; Punctuation
[
"("
")"
"["
"]"
"{"
"}"
"["
"]"
"[["
"]]"
] @punctuation.bracket
"," @punctuation.delimiter
(comma) @punctuation.delimiter
(dollar
_
"$" @operator)
; Variables
(identifier) @variable
(subset2
"[[" @punctuation.bracket
"]]" @punctuation.bracket)
; Functions
(binary_operator
lhs: (identifier) @function
operator: "<-"
rhs: (function_definition))
(binary_operator
lhs: (identifier) @function
operator: "="
rhs: (function_definition))
; Calls
(call
function: (identifier) @function.call)
; Parameters
(parameters
(parameter
name: (identifier) @variable.parameter))
(arguments
(argument
name: (identifier) @variable.parameter))
; Namespace
(namespace_operator
lhs: (identifier) @module)
(call
function: (namespace_operator
rhs: (identifier) @function))
; Keywords
(function_definition
name: "function" @keyword.function)
(function_definition
name: "\\" @operator)
[
(dots)
(break)
"in"
(return)
(next)
(break)
] @keyword
[
(nan)
(na)
(null)
(inf)
] @constant.builtin
[
"if"
"else"
"switch"
] @keyword.conditional
[
"while"
"repeat"
"for"
"in"
] @keyword.repeat
[
@ -142,21 +133,11 @@
(false)
] @boolean
"function" @keyword.function
; Functions/Methods
(call
function: (identifier) @function.call)
(call
(namespace_get
function: (identifier) @function.call))
(call
(namespace_get_internal
function: (identifier) @function.call))
(call
function: (dollar
_
(identifier) @function.method.call))
[
(null)
(inf)
(nan)
(na)
(dots)
(dot_dot_i)
] @constant.builtin

View file

@ -1,9 +1,8 @@
[
(brace_list)
(paren_list)
(special)
(pipe)
(braced_expression)
(parenthesized_expression)
(call)
"special"
"|>"
"if"
"else"
@ -12,16 +11,17 @@
"for"
] @indent.begin
(binary
operator: (special)) @indent.begin
(binary_operator
operator: (_)) @indent.begin
[
"}"
")"
] @indent.branch
((formal_parameters
(identifier)) @indent.align
((parameters
(parameter
name: (identifier))) @indent.align
(#set! indent.open_delimiter "(")
(#set! indent.close_delimiter ")"))

View file

@ -1,16 +1,22 @@
; locals.scm
(function_definition) @local.scope
(formal_parameters
(identifier) @local.definition.parameter)
(left_assignment
(argument
name: (identifier) @local.definition)
(equals_assignment
(parameter
name: (identifier) @local.definition)
(right_assignment
name: (identifier) @local.definition)
(binary_operator
lhs: (identifier) @local.definition
operator: "<-")
(binary_operator
lhs: (identifier) @local.definition
operator: "=")
(binary_operator
operator: "->"
rhs: (identifier) @local.definition)
(identifier) @local.reference

View file

@ -11,7 +11,7 @@ local run = Runner:new(it, "tests/indent/r", {
describe("indent R:", function()
describe("whole file:", function()
run:whole_file(".", {
expected_failures = {},
expected_failures = { "./pipe.R" },
})
end)
@ -34,8 +34,9 @@ describe("indent R:", function()
run:new_line("loop.R", { on_line = 8, text = "x <- x + 1", indent = 2 })
run:new_line("loop.R", { on_line = 14, text = "print('lol')", indent = 4 })
run:new_line("pipe.R", { on_line = 1, text = "head(n = 10L) |>", indent = 2 })
run:new_line("pipe.R", { on_line = 9, text = "head()", indent = 2 })
-- FIXME: |>, %>% indent broken after parser update
-- run:new_line("pipe.R", { on_line = 1, text = "head(n = 10L) |>", indent = 2 })
-- run:new_line("pipe.R", { on_line = 9, text = "head()", indent = 2 })
run:new_line("aligned_indent.R", { on_line = 1, text = "z,", indent = 17 })
end)

View file

@ -5,7 +5,6 @@ init <- 1
r"{(\1\2)}" -> `%r%`
# ^ @string
# ^ @string.escape
# ^ @operator
# ^ @variable
@ -24,21 +23,21 @@ b <- list(name = "r", version = R.version$major)
# ^ @variable.parameter
# ^ @string
# ^ @operator
# ^ @variable.member
# ^ @variable
Lang$new(name = "r")$print()
# ^ @function.method.call
# ^ @variable
for(i in 1:10) {
# <- @keyword.repeat
# ^ @keyword.repeat
# ^ @keyword
}
add <- function(a, b = 1, ...) {
# ^ @keyword.function
# ^ @variable.parameter
# ^ @variable.parameter
# ^ @keyword
# ^ @constant.builtin
return(a + b)
}