aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--languages.toml2
-rw-r--r--runtime/queries/ruby/highlights.scm120
-rw-r--r--runtime/queries/ruby/injections.scm6
3 files changed, 89 insertions, 39 deletions
diff --git a/languages.toml b/languages.toml
index c5c69b9b..a1a2f0a1 100644
--- a/languages.toml
+++ b/languages.toml
@@ -606,7 +606,7 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "ruby"
-source = { git = "https://github.com/tree-sitter/tree-sitter-ruby", rev = "4c600a463d97e36a0ca5ac57e11f3ac8c297a0fa" }
+source = { git = "https://github.com/tree-sitter/tree-sitter-ruby", rev = "206c7077164372c596ffa8eaadb9435c28941364" }
[[language]]
name = "bash"
diff --git a/runtime/queries/ruby/highlights.scm b/runtime/queries/ruby/highlights.scm
index 898f8f79..7c69276b 100644
--- a/runtime/queries/ruby/highlights.scm
+++ b/runtime/queries/ruby/highlights.scm
@@ -1,44 +1,67 @@
; Keywords
[
+ "BEGIN"
+ "END"
"alias"
- "and"
"begin"
- "break"
- "case"
"class"
- "def"
"do"
- "else"
- "elsif"
"end"
- "ensure"
- "for"
- "if"
- "in"
"module"
- "next"
- "or"
+ "in"
"rescue"
- "retry"
- "return"
- "then"
- "unless"
- "until"
+ "ensure"
+] @keyword
+
+[
+ "if"
+ "else"
+ "elsif"
"when"
+ "case"
+ "unless"
+ "then"
+] @keyword.control.conditional
+
+[
+ "for"
"while"
+ "retry"
+ "until"
+ "redo"
+] @keyword.control.repeat
+
+[
"yield"
-] @keyword
+ "return"
+ "next"
+ "break"
+] @keyword.control.return
+
+[
+ "def"
+ "undef"
+] @keyword.function
+
+((identifier) @keyword.control.import
+ (#match? @keyword.control.import "^(require|require_relative|load|autoload)$"))
+
+[
+ "or"
+ "and"
+ "not"
+] @keyword.operator
-((identifier) @keyword
- (#match? @keyword "^(private|protected|public)$"))
+((identifier) @keyword.control.exception
+ (#match? @keyword.control.exception "^(raise|fail)$"))
; Function calls
-((identifier) @function.method.builtin
- (#eq? @function.method.builtin "require"))
+((identifier) @function.builtin
+ (#match? @function.builtin "^(attr|attr_accessor|attr_reader|attr_writer|include|prepend|refine|private|protected|public)$"))
-"defined?" @function.method.builtin
+"defined?" @function.builtin
(call
method: [(identifier) (constant)] @function.method)
@@ -58,7 +81,10 @@
] @variable.other.member
((identifier) @constant.builtin
- (#match? @constant.builtin "^__(FILE|LINE|ENCODING)__$"))
+ (#match? @constant.builtin "^(__FILE__|__LINE__|__ENCODING__)$"))
+
+((constant) @constant.builtin
+ (#match? @constant.builtin "^(ENV|ARGV|ARGF|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING)$"))
((constant) @constant
(#match? @constant "^[A-Z\\d_]+$"))
@@ -66,22 +92,23 @@
(constant) @constructor
(self) @variable.builtin
-(super) @variable.builtin
+(super) @function.builtin
+[(forward_parameter)(forward_argument)] @variable.parameter
+(keyword_parameter name:((_)":" @variable.parameter) @variable.parameter)
+(optional_parameter name:((_)"=" @operator) @variable.parameter)
+(optional_parameter name: (identifier) @variable.parameter)
+(splat_parameter name: (identifier) @variable.parameter) @variable.parameter
+(hash_splat_parameter name: (identifier) @variable.parameter) @variable.parameter
+(method_parameters (identifier) @variable.parameter)
(block_parameter (identifier) @variable.parameter)
(block_parameters (identifier) @variable.parameter)
-(destructured_parameter (identifier) @variable.parameter)
-(hash_splat_parameter (identifier) @variable.parameter)
-(lambda_parameters (identifier) @variable.parameter)
-(method_parameters (identifier) @variable.parameter)
-(splat_parameter (identifier) @variable.parameter)
-
-(keyword_parameter name: (identifier) @variable.parameter)
-(optional_parameter name: (identifier) @variable.parameter)
((identifier) @function.method
(#is-not? local))
-(identifier) @variable
+[
+ (identifier)
+] @variable
; Literals
@@ -96,10 +123,11 @@
[
(simple_symbol)
(delimited_symbol)
- (hash_key_symbol)
(bare_symbol)
] @string.special.symbol
+(pair key: ((_)":" @string.special.symbol) @string.special.symbol)
+
(regex) @string.regexp
(escape_sequence) @constant.character.escape
@@ -112,7 +140,7 @@
(nil)
(true)
(false)
-]@constant.builtin
+] @constant.builtin
(interpolation
"#{" @punctuation.special
@@ -121,20 +149,36 @@
(comment) @comment
; Operators
-
[
-"="
+":"
+"?"
+"~"
"=>"
"->"
+"!"
] @operator
+(assignment
+ "=" @operator)
+
+(operator_assignment
+ operator: ["+=" "-=" "*=" "**=" "/=" "||=" "|=" "&&=" "&=" "%=" ">>=" "<<=" "^="] @operator)
+
+(binary
+ operator: ["/" "|" "==" "===" "||" "&&" ">>" "<<" "<" ">" "<=" ">=" "&" "^" "!~" "=~" "<=>" "**" "*" "!=" "%" "-" "+"] @operator)
+
+(range
+ operator: [".." "..."] @operator)
+
[
","
";"
"."
+ "&."
] @punctuation.delimiter
[
+ "|"
"("
")"
"["
diff --git a/runtime/queries/ruby/injections.scm b/runtime/queries/ruby/injections.scm
index 321c90ad..1a865df1 100644
--- a/runtime/queries/ruby/injections.scm
+++ b/runtime/queries/ruby/injections.scm
@@ -1,2 +1,8 @@
((comment) @injection.content
(#set! injection.language "comment"))
+
+((heredoc_body
+ (heredoc_content) @injection.content
+ (heredoc_end) @name
+ (#set! injection.language "sql"))
+ (#eq? @name "SQL"))