tm-grammars
Version:
Collecton of TextMate grammars in JSON
2,076 lines (2,075 loc) • 75 kB
JSON
{
"displayName": "Ruby",
"name": "ruby",
"patterns": [
{
"captures": {
"1": {
"name": "keyword.control.class.ruby"
},
"11": {
"name": "punctuation.separator.namespace.ruby"
},
"2": {
"name": "entity.name.type.class.ruby"
},
"5": {
"name": "punctuation.separator.namespace.ruby"
},
"7": {
"name": "punctuation.separator.inheritance.ruby"
},
"8": {
"name": "entity.other.inherited-class.ruby"
}
},
"match": "\b(class)\\s+(([a-zA-Z0-9_]+)((::)[a-zA-Z0-9_]+)*)\\s*((<)\\s*(([a-zA-Z0-9_]+)((::)[a-zA-Z0-9_]+)*))?",
"name": "meta.class.ruby"
},
{
"captures": {
"1": {
"name": "keyword.control.module.ruby"
},
"2": {
"name": "entity.name.type.module.ruby"
},
"5": {
"name": "punctuation.separator.namespace.ruby"
}
},
"match": "\b(module)\\s+(([a-zA-Z0-9_]+)((::)[a-zA-Z0-9_]+)*)",
"name": "meta.module.ruby"
},
{
"captures": {
"1": {
"name": "keyword.control.class.ruby"
},
"2": {
"name": "punctuation.separator.inheritance.ruby"
}
},
"match": "\b(class)\\s*(<<)\\s*",
"name": "meta.class.ruby"
},
{
"match": "(?<!\\.)\\belse(\\s)+if\\b",
"name": "invalid.deprecated.ruby"
},
{
"captures": {
"1": {
"name": "variable.ruby"
},
"3": {
"name": "keyword.operator.assignment.augmented.ruby"
}
},
"match": "^\\s*([a-z]([A-Za-z0-9_])*)\\s*((&&|\\|\\|)=)"
},
{
"captures": {
"1": {
"name": "keyword.control.ruby"
},
"3": {
"name": "variable.ruby"
},
"5": {
"name": "keyword.operator.assignment.augmented.ruby"
}
},
"match": "(?<!\\.)\\b(case|if|elsif|unless|until|while)\\b\\s*(\\()*?\\s*([a-z]([A-Za-z0-9_])*)\\s*((&&|\\|\\|)=)"
},
{
"captures": {
"1": {
"name": "variable.ruby"
},
"3": {
"name": "keyword.operator.assignment.augmented.ruby"
}
},
"match": "^\\s*([a-z]([A-Za-z0-9_])*)\\s*((\\+|\\*|-|\\/|%|\\*\\*|&|\\||\\^|<<|>>)=)"
},
{
"captures": {
"1": {
"name": "keyword.control.ruby"
},
"3": {
"name": "variable.ruby"
},
"5": {
"name": "keyword.operator.assignment.augmented.ruby"
}
},
"match": "(?<!\\.)\\b(case|if|elsif|unless|until|while)\\b\\s*(\\()*?\\s*([a-z]([A-Za-z0-9_])*)\\s*((\\+|\\*|-|\\/|%|\\*\\*|&|\\||\\^|<<|>>)=)"
},
{
"captures": {
"1": {
"name": "variable.ruby"
}
},
"match": "^\\s*([a-z]([A-Za-z0-9_])*)\\s*=[^=>]"
},
{
"captures": {
"1": {
"name": "keyword.control.ruby"
},
"3": {
"name": "variable.ruby"
}
},
"match": "(?<!\\.)\\b(case|if|elsif|unless|until|while)\\b\\s*(\\()*?\\s*([a-z]([A-Za-z0-9_])*)\\s*=[^=>]"
},
{
"captures": {
"1": {
"name": "punctuation.definition.constant.hashkey.ruby"
}
},
"match": "(?>[a-zA-Z_]\\w*(?>[?!])?)(:)(?!:)",
"name": "constant.language.symbol.hashkey.ruby"
},
{
"captures": {
"1": {
"name": "punctuation.definition.constant.ruby"
}
},
"match": "(?<!:)(:)(?>[a-zA-Z_]\\w*(?>[?!])?)(?=\\s*=>)",
"name": "constant.language.symbol.hashkey.ruby"
},
{
"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"
},
{
"match": "(?<!\\.)\\bdo\\b",
"name": "keyword.control.start-block.ruby"
},
{
"match": "(?<={)(\\s+)",
"name": "meta.syntax.ruby.start-block"
},
{
"match": "(?<!\\.)\\b(alias|alias_method|break|next|redo|retry|return|super|undef|yield)\\b(?![?!])|\\bdefined\\?|\\b(block_given|iterator)\\?",
"name": "keyword.control.pseudo-method.ruby"
},
{
"match": "\\bnil\\b(?![?!])",
"name": "constant.language.nil.ruby"
},
{
"match": "\\b(true|false)\\b(?![?!])",
"name": "constant.language.boolean.ruby"
},
{
"match": "\\b(__(FILE|LINE)__)\\b(?![?!])",
"name": "variable.language.ruby"
},
{
"match": "\\bself\\b(?![?!])",
"name": "variable.language.self.ruby"
},
{
"match": "\\b(initialize|new|loop|include|extend|prepend|raise|fail|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+|~|=|/|\\\\|,|;|\\.|<|>|_|\\*|\\$|\\?|:|\"|-[0adFiIlpv])",
"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|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(?![?!])|autoload\\?|exit!)",
"name": "support.function.kernel.ruby"
},
{
"match": "\\b[_A-Z]\\w*\\b",
"name": "variable.other.constant.ruby"
},
{
"begin": "(->)\\(",
"beginCaptures": {
"1": {
"name": "support.function.kernel.ruby"
}
},
"end": "\\)",
"patterns": [
{
"begin": "(?=[&*_a-zA-Z])",
"end": "(?=[,)])",
"patterns": [
{
"include": "#method_parameters"
}
]
},
{
"include": "#method_parameters"
}
]
},
{
"begin": "(?=def\\b)(?<=^|\\s)(def)\\s+((?>[a-zA-Z_]\\w*(?>\\.|::))?(?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))?|===?|!=|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[]=?))\\s*(\\()",
"beginCaptures": {
"1": {
"name": "keyword.control.def.ruby"
},
"2": {
"name": "entity.name.function.ruby"
},
"3": {
"name": "punctuation.definition.parameters.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.parameters.ruby"
}
},
"name": "meta.function.method.with-arguments.ruby",
"patterns": [
{
"begin": "(?=[&*_a-zA-Z])",
"end": "(?=[,)])",
"patterns": [
{
"include": "#method_parameters"
}
]
},
{
"include": "#method_parameters"
}
]
},
{
"begin": "(?=def\\b)(?<=^|\\s)(def)\\s+((?>[a-zA-Z_]\\w*(?>\\.|::))?(?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))?|===?|!=|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[]=?))[ \\t](?=[ \\t]*[^\\s#;])",
"beginCaptures": {
"1": {
"name": "keyword.control.def.ruby"
},
"2": {
"name": "entity.name.function.ruby"
}
},
"end": "(?=;)|(?<=[\\w\\])}`'\"!?])(?=\\s*#|\\s*$)",
"name": "meta.function.method.with-arguments.ruby",
"patterns": [
{
"begin": "(?=[&*_a-zA-Z])",
"end": "(?=,|;|\\s*#|\\s*$)",
"patterns": [
{
"include": "#method_parameters"
}
]
},
{
"include": "#method_parameters"
}
]
},
{
"captures": {
"1": {
"name": "keyword.control.def.ruby"
},
"3": {
"name": "entity.name.function.ruby"
}
},
"match": "(?=def\\b)(?<=^|\\s)(def)\\b(\\s+((?>[a-zA-Z_]\\w*(?>\\.|::))?(?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))?|===?|!=|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[]=?)))?",
"name": "meta.function.method.without-arguments.ruby"
},
{
"match": "\\b([\\d](?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)*)?([eE][-+]?\\d(?>_?\\d)*)?|0(?:[xX]\\h(?>_?\\h)*|[oO]?[0-7](?>_?[0-7])*|[bB][01](?>_?[01])*|[dD]\\d(?>_?\\d)*))\\b",
"name": "constant.numeric.ruby"
},
{
"begin": ":'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.symbol.begin.ruby"
}
},
"end": "'",
"endCaptures": {
"0": {
"name": "punctuation.definition.symbol.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\['\\\\]",
"name": "constant.character.escape.ruby"
}
]
},
{
"begin": ":\"",
"beginCaptures": {
"0": {
"name": "punctuation.section.symbol.begin.ruby"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.section.symbol.end.ruby"
}
},
"name": "constant.language.symbol.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
}
]
},
{
"match": "(?<!\\()/=",
"name": "keyword.operator.assignment.augmented.ruby"
},
{
"begin": "'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"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"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.double.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
}
]
},
{
"begin": "(?<!\\.)`",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "`",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
}
]
},
{
"begin": "(?<![\\w)])((/))(?![?*+])(?=(?:\\\\/|[^/])*+/[eimnosux]*\\s*(?:[)\\]}#.,?:]|\\|\\||&&|<=>|=>|==|=~|!~|!=|;|$|if|else|elsif|then|do|end|unless|while|until|or|and)|$)",
"captures": {
"1": {
"name": "string.regexp.interpolated.ruby"
},
"2": {
"name": "punctuation.section.regexp.ruby"
}
},
"contentName": "string.regexp.interpolated.ruby",
"end": "((/[eimnosux]*))",
"patterns": [
{
"include": "#regex_sub"
}
]
},
{
"begin": "%r{",
"beginCaptures": {
"0": {
"name": "punctuation.section.regexp.begin.ruby"
}
},
"end": "}[eimnosux]*",
"endCaptures": {
"0": {
"name": "punctuation.section.regexp.end.ruby"
}
},
"name": "string.regexp.interpolated.ruby",
"patterns": [
{
"include": "#regex_sub"
},
{
"include": "#nest_curly_r"
}
]
},
{
"begin": "%r\\[",
"beginCaptures": {
"0": {
"name": "punctuation.section.regexp.begin.ruby"
}
},
"end": "][eimnosux]*",
"endCaptures": {
"0": {
"name": "punctuation.section.regexp.end.ruby"
}
},
"name": "string.regexp.interpolated.ruby",
"patterns": [
{
"include": "#regex_sub"
},
{
"include": "#nest_brackets_r"
}
]
},
{
"begin": "%r\\(",
"beginCaptures": {
"0": {
"name": "punctuation.section.regexp.begin.ruby"
}
},
"end": "\\)[eimnosux]*",
"endCaptures": {
"0": {
"name": "punctuation.section.regexp.end.ruby"
}
},
"name": "string.regexp.interpolated.ruby",
"patterns": [
{
"include": "#regex_sub"
},
{
"include": "#nest_parens_r"
}
]
},
{
"begin": "%r<",
"beginCaptures": {
"0": {
"name": "punctuation.section.regexp.begin.ruby"
}
},
"end": ">[eimnosux]*",
"endCaptures": {
"0": {
"name": "punctuation.section.regexp.end.ruby"
}
},
"name": "string.regexp.interpolated.ruby",
"patterns": [
{
"include": "#regex_sub"
},
{
"include": "#nest_ltgt_r"
}
]
},
{
"begin": "%r([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.section.regexp.begin.ruby"
}
},
"end": "\\1[eimnosux]*",
"endCaptures": {
"0": {
"name": "punctuation.section.regexp.end.ruby"
}
},
"name": "string.regexp.interpolated.ruby",
"patterns": [
{
"include": "#regex_sub"
}
]
},
{
"begin": "%I\\[",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_brackets_i"
}
]
},
{
"begin": "%I\\(",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_parens_i"
}
]
},
{
"begin": "%I<",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_ltgt_i"
}
]
},
{
"begin": "%I{",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_curly_i"
}
]
},
{
"begin": "%I([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
}
]
},
{
"begin": "%i\\[",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\]|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_brackets"
}
]
},
{
"begin": "%i\\(",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\\\)|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_parens"
}
]
},
{
"begin": "%i<",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\>|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_ltgt"
}
]
},
{
"begin": "%i{",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\}|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_curly"
}
]
},
{
"begin": "%i([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\."
}
]
},
{
"begin": "%W\\[",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_brackets_i"
}
]
},
{
"begin": "%W\\(",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_parens_i"
}
]
},
{
"begin": "%W<",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_ltgt_i"
}
]
},
{
"begin": "%W{",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_curly_i"
}
]
},
{
"begin": "%W([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
}
]
},
{
"begin": "%w\\[",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\]|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_brackets"
}
]
},
{
"begin": "%w\\(",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\\\)|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_parens"
}
]
},
{
"begin": "%w<",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\>|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_ltgt"
}
]
},
{
"begin": "%w{",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\}|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_curly"
}
]
},
{
"begin": "%w([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.section.array.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.section.array.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\."
}
]
},
{
"begin": "%[Qx]?\\(",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_parens_i"
}
]
},
{
"begin": "%[Qx]?\\[",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_brackets_i"
}
]
},
{
"begin": "%[Qx]?{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_curly_i"
}
]
},
{
"begin": "%[Qx]?<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
},
{
"include": "#nest_ltgt_i"
}
]
},
{
"begin": "%[Qx]([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
}
]
},
{
"begin": "%([^\\w\\s=])",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.interpolated.ruby",
"patterns": [
{
"include": "#interpolated_ruby"
},
{
"include": "#escaped_char"
}
]
},
{
"begin": "%q\\(",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\\\)|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_parens"
}
]
},
{
"begin": "%q<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\>|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_ltgt"
}
]
},
{
"begin": "%q\\[",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\]|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_brackets"
}
]
},
{
"begin": "%q{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\}|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_curly"
}
]
},
{
"begin": "%q([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.ruby"
}
},
"name": "string.quoted.other.ruby",
"patterns": [
{
"match": "\\\\."
}
]
},
{
"begin": "%s\\(",
"beginCaptures": {
"0": {
"name": "punctuation.definition.symbol.begin.ruby"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.symbol.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\\\)|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_parens"
}
]
},
{
"begin": "%s<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.symbol.begin.ruby"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.definition.symbol.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\>|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_ltgt"
}
]
},
{
"begin": "%s\\[",
"beginCaptures": {
"0": {
"name": "punctuation.definition.symbol.begin.ruby"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "punctuation.definition.symbol.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\]|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_brackets"
}
]
},
{
"begin": "%s{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.symbol.begin.ruby"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.symbol.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\}|\\\\\\\\",
"name": "constant.character.escape.ruby"
},
{
"include": "#nest_curly"
}
]
},
{
"begin": "%s([^\\w])",
"beginCaptures": {
"0": {
"name": "punctuation.definition.symbol.begin.ruby"
}
},
"end": "\\1",
"endCaptures": {
"0": {
"name": "punctuation.definition.symbol.end.ruby"
}
},
"name": "constant.language.symbol.ruby",
"patterns": [
{
"match": "\\\\."
}
]
},
{
"captures": {
"1": {
"name": "punctuation.definition.constant.ruby"
}
},
"match": "(?<!:)(:)(?>[$a-zA-Z_]\\w*(?>[?!]|=(?![>=]))?|===?|<=>|>[>=]?|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[]=?|@@?[a-zA-Z_]\\w*)",
"name": "constant.language.symbol.ruby"
},
{
"begin": "^=begin",
"captures": {
"0": {
"name": "punctuation.definition.comment.ruby"
}
},
"end": "^=end",
"name": "comment.block.documentation.ruby"
},
{
"include": "#yard"
},
{
"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"
}
]
},
{
"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": "^__END__\\n",
"captures": {
"0": {
"name": "string.unquoted.program-block.ruby"
}
},
"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"
}
]
}
]
},
{
"begin": "(?=(?><<[-~]([\"'`]?)((?:[_\\w]+_|)HTML)\\b\\1))",
"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]+_|)HAML)\\b\\1))",
"end": "(?!\\G)",
"name": "meta.embedded.block.haml",
"patterns": [
{
"begin": "(?><<[-~]([\"'`]?)((?:[_\\w]+_|)HAML)\\b\\1)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"contentName": "text.haml",
"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.haml"
},
{
"include": "#escaped_char"
}
]
}
]
},
{
"begin": "(?=(?><<[-~]([\"'`]?)((?:[_\\w]+_|)XML)\\b\\1))",
"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))",
"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]+_|)(?:GRAPHQL|GQL))\\b\\1))",
"end": "(?!\\G)",
"name": "meta.embedded.block.graphql",
"patterns": [
{
"begin": "(?><<[-~]([\"'`]?)((?:[_\\w]+_|)(?:GRAPHQL|GQL))\\b\\1)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"contentName": "source.graphql",
"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.graphql"
},
{
"include": "#escaped_char"
}
]
}
]
},
{
"begin": "(?=(?><<[-~]([\"'`]?)((?:[_\\w]+_|)CSS)\\b\\1))",
"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))",
"end": "(?!\\G)",
"name": "meta.embedded.block.cpp",
"patterns": [
{
"begin": "(?><<[-~]([\"'`]?)((?:[_\\w]+_|)CPP)\\b\\1)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"contentName": "source.cpp",
"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.cpp"
},
{
"include": "#escaped_char"
}
]
}
]
},
{
"begin": "(?=(?><<[-~]([\"'`]?)((?:[_\\w]+_|)C)\\b\\1))",
"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))",
"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))",
"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))",
"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))",
"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))",
"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": "(?=(?><<[-~]([\"'`]?)((?:[_\\w]+_|)(?:YAML|YML))\\b\\1))",
"end": "(?!\\G)",
"name": "meta.embedded.block.yaml",
"patterns": [
{
"begin": "(?><<[-~]([\"'`]?)((?:[_\\w]+_|)(?:YAML|YML))\\b\\1)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"contentName": "source.yaml",
"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.yaml"
},
{
"include": "#escaped_char"
}
]
}
]
},
{
"begin": "(?=(?><<[-~]([\"'`]?)((?:[_\\w]+_|)SLIM)\\b\\1))",
"end": "(?!\\G)",
"name": "meta.embedded.block.slim",
"patterns": [
{
"begin": "(?><<[-~]([\"'`]?)((?:[_\\w]+_|)SLIM)\\b\\1)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ruby"
}
},
"contentName": "text.slim",
"end": "^\\s*\\2$\\n?",