aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/ruby
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/queries/ruby')
-rw-r--r--runtime/queries/ruby/folds.scm12
-rw-r--r--runtime/queries/ruby/highlights.scm306
-rw-r--r--runtime/queries/ruby/indents.scm43
-rw-r--r--runtime/queries/ruby/injections.scm23
-rw-r--r--runtime/queries/ruby/locals.scm93
5 files changed, 477 insertions, 0 deletions
diff --git a/runtime/queries/ruby/folds.scm b/runtime/queries/ruby/folds.scm
new file mode 100644
index 000000000..3a497b31b
--- /dev/null
+++ b/runtime/queries/ruby/folds.scm
@@ -0,0 +1,12 @@
+[
+ (method)
+ (singleton_method)
+ (class)
+ (module)
+ (if)
+ (else)
+ (case)
+ (do_block)
+ (singleton_class)
+ (lambda)
+] @fold
diff --git a/runtime/queries/ruby/highlights.scm b/runtime/queries/ruby/highlights.scm
new file mode 100644
index 000000000..a1a2c250d
--- /dev/null
+++ b/runtime/queries/ruby/highlights.scm
@@ -0,0 +1,306 @@
+; Variables
+[
+ (identifier)
+ (global_variable)
+] @variable
+
+; Keywords
+[
+ "alias"
+ "begin"
+ "do"
+ "end"
+ "ensure"
+ "module"
+ "rescue"
+ "then"
+] @keyword
+
+"class" @keyword.type
+
+[
+ "return"
+ "yield"
+] @keyword.return
+
+[
+ "and"
+ "or"
+ "in"
+ "not"
+] @keyword.operator
+
+[
+ "def"
+ "undef"
+] @keyword.function
+
+(method
+ "end" @keyword.function)
+
+[
+ "case"
+ "else"
+ "elsif"
+ "if"
+ "unless"
+ "when"
+ "then"
+] @keyword.conditional
+
+(if
+ "end" @keyword.conditional)
+
+[
+ "for"
+ "until"
+ "while"
+ "break"
+ "redo"
+ "retry"
+ "next"
+] @keyword.repeat
+
+(constant) @constant
+
+((identifier) @keyword.modifier
+ (#any-of? @keyword.modifier "private" "protected" "public"))
+
+[
+ "rescue"
+ "ensure"
+] @keyword.exception
+
+; Function calls
+"defined?" @function
+
+(call
+ receiver: (constant)? @type
+ method: [
+ (identifier)
+ (constant)
+ ] @function.call)
+
+(program
+ (call
+ (identifier) @keyword.import)
+ (#any-of? @keyword.import "require" "require_relative" "load"))
+
+; Function definitions
+(alias
+ (identifier) @function)
+
+(setter
+ (identifier) @function)
+
+(method
+ name: [
+ (identifier) @function
+ (constant) @type
+ ])
+
+(singleton_method
+ name: [
+ (identifier) @function
+ (constant) @type
+ ])
+
+(class
+ name: (constant) @type)
+
+(module
+ name: (constant) @type)
+
+(superclass
+ (constant) @type)
+
+; Identifiers
+[
+ (class_variable)
+ (instance_variable)
+] @variable.member
+
+((identifier) @constant.builtin
+ (#any-of? @constant.builtin
+ "__callee__" "__dir__" "__id__" "__method__" "__send__" "__ENCODING__" "__FILE__" "__LINE__"))
+
+((identifier) @function.builtin
+ (#any-of? @function.builtin "attr_reader" "attr_writer" "attr_accessor" "module_function"))
+
+((call
+ !receiver
+ method: (identifier) @function.builtin)
+ (#any-of? @function.builtin "include" "extend" "prepend" "refine" "using"))
+
+((identifier) @keyword.exception
+ (#any-of? @keyword.exception "raise" "fail" "catch" "throw"))
+
+((constant) @type
+ (#not-lua-match? @type "^[A-Z0-9_]+$"))
+
+[
+ (self)
+ (super)
+] @variable.builtin
+
+(method_parameters
+ (identifier) @variable.parameter)
+
+(lambda_parameters
+ (identifier) @variable.parameter)
+
+(block_parameters
+ (identifier) @variable.parameter)
+
+(splat_parameter
+ (identifier) @variable.parameter)
+
+(hash_splat_parameter
+ (identifier) @variable.parameter)
+
+(optional_parameter
+ (identifier) @variable.parameter)
+
+(destructured_parameter
+ (identifier) @variable.parameter)
+
+(block_parameter
+ (identifier) @variable.parameter)
+
+(keyword_parameter
+ (identifier) @variable.parameter)
+
+; Literals
+[
+ (string_content)
+ (heredoc_content)
+ "\""
+ "`"
+] @string
+
+[
+ (heredoc_beginning)
+ (heredoc_end)
+] @label
+
+[
+ (bare_symbol)
+ (simple_symbol)
+ (delimited_symbol)
+ (hash_key_symbol)
+] @string.special.symbol
+
+(regex
+ (string_content) @string.regexp)
+
+(escape_sequence) @string.escape
+
+(integer) @number
+
+(float) @number.float
+
+[
+ (true)
+ (false)
+] @boolean
+
+(nil) @constant.builtin
+
+(comment) @comment @spell
+
+((program
+ .
+ (comment) @keyword.directive @nospell)
+ (#lua-match? @keyword.directive "^#!/"))
+
+(program
+ (comment)+ @comment.documentation
+ (class))
+
+(module
+ (comment)+ @comment.documentation
+ (body_statement
+ (class)))
+
+(class
+ (comment)+ @comment.documentation
+ (body_statement
+ (method)))
+
+(body_statement
+ (comment)+ @comment.documentation
+ (method))
+
+; Operators
+[
+ "!"
+ "="
+ "=="
+ "==="
+ "<=>"
+ "=>"
+ "->"
+ ">>"
+ "<<"
+ ">"
+ "<"
+ ">="
+ "<="
+ "**"
+ "*"
+ "/"
+ "%"
+ "+"
+ "-"
+ "&"
+ "|"
+ "^"
+ "&&"
+ "||"
+ "||="
+ "&&="
+ "!="
+ "%="
+ "+="
+ "-="
+ "*="
+ "/="
+ "=~"
+ "!~"
+ "?"
+ ":"
+ ".."
+ "..."
+] @operator
+
+[
+ ","
+ ";"
+ "."
+ "&."
+ "::"
+] @punctuation.delimiter
+
+(regex
+ "/" @punctuation.bracket)
+
+(pair
+ ":" @punctuation.delimiter)
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+ "%w("
+ "%i("
+] @punctuation.bracket
+
+(block_parameters
+ "|" @punctuation.bracket)
+
+(interpolation
+ "#{" @punctuation.special
+ "}" @punctuation.special)
diff --git a/runtime/queries/ruby/indents.scm b/runtime/queries/ruby/indents.scm
new file mode 100644
index 000000000..b76732922
--- /dev/null
+++ b/runtime/queries/ruby/indents.scm
@@ -0,0 +1,43 @@
+[
+ (class)
+ (singleton_class)
+ (method)
+ (singleton_method)
+ (module)
+ (call)
+ (if)
+ (block)
+ (do_block)
+ (hash)
+ (array)
+ (argument_list)
+ (case)
+ (while)
+ (until)
+ (for)
+ (begin)
+ (unless)
+ (assignment)
+ (parenthesized_statements)
+] @indent.begin
+
+[
+ "end"
+ ")"
+ "}"
+ "]"
+] @indent.end
+
+[
+ "end"
+ ")"
+ "}"
+ "]"
+ (when)
+ (elsif)
+ (else)
+ (rescue)
+ (ensure)
+] @indent.branch
+
+(comment) @indent.ignore
diff --git a/runtime/queries/ruby/injections.scm b/runtime/queries/ruby/injections.scm
new file mode 100644
index 000000000..12b2c32a5
--- /dev/null
+++ b/runtime/queries/ruby/injections.scm
@@ -0,0 +1,23 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+(heredoc_body
+ (heredoc_content) @injection.content
+ (heredoc_end) @injection.language
+ (#downcase! @injection.language))
+
+(regex
+ (string_content) @injection.content
+ (#set! injection.language "regex"))
+
+((call
+ receiver: (identifier) @_receiver
+ method: (identifier) @_method
+ arguments: (argument_list
+ (pair
+ key: (hash_key_symbol)
+ value: (string
+ (string_content) @injection.content))))
+ (#eq? @_receiver "binding")
+ (#any-of? @_method "b" "break")
+ (#set! injection.self))
diff --git a/runtime/queries/ruby/locals.scm b/runtime/queries/ruby/locals.scm
new file mode 100644
index 000000000..29a67e2ba
--- /dev/null
+++ b/runtime/queries/ruby/locals.scm
@@ -0,0 +1,93 @@
+; The MIT License (MIT)
+;
+; Copyright (c) 2016 Rob Rix
+;
+; Permission is hereby granted, free of charge, to any person obtaining a copy
+; of this software and associated documentation files (the "Software"), to deal
+; in the Software without restriction, including without limitation the rights
+; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+; copies of the Software, and to permit persons to whom the Software is
+; furnished to do so, subject to the following conditions:
+;
+; The above copyright notice and this permission notice shall be included in all
+; copies or substantial portions of the Software.
+;
+; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+; SOFTWARE.
+; DECLARATIONS AND SCOPES
+(method) @local.scope
+
+(class) @local.scope
+
+[
+ (block)
+ (do_block)
+] @local.scope
+
+(identifier) @local.reference
+
+(constant) @local.reference
+
+(instance_variable) @local.reference
+
+(module
+ name: (constant) @local.definition.namespace)
+
+(class
+ name: (constant) @local.definition.type)
+
+(method
+ name: [
+ (identifier)
+ (constant)
+ ] @local.definition.function)
+
+(singleton_method
+ name: [
+ (identifier)
+ (constant)
+ ] @local.definition.function)
+
+(method_parameters
+ (identifier) @local.definition.var)
+
+(lambda_parameters
+ (identifier) @local.definition.var)
+
+(block_parameters
+ (identifier) @local.definition.var)
+
+(splat_parameter
+ (identifier) @local.definition.var)
+
+(hash_splat_parameter
+ (identifier) @local.definition.var)
+
+(optional_parameter
+ name: (identifier) @local.definition.var)
+
+(destructured_parameter
+ (identifier) @local.definition.var)
+
+(block_parameter
+ name: (identifier) @local.definition.var)
+
+(keyword_parameter
+ name: (identifier) @local.definition.var)
+
+(assignment
+ left: (_) @local.definition.var)
+
+(left_assignment_list
+ (identifier) @local.definition.var)
+
+(rest_assignment
+ (identifier) @local.definition.var)
+
+(destructured_left_assignment
+ (identifier) @local.definition.var)