From af609ada10ec34663280d8f59fa743ecbb324cbf Mon Sep 17 00:00:00 2001 From: AltCode Date: Sat, 19 Sep 2026 17:51:29 +0200 Subject: [PATCH 1/9] fix(ruby): adjust operator highlights Stop capturing most of these from just the bare token and instead capture them when defined in the `operator:` field The previous way erroneously highlighted some of them as operator when used elsewhere - e.g. `/` and `|` are also used as delimiters for the regex literal and block parameters respectively Also adds some missing highlights for the `not`, `?`, and `:` operators --- languages/ruby/highlights.scm | 49 ++++++++++++----------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index 690a5c7..8bb6f5e 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -53,6 +53,7 @@ "and" "end" "in" + "not" "or" ] @keyword @@ -137,8 +138,7 @@ (encoding) @constant.builtin -(hash_splat_nil - "**" @operator) @constant.builtin +(hash_splat_nil) @constant.builtin (constant) @type @@ -216,59 +216,39 @@ ; Operators [ - "!" - "~" - "+" - "-" - "**" + "?" "*" - "/" - "%" + "**" "<<" ">>" "&" "|" "^" - ">" "<" - "<=" - ">=" - "==" - "===" - "!=" - "=~" - "!~" - "<=>" - "||" - "&&" + ">" ".." "..." "=" - "**=" - "*=" - "/=" - "%=" - "+=" - "-=" - "<<=" - ">>=" - "&&=" - "&=" - "||=" - "|=" - "^=" "=>" "->" (operator) ] @operator +(_ + operator: _ @operator + (#not-any-of? @operator "and" "or" "not" "defined?")) + [ "," ";" "." + ":" "::" ] @punctuation.delimiter +(conditional + ":" @operator) + [ "(" ")" @@ -280,6 +260,9 @@ "%i(" ] @punctuation.bracket +(block_parameters + "|" @punctuation.bracket) + (interpolation "#{" @punctuation.special "}" @punctuation.special) @embedded From c11450c4eed9874b0a07b5563cb7d4fd20aea758 Mon Sep 17 00:00:00 2001 From: AltCode Date: Mon, 21 Sep 2026 20:25:01 +0200 Subject: [PATCH 2/9] Fully scope `|` token captures --- languages/ruby/highlights.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index 8bb6f5e..39de031 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -222,7 +222,6 @@ "<<" ">>" "&" - "|" "^" "<" ">" @@ -234,6 +233,9 @@ (operator) ] @operator +(alternative_pattern + "|" @operator) + (_ operator: _ @operator (#not-any-of? @operator "and" "or" "not" "defined?")) From 93112240944551cd81bb6c2b13fcf925ee50ab5b Mon Sep 17 00:00:00 2001 From: AltCode Date: Mon, 21 Sep 2026 20:25:52 +0200 Subject: [PATCH 3/9] Limit operator capture for `.` and `::` as well --- languages/ruby/highlights.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index 39de031..c36d0b4 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -238,7 +238,7 @@ (_ operator: _ @operator - (#not-any-of? @operator "and" "or" "not" "defined?")) + (#not-any-of? @operator "and" "or" "not" "defined?" "." "::")) [ "," From de5d3f5997d957b97bfe72524b2130d0fe38ae08 Mon Sep 17 00:00:00 2001 From: AltCode Date: Mon, 21 Sep 2026 20:29:50 +0200 Subject: [PATCH 4/9] Fully scope conditional operator captures --- languages/ruby/highlights.scm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index c36d0b4..7d71baa 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -216,7 +216,6 @@ ; Operators [ - "?" "*" "**" "<<" @@ -236,6 +235,10 @@ (alternative_pattern "|" @operator) +(conditional + "?" @operator + ":" @operator) + (_ operator: _ @operator (#not-any-of? @operator "and" "or" "not" "defined?" "." "::")) @@ -244,13 +247,9 @@ "," ";" "." - ":" "::" ] @punctuation.delimiter -(conditional - ":" @operator) - [ "(" ")" From ea5afc72824b4d79495442c1626e83d33d8055d3 Mon Sep 17 00:00:00 2001 From: AltCode Date: Mon, 21 Sep 2026 23:03:55 +0200 Subject: [PATCH 5/9] Fully scope `->`, `<<`, and `<` token captures And remove bare captures for `>>` and `>` that are already covered by the `(_ operator: _ @operator)` capture --- languages/ruby/highlights.scm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index 7d71baa..4dc19e9 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -218,20 +218,24 @@ [ "*" "**" - "<<" - ">>" "&" "^" - "<" - ">" ".." "..." "=" "=>" - "->" (operator) ] @operator +(lambda + "->" @operator) + +(singleton_class + "<<" @operator) + +(superclass + "<" @operator) + (alternative_pattern "|" @operator) From c2f367351c656d7236972d68ec662ce9a07b1d14 Mon Sep 17 00:00:00 2001 From: AltCode Date: Mon, 21 Sep 2026 23:11:24 +0200 Subject: [PATCH 6/9] Adjust `hash_splat_nil` capture --- languages/ruby/highlights.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index 4dc19e9..362fc99 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -138,7 +138,8 @@ (encoding) @constant.builtin -(hash_splat_nil) @constant.builtin +(hash_splat_nil + "nil" @constant.builtin) (constant) @type From 864b76862bb38f4ce2fec99839be7e5e18f21d08 Mon Sep 17 00:00:00 2001 From: AltCode Date: Mon, 21 Sep 2026 23:41:22 +0200 Subject: [PATCH 7/9] Fully scope `:` token captures Also ensure that the highlights for `keyword_parameter` are applied when the node appears inside a `lambda_parameters` or `block_parameters` node, and adjust the highlight of delimited hash key symbols, which is a `string` node whose parent is either `pair` or `keyword_pattern` --- languages/ruby/highlights.scm | 59 ++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index 362fc99..e041409 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -96,37 +96,14 @@ (identifier) @variable.parameter (optional_parameter name: (identifier) @variable.parameter) - (keyword_parameter - [ - name: (identifier) - ":" - ] @variable.parameter.keyword) ]) (block_parameters (identifier) @variable.parameter) -; ERB strict locals are injected as Ruby, but their parameter list is not a -; valid standalone Ruby program. Match the parser's recovery shape so the -; first required local and the remaining keyword locals are highlighted alike. -((call - method: (identifier) @_locals - arguments: (argument_list - (parenthesized_statements - (call - method: (identifier) @variable.parameter.keyword)))) - (#eq? @_locals "locals")) - -((call - method: (identifier) @_locals - arguments: (argument_list - (parenthesized_statements - (call - arguments: (argument_list - (pair - key: (hash_key_symbol) @variable.parameter.keyword)))))) - (#eq? @_locals "locals") - (#not-eq? @variable.parameter.keyword "")) +(keyword_parameter + name: (identifier) @variable.parameter.keyword + ":" @variable.parameter.keyword) ; Identifiers ((identifier) @constant.builtin @@ -190,6 +167,14 @@ (bare_symbol) ] @string.special.symbol +(pair + key: (_) @string.special.symbol + ":" @string.special.symbol) + +(keyword_pattern + key: (_) @string.special.symbol + ":" @string.special.symbol) + (regex) @string.regex (escape_sequence) @string.escape @@ -210,6 +195,28 @@ (nil) @constant.builtin +; ERB strict locals are injected as Ruby, but their parameter list is not a +; valid standalone Ruby program. Match the parser's recovery shape so the +; first required local and the remaining keyword locals are highlighted alike. +((call + method: (identifier) @_locals + arguments: (argument_list + (parenthesized_statements + (call + method: (identifier) @variable.parameter.keyword)))) + (#eq? @_locals "locals")) + +((call + method: (identifier) @_locals + arguments: (argument_list + (parenthesized_statements + (call + arguments: (argument_list + (pair + key: (_) @variable.parameter.keyword + ":" @variable.parameter.keyword)))))) + (#eq? @_locals "locals")) + ; Regular comments (exclude RBS inline comments) ((comment) @comment (#not-match? @comment "^\\s*#[:|]") From eadeadc5253c56deb738c0322e0990d0784f6963 Mon Sep 17 00:00:00 2001 From: AltCode Date: Tue, 22 Sep 2026 09:38:16 +0200 Subject: [PATCH 8/9] Fix ERB test --- languages/ruby/highlights.scm | 12 ++++++++---- tests/erb.rs | 14 +++++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/languages/ruby/highlights.scm b/languages/ruby/highlights.scm index e041409..8c8a996 100644 --- a/languages/ruby/highlights.scm +++ b/languages/ruby/highlights.scm @@ -212,10 +212,14 @@ (parenthesized_statements (call arguments: (argument_list - (pair - key: (_) @variable.parameter.keyword - ":" @variable.parameter.keyword)))))) - (#eq? @_locals "locals")) + [ + (pair + key: (_) @_key @variable.parameter.keyword) + (pair + ":" @variable.parameter.keyword) + ]))))) + (#eq? @_locals "locals") + (#not-eq? @_key "")) ; Regular comments (exclude RBS inline comments) ((comment) @comment diff --git a/tests/erb.rs b/tests/erb.rs index 1e4ef25..f1ea8fd 100644 --- a/tests/erb.rs +++ b/tests/erb.rs @@ -45,5 +45,17 @@ fn strict_local_names_share_parameter_highlighting() { .map(|capture| capture.text.as_str()) .collect(); - assert_eq!(parameters, ["title", "talks", "view_all_path", "subtitle"]); + assert_eq!( + parameters, + [ + "title", + ":", + "talks", + ":", + "view_all_path", + ":", + "subtitle", + ":" + ], + ); } From 09e3124091747280d519678bfa8ab72b15f361b2 Mon Sep 17 00:00:00 2001 From: AltCode Date: Tue, 22 Sep 2026 15:15:12 +0200 Subject: [PATCH 9/9] Add highlighting tests --- tests/languages/ruby/highlights.rb | 334 ++ .../languages/ruby/snapshots/highlights.snap | 4076 +++++++++++++++++ tests/ruby.rs | 13 + 3 files changed, 4423 insertions(+) create mode 100644 tests/languages/ruby/highlights.rb create mode 100644 tests/languages/ruby/snapshots/highlights.snap diff --git a/tests/languages/ruby/highlights.rb b/tests/languages/ruby/highlights.rb new file mode 100644 index 0000000..7fd579d --- /dev/null +++ b/tests/languages/ruby/highlights.rb @@ -0,0 +1,334 @@ +# Highlights fixtures for tree-sitter queries + +# Variables +variable +$global_variable +@instance_variable +@@class_variable +Constant +CONSTANT_ALL_CAPS +__FILE__ +__LINE__ +__ENCODING__ +self +super + +# comment + +# Keywords — definition +module TestModule + class TestClass < ::TestSuperClass::Scoped + end + + class ::TestClass + end + + class ::TestClass::Scoped + end + + class << TestSingleton::Class + end +end + +# Keywords — conditional +case expr + in 5 + in 5, + in ^foo + in ^(1+1) + in 1, 2 + in 1, 2, + in 1, 2, 3 + in 1, 2, 3, + in 1, 2, 3, * + in 1, *x, 3 + in * + in *, 3, 4 + in *, 3, * + in *a, 3, *b + in a: + in a: 5 + in a: 5, + in a: 5, b:, ** + in a: 5, b:, **map + in a: 5, "b":, **nil + in **nil + in [5] + in [5,] + in [1, 2] + in [1, 2,] + in [1, 2, 3] + in [1, 2, 3,] + in [1, 2, 3, *] + in [1, *x, 3] + in [*] + in [*, 3, 4] + in [*, 3, *] + in [*a, 3, *b] + in {a:} + in {a: 5} + in {a: 5,} + in {a: 5, b:, **} + in {a: 5, b:, **map} + in {a: 5, b:, **nil} + in {**nil} + in {} + in [] + in -5 | +10 + in (nil | self | true | false | __LINE__ | __FILE__ | __ENCODING__) +end + +case fun(..., **hash_splat) +when *splat then true +end + +true ? false : true + +if foo + bar +elsif qux + baz +else + bat +end + +unless true +end + +# Keywords — loop +while true do + break +end + +until false do +end + +for x, *y in z do + next +end + +# Keywords — exception handling +begin + foo +rescue x + retry +else + qux +ensure + baz +end + +# Keywords — exception raising +raise +fail +catch +throw + +# Keywords — flow return/jump +break +next +retry +return +yield + +# Keywords — method scopes +private +protected +public + +# Keywords — imports +require +require_relative +load + +# Method/function definitions +undef + +alias foo - +def method; + super +end +def self.singleton_method = nil +def setter= +end +def method_params(var, optional = nil, &block, ..., kw:, *opts, **hash, **nil) +end +fun { || nil } +lambda = -> () { nil } + +# Operator overloading definitions +def +(a) +end +def -(a) +end +def *(a) +end +def **(a) +end +def /(a) +end +def %(a) +end +def <<(a) +end +def >>(a) +end +def ~(a) +end +def &(a) +end +def |(a) +end +def ^(a) +end +def <(a) +end +def >(a) +end +def <=(a) +end +def >=(a) +end +def !(a) +end +def ==(a) +end +def !=(a) +end +def ===(a) +end +def =~(a) +end +def !~(a) +end +def <=>(a) +end +def ..(a) +end +def +@(a) +end +def -@(a) +end +def ~@(a) +end +def [](a) +end +def []=(a) +end +def `(a) +end + +# Builtin functions/methods +defined? foo +include foo +extend foo +prepend foo +refine foo +using foo + +# String literals +"string" +'string' +%[string] +%q[string] +%Q[string] +%w[string string string] +%W[string string string] + +"\n\xA\000\u0af2" +?a +?\n +?0 + +# String interpolation +"inter#{polation}" + +# Subshell literals +`subshell` +%x(subshell) + +# Heredoc literal +<<~EOS + heredoc +EOS + +# Symbol literals +:symbol +:symbol! +:symbol? +:"delimited-symbol" +%s[delimited-symbol] +%s[delimited-symbol] +%i[symbol symbol! symbol?] +%I[symbol symbol! symbol?] + +# Regex literals +/regex/ +%r{regex} + +# Number literals +1 +1.0 +12-34.2ri + +# Boolean/nil literals +true +false +nil + +# Hash +{ s1: nil, s1!: nil, s1?: nil, "?s1": nil, :s2 => nil, :"?s2" => nil, "string" => nil} + +# Unary operators +not true +!true ++1 +-1 +~var + +# Binary operators +true and true +true or false +true && true +true || false +true == true +true != false +1 + 2 +2 - 1 +3 * 2 +2 ** 2 +2 / 3 +0 % 2 +1 << 2 +2 >> 1 +1 & 2 +2 | 1 +2 ^ 2 +2 < 1 +1 > 2 +2 <= 1 +1 >= 2 +1 === 1.0 +"string" =~ /reg/ +"string" !~ /reg/ +foo <=> bar +1..2 +1...2 +foo&.bar +foo&.bar(var) +foo &.- bar + +# Assignment operators +var = "foo" +var += 1 +var -= 1 +var *= 2 +var **= 2 +var /= 2 +var %= 2 +var <<= 2 +var >>= 2 +var &= 2 +var |= 2 +var ^= 2 +var &&= nil +var ||= "string" diff --git a/tests/languages/ruby/snapshots/highlights.snap b/tests/languages/ruby/snapshots/highlights.snap new file mode 100644 index 0000000..83b2398 --- /dev/null +++ b/tests/languages/ruby/snapshots/highlights.snap @@ -0,0 +1,4076 @@ +--- +source: tests/support/mod.rs +expression: captures +--- +- name: comment + line: 1 + column: 1 + text: "# Highlights fixtures for tree-sitter queries" +- name: comment + line: 3 + column: 1 + text: "# Variables" +- name: variable + line: 4 + column: 1 + text: variable +- name: variable + line: 5 + column: 1 + text: $global_variable +- name: variable.special.instance + line: 6 + column: 1 + text: "@instance_variable" +- name: variable.special + line: 7 + column: 1 + text: "@@class_variable" +- name: type + line: 8 + column: 1 + text: Constant +- name: type + line: 9 + column: 1 + text: CONSTANT_ALL_CAPS +- name: constant + line: 9 + column: 1 + text: CONSTANT_ALL_CAPS +- name: variable + line: 10 + column: 1 + text: __FILE__ +- name: constant.builtin + line: 10 + column: 1 + text: __FILE__ +- name: variable + line: 11 + column: 1 + text: __LINE__ +- name: constant.builtin + line: 11 + column: 1 + text: __LINE__ +- name: variable + line: 12 + column: 1 + text: __ENCODING__ +- name: constant.builtin + line: 12 + column: 1 + text: __ENCODING__ +- name: variable.special + line: 13 + column: 1 + text: self +- name: variable.special + line: 14 + column: 1 + text: super +- name: comment + line: 16 + column: 1 + text: "# comment" +- name: comment + line: 18 + column: 1 + text: "# Keywords — definition" +- name: keyword.function + line: 19 + column: 1 + text: module +- name: type + line: 19 + column: 8 + text: TestModule +- name: keyword.function + line: 20 + column: 3 + text: class +- name: type + line: 20 + column: 9 + text: TestClass +- name: operator + line: 20 + column: 19 + text: "<" +- name: punctuation.delimiter + line: 20 + column: 21 + text: "::" +- name: type.super + line: 20 + column: 23 + text: TestSuperClass +- name: type + line: 20 + column: 23 + text: TestSuperClass +- name: punctuation.delimiter + line: 20 + column: 37 + text: "::" +- name: type.super + line: 20 + column: 39 + text: Scoped +- name: type + line: 20 + column: 39 + text: Scoped +- name: keyword + line: 21 + column: 3 + text: end +- name: keyword.function + line: 23 + column: 3 + text: class +- name: punctuation.delimiter + line: 23 + column: 9 + text: "::" +- name: type + line: 23 + column: 11 + text: TestClass +- name: keyword + line: 24 + column: 3 + text: end +- name: keyword.function + line: 26 + column: 3 + text: class +- name: punctuation.delimiter + line: 26 + column: 9 + text: "::" +- name: type + line: 26 + column: 11 + text: TestClass +- name: punctuation.delimiter + line: 26 + column: 20 + text: "::" +- name: type + line: 26 + column: 22 + text: Scoped +- name: keyword + line: 27 + column: 3 + text: end +- name: keyword.function + line: 29 + column: 3 + text: class +- name: operator + line: 29 + column: 9 + text: "<<" +- name: type + line: 29 + column: 12 + text: TestSingleton +- name: punctuation.delimiter + line: 29 + column: 25 + text: "::" +- name: type + line: 29 + column: 27 + text: Class +- name: keyword + line: 30 + column: 3 + text: end +- name: keyword + line: 31 + column: 1 + text: end +- name: comment + line: 33 + column: 1 + text: "# Keywords — conditional" +- name: keyword.control.conditional + line: 34 + column: 1 + text: case +- name: variable + line: 34 + column: 6 + text: expr +- name: keyword + line: 35 + column: 3 + text: in +- name: number + line: 35 + column: 6 + text: "5" +- name: keyword + line: 36 + column: 3 + text: in +- name: number + line: 36 + column: 6 + text: "5" +- name: keyword + line: 37 + column: 3 + text: in +- name: operator + line: 37 + column: 6 + text: ^ +- name: variable + line: 37 + column: 7 + text: foo +- name: keyword + line: 38 + column: 3 + text: in +- name: operator + line: 38 + column: 6 + text: ^ +- name: punctuation.bracket + line: 38 + column: 7 + text: ( +- name: number + line: 38 + column: 8 + text: "1" +- name: operator + line: 38 + column: 9 + text: + +- name: number + line: 38 + column: 10 + text: "1" +- name: punctuation.bracket + line: 38 + column: 11 + text: ) +- name: keyword + line: 39 + column: 3 + text: in +- name: number + line: 39 + column: 6 + text: "1" +- name: punctuation.delimiter + line: 39 + column: 7 + text: "," +- name: number + line: 39 + column: 9 + text: "2" +- name: keyword + line: 40 + column: 3 + text: in +- name: number + line: 40 + column: 6 + text: "1" +- name: punctuation.delimiter + line: 40 + column: 7 + text: "," +- name: number + line: 40 + column: 9 + text: "2" +- name: keyword + line: 41 + column: 3 + text: in +- name: number + line: 41 + column: 6 + text: "1" +- name: punctuation.delimiter + line: 41 + column: 7 + text: "," +- name: number + line: 41 + column: 9 + text: "2" +- name: punctuation.delimiter + line: 41 + column: 10 + text: "," +- name: number + line: 41 + column: 12 + text: "3" +- name: keyword + line: 42 + column: 3 + text: in +- name: number + line: 42 + column: 6 + text: "1" +- name: punctuation.delimiter + line: 42 + column: 7 + text: "," +- name: number + line: 42 + column: 9 + text: "2" +- name: punctuation.delimiter + line: 42 + column: 10 + text: "," +- name: number + line: 42 + column: 12 + text: "3" +- name: keyword + line: 43 + column: 3 + text: in +- name: number + line: 43 + column: 6 + text: "1" +- name: punctuation.delimiter + line: 43 + column: 7 + text: "," +- name: number + line: 43 + column: 9 + text: "2" +- name: punctuation.delimiter + line: 43 + column: 10 + text: "," +- name: number + line: 43 + column: 12 + text: "3" +- name: punctuation.delimiter + line: 43 + column: 13 + text: "," +- name: operator + line: 43 + column: 15 + text: "*" +- name: keyword + line: 44 + column: 3 + text: in +- name: number + line: 44 + column: 6 + text: "1" +- name: punctuation.delimiter + line: 44 + column: 7 + text: "," +- name: operator + line: 44 + column: 9 + text: "*" +- name: variable + line: 44 + column: 10 + text: x +- name: punctuation.delimiter + line: 44 + column: 11 + text: "," +- name: number + line: 44 + column: 13 + text: "3" +- name: keyword + line: 45 + column: 3 + text: in +- name: operator + line: 45 + column: 6 + text: "*" +- name: keyword + line: 46 + column: 3 + text: in +- name: operator + line: 46 + column: 6 + text: "*" +- name: punctuation.delimiter + line: 46 + column: 7 + text: "," +- name: number + line: 46 + column: 9 + text: "3" +- name: punctuation.delimiter + line: 46 + column: 10 + text: "," +- name: number + line: 46 + column: 12 + text: "4" +- name: keyword + line: 47 + column: 3 + text: in +- name: operator + line: 47 + column: 6 + text: "*" +- name: punctuation.delimiter + line: 47 + column: 7 + text: "," +- name: number + line: 47 + column: 9 + text: "3" +- name: punctuation.delimiter + line: 47 + column: 10 + text: "," +- name: operator + line: 47 + column: 12 + text: "*" +- name: keyword + line: 48 + column: 3 + text: in +- name: operator + line: 48 + column: 6 + text: "*" +- name: variable + line: 48 + column: 7 + text: a +- name: punctuation.delimiter + line: 48 + column: 8 + text: "," +- name: number + line: 48 + column: 10 + text: "3" +- name: punctuation.delimiter + line: 48 + column: 11 + text: "," +- name: operator + line: 48 + column: 13 + text: "*" +- name: variable + line: 48 + column: 14 + text: b +- name: keyword + line: 49 + column: 3 + text: in +- name: string.special.symbol + line: 49 + column: 6 + text: a +- name: string.special.symbol + line: 49 + column: 6 + text: a +- name: string.special.symbol + line: 49 + column: 7 + text: ":" +- name: keyword + line: 50 + column: 3 + text: in +- name: string.special.symbol + line: 50 + column: 6 + text: a +- name: string.special.symbol + line: 50 + column: 6 + text: a +- name: string.special.symbol + line: 50 + column: 7 + text: ":" +- name: number + line: 50 + column: 9 + text: "5" +- name: keyword + line: 51 + column: 3 + text: in +- name: string.special.symbol + line: 51 + column: 6 + text: a +- name: string.special.symbol + line: 51 + column: 6 + text: a +- name: string.special.symbol + line: 51 + column: 7 + text: ":" +- name: number + line: 51 + column: 9 + text: "5" +- name: punctuation.delimiter + line: 51 + column: 10 + text: "," +- name: keyword + line: 52 + column: 3 + text: in +- name: string.special.symbol + line: 52 + column: 6 + text: a +- name: string.special.symbol + line: 52 + column: 6 + text: a +- name: string.special.symbol + line: 52 + column: 7 + text: ":" +- name: number + line: 52 + column: 9 + text: "5" +- name: punctuation.delimiter + line: 52 + column: 10 + text: "," +- name: string.special.symbol + line: 52 + column: 12 + text: b +- name: string.special.symbol + line: 52 + column: 12 + text: b +- name: string.special.symbol + line: 52 + column: 13 + text: ":" +- name: punctuation.delimiter + line: 52 + column: 14 + text: "," +- name: operator + line: 52 + column: 16 + text: "**" +- name: keyword + line: 53 + column: 3 + text: in +- name: string.special.symbol + line: 53 + column: 6 + text: a +- name: string.special.symbol + line: 53 + column: 6 + text: a +- name: string.special.symbol + line: 53 + column: 7 + text: ":" +- name: number + line: 53 + column: 9 + text: "5" +- name: punctuation.delimiter + line: 53 + column: 10 + text: "," +- name: string.special.symbol + line: 53 + column: 12 + text: b +- name: string.special.symbol + line: 53 + column: 12 + text: b +- name: string.special.symbol + line: 53 + column: 13 + text: ":" +- name: punctuation.delimiter + line: 53 + column: 14 + text: "," +- name: operator + line: 53 + column: 16 + text: "**" +- name: variable + line: 53 + column: 18 + text: map +- name: keyword + line: 54 + column: 3 + text: in +- name: string.special.symbol + line: 54 + column: 6 + text: a +- name: string.special.symbol + line: 54 + column: 6 + text: a +- name: string.special.symbol + line: 54 + column: 7 + text: ":" +- name: number + line: 54 + column: 9 + text: "5" +- name: punctuation.delimiter + line: 54 + column: 10 + text: "," +- name: string + line: 54 + column: 12 + text: "\"b\"" +- name: string.special.symbol + line: 54 + column: 12 + text: "\"b\"" +- name: string.special.symbol + line: 54 + column: 15 + text: ":" +- name: punctuation.delimiter + line: 54 + column: 16 + text: "," +- name: operator + line: 54 + column: 18 + text: "**" +- name: constant.builtin + line: 54 + column: 20 + text: nil +- name: keyword + line: 55 + column: 3 + text: in +- name: operator + line: 55 + column: 6 + text: "**" +- name: constant.builtin + line: 55 + column: 8 + text: nil +- name: keyword + line: 56 + column: 3 + text: in +- name: punctuation.bracket + line: 56 + column: 6 + text: "[" +- name: number + line: 56 + column: 7 + text: "5" +- name: punctuation.bracket + line: 56 + column: 8 + text: "]" +- name: keyword + line: 57 + column: 3 + text: in +- name: punctuation.bracket + line: 57 + column: 6 + text: "[" +- name: number + line: 57 + column: 7 + text: "5" +- name: punctuation.bracket + line: 57 + column: 9 + text: "]" +- name: keyword + line: 58 + column: 3 + text: in +- name: punctuation.bracket + line: 58 + column: 6 + text: "[" +- name: number + line: 58 + column: 7 + text: "1" +- name: punctuation.delimiter + line: 58 + column: 8 + text: "," +- name: number + line: 58 + column: 10 + text: "2" +- name: punctuation.bracket + line: 58 + column: 11 + text: "]" +- name: keyword + line: 59 + column: 3 + text: in +- name: punctuation.bracket + line: 59 + column: 6 + text: "[" +- name: number + line: 59 + column: 7 + text: "1" +- name: punctuation.delimiter + line: 59 + column: 8 + text: "," +- name: number + line: 59 + column: 10 + text: "2" +- name: punctuation.bracket + line: 59 + column: 12 + text: "]" +- name: keyword + line: 60 + column: 3 + text: in +- name: punctuation.bracket + line: 60 + column: 6 + text: "[" +- name: number + line: 60 + column: 7 + text: "1" +- name: punctuation.delimiter + line: 60 + column: 8 + text: "," +- name: number + line: 60 + column: 10 + text: "2" +- name: punctuation.delimiter + line: 60 + column: 11 + text: "," +- name: number + line: 60 + column: 13 + text: "3" +- name: punctuation.bracket + line: 60 + column: 14 + text: "]" +- name: keyword + line: 61 + column: 3 + text: in +- name: punctuation.bracket + line: 61 + column: 6 + text: "[" +- name: number + line: 61 + column: 7 + text: "1" +- name: punctuation.delimiter + line: 61 + column: 8 + text: "," +- name: number + line: 61 + column: 10 + text: "2" +- name: punctuation.delimiter + line: 61 + column: 11 + text: "," +- name: number + line: 61 + column: 13 + text: "3" +- name: punctuation.bracket + line: 61 + column: 15 + text: "]" +- name: keyword + line: 62 + column: 3 + text: in +- name: punctuation.bracket + line: 62 + column: 6 + text: "[" +- name: number + line: 62 + column: 7 + text: "1" +- name: punctuation.delimiter + line: 62 + column: 8 + text: "," +- name: number + line: 62 + column: 10 + text: "2" +- name: punctuation.delimiter + line: 62 + column: 11 + text: "," +- name: number + line: 62 + column: 13 + text: "3" +- name: punctuation.delimiter + line: 62 + column: 14 + text: "," +- name: operator + line: 62 + column: 16 + text: "*" +- name: punctuation.bracket + line: 62 + column: 17 + text: "]" +- name: keyword + line: 63 + column: 3 + text: in +- name: punctuation.bracket + line: 63 + column: 6 + text: "[" +- name: number + line: 63 + column: 7 + text: "1" +- name: punctuation.delimiter + line: 63 + column: 8 + text: "," +- name: operator + line: 63 + column: 10 + text: "*" +- name: variable + line: 63 + column: 11 + text: x +- name: punctuation.delimiter + line: 63 + column: 12 + text: "," +- name: number + line: 63 + column: 14 + text: "3" +- name: punctuation.bracket + line: 63 + column: 15 + text: "]" +- name: keyword + line: 64 + column: 3 + text: in +- name: punctuation.bracket + line: 64 + column: 6 + text: "[" +- name: operator + line: 64 + column: 7 + text: "*" +- name: punctuation.bracket + line: 64 + column: 8 + text: "]" +- name: keyword + line: 65 + column: 3 + text: in +- name: punctuation.bracket + line: 65 + column: 6 + text: "[" +- name: operator + line: 65 + column: 7 + text: "*" +- name: punctuation.delimiter + line: 65 + column: 8 + text: "," +- name: number + line: 65 + column: 10 + text: "3" +- name: punctuation.delimiter + line: 65 + column: 11 + text: "," +- name: number + line: 65 + column: 13 + text: "4" +- name: punctuation.bracket + line: 65 + column: 14 + text: "]" +- name: keyword + line: 66 + column: 3 + text: in +- name: punctuation.bracket + line: 66 + column: 6 + text: "[" +- name: operator + line: 66 + column: 7 + text: "*" +- name: punctuation.delimiter + line: 66 + column: 8 + text: "," +- name: number + line: 66 + column: 10 + text: "3" +- name: punctuation.delimiter + line: 66 + column: 11 + text: "," +- name: operator + line: 66 + column: 13 + text: "*" +- name: punctuation.bracket + line: 66 + column: 14 + text: "]" +- name: keyword + line: 67 + column: 3 + text: in +- name: punctuation.bracket + line: 67 + column: 6 + text: "[" +- name: operator + line: 67 + column: 7 + text: "*" +- name: variable + line: 67 + column: 8 + text: a +- name: punctuation.delimiter + line: 67 + column: 9 + text: "," +- name: number + line: 67 + column: 11 + text: "3" +- name: punctuation.delimiter + line: 67 + column: 12 + text: "," +- name: operator + line: 67 + column: 14 + text: "*" +- name: variable + line: 67 + column: 15 + text: b +- name: punctuation.bracket + line: 67 + column: 16 + text: "]" +- name: keyword + line: 68 + column: 3 + text: in +- name: punctuation.bracket + line: 68 + column: 6 + text: "{" +- name: string.special.symbol + line: 68 + column: 7 + text: a +- name: string.special.symbol + line: 68 + column: 7 + text: a +- name: string.special.symbol + line: 68 + column: 8 + text: ":" +- name: punctuation.bracket + line: 68 + column: 9 + text: "}" +- name: keyword + line: 69 + column: 3 + text: in +- name: punctuation.bracket + line: 69 + column: 6 + text: "{" +- name: string.special.symbol + line: 69 + column: 7 + text: a +- name: string.special.symbol + line: 69 + column: 7 + text: a +- name: string.special.symbol + line: 69 + column: 8 + text: ":" +- name: number + line: 69 + column: 10 + text: "5" +- name: punctuation.bracket + line: 69 + column: 11 + text: "}" +- name: keyword + line: 70 + column: 3 + text: in +- name: punctuation.bracket + line: 70 + column: 6 + text: "{" +- name: string.special.symbol + line: 70 + column: 7 + text: a +- name: string.special.symbol + line: 70 + column: 7 + text: a +- name: string.special.symbol + line: 70 + column: 8 + text: ":" +- name: number + line: 70 + column: 10 + text: "5" +- name: punctuation.delimiter + line: 70 + column: 11 + text: "," +- name: punctuation.bracket + line: 70 + column: 12 + text: "}" +- name: keyword + line: 71 + column: 3 + text: in +- name: punctuation.bracket + line: 71 + column: 6 + text: "{" +- name: string.special.symbol + line: 71 + column: 7 + text: a +- name: string.special.symbol + line: 71 + column: 7 + text: a +- name: string.special.symbol + line: 71 + column: 8 + text: ":" +- name: number + line: 71 + column: 10 + text: "5" +- name: punctuation.delimiter + line: 71 + column: 11 + text: "," +- name: string.special.symbol + line: 71 + column: 13 + text: b +- name: string.special.symbol + line: 71 + column: 13 + text: b +- name: string.special.symbol + line: 71 + column: 14 + text: ":" +- name: punctuation.delimiter + line: 71 + column: 15 + text: "," +- name: operator + line: 71 + column: 17 + text: "**" +- name: punctuation.bracket + line: 71 + column: 19 + text: "}" +- name: keyword + line: 72 + column: 3 + text: in +- name: punctuation.bracket + line: 72 + column: 6 + text: "{" +- name: string.special.symbol + line: 72 + column: 7 + text: a +- name: string.special.symbol + line: 72 + column: 7 + text: a +- name: string.special.symbol + line: 72 + column: 8 + text: ":" +- name: number + line: 72 + column: 10 + text: "5" +- name: punctuation.delimiter + line: 72 + column: 11 + text: "," +- name: string.special.symbol + line: 72 + column: 13 + text: b +- name: string.special.symbol + line: 72 + column: 13 + text: b +- name: string.special.symbol + line: 72 + column: 14 + text: ":" +- name: punctuation.delimiter + line: 72 + column: 15 + text: "," +- name: operator + line: 72 + column: 17 + text: "**" +- name: variable + line: 72 + column: 19 + text: map +- name: punctuation.bracket + line: 72 + column: 22 + text: "}" +- name: keyword + line: 73 + column: 3 + text: in +- name: punctuation.bracket + line: 73 + column: 6 + text: "{" +- name: string.special.symbol + line: 73 + column: 7 + text: a +- name: string.special.symbol + line: 73 + column: 7 + text: a +- name: string.special.symbol + line: 73 + column: 8 + text: ":" +- name: number + line: 73 + column: 10 + text: "5" +- name: punctuation.delimiter + line: 73 + column: 11 + text: "," +- name: string.special.symbol + line: 73 + column: 13 + text: b +- name: string.special.symbol + line: 73 + column: 13 + text: b +- name: string.special.symbol + line: 73 + column: 14 + text: ":" +- name: punctuation.delimiter + line: 73 + column: 15 + text: "," +- name: operator + line: 73 + column: 17 + text: "**" +- name: constant.builtin + line: 73 + column: 19 + text: nil +- name: punctuation.bracket + line: 73 + column: 22 + text: "}" +- name: keyword + line: 74 + column: 3 + text: in +- name: punctuation.bracket + line: 74 + column: 6 + text: "{" +- name: operator + line: 74 + column: 7 + text: "**" +- name: constant.builtin + line: 74 + column: 9 + text: nil +- name: punctuation.bracket + line: 74 + column: 12 + text: "}" +- name: keyword + line: 75 + column: 3 + text: in +- name: punctuation.bracket + line: 75 + column: 6 + text: "{" +- name: punctuation.bracket + line: 75 + column: 7 + text: "}" +- name: keyword + line: 76 + column: 3 + text: in +- name: punctuation.bracket + line: 76 + column: 6 + text: "[" +- name: punctuation.bracket + line: 76 + column: 7 + text: "]" +- name: keyword + line: 77 + column: 3 + text: in +- name: operator + line: 77 + column: 6 + text: "-" +- name: number + line: 77 + column: 7 + text: "5" +- name: operator + line: 77 + column: 9 + text: "|" +- name: operator + line: 77 + column: 11 + text: + +- name: number + line: 77 + column: 12 + text: "10" +- name: keyword + line: 78 + column: 3 + text: in +- name: punctuation.bracket + line: 78 + column: 6 + text: ( +- name: constant.builtin + line: 78 + column: 7 + text: nil +- name: operator + line: 78 + column: 11 + text: "|" +- name: variable.special + line: 78 + column: 13 + text: self +- name: operator + line: 78 + column: 18 + text: "|" +- name: boolean + line: 78 + column: 20 + text: "true" +- name: operator + line: 78 + column: 25 + text: "|" +- name: boolean + line: 78 + column: 27 + text: "false" +- name: operator + line: 78 + column: 33 + text: "|" +- name: constant.builtin + line: 78 + column: 35 + text: __LINE__ +- name: operator + line: 78 + column: 44 + text: "|" +- name: constant.builtin + line: 78 + column: 46 + text: __FILE__ +- name: operator + line: 78 + column: 55 + text: "|" +- name: constant.builtin + line: 78 + column: 57 + text: __ENCODING__ +- name: punctuation.bracket + line: 78 + column: 69 + text: ) +- name: keyword + line: 79 + column: 1 + text: end +- name: keyword.control.conditional + line: 81 + column: 1 + text: case +- name: function.method + line: 81 + column: 6 + text: fun +- name: variable + line: 81 + column: 6 + text: fun +- name: punctuation.bracket + line: 81 + column: 9 + text: ( +- name: operator + line: 81 + column: 10 + text: "..." +- name: punctuation.delimiter + line: 81 + column: 13 + text: "," +- name: operator + line: 81 + column: 15 + text: "**" +- name: variable + line: 81 + column: 17 + text: hash_splat +- name: punctuation.bracket + line: 81 + column: 27 + text: ) +- name: keyword.control.conditional + line: 82 + column: 1 + text: when +- name: operator + line: 82 + column: 6 + text: "*" +- name: variable + line: 82 + column: 7 + text: splat +- name: keyword.control.conditional + line: 82 + column: 13 + text: then +- name: boolean + line: 82 + column: 18 + text: "true" +- name: keyword + line: 83 + column: 1 + text: end +- name: boolean + line: 85 + column: 1 + text: "true" +- name: boolean + line: 85 + column: 8 + text: "false" +- name: operator + line: 85 + column: 6 + text: "?" +- name: operator + line: 85 + column: 14 + text: ":" +- name: boolean + line: 85 + column: 16 + text: "true" +- name: keyword.control.conditional + line: 87 + column: 1 + text: if +- name: variable + line: 87 + column: 4 + text: foo +- name: variable + line: 88 + column: 3 + text: bar +- name: keyword.control.conditional + line: 89 + column: 1 + text: elsif +- name: variable + line: 89 + column: 7 + text: qux +- name: variable + line: 90 + column: 3 + text: baz +- name: keyword.control.conditional + line: 91 + column: 1 + text: else +- name: variable + line: 92 + column: 3 + text: bat +- name: keyword + line: 93 + column: 1 + text: end +- name: keyword.control.conditional + line: 95 + column: 1 + text: unless +- name: boolean + line: 95 + column: 8 + text: "true" +- name: keyword + line: 96 + column: 1 + text: end +- name: comment + line: 98 + column: 1 + text: "# Keywords — loop" +- name: keyword.control.repeat + line: 99 + column: 1 + text: while +- name: boolean + line: 99 + column: 7 + text: "true" +- name: keyword.control.repeat + line: 99 + column: 12 + text: do +- name: keyword.control.return + line: 100 + column: 3 + text: break +- name: keyword + line: 101 + column: 1 + text: end +- name: keyword.control.repeat + line: 103 + column: 1 + text: until +- name: boolean + line: 103 + column: 7 + text: "false" +- name: keyword.control.repeat + line: 103 + column: 13 + text: do +- name: keyword + line: 104 + column: 1 + text: end +- name: keyword.control.repeat + line: 106 + column: 1 + text: for +- name: variable + line: 106 + column: 5 + text: x +- name: punctuation.delimiter + line: 106 + column: 6 + text: "," +- name: operator + line: 106 + column: 8 + text: "*" +- name: variable + line: 106 + column: 9 + text: y +- name: keyword + line: 106 + column: 11 + text: in +- name: variable + line: 106 + column: 14 + text: z +- name: keyword.control.repeat + line: 106 + column: 16 + text: do +- name: keyword.control.return + line: 107 + column: 3 + text: next +- name: keyword + line: 108 + column: 1 + text: end +- name: comment + line: 110 + column: 1 + text: "# Keywords — exception handling" +- name: keyword.exception + line: 111 + column: 1 + text: begin +- name: variable + line: 112 + column: 3 + text: foo +- name: keyword.exception + line: 113 + column: 1 + text: rescue +- name: variable + line: 113 + column: 8 + text: x +- name: keyword.control.return + line: 114 + column: 3 + text: retry +- name: keyword.control.conditional + line: 115 + column: 1 + text: else +- name: variable + line: 116 + column: 3 + text: qux +- name: keyword.exception + line: 117 + column: 1 + text: ensure +- name: variable + line: 118 + column: 3 + text: baz +- name: keyword + line: 119 + column: 1 + text: end +- name: comment + line: 121 + column: 1 + text: "# Keywords — exception raising" +- name: variable + line: 122 + column: 1 + text: raise +- name: keyword.exception + line: 122 + column: 1 + text: raise +- name: variable + line: 123 + column: 1 + text: fail +- name: keyword.exception + line: 123 + column: 1 + text: fail +- name: variable + line: 124 + column: 1 + text: catch +- name: keyword.exception + line: 124 + column: 1 + text: catch +- name: variable + line: 125 + column: 1 + text: throw +- name: keyword.exception + line: 125 + column: 1 + text: throw +- name: comment + line: 127 + column: 1 + text: "# Keywords — flow return/jump" +- name: keyword.control.return + line: 128 + column: 1 + text: break +- name: keyword.control.return + line: 129 + column: 1 + text: next +- name: keyword.control.return + line: 130 + column: 1 + text: retry +- name: keyword.control.return + line: 131 + column: 1 + text: return +- name: keyword.control.return + line: 132 + column: 1 + text: yield +- name: comment + line: 134 + column: 1 + text: "# Keywords — method scopes" +- name: variable + line: 135 + column: 1 + text: private +- name: keyword + line: 135 + column: 1 + text: private +- name: variable + line: 136 + column: 1 + text: protected +- name: keyword + line: 136 + column: 1 + text: protected +- name: variable + line: 137 + column: 1 + text: public +- name: keyword + line: 137 + column: 1 + text: public +- name: comment + line: 139 + column: 1 + text: "# Keywords — imports" +- name: variable + line: 140 + column: 1 + text: require +- name: keyword.import + line: 140 + column: 1 + text: require +- name: variable + line: 141 + column: 1 + text: require_relative +- name: keyword.import + line: 141 + column: 1 + text: require_relative +- name: variable + line: 142 + column: 1 + text: load +- name: keyword.import + line: 142 + column: 1 + text: load +- name: comment + line: 144 + column: 1 + text: "# Method/function definitions" +- name: keyword.function + line: 145 + column: 1 + text: undef +- name: operator + line: 145 + column: 7 + text: + +- name: keyword + line: 146 + column: 1 + text: alias +- name: function.method + line: 146 + column: 7 + text: foo +- name: variable + line: 146 + column: 7 + text: foo +- name: operator + line: 146 + column: 11 + text: "-" +- name: keyword.function + line: 147 + column: 1 + text: def +- name: function.method.definition + line: 147 + column: 5 + text: method +- name: variable + line: 147 + column: 5 + text: method +- name: punctuation.delimiter + line: 147 + column: 11 + text: ; +- name: variable.special + line: 148 + column: 3 + text: super +- name: keyword + line: 149 + column: 1 + text: end +- name: keyword.function + line: 150 + column: 1 + text: def +- name: variable.special + line: 150 + column: 5 + text: self +- name: punctuation.delimiter + line: 150 + column: 9 + text: "." +- name: function.method.definition + line: 150 + column: 10 + text: singleton_method +- name: variable + line: 150 + column: 10 + text: singleton_method +- name: operator + line: 150 + column: 27 + text: "=" +- name: constant.builtin + line: 150 + column: 29 + text: nil +- name: keyword.function + line: 151 + column: 1 + text: def +- name: function.method + line: 151 + column: 5 + text: setter +- name: variable + line: 151 + column: 5 + text: setter +- name: operator + line: 151 + column: 11 + text: "=" +- name: keyword + line: 152 + column: 1 + text: end +- name: keyword.function + line: 153 + column: 1 + text: def +- name: function.method.definition + line: 153 + column: 5 + text: method_params +- name: variable + line: 153 + column: 5 + text: method_params +- name: punctuation.bracket + line: 153 + column: 18 + text: ( +- name: variable.parameter + line: 153 + column: 19 + text: var +- name: variable + line: 153 + column: 19 + text: var +- name: punctuation.delimiter + line: 153 + column: 22 + text: "," +- name: variable.parameter + line: 153 + column: 24 + text: optional +- name: variable + line: 153 + column: 24 + text: optional +- name: operator + line: 153 + column: 33 + text: "=" +- name: constant.builtin + line: 153 + column: 35 + text: nil +- name: punctuation.delimiter + line: 153 + column: 38 + text: "," +- name: operator + line: 153 + column: 40 + text: "&" +- name: variable + line: 153 + column: 41 + text: block +- name: punctuation.delimiter + line: 153 + column: 46 + text: "," +- name: operator + line: 153 + column: 48 + text: "..." +- name: punctuation.delimiter + line: 153 + column: 51 + text: "," +- name: variable + line: 153 + column: 53 + text: kw +- name: variable.parameter.keyword + line: 153 + column: 53 + text: kw +- name: variable.parameter.keyword + line: 153 + column: 55 + text: ":" +- name: punctuation.delimiter + line: 153 + column: 56 + text: "," +- name: operator + line: 153 + column: 58 + text: "*" +- name: variable + line: 153 + column: 59 + text: opts +- name: punctuation.delimiter + line: 153 + column: 63 + text: "," +- name: operator + line: 153 + column: 65 + text: "**" +- name: variable + line: 153 + column: 67 + text: hash +- name: punctuation.delimiter + line: 153 + column: 71 + text: "," +- name: operator + line: 153 + column: 73 + text: "**" +- name: constant.builtin + line: 153 + column: 75 + text: nil +- name: punctuation.bracket + line: 153 + column: 78 + text: ) +- name: keyword + line: 154 + column: 1 + text: end +- name: function.method + line: 155 + column: 1 + text: fun +- name: variable + line: 155 + column: 1 + text: fun +- name: punctuation.bracket + line: 155 + column: 5 + text: "{" +- name: punctuation.bracket + line: 155 + column: 7 + text: "|" +- name: punctuation.bracket + line: 155 + column: 8 + text: "|" +- name: constant.builtin + line: 155 + column: 10 + text: nil +- name: punctuation.bracket + line: 155 + column: 14 + text: "}" +- name: variable + line: 156 + column: 1 + text: lambda +- name: operator + line: 156 + column: 8 + text: "=" +- name: operator + line: 156 + column: 10 + text: "->" +- name: punctuation.bracket + line: 156 + column: 13 + text: ( +- name: punctuation.bracket + line: 156 + column: 14 + text: ) +- name: punctuation.bracket + line: 156 + column: 16 + text: "{" +- name: constant.builtin + line: 156 + column: 18 + text: nil +- name: punctuation.bracket + line: 156 + column: 22 + text: "}" +- name: comment + line: 158 + column: 1 + text: "# Operator overloading definitions" +- name: keyword.function + line: 159 + column: 1 + text: def +- name: operator + line: 159 + column: 5 + text: + +- name: punctuation.bracket + line: 159 + column: 6 + text: ( +- name: variable.parameter + line: 159 + column: 7 + text: a +- name: variable + line: 159 + column: 7 + text: a +- name: punctuation.bracket + line: 159 + column: 8 + text: ) +- name: keyword + line: 160 + column: 1 + text: end +- name: keyword.function + line: 161 + column: 1 + text: def +- name: operator + line: 161 + column: 5 + text: "-" +- name: punctuation.bracket + line: 161 + column: 6 + text: ( +- name: variable.parameter + line: 161 + column: 7 + text: a +- name: variable + line: 161 + column: 7 + text: a +- name: punctuation.bracket + line: 161 + column: 8 + text: ) +- name: keyword + line: 162 + column: 1 + text: end +- name: keyword.function + line: 163 + column: 1 + text: def +- name: operator + line: 163 + column: 5 + text: "*" +- name: operator + line: 163 + column: 5 + text: "*" +- name: punctuation.bracket + line: 163 + column: 6 + text: ( +- name: variable.parameter + line: 163 + column: 7 + text: a +- name: variable + line: 163 + column: 7 + text: a +- name: punctuation.bracket + line: 163 + column: 8 + text: ) +- name: keyword + line: 164 + column: 1 + text: end +- name: keyword.function + line: 165 + column: 1 + text: def +- name: operator + line: 165 + column: 5 + text: "**" +- name: operator + line: 165 + column: 5 + text: "**" +- name: punctuation.bracket + line: 165 + column: 7 + text: ( +- name: variable.parameter + line: 165 + column: 8 + text: a +- name: variable + line: 165 + column: 8 + text: a +- name: punctuation.bracket + line: 165 + column: 9 + text: ) +- name: keyword + line: 166 + column: 1 + text: end +- name: keyword.function + line: 167 + column: 1 + text: def +- name: operator + line: 167 + column: 5 + text: / +- name: punctuation.bracket + line: 167 + column: 6 + text: ( +- name: variable.parameter + line: 167 + column: 7 + text: a +- name: variable + line: 167 + column: 7 + text: a +- name: punctuation.bracket + line: 167 + column: 8 + text: ) +- name: keyword + line: 168 + column: 1 + text: end +- name: keyword.function + line: 169 + column: 1 + text: def +- name: operator + line: 169 + column: 5 + text: "%" +- name: punctuation.bracket + line: 169 + column: 6 + text: ( +- name: variable.parameter + line: 169 + column: 7 + text: a +- name: variable + line: 169 + column: 7 + text: a +- name: punctuation.bracket + line: 169 + column: 8 + text: ) +- name: keyword + line: 170 + column: 1 + text: end +- name: keyword.function + line: 171 + column: 1 + text: def +- name: operator + line: 171 + column: 5 + text: "<<" +- name: punctuation.bracket + line: 171 + column: 7 + text: ( +- name: variable.parameter + line: 171 + column: 8 + text: a +- name: variable + line: 171 + column: 8 + text: a +- name: punctuation.bracket + line: 171 + column: 9 + text: ) +- name: keyword + line: 172 + column: 1 + text: end +- name: keyword.function + line: 173 + column: 1 + text: def +- name: operator + line: 173 + column: 5 + text: ">>" +- name: punctuation.bracket + line: 173 + column: 7 + text: ( +- name: variable.parameter + line: 173 + column: 8 + text: a +- name: variable + line: 173 + column: 8 + text: a +- name: punctuation.bracket + line: 173 + column: 9 + text: ) +- name: keyword + line: 174 + column: 1 + text: end +- name: keyword.function + line: 175 + column: 1 + text: def +- name: operator + line: 175 + column: 5 + text: "~" +- name: punctuation.bracket + line: 175 + column: 6 + text: ( +- name: variable.parameter + line: 175 + column: 7 + text: a +- name: variable + line: 175 + column: 7 + text: a +- name: punctuation.bracket + line: 175 + column: 8 + text: ) +- name: keyword + line: 176 + column: 1 + text: end +- name: keyword.function + line: 177 + column: 1 + text: def +- name: operator + line: 177 + column: 5 + text: "&" +- name: operator + line: 177 + column: 5 + text: "&" +- name: punctuation.bracket + line: 177 + column: 6 + text: ( +- name: variable.parameter + line: 177 + column: 7 + text: a +- name: variable + line: 177 + column: 7 + text: a +- name: punctuation.bracket + line: 177 + column: 8 + text: ) +- name: keyword + line: 178 + column: 1 + text: end +- name: keyword.function + line: 179 + column: 1 + text: def +- name: operator + line: 179 + column: 5 + text: "|" +- name: punctuation.bracket + line: 179 + column: 6 + text: ( +- name: variable.parameter + line: 179 + column: 7 + text: a +- name: variable + line: 179 + column: 7 + text: a +- name: punctuation.bracket + line: 179 + column: 8 + text: ) +- name: keyword + line: 180 + column: 1 + text: end +- name: keyword.function + line: 181 + column: 1 + text: def +- name: operator + line: 181 + column: 5 + text: ^ +- name: operator + line: 181 + column: 5 + text: ^ +- name: punctuation.bracket + line: 181 + column: 6 + text: ( +- name: variable.parameter + line: 181 + column: 7 + text: a +- name: variable + line: 181 + column: 7 + text: a +- name: punctuation.bracket + line: 181 + column: 8 + text: ) +- name: keyword + line: 182 + column: 1 + text: end +- name: keyword.function + line: 183 + column: 1 + text: def +- name: operator + line: 183 + column: 5 + text: "<" +- name: punctuation.bracket + line: 183 + column: 6 + text: ( +- name: variable.parameter + line: 183 + column: 7 + text: a +- name: variable + line: 183 + column: 7 + text: a +- name: punctuation.bracket + line: 183 + column: 8 + text: ) +- name: keyword + line: 184 + column: 1 + text: end +- name: keyword.function + line: 185 + column: 1 + text: def +- name: operator + line: 185 + column: 5 + text: ">" +- name: punctuation.bracket + line: 185 + column: 6 + text: ( +- name: variable.parameter + line: 185 + column: 7 + text: a +- name: variable + line: 185 + column: 7 + text: a +- name: punctuation.bracket + line: 185 + column: 8 + text: ) +- name: keyword + line: 186 + column: 1 + text: end +- name: keyword.function + line: 187 + column: 1 + text: def +- name: operator + line: 187 + column: 5 + text: "<=" +- name: punctuation.bracket + line: 187 + column: 7 + text: ( +- name: variable.parameter + line: 187 + column: 8 + text: a +- name: variable + line: 187 + column: 8 + text: a +- name: punctuation.bracket + line: 187 + column: 9 + text: ) +- name: keyword + line: 188 + column: 1 + text: end +- name: keyword.function + line: 189 + column: 1 + text: def +- name: operator + line: 189 + column: 5 + text: ">=" +- name: punctuation.bracket + line: 189 + column: 7 + text: ( +- name: variable.parameter + line: 189 + column: 8 + text: a +- name: variable + line: 189 + column: 8 + text: a +- name: punctuation.bracket + line: 189 + column: 9 + text: ) +- name: keyword + line: 190 + column: 1 + text: end +- name: keyword.function + line: 191 + column: 1 + text: def +- name: operator + line: 191 + column: 5 + text: "!" +- name: punctuation.bracket + line: 191 + column: 6 + text: ( +- name: variable.parameter + line: 191 + column: 7 + text: a +- name: variable + line: 191 + column: 7 + text: a +- name: punctuation.bracket + line: 191 + column: 8 + text: ) +- name: keyword + line: 192 + column: 1 + text: end +- name: keyword.function + line: 193 + column: 1 + text: def +- name: operator + line: 193 + column: 5 + text: "==" +- name: punctuation.bracket + line: 193 + column: 7 + text: ( +- name: variable.parameter + line: 193 + column: 8 + text: a +- name: variable + line: 193 + column: 8 + text: a +- name: punctuation.bracket + line: 193 + column: 9 + text: ) +- name: keyword + line: 194 + column: 1 + text: end +- name: keyword.function + line: 195 + column: 1 + text: def +- name: operator + line: 195 + column: 5 + text: "!=" +- name: punctuation.bracket + line: 195 + column: 7 + text: ( +- name: variable.parameter + line: 195 + column: 8 + text: a +- name: variable + line: 195 + column: 8 + text: a +- name: punctuation.bracket + line: 195 + column: 9 + text: ) +- name: keyword + line: 196 + column: 1 + text: end +- name: keyword.function + line: 197 + column: 1 + text: def +- name: operator + line: 197 + column: 5 + text: "===" +- name: punctuation.bracket + line: 197 + column: 8 + text: ( +- name: variable.parameter + line: 197 + column: 9 + text: a +- name: variable + line: 197 + column: 9 + text: a +- name: punctuation.bracket + line: 197 + column: 10 + text: ) +- name: keyword + line: 198 + column: 1 + text: end +- name: keyword.function + line: 199 + column: 1 + text: def +- name: operator + line: 199 + column: 5 + text: "=~" +- name: punctuation.bracket + line: 199 + column: 7 + text: ( +- name: variable.parameter + line: 199 + column: 8 + text: a +- name: variable + line: 199 + column: 8 + text: a +- name: punctuation.bracket + line: 199 + column: 9 + text: ) +- name: keyword + line: 200 + column: 1 + text: end +- name: keyword.function + line: 201 + column: 1 + text: def +- name: operator + line: 201 + column: 5 + text: "!~" +- name: punctuation.bracket + line: 201 + column: 7 + text: ( +- name: variable.parameter + line: 201 + column: 8 + text: a +- name: variable + line: 201 + column: 8 + text: a +- name: punctuation.bracket + line: 201 + column: 9 + text: ) +- name: keyword + line: 202 + column: 1 + text: end +- name: keyword.function + line: 203 + column: 1 + text: def +- name: operator + line: 203 + column: 5 + text: "<=>" +- name: punctuation.bracket + line: 203 + column: 8 + text: ( +- name: variable.parameter + line: 203 + column: 9 + text: a +- name: variable + line: 203 + column: 9 + text: a +- name: punctuation.bracket + line: 203 + column: 10 + text: ) +- name: keyword + line: 204 + column: 1 + text: end +- name: keyword.function + line: 205 + column: 1 + text: def +- name: operator + line: 205 + column: 5 + text: ".." +- name: operator + line: 205 + column: 5 + text: ".." +- name: punctuation.bracket + line: 205 + column: 7 + text: ( +- name: variable.parameter + line: 205 + column: 8 + text: a +- name: variable + line: 205 + column: 8 + text: a +- name: punctuation.bracket + line: 205 + column: 9 + text: ) +- name: keyword + line: 206 + column: 1 + text: end +- name: keyword.function + line: 207 + column: 1 + text: def +- name: operator + line: 207 + column: 5 + text: +@ +- name: punctuation.bracket + line: 207 + column: 7 + text: ( +- name: variable.parameter + line: 207 + column: 8 + text: a +- name: variable + line: 207 + column: 8 + text: a +- name: punctuation.bracket + line: 207 + column: 9 + text: ) +- name: keyword + line: 208 + column: 1 + text: end +- name: keyword.function + line: 209 + column: 1 + text: def +- name: operator + line: 209 + column: 5 + text: "-@" +- name: punctuation.bracket + line: 209 + column: 7 + text: ( +- name: variable.parameter + line: 209 + column: 8 + text: a +- name: variable + line: 209 + column: 8 + text: a +- name: punctuation.bracket + line: 209 + column: 9 + text: ) +- name: keyword + line: 210 + column: 1 + text: end +- name: keyword.function + line: 211 + column: 1 + text: def +- name: operator + line: 211 + column: 5 + text: ~@ +- name: punctuation.bracket + line: 211 + column: 7 + text: ( +- name: variable.parameter + line: 211 + column: 8 + text: a +- name: variable + line: 211 + column: 8 + text: a +- name: punctuation.bracket + line: 211 + column: 9 + text: ) +- name: keyword + line: 212 + column: 1 + text: end +- name: keyword.function + line: 213 + column: 1 + text: def +- name: operator + line: 213 + column: 5 + text: "[]" +- name: punctuation.bracket + line: 213 + column: 7 + text: ( +- name: variable.parameter + line: 213 + column: 8 + text: a +- name: variable + line: 213 + column: 8 + text: a +- name: punctuation.bracket + line: 213 + column: 9 + text: ) +- name: keyword + line: 214 + column: 1 + text: end +- name: keyword.function + line: 215 + column: 1 + text: def +- name: operator + line: 215 + column: 5 + text: "[]=" +- name: punctuation.bracket + line: 215 + column: 8 + text: ( +- name: variable.parameter + line: 215 + column: 9 + text: a +- name: variable + line: 215 + column: 9 + text: a +- name: punctuation.bracket + line: 215 + column: 10 + text: ) +- name: keyword + line: 216 + column: 1 + text: end +- name: keyword.function + line: 217 + column: 1 + text: def +- name: operator + line: 217 + column: 5 + text: "`" +- name: punctuation.bracket + line: 217 + column: 6 + text: ( +- name: variable.parameter + line: 217 + column: 7 + text: a +- name: variable + line: 217 + column: 7 + text: a +- name: punctuation.bracket + line: 217 + column: 8 + text: ) +- name: keyword + line: 218 + column: 1 + text: end +- name: comment + line: 220 + column: 1 + text: "# Builtin functions/methods" +- name: function.method.builtin + line: 221 + column: 1 + text: defined? +- name: variable + line: 221 + column: 10 + text: foo +- name: function.method + line: 222 + column: 1 + text: include +- name: function.builtin + line: 222 + column: 1 + text: include +- name: variable + line: 222 + column: 1 + text: include +- name: variable + line: 222 + column: 9 + text: foo +- name: function.method + line: 223 + column: 1 + text: extend +- name: function.builtin + line: 223 + column: 1 + text: extend +- name: variable + line: 223 + column: 1 + text: extend +- name: variable + line: 223 + column: 8 + text: foo +- name: function.method + line: 224 + column: 1 + text: prepend +- name: function.builtin + line: 224 + column: 1 + text: prepend +- name: variable + line: 224 + column: 1 + text: prepend +- name: variable + line: 224 + column: 9 + text: foo +- name: function.method + line: 225 + column: 1 + text: refine +- name: function.builtin + line: 225 + column: 1 + text: refine +- name: variable + line: 225 + column: 1 + text: refine +- name: variable + line: 225 + column: 8 + text: foo +- name: function.method + line: 226 + column: 1 + text: using +- name: function.builtin + line: 226 + column: 1 + text: using +- name: variable + line: 226 + column: 1 + text: using +- name: variable + line: 226 + column: 7 + text: foo +- name: comment + line: 228 + column: 1 + text: "# String literals" +- name: string + line: 229 + column: 1 + text: "\"string\"" +- name: string + line: 230 + column: 1 + text: "'string'" +- name: string + line: 231 + column: 1 + text: "%[string]" +- name: string + line: 232 + column: 1 + text: "%q[string]" +- name: string + line: 233 + column: 1 + text: "%Q[string]" +- name: punctuation.bracket + line: 234 + column: 1 + text: "%w[" +- name: string + line: 234 + column: 4 + text: string +- name: string + line: 234 + column: 11 + text: string +- name: string + line: 234 + column: 18 + text: string +- name: punctuation.bracket + line: 234 + column: 24 + text: "]" +- name: punctuation.bracket + line: 235 + column: 1 + text: "%W[" +- name: string + line: 235 + column: 4 + text: string +- name: string + line: 235 + column: 11 + text: string +- name: string + line: 235 + column: 18 + text: string +- name: punctuation.bracket + line: 235 + column: 24 + text: "]" +- name: string + line: 237 + column: 1 + text: "\"\\n\\xA\\000\\u0af2\"" +- name: string.escape + line: 237 + column: 2 + text: "\\n" +- name: string.escape + line: 237 + column: 4 + text: "\\xA" +- name: string.escape + line: 237 + column: 7 + text: "\\000" +- name: string.escape + line: 237 + column: 11 + text: "\\u0af2" +- name: string + line: 238 + column: 1 + text: "?a" +- name: string + line: 239 + column: 1 + text: "?\\n" +- name: string + line: 240 + column: 1 + text: "?0" +- name: comment + line: 242 + column: 1 + text: "# String interpolation" +- name: string + line: 243 + column: 1 + text: "\"inter#{polation}\"" +- name: variable + line: 243 + column: 9 + text: polation +- name: embedded + line: 243 + column: 7 + text: "#{polation}" +- name: punctuation.special + line: 243 + column: 7 + text: "#{" +- name: punctuation.special + line: 243 + column: 17 + text: "}" +- name: punctuation.bracket + line: 243 + column: 17 + text: "}" +- name: comment + line: 245 + column: 1 + text: "# Subshell literals" +- name: string + line: 246 + column: 1 + text: "`subshell`" +- name: string + line: 247 + column: 1 + text: "%x(subshell)" +- name: comment + line: 249 + column: 1 + text: "# Heredoc literal" +- name: string + line: 250 + column: 1 + text: "<<~EOS" +- name: string + line: 250 + column: 7 + text: "\n heredoc\nEOS" +- name: comment + line: 254 + column: 1 + text: "# Symbol literals" +- name: string.special.symbol + line: 255 + column: 1 + text: ":symbol" +- name: string.special.symbol + line: 256 + column: 1 + text: ":symbol!" +- name: string.special.symbol + line: 257 + column: 1 + text: ":symbol?" +- name: string.special.symbol + line: 258 + column: 1 + text: ":\"delimited-symbol\"" +- name: string.special.symbol + line: 259 + column: 1 + text: "%s[delimited-symbol]" +- name: string.special.symbol + line: 260 + column: 1 + text: "%s[delimited-symbol]" +- name: punctuation.bracket + line: 261 + column: 1 + text: "%i[" +- name: string.special.symbol + line: 261 + column: 4 + text: symbol +- name: string.special.symbol + line: 261 + column: 11 + text: symbol! +- name: string.special.symbol + line: 261 + column: 19 + text: symbol? +- name: punctuation.bracket + line: 261 + column: 26 + text: "]" +- name: punctuation.bracket + line: 262 + column: 1 + text: "%I[" +- name: string.special.symbol + line: 262 + column: 4 + text: symbol +- name: string.special.symbol + line: 262 + column: 11 + text: symbol! +- name: string.special.symbol + line: 262 + column: 19 + text: symbol? +- name: punctuation.bracket + line: 262 + column: 26 + text: "]" +- name: comment + line: 264 + column: 1 + text: "# Regex literals" +- name: string.regex + line: 265 + column: 1 + text: /regex/ +- name: string.regex + line: 266 + column: 1 + text: "%r{regex}" +- name: comment + line: 268 + column: 1 + text: "# Number literals" +- name: number + line: 269 + column: 1 + text: "1" +- name: number + line: 270 + column: 1 + text: "1.0" +- name: number + line: 271 + column: 1 + text: "12" +- name: operator + line: 271 + column: 3 + text: "-" +- name: number + line: 271 + column: 4 + text: 34.2ri +- name: number + line: 271 + column: 4 + text: "34.2" +- name: number + line: 271 + column: 4 + text: "34.2" +- name: comment + line: 273 + column: 1 + text: "# Boolean/nil literals" +- name: boolean + line: 274 + column: 1 + text: "true" +- name: boolean + line: 275 + column: 1 + text: "false" +- name: constant.builtin + line: 276 + column: 1 + text: nil +- name: comment + line: 278 + column: 1 + text: "# Hash" +- name: punctuation.bracket + line: 279 + column: 1 + text: "{" +- name: string.special.symbol + line: 279 + column: 3 + text: s1 +- name: string.special.symbol + line: 279 + column: 3 + text: s1 +- name: string.special.symbol + line: 279 + column: 5 + text: ":" +- name: constant.builtin + line: 279 + column: 7 + text: nil +- name: punctuation.delimiter + line: 279 + column: 10 + text: "," +- name: string.special.symbol + line: 279 + column: 12 + text: s1! +- name: string.special.symbol + line: 279 + column: 12 + text: s1! +- name: string.special.symbol + line: 279 + column: 15 + text: ":" +- name: constant.builtin + line: 279 + column: 17 + text: nil +- name: punctuation.delimiter + line: 279 + column: 20 + text: "," +- name: string.special.symbol + line: 279 + column: 22 + text: s1? +- name: string.special.symbol + line: 279 + column: 22 + text: s1? +- name: string.special.symbol + line: 279 + column: 25 + text: ":" +- name: constant.builtin + line: 279 + column: 27 + text: nil +- name: punctuation.delimiter + line: 279 + column: 30 + text: "," +- name: string + line: 279 + column: 32 + text: "\"?s1\"" +- name: string.special.symbol + line: 279 + column: 32 + text: "\"?s1\"" +- name: string.special.symbol + line: 279 + column: 37 + text: ":" +- name: constant.builtin + line: 279 + column: 39 + text: nil +- name: punctuation.delimiter + line: 279 + column: 42 + text: "," +- name: string.special.symbol + line: 279 + column: 44 + text: ":s2" +- name: operator + line: 279 + column: 48 + text: "=>" +- name: constant.builtin + line: 279 + column: 51 + text: nil +- name: punctuation.delimiter + line: 279 + column: 54 + text: "," +- name: string.special.symbol + line: 279 + column: 56 + text: ":\"?s2\"" +- name: operator + line: 279 + column: 63 + text: "=>" +- name: constant.builtin + line: 279 + column: 66 + text: nil +- name: punctuation.delimiter + line: 279 + column: 69 + text: "," +- name: string + line: 279 + column: 71 + text: "\"string\"" +- name: operator + line: 279 + column: 80 + text: "=>" +- name: constant.builtin + line: 279 + column: 83 + text: nil +- name: punctuation.bracket + line: 279 + column: 86 + text: "}" +- name: comment + line: 281 + column: 1 + text: "# Unary operators" +- name: keyword + line: 282 + column: 1 + text: not +- name: boolean + line: 282 + column: 5 + text: "true" +- name: operator + line: 283 + column: 1 + text: "!" +- name: boolean + line: 283 + column: 2 + text: "true" +- name: operator + line: 284 + column: 1 + text: + +- name: number + line: 284 + column: 2 + text: "1" +- name: operator + line: 285 + column: 1 + text: "-" +- name: number + line: 285 + column: 2 + text: "1" +- name: operator + line: 286 + column: 1 + text: "~" +- name: variable + line: 286 + column: 2 + text: var +- name: comment + line: 288 + column: 1 + text: "# Binary operators" +- name: boolean + line: 289 + column: 1 + text: "true" +- name: keyword + line: 289 + column: 6 + text: and +- name: boolean + line: 289 + column: 10 + text: "true" +- name: boolean + line: 290 + column: 1 + text: "true" +- name: keyword + line: 290 + column: 6 + text: or +- name: boolean + line: 290 + column: 9 + text: "false" +- name: boolean + line: 291 + column: 1 + text: "true" +- name: operator + line: 291 + column: 6 + text: "&&" +- name: boolean + line: 291 + column: 9 + text: "true" +- name: boolean + line: 292 + column: 1 + text: "true" +- name: operator + line: 292 + column: 6 + text: "||" +- name: boolean + line: 292 + column: 9 + text: "false" +- name: boolean + line: 293 + column: 1 + text: "true" +- name: operator + line: 293 + column: 6 + text: "==" +- name: boolean + line: 293 + column: 9 + text: "true" +- name: boolean + line: 294 + column: 1 + text: "true" +- name: operator + line: 294 + column: 6 + text: "!=" +- name: boolean + line: 294 + column: 9 + text: "false" +- name: number + line: 295 + column: 1 + text: "1" +- name: operator + line: 295 + column: 3 + text: + +- name: number + line: 295 + column: 5 + text: "2" +- name: number + line: 296 + column: 1 + text: "2" +- name: operator + line: 296 + column: 3 + text: "-" +- name: number + line: 296 + column: 5 + text: "1" +- name: number + line: 297 + column: 1 + text: "3" +- name: operator + line: 297 + column: 3 + text: "*" +- name: operator + line: 297 + column: 3 + text: "*" +- name: number + line: 297 + column: 5 + text: "2" +- name: number + line: 298 + column: 1 + text: "2" +- name: operator + line: 298 + column: 3 + text: "**" +- name: operator + line: 298 + column: 3 + text: "**" +- name: number + line: 298 + column: 6 + text: "2" +- name: number + line: 299 + column: 1 + text: "2" +- name: operator + line: 299 + column: 3 + text: / +- name: number + line: 299 + column: 5 + text: "3" +- name: number + line: 300 + column: 1 + text: "0" +- name: operator + line: 300 + column: 3 + text: "%" +- name: number + line: 300 + column: 5 + text: "2" +- name: number + line: 301 + column: 1 + text: "1" +- name: operator + line: 301 + column: 3 + text: "<<" +- name: number + line: 301 + column: 6 + text: "2" +- name: number + line: 302 + column: 1 + text: "2" +- name: operator + line: 302 + column: 3 + text: ">>" +- name: number + line: 302 + column: 6 + text: "1" +- name: number + line: 303 + column: 1 + text: "1" +- name: operator + line: 303 + column: 3 + text: "&" +- name: operator + line: 303 + column: 3 + text: "&" +- name: number + line: 303 + column: 5 + text: "2" +- name: number + line: 304 + column: 1 + text: "2" +- name: operator + line: 304 + column: 3 + text: "|" +- name: number + line: 304 + column: 5 + text: "1" +- name: number + line: 305 + column: 1 + text: "2" +- name: operator + line: 305 + column: 3 + text: ^ +- name: operator + line: 305 + column: 3 + text: ^ +- name: number + line: 305 + column: 5 + text: "2" +- name: number + line: 306 + column: 1 + text: "2" +- name: operator + line: 306 + column: 3 + text: "<" +- name: number + line: 306 + column: 5 + text: "1" +- name: number + line: 307 + column: 1 + text: "1" +- name: operator + line: 307 + column: 3 + text: ">" +- name: number + line: 307 + column: 5 + text: "2" +- name: number + line: 308 + column: 1 + text: "2" +- name: operator + line: 308 + column: 3 + text: "<=" +- name: number + line: 308 + column: 6 + text: "1" +- name: number + line: 309 + column: 1 + text: "1" +- name: operator + line: 309 + column: 3 + text: ">=" +- name: number + line: 309 + column: 6 + text: "2" +- name: number + line: 310 + column: 1 + text: "1" +- name: operator + line: 310 + column: 3 + text: "===" +- name: number + line: 310 + column: 7 + text: "1.0" +- name: string + line: 311 + column: 1 + text: "\"string\"" +- name: operator + line: 311 + column: 10 + text: "=~" +- name: string.regex + line: 311 + column: 13 + text: /reg/ +- name: string + line: 312 + column: 1 + text: "\"string\"" +- name: operator + line: 312 + column: 10 + text: "!~" +- name: string.regex + line: 312 + column: 13 + text: /reg/ +- name: variable + line: 313 + column: 1 + text: foo +- name: operator + line: 313 + column: 5 + text: "<=>" +- name: variable + line: 313 + column: 9 + text: bar +- name: number + line: 314 + column: 1 + text: "1" +- name: operator + line: 314 + column: 2 + text: ".." +- name: operator + line: 314 + column: 2 + text: ".." +- name: number + line: 314 + column: 4 + text: "2" +- name: number + line: 315 + column: 1 + text: "1" +- name: operator + line: 315 + column: 2 + text: "..." +- name: operator + line: 315 + column: 2 + text: "..." +- name: number + line: 315 + column: 5 + text: "2" +- name: variable + line: 316 + column: 1 + text: foo +- name: operator + line: 316 + column: 4 + text: "&." +- name: function.method + line: 316 + column: 6 + text: bar +- name: variable + line: 316 + column: 6 + text: bar +- name: variable + line: 317 + column: 1 + text: foo +- name: operator + line: 317 + column: 4 + text: "&." +- name: function.method + line: 317 + column: 6 + text: bar +- name: variable + line: 317 + column: 6 + text: bar +- name: punctuation.bracket + line: 317 + column: 9 + text: ( +- name: variable + line: 317 + column: 10 + text: var +- name: punctuation.bracket + line: 317 + column: 13 + text: ) +- name: variable + line: 318 + column: 1 + text: foo +- name: operator + line: 318 + column: 5 + text: "&." +- name: operator + line: 318 + column: 7 + text: "-" +- name: variable + line: 318 + column: 9 + text: bar +- name: comment + line: 320 + column: 1 + text: "# Assignment operators" +- name: variable + line: 321 + column: 1 + text: var +- name: operator + line: 321 + column: 5 + text: "=" +- name: string + line: 321 + column: 7 + text: "\"foo\"" +- name: variable + line: 322 + column: 1 + text: var +- name: operator + line: 322 + column: 5 + text: += +- name: number + line: 322 + column: 8 + text: "1" +- name: variable + line: 323 + column: 1 + text: var +- name: operator + line: 323 + column: 5 + text: "-=" +- name: number + line: 323 + column: 8 + text: "1" +- name: variable + line: 324 + column: 1 + text: var +- name: operator + line: 324 + column: 5 + text: "*=" +- name: number + line: 324 + column: 8 + text: "2" +- name: variable + line: 325 + column: 1 + text: var +- name: operator + line: 325 + column: 5 + text: "**=" +- name: number + line: 325 + column: 9 + text: "2" +- name: variable + line: 326 + column: 1 + text: var +- name: operator + line: 326 + column: 5 + text: /= +- name: number + line: 326 + column: 8 + text: "2" +- name: variable + line: 327 + column: 1 + text: var +- name: operator + line: 327 + column: 5 + text: "%=" +- name: number + line: 327 + column: 8 + text: "2" +- name: variable + line: 328 + column: 1 + text: var +- name: operator + line: 328 + column: 5 + text: "<<=" +- name: number + line: 328 + column: 9 + text: "2" +- name: variable + line: 329 + column: 1 + text: var +- name: operator + line: 329 + column: 5 + text: ">>=" +- name: number + line: 329 + column: 9 + text: "2" +- name: variable + line: 330 + column: 1 + text: var +- name: operator + line: 330 + column: 5 + text: "&=" +- name: number + line: 330 + column: 8 + text: "2" +- name: variable + line: 331 + column: 1 + text: var +- name: operator + line: 331 + column: 5 + text: "|=" +- name: number + line: 331 + column: 8 + text: "2" +- name: variable + line: 332 + column: 1 + text: var +- name: operator + line: 332 + column: 5 + text: ^= +- name: number + line: 332 + column: 8 + text: "2" +- name: variable + line: 333 + column: 1 + text: var +- name: operator + line: 333 + column: 5 + text: "&&=" +- name: constant.builtin + line: 333 + column: 9 + text: nil +- name: variable + line: 334 + column: 1 + text: var +- name: operator + line: 334 + column: 5 + text: "||=" +- name: string + line: 334 + column: 9 + text: "\"string\"" diff --git a/tests/ruby.rs b/tests/ruby.rs index 9922755..3dc82d8 100644 --- a/tests/ruby.rs +++ b/tests/ruby.rs @@ -77,3 +77,16 @@ fn overrides() { "languages/ruby/overrides.scm", ); } + +// ============================================================================ +// Highlights Tests +// ============================================================================ + +#[test] +fn highlights() { + support::assert_query_snapshot( + "highlights", + "tests/languages/ruby/highlights.rb", + "languages/ruby/highlights.scm", + ); +}