1 |
- {"information_for_contributors":["This file has been converted from https://github.com/textmate/ruby.tmbundle/blob/master/Syntaxes/Ruby.plist","If you want to provide a fix or improvement, please create a pull request against the original repository.","Once accepted there, we are happy to receive an update request."],"version":"https://github.com/textmate/ruby.tmbundle/commit/efcb8941c701343f1b2e9fb105c678152fea6892","name":"Ruby","scopeName":"source.ruby","comment":"\n\tTODO: unresolved issues\n\n\ttext:\n\t\"p <<end\n\tprint me!\n\tend\"\n\tsymptoms:\n\tnot recognized as a heredoc\n\tsolution:\n\tthere is no way to distinguish perfectly between the << operator and the start\n\tof a heredoc. Currently, we require assignment to recognize a heredoc. More\n\trefinement is possible.\n\t• Heredocs with indented terminators (<<-) are always distinguishable, however.\n\t• Nested heredocs are not really supportable at present\n\n\ttext:\n\tprint <<-'THERE' \n\tThis is single quoted. \n\tThe above used #{Time.now} \n\tTHERE \n\tsymtoms:\n\tFrom Programming Ruby p306; should be a non-interpolated heredoc.\n\t\n text:\n val?(a):p(b)\n val?'a':'b'\n symptoms:\n ':p' is recognized as a symbol.. its 2 things ':' and 'p'.\n :'b' has same problem.\n solution:\n ternary operator rule, precedence stuff, symbol rule.\n but also consider 'a.b?(:c)' ??\n","patterns":[{"captures":{"1":{"name":"keyword.control.class.ruby"},"2":{"name":"entity.name.type.class.ruby"},"3":{"name":"keyword.operator.other.ruby"},"4":{"name":"entity.other.inherited-class.ruby"},"5":{"name":"keyword.operator.other.ruby"},"6":{"name":"variable.other.object.ruby"}},"match":"^\\s*(class)\\s+(?:([.a-zA-Z0-9_:]+)(?:\\s*(<)\\s*([.a-zA-Z0-9_:]+))?|(<<)\\s*([.a-zA-Z0-9_:]+))","name":"meta.class.ruby"},{"captures":{"1":{"name":"keyword.control.module.ruby"},"2":{"name":"entity.name.type.module.ruby"},"3":{"name":"entity.other.inherited-class.module.first.ruby"},"4":{"name":"punctuation.separator.inheritance.ruby"},"5":{"name":"entity.other.inherited-class.module.second.ruby"},"6":{"name":"punctuation.separator.inheritance.ruby"},"7":{"name":"entity.other.inherited-class.module.third.ruby"},"8":{"name":"punctuation.separator.inheritance.ruby"}},"match":"^\\s*(module)\\s+(([A-Z]\\w*(::))?([A-Z]\\w*(::))?([A-Z]\\w*(::))*[A-Z]\\w*)","name":"meta.module.ruby"},{"comment":"else if is a common mistake carried over from other languages. it works if you put in a second end, but it’s never what you want.","match":"(?<!\\.)\\belse(\\s)+if\\b","name":"invalid.deprecated.ruby"},{"captures":{"1":{"name":"punctuation.definition.constant.ruby"}},"comment":"symbols as hash key (1.9 syntax)","match":"(?>[a-zA-Z_]\\w*(?>[?!])?)(:)(?!:)","name":"constant.other.symbol.hashkey.ruby"},{"captures":{"1":{"name":"punctuation.definition.constant.ruby"}},"comment":"symbols as hash key (1.8 syntax)","match":"(?<!:)(:)(?>[a-zA-Z_]\\w*(?>[?!])?)(?=\\s*=>)","name":"constant.other.symbol.hashkey.ruby"},{"comment":"everything being a reserved word, not a value and needing a 'end' is a..","match":"(?<!\\.)\\b(BEGIN|begin|case|class|else|elsif|END|end|ensure|for|if|in|module|rescue|then|unless|until|when|while)\\b(?![?!])","name":"keyword.control.ruby"},{"comment":"contextual smart pair support for block parameters","match":"(?<!\\.)\\bdo\\b","name":"keyword.control.start-block.ruby"},{"comment":"contextual smart pair support","match":"(?<=\\{)(\\s+)","name":"meta.syntax.ruby.start-block"},{"match":"(?<!\\.)\\b(alias|alias_method|block_given[?]|break|defined[?]|iterator[?]|next|redo|retry|return|super|undef|yield)(\\b|(?<=[?]))(?![?!])","name":"keyword.control.pseudo-method.ruby"},{"match":"\\b(nil|true|false)\\b(?![?!])","name":"constant.language.ruby"},{"match":"\\b(__(dir|FILE|LINE)__)\\b(?![?!])","name":"variable.language.ruby"},{"begin":"^__END__\\n","captures":{"0":{"name":"string.unquoted.program-block.ruby"}},"comment":"__END__ marker","contentName":"text.plain","end":"(?=not)impossible","patterns":[{"begin":"(?=<?xml|<(?i:html\\b)|!DOCTYPE (?i:html\\b))","end":"(?=not)impossible","name":"text.html.embedded.ruby","patterns":[{"include":"text.html.basic"}]}]},{"match":"\\b(self)\\b(?![?!])","name":"variable.language.self.ruby"},{"comment":" everything being a method but having a special function is a..","match":"\\b(initialize|new|loop|include|extend|prepend|fail|raise|attr_reader|attr_writer|attr_accessor|attr|catch|throw|private|private_class_method|module_function|public|public_class_method|protected|refine|using)\\b(?![?!])","name":"keyword.other.special-method.ruby"},{"begin":"\\b(?<!\\.|::)(require|require_relative)\\b","captures":{"1":{"name":"keyword.other.special-method.ruby"}},"end":"$|(?=#|\\})","name":"meta.require.ruby","patterns":[{"include":"$self"}]},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(@)[a-zA-Z_]\\w*","name":"variable.other.readwrite.instance.ruby"},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(@@)[a-zA-Z_]\\w*","name":"variable.other.readwrite.class.ruby"},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(\\$)[a-zA-Z_]\\w*","name":"variable.other.readwrite.global.ruby"},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(\\$)(!|@|&|`|'|\\+|\\d+|~|=|/|\\\\|,|;|\\.|<|>|_|\\*|\\$|\\?|:|\"|-[0adFiIlpvw])","name":"variable.other.readwrite.global.pre-defined.ruby"},{"begin":"\\b(ENV)\\[","beginCaptures":{"1":{"name":"variable.other.constant.ruby"}},"end":"\\]","name":"meta.environment-variable.ruby","patterns":[{"include":"$self"}]},{"match":"\\b[A-Z]\\w*(?=((\\.|::)[A-Za-z]|\\[))","name":"support.class.ruby"},{"match":"\\b(abort|at_exit|autoload[?]?|binding|callcc|caller|caller_locations|chomp|chop|eval|exec|exit|exit!|fork|format|gets|global_variables|gsub|lambda|load|local_variables|open|p|print|printf|proc|putc|puts|rand|readline|readlines|select|set_trace_func|sleep|spawn|sprintf|srand|sub|syscall|system|test|trace_var|trap|untrace_var|warn)(\\b|(?<=[?!]))(?![?!])","name":"support.function.kernel.ruby"},{"match":"\\b[A-Z]\\w*\\b","name":"variable.other.constant.ruby"},{"begin":"(?x)\n\t\t\t (?=def\\b) # an optimization to help Oniguruma fail fast\n\t\t\t (?<=^|\\s)(def)\\s+ # the def keyword\n\t\t\t ( (?>[a-zA-Z_]\\w*(?>\\.|::))? # a method name prefix\n\t\t\t (?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))? # the method name\n\t\t\t |===?|!=|!~|>[>=]?|<=>|<[<=]?|[%&`/\\|^]|\\*\\*?|=?~|[-+]@?|\\[\\]=?) ) # …or an operator method\n\t\t\t \\s*(\\() # the openning parenthesis for arguments\n\t\t\t ","beginCaptures":{"1":{"name":"keyword.control.def.ruby"},"2":{"name":"entity.name.function.ruby"},"3":{"name":"punctuation.definition.parameters.ruby"}},"comment":"the method pattern comes from the symbol pattern, see there for a explaination","end":"\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.ruby"}},"name":"meta.function.method.with-arguments.ruby","patterns":[{"begin":"(?=[&*_a-zA-Z])","end":"(?=[,)])","patterns":[{"captures":{"1":{"name":"storage.type.variable.ruby"},"2":{"name":"constant.other.symbol.hashkey.parameter.function.ruby"},"3":{"name":"punctuation.definition.constant.ruby"},"4":{"name":"variable.parameter.function.ruby"}},"match":"\\G([&*]?)(?:([_a-zA-Z]\\w*(:))|([_a-zA-Z]\\w*))"},{"include":"#parens"},{"include":"#braces"},{"include":"$self"}]}],"repository":{"braces":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.section.function.begin.ruby"}},"end":"\\}","endCaptures":{"0":{"name":"punctuation.section.function.end.ruby"}},"patterns":[{"include":"#parens"},{"include":"#braces"},{"include":"$self"}]},"parens":{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.section.function.begin.ruby"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.section.function.end.ruby"}},"patterns":[{"include":"#parens"},{"include":"#braces"},{"include":"$self"}]}}},{"begin":"(?x)\n\t\t\t (?=def\\b) # an optimization to help Oniguruma fail fast\n\t\t\t (?<=^|\\s)(def)\\s+ # the def keyword\n\t\t\t ( (?>[a-zA-Z_]\\w*(?>\\.|::))? # a method name prefix\n\t\t\t (?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))? # the method name\n\t\t\t |===?|!=|!~|>[>=]?|<=>|<[<=]?|[%&`/\\|^]|\\*\\*?|=?~|[-+]@?|\\[\\]=?) ) # …or an operator method\n\t\t\t [ \\t] # the space separating the arguments\n\t\t\t (?=[ \\t]*[^\\s#;]) # make sure arguments and not a comment follow\n\t\t\t ","beginCaptures":{"1":{"name":"keyword.control.def.ruby"},"2":{"name":"entity.name.function.ruby"}},"comment":"same as the previous rule, but without parentheses around the arguments","end":"$","name":"meta.function.method.with-arguments.ruby","patterns":[{"begin":"(?![\\s,])","end":"(?=,|$)","patterns":[{"captures":{"1":{"name":"storage.type.variable.ruby"},"2":{"name":"constant.other.symbol.hashkey.parameter.function.ruby"},"3":{"name":"punctuation.definition.constant.ruby"},"4":{"name":"variable.parameter.function.ruby"}},"match":"\\G([&*]?)(?:([_a-zA-Z]\\w*(:))|([_a-zA-Z]\\w*))","name":"variable.parameter.function.ruby"},{"include":"$self"}]}]},{"captures":{"1":{"name":"keyword.control.def.ruby"},"3":{"name":"entity.name.function.ruby"}},"comment":" the optional name is just to catch the def also without a method-name","match":"(?x)\n\t\t\t (?=def\\b) # an optimization to help Oniguruma fail fast\n\t\t\t (?<=^|\\s)(def)\\b # the def keyword\n\t\t\t ( \\s+ # an optional group of whitespace followed by…\n\t\t\t ( (?>[a-zA-Z_]\\w*(?>\\.|::))? # a method name prefix\n\t\t\t (?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))? # the method name\n\t\t\t |===?|!=|!~|>[>=]?|<=>|<[<=]?|[%&`/\\|^]|\\*\\*?|=?~|[-+]@?|\\[\\]=?) ) )? # …or an operator method\n\t\t\t ","name":"meta.function.method.without-arguments.ruby"},{"match":"\\b\\d(?>_?\\d)*(?=\\.\\d|[eE])(\\.\\d(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?r?i?\\b","name":"constant.numeric.float.ruby"},{"match":"\\b(0|(0[dD]\\d|[1-9])(?>_?\\d)*)r?i?\\b","name":"constant.numeric.integer.ruby"},{"match":"\\b0[xX]\\h(?>_?\\h)*r?i?\\b","name":"constant.numeric.hex.ruby"},{"match":"\\b0[bB][01](?>_?[01])*r?i?\\b","name":"constant.numeric.binary.ruby"},{"match":"\\b0([oO]?[0-7](?>_?[0-7])*)?r?i?\\b","name":"constant.numeric.octal.ruby"},{"begin":":'","captures":{"0":{"name":"punctuation.definition.constant.ruby"}},"end":"'","name":"constant.other.symbol.single-quoted.ruby","patterns":[{"match":"\\\\['\\\\]","name":"constant.character.escape.ruby"}]},{"begin":":\"","captures":{"0":{"name":"punctuation.definition.constant.ruby"}},"end":"\"","name":"constant.other.symbol.double-quoted.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"comment":"Needs higher precedence than regular expressions.","match":"(?<!\\()/=","name":"keyword.operator.assignment.augmented.ruby"},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"comment":"single quoted string (does not allow interpolation)","end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.single.ruby","patterns":[{"match":"\\\\'|\\\\\\\\","name":"constant.character.escape.ruby"}]},{"begin":"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"comment":"double quoted string (allows for interpolation)","end":"\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.double.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"`","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"comment":"execute string (allows for interpolation)","end":"`","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.interpolated.ruby","patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"include":"#percent_literals"},{"begin":"(?x)\n\t\t\t (?:\n\t\t\t ^ # beginning of line\n\t\t\t | (?<= # or look-behind on:\n\t\t\t [=>~(?:\\[,|&;]\n\t\t\t | [\\s;]if\\s\t\t\t# keywords\n\t\t\t | [\\s;]elsif\\s\n\t\t\t | [\\s;]while\\s\n\t\t\t | [\\s;]unless\\s\n\t\t\t | [\\s;]when\\s\n\t\t\t | [\\s;]assert_match\\s\n\t\t\t | [\\s;]or\\s\t\t\t# boolean opperators\n\t\t\t | [\\s;]and\\s\n\t\t\t | [\\s;]not\\s\n\t\t\t | [\\s.]index\\s\t\t\t# methods\n\t\t\t | [\\s.]scan\\s\n\t\t\t | [\\s.]sub\\s\n\t\t\t | [\\s.]sub!\\s\n\t\t\t | [\\s.]gsub\\s\n\t\t\t | [\\s.]gsub!\\s\n\t\t\t | [\\s.]match\\s\n\t\t\t )\n\t\t\t | (?<= # or a look-behind with line anchor:\n\t\t\t ^when\\s # duplication necessary due to limits of regex\n\t\t\t | ^if\\s\n\t\t\t | ^elsif\\s\n\t\t\t | ^while\\s\n\t\t\t | ^unless\\s\n\t\t\t )\n\t\t\t )\n\t\t\t \\s*((/))(?![*+{}?])\n\t\t\t","captures":{"1":{"name":"string.regexp.classic.ruby"},"2":{"name":"punctuation.definition.string.ruby"}},"comment":"regular expressions (normal)\n\t\t\twe only start a regexp if the character before it (excluding whitespace)\n\t\t\tis what we think is before a regexp\n\t\t\t","contentName":"string.regexp.classic.ruby","end":"((/[eimnosux]*))","patterns":[{"include":"#regex_sub"}]},{"captures":{"1":{"name":"punctuation.definition.constant.ruby"}},"comment":"symbols","match":"(?<!:)(:)(?>[a-zA-Z_]\\w*(?>[?!]|=(?![>=]))?|===?|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\]=?|(@@?|\\$)[a-zA-Z_]\\w*)","name":"constant.other.symbol.ruby"},{"begin":"^=begin","captures":{"0":{"name":"punctuation.definition.comment.ruby"}},"comment":"multiline comments","end":"^=end","name":"comment.block.documentation.ruby"},{"begin":"(^[ \\t]+)?(?=#)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.ruby"}},"end":"(?!\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.ruby"}},"end":"\\n","name":"comment.line.number-sign.ruby"}]},{"comment":"\n\t\t\tmatches questionmark-letters.\n\n\t\t\texamples (1st alternation = hex):\n\t\t\t?\\x1 ?\\x61\n\n\t\t\texamples (2nd alternation = octal):\n\t\t\t?\\0 ?\\07 ?\\017\n\n\t\t\texamples (3rd alternation = escaped):\n\t\t\t?\\n ?\\b\n\n\t\t\texamples (4th alternation = meta-ctrl):\n\t\t\t?\\C-a ?\\M-a ?\\C-\\M-\\C-\\M-a\n\n\t\t\texamples (4th alternation = normal):\n\t\t\t?a ?A ?0 \n\t\t\t?* ?\" ?( \n\t\t\t?. ?#\n\t\t\t\n\t\t\t\n\t\t\tthe negative lookbehind prevents against matching\n\t\t\tp(42.tainted?)\n\t\t\t","match":"(?<!\\w)\\?(\\\\(x\\h{1,2}(?!\\h)\\b|0[0-7]{0,2}(?![0-7])\\b|[^x0MC])|(\\\\[MC]-)+\\w|[^\\s\\\\])","name":"constant.numeric.ruby"},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)HTML)\\b\\1))","comment":"Heredoc with embedded html","end":"(?!\\G)","name":"meta.embedded.block.html","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)HTML)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"text.html","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"text.html.basic"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)XML)\\b\\1))","comment":"Heredoc with embedded xml","end":"(?!\\G)","name":"meta.embedded.block.xml","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)XML)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"text.xml","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"text.xml"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)SQL)\\b\\1))","comment":"Heredoc with embedded sql","end":"(?!\\G)","name":"meta.embedded.block.sql","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)SQL)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.sql","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.sql"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)CSS)\\b\\1))","comment":"Heredoc with embedded css","end":"(?!\\G)","name":"meta.embedded.block.css","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)CSS)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.css","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.css"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)CPP)\\b\\1))","comment":"Heredoc with embedded c++","end":"(?!\\G)","name":"meta.embedded.block.c++","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)CPP)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.c++","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.c++"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)C)\\b\\1))","comment":"Heredoc with embedded c","end":"(?!\\G)","name":"meta.embedded.block.c","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)C)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.c","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.c"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)(?:JS|JAVASCRIPT))\\b\\1))","comment":"Heredoc with embedded javascript","end":"(?!\\G)","name":"meta.embedded.block.js","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)(?:JS|JAVASCRIPT))\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.js","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.js"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)JQUERY)\\b\\1))","comment":"Heredoc with embedded jQuery javascript","end":"(?!\\G)","name":"meta.embedded.block.js.jquery","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)JQUERY)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.js.jquery","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.js.jquery"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)(?:SH|SHELL))\\b\\1))","comment":"Heredoc with embedded shell","end":"(?!\\G)","name":"meta.embedded.block.shell","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)(?:SH|SHELL))\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.shell","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.shell"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)LUA)\\b\\1))","comment":"Heredoc with embedded lua","end":"(?!\\G)","name":"meta.embedded.block.lua","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)LUA)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.lua","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.lua"},{"include":"#escaped_char"}]}]},{"begin":"(?=(?><<[-~](\"?)((?:[_\\w]+_|)RUBY)\\b\\1))","comment":"Heredoc with embedded ruby","end":"(?!\\G)","name":"meta.embedded.block.ruby","patterns":[{"begin":"(?><<[-~](\"?)((?:[_\\w]+_|)RUBY)\\b\\1)","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"contentName":"source.ruby","end":"\\s*\\2$\\n?","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"source.ruby"},{"include":"#escaped_char"}]}]},{"begin":"(?>=\\s*<<(\\w+))","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"^\\1$","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"(?><<[-~](\\w+))","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"comment":"heredoc with indented terminator","end":"\\s*\\1$","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.unquoted.heredoc.ruby","patterns":[{"include":"#heredoc"},{"include":"#interpolated_ruby"},{"include":"#escaped_char"}]},{"begin":"(?<=\\{|do|\\{\\s|do\\s)(\\|)","captures":{"1":{"name":"punctuation.separator.arguments.ruby"}},"end":"(?<!\\|)(\\|)(?!\\|)","patterns":[{"include":"$self"},{"match":"[_a-zA-Z][_a-zA-Z0-9]*","name":"variable.other.block.ruby"},{"match":",","name":"punctuation.separator.variable.ruby"}]},{"match":"=>","name":"punctuation.separator.key-value"},{"match":"->","name":"support.function.kernel.lambda.ruby"},{"match":"<<=|%=|&{1,2}=|\\*=|\\*\\*=|\\+=|-=|\\^=|\\|{1,2}=|<<","name":"keyword.operator.assignment.augmented.ruby"},{"match":"<=>|<(?!<|=)|>(?!<|=|>)|<=|>=|===|==|=~|!=|!~|(?<=[ \\t])\\?","name":"keyword.operator.comparison.ruby"},{"match":"(?<!\\.)\\b(and|not|or)\\b(?![?!])","name":"keyword.operator.logical.ruby"},{"comment":"Make sure this goes after assignment and comparison","match":"(?<=^|[ \\t])!|&&|\\|\\||\\^","name":"keyword.operator.logical.ruby"},{"captures":{"1":{"name":"punctuation.separator.method.ruby"}},"comment":"Safe navigation operator - Added in 2.3","match":"(&\\.)\\s*(?![A-Z])"},{"match":"(%|&|\\*\\*|\\*|\\+|-|/)","name":"keyword.operator.arithmetic.ruby"},{"match":"=","name":"keyword.operator.assignment.ruby"},{"match":"\\||~|>>","name":"keyword.operator.other.ruby"},{"match":";","name":"punctuation.separator.statement.ruby"},{"match":",","name":"punctuation.separator.object.ruby"},{"captures":{"1":{"name":"punctuation.separator.namespace.ruby"}},"comment":"Mark as namespace separator if double colons followed by capital letter","match":"(::)\\s*(?=[A-Z])"},{"captures":{"1":{"name":"punctuation.separator.method.ruby"}},"comment":"Mark as method separator if double colons not followed by capital letter","match":"(\\.|::)\\s*(?![A-Z])"},{"comment":"Must come after method and constant separators to prefer double colons","match":":","name":"punctuation.separator.other.ruby"},{"match":"\\{","name":"punctuation.section.scope.begin.ruby"},{"match":"\\}","name":"punctuation.section.scope.end.ruby"},{"match":"\\[","name":"punctuation.section.array.begin.ruby"},{"match":"\\]","name":"punctuation.section.array.end.ruby"},{"match":"\\(|\\)","name":"punctuation.section.function.ruby"}],"repository":{"escaped_char":{"match":"\\\\(?:[0-7]{1,3}|x[\\da-fA-F]{1,2}|.)","name":"constant.character.escape.ruby"},"heredoc":{"begin":"^<<[-~]?\\w+","end":"$","patterns":[{"include":"$self"}]},"interpolated_ruby":{"patterns":[{"begin":"#\\{","beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.ruby"}},"contentName":"source.ruby","end":"(\\})","endCaptures":{"0":{"name":"punctuation.section.embedded.end.ruby"},"1":{"name":"source.ruby"}},"name":"meta.embedded.line.ruby","patterns":[{"include":"#nest_curly_and_self"},{"include":"$self"}],"repository":{"nest_curly_and_self":{"patterns":[{"begin":"\\{","captures":{"0":{"name":"punctuation.section.scope.ruby"}},"end":"\\}","patterns":[{"include":"#nest_curly_and_self"}]},{"include":"$self"}]}}},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(#@)[a-zA-Z_]\\w*","name":"variable.other.readwrite.instance.ruby"},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(#@@)[a-zA-Z_]\\w*","name":"variable.other.readwrite.class.ruby"},{"captures":{"1":{"name":"punctuation.definition.variable.ruby"}},"match":"(#\\$)[a-zA-Z_]\\w*","name":"variable.other.readwrite.global.ruby"}]},"percent_literals":{"patterns":[{"begin":"%i(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"meta.array.symbol.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"},{"include":"#symbol"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"},{"include":"#symbol"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"},{"include":"#symbol"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"},{"include":"#symbol"}]},{"include":"#symbol"}],"repository":{"angles":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\<|\\\\>","name":"constant.other.symbol.ruby"},{"begin":"<","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":">","patterns":[{"include":"#angles"},{"include":"#symbol"}]}]},"braces":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\{|\\\\\\}","name":"constant.other.symbol.ruby"},{"begin":"\\{","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":"\\}","patterns":[{"include":"#braces"},{"include":"#symbol"}]}]},"brackets":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\[|\\\\\\]","name":"constant.other.symbol.ruby"},{"begin":"\\[","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":"\\]","patterns":[{"include":"#brackets"},{"include":"#symbol"}]}]},"parens":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\(|\\\\\\)","name":"constant.other.symbol.ruby"},{"begin":"\\(","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":"\\)","patterns":[{"include":"#parens"},{"include":"#symbol"}]}]},"symbol":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\\\|\\\\[ ]","name":"constant.other.symbol.ruby"},{"match":"\\S\\w*","name":"constant.other.symbol.ruby"}]}}},{"begin":"%I(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"meta.array.symbol.interpolated.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"},{"include":"#symbol"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"},{"include":"#symbol"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"},{"include":"#symbol"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"},{"include":"#symbol"}]},{"include":"#symbol"}],"repository":{"angles":{"patterns":[{"begin":"<","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":">","patterns":[{"include":"#angles"},{"include":"#symbol"}]}]},"braces":{"patterns":[{"begin":"\\{","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":"\\}","patterns":[{"include":"#braces"},{"include":"#symbol"}]}]},"brackets":{"patterns":[{"begin":"\\[","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":"\\]","patterns":[{"include":"#brackets"},{"include":"#symbol"}]}]},"parens":{"patterns":[{"begin":"\\(","captures":{"0":{"name":"constant.other.symbol.ruby"}},"end":"\\)","patterns":[{"include":"#parens"},{"include":"#symbol"}]}]},"symbol":{"patterns":[{"begin":"(?=\\\\|#\\{)","end":"(?!\\G)","name":"constant.other.symbol.ruby","patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"}]},{"match":"\\S\\w*","name":"constant.other.symbol.ruby"}]}}},{"begin":"%q(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"}]}],"repository":{"angles":{"patterns":[{"match":"\\\\<|\\\\>|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"<","end":">","patterns":[{"include":"#angles"}]}]},"braces":{"patterns":[{"match":"\\\\\\{|\\\\\\}|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#braces"}]}]},"brackets":{"patterns":[{"match":"\\\\\\[|\\\\\\]|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"\\[","end":"\\]","patterns":[{"include":"#brackets"}]}]},"parens":{"patterns":[{"match":"\\\\\\(|\\\\\\)|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#parens"}]}]}}},{"begin":"%Q?(?:([(\\[{<])|([^\\w\\s=]|_))","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.quoted.other.interpolated.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"}]},{"include":"#escaped_char"},{"include":"#interpolated_ruby"}],"repository":{"angles":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"<","end":">","patterns":[{"include":"#angles"}]}]},"braces":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#braces"}]}]},"brackets":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"\\[","end":"\\]","patterns":[{"include":"#brackets"}]}]},"parens":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#parens"}]}]}}},{"begin":"%r(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"([)\\]}>]\\2|\\1\\2)[eimnosux]*","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.regexp.percent.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"}]},{"include":"#regex_sub"}],"repository":{"angles":{"patterns":[{"include":"#regex_sub"},{"begin":"<","end":">","patterns":[{"include":"#angles"}]}]},"braces":{"patterns":[{"include":"#regex_sub"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#braces"}]}]},"brackets":{"patterns":[{"include":"#regex_sub"},{"begin":"\\[","end":"\\]","patterns":[{"include":"#brackets"}]}]},"parens":{"patterns":[{"include":"#regex_sub"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#parens"}]}]}}},{"begin":"%s(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.definition.constant.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.definition.constant.end.ruby"}},"name":"constant.other.symbol.percent.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"}]}],"repository":{"angles":{"patterns":[{"match":"\\\\<|\\\\>|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"<","end":">","patterns":[{"include":"#angles"}]}]},"braces":{"patterns":[{"match":"\\\\\\{|\\\\\\}|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#braces"}]}]},"brackets":{"patterns":[{"match":"\\\\\\[|\\\\\\]|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"\\[","end":"\\]","patterns":[{"include":"#brackets"}]}]},"parens":{"patterns":[{"match":"\\\\\\(|\\\\\\)|\\\\\\\\","name":"constant.character.escape.ruby"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#parens"}]}]}}},{"begin":"%w(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"meta.array.string.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"},{"include":"#string"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"},{"include":"#string"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"},{"include":"#string"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"},{"include":"#string"}]},{"include":"#string"}],"repository":{"angles":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\<|\\\\>","name":"string.other.ruby"},{"begin":"<","captures":{"0":{"name":"string.other.ruby"}},"end":">","patterns":[{"include":"#angles"},{"include":"#string"}]}]},"braces":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\{|\\\\\\}","name":"string.other.ruby"},{"begin":"\\{","captures":{"0":{"name":"string.other.ruby"}},"end":"\\}","patterns":[{"include":"#braces"},{"include":"#string"}]}]},"brackets":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\[|\\\\\\]","name":"string.other.ruby"},{"begin":"\\[","captures":{"0":{"name":"string.other.ruby"}},"end":"\\]","patterns":[{"include":"#brackets"},{"include":"#string"}]}]},"parens":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\(|\\\\\\)","name":"string.other.ruby"},{"begin":"\\(","captures":{"0":{"name":"string.other.ruby"}},"end":"\\)","patterns":[{"include":"#parens"},{"include":"#string"}]}]},"string":{"patterns":[{"captures":{"0":{"name":"constant.character.escape.ruby"}},"match":"\\\\\\\\|\\\\[ ]","name":"string.other.ruby"},{"match":"\\S\\w*","name":"string.other.ruby"}]}}},{"begin":"%W(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.section.array.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.section.array.end.ruby"}},"name":"meta.array.string.interpolated.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"},{"include":"#string"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"},{"include":"#string"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"},{"include":"#string"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"},{"include":"#string"}]},{"include":"#string"}],"repository":{"angles":{"patterns":[{"begin":"<","captures":{"0":{"name":"string.other.ruby"}},"end":">","patterns":[{"include":"#angles"},{"include":"#string"}]}]},"braces":{"patterns":[{"begin":"\\{","captures":{"0":{"name":"string.other.ruby"}},"end":"\\}","patterns":[{"include":"#braces"},{"include":"#string"}]}]},"brackets":{"patterns":[{"begin":"\\[","captures":{"0":{"name":"string.other.ruby"}},"end":"\\]","patterns":[{"include":"#brackets"},{"include":"#string"}]}]},"parens":{"patterns":[{"begin":"\\(","captures":{"0":{"name":"string.other.ruby"}},"end":"\\)","patterns":[{"include":"#parens"},{"include":"#string"}]}]},"string":{"patterns":[{"begin":"(?=\\\\|#\\{)","end":"(?!\\G)","name":"string.other.ruby","patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"}]},{"match":"\\S\\w*","name":"string.other.ruby"}]}}},{"begin":"%x(?:([(\\[{<])|([^\\w\\s]|_))","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"end":"[)\\]}>]\\2|\\1\\2","endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}},"name":"string.interpolated.percent.ruby","patterns":[{"begin":"\\G(?<=\\()(?!\\))","end":"(?=\\))","patterns":[{"include":"#parens"}]},{"begin":"\\G(?<=\\[)(?!\\])","end":"(?=\\])","patterns":[{"include":"#brackets"}]},{"begin":"\\G(?<=\\{)(?!\\})","end":"(?=\\})","patterns":[{"include":"#braces"}]},{"begin":"\\G(?<=<)(?!>)","end":"(?=>)","patterns":[{"include":"#angles"}]},{"include":"#escaped_char"},{"include":"#interpolated_ruby"}],"repository":{"angles":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"<","end":">","patterns":[{"include":"#angles"}]}]},"braces":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#braces"}]}]},"brackets":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"\\[","end":"\\]","patterns":[{"include":"#brackets"}]}]},"parens":{"patterns":[{"include":"#escaped_char"},{"include":"#interpolated_ruby"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#parens"}]}]}}}]},"regex_sub":{"patterns":[{"include":"#interpolated_ruby"},{"include":"#escaped_char"},{"captures":{"1":{"name":"punctuation.definition.quantifier.begin.ruby"},"3":{"name":"punctuation.definition.quantifier.end.ruby"}},"match":"(\\{)\\d+(,\\d+)?(\\})","name":"keyword.operator.quantifier.ruby"},{"begin":"\\[\\^?","beginCaptures":{"0":{"name":"punctuation.definition.character-class.begin.ruby"}},"end":"\\]","endCaptures":{"0":{"name":"punctuation.definition.character-class.end.ruby"}},"name":"constant.other.character-class.set.ruby","patterns":[{"include":"#escaped_char"}]},{"begin":"\\(\\?#","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.ruby"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.definition.comment.end.ruby"}},"name":"comment.line.number-sign.ruby","patterns":[{"include":"#escaped_char"}]},{"begin":"\\(","captures":{"0":{"name":"punctuation.definition.group.ruby"}},"end":"\\)","name":"meta.group.regexp.ruby","patterns":[{"include":"#regex_sub"}]},{"begin":"(?<=^|\\s)(#)\\s(?=[[a-zA-Z0-9,. \\t?!-][^\\x{00}-\\x{7F}]]*$)","beginCaptures":{"1":{"name":"punctuation.definition.comment.ruby"}},"comment":"We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.","end":"$\\n?","name":"comment.line.number-sign.ruby"}]}}}
|