{ "name": "C++", "scopeName": "source.c++", "patterns": [ { "include": "#special_block" }, { "include": "#strings" }, { "include": "source.c" }, { "name": "storage.modifier.$1.c++", "match": "\\b(friend|explicit|virtual)\\b" }, { "name": "storage.modifier.$1.c++", "match": "\\b(private|protected|public):" }, { "name": "keyword.control.c++", "match": "\\b(catch|operator|try|throw|using)\\b" }, { "name": "keyword.control.c++", "match": "\\bdelete\\b(\\s*\\[\\])?|\\bnew\\b(?!])" }, { "name": "variable.other.readwrite.member.c++", "match": "\\b(f|m)[A-Z]\\w*\\b" }, { "name": "variable.language.c++", "match": "\\b(this|nullptr)\\b" }, { "name": "storage.type.template.c++", "match": "\\btemplate\\b\\s*" }, { "name": "keyword.operator.cast.c++", "match": "\\b(const_cast|dynamic_cast|reinterpret_cast|static_cast)\\b\\s*" }, { "name": "keyword.operator.c++", "match": "\\b(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq)\\b" }, { "name": "storage.type.c++", "match": "\\b(class|wchar_t)\\b" }, { "name": "storage.modifier.c++", "match": "\\b(constexpr|export|mutable|typename|thread_local)\\b" }, { "name": "meta.function.destructor.c++", "begin": "(?x)\n \t\t\t\t(?: ^ # begin-of-line\n \t\t\t\t | (?: (?\u003c!else|new|=) ) # or word + space before name\n \t\t\t\t)\n \t\t\t\t((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\n \t\t\t\t \\s*(\\() # start bracket or end-of-line\n \t\t\t", "end": "\\)", "patterns": [ { "include": "$base" } ], "beginCaptures": { "1": { "name": "entity.name.function.c++" }, "2": { "name": "punctuation.definition.parameters.begin.c" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.c" } } }, { "name": "meta.function.destructor.prototype.c++", "begin": "(?x)\n \t\t\t\t(?: ^ # begin-of-line\n \t\t\t\t | (?: (?\u003c!else|new|=) ) # or word + space before name\n \t\t\t\t)\n \t\t\t\t((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\n \t\t\t\t \\s*(\\() # terminating semi-colon\n \t\t\t", "end": "\\)", "patterns": [ { "include": "$base" } ], "beginCaptures": { "1": { "name": "entity.name.function.c++" }, "2": { "name": "punctuation.definition.parameters.begin.c" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.c" } } } ], "repository": { "angle_brackets": { "name": "meta.angle-brackets.c++", "begin": "\u003c", "end": "\u003e", "patterns": [ { "include": "#angle_brackets" }, { "include": "$base" } ] }, "block": { "name": "meta.block.c++", "begin": "\\{", "end": "\\}", "patterns": [ { "name": "meta.function-call.c", "match": "(?x)\n \t\t\t\t(\n \t\t\t\t\t(?!while|for|do|if|else|switch|catch|enumerate|return|r?iterate)(?: \\b[A-Za-z_][A-Za-z0-9_]*+\\b | :: )*+ # actual name\n \t\t\t\t)\n \t\t\t\t \\s*(\\()", "captures": { "1": { "name": "support.function.any-method.c" }, "2": { "name": "punctuation.definition.parameters.c" } } }, { "include": "$base" } ], "beginCaptures": { "0": { "name": "punctuation.section.block.begin.c" } }, "endCaptures": { "0": { "name": "punctuation.section.block.end.c" } } }, "constructor": { "patterns": [ { "name": "meta.function.constructor.c++", "begin": "(?x)\n \t\t\t\t(?: ^\\s*) # begin-of-line\n \t\t\t\t((?!while|for|do|if|else|switch|catch|enumerate|r?iterate)[A-Za-z_][A-Za-z0-9_:]*) # actual name\n \t\t\t\t \\s*(\\() # start bracket or end-of-line\n \t\t\t", "end": "\\)", "patterns": [ { "include": "$base" } ], "beginCaptures": { "1": { "name": "entity.name.function.c++" }, "2": { "name": "punctuation.definition.parameters.begin.c" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.c" } } }, { "name": "meta.function.constructor.initializer-list.c++", "begin": "(?x)\n \t\t\t\t(:) # begin-of-line\n \t\t\t\t((?=\\s*[A-Za-z_][A-Za-z0-9_:]* # actual name\n \t\t\t\t \\s*(\\())) # start bracket or end-of-line\n \t\t\t", "end": "(?=\\{)", "patterns": [ { "include": "$base" } ], "beginCaptures": { "1": { "name": "punctuation.definition.parameters.c" } } } ] }, "special_block": { "patterns": [ { "name": "meta.namespace-block${2:+.$2}.c++", "begin": "\\b(namespace)\\b\\s*([_A-Za-z][_A-Za-z0-9]*\\b)?+", "end": "(?\u003c=\\})|(?=(;|,|\\(|\\)|\u003e|\\[|\\]|=))", "patterns": [ { "begin": "\\{", "end": "\\}", "patterns": [ { "include": "#special_block" }, { "include": "#constructor" }, { "include": "$base" } ], "beginCaptures": { "0": { "name": "punctuation.definition.scope.c++" } }, "endCaptures": { "0": { "name": "punctuation.definition.scope.c++" } } }, { "include": "$base" } ], "captures": { "1": { "name": "keyword.control.namespace.$2" } }, "beginCaptures": { "1": { "name": "storage.type.c++" }, "2": { "name": "entity.name.type.c++" } } }, { "name": "meta.class-struct-block.c++", "begin": "\\b(class|struct)\\b\\s*([_A-Za-z][_A-Za-z0-9]*\\b)?+(\\s*:\\s*(public|protected|private)\\b\\s*([_A-Za-z][_A-Za-z0-9]*\\b)((\\s*,\\s*(public|protected|private)\\b\\s*[_A-Za-z][_A-Za-z0-9]*\\b)*))?", "end": "(?\u003c=\\})|(?=(;|\\(|\\)|\u003e|\\[|\\]|=))", "patterns": [ { "include": "#angle_brackets" }, { "begin": "\\{", "end": "(\\})(\\s*\\n)?", "patterns": [ { "include": "#special_block" }, { "include": "#constructor" }, { "include": "$base" } ], "beginCaptures": { "0": { "name": "punctuation.section.block.begin.c++" } }, "endCaptures": { "1": { "name": "punctuation.definition.invalid.c++" }, "2": { "name": "invalid.illegal.you-forgot-semicolon.c++" } } }, { "include": "$base" } ], "beginCaptures": { "1": { "name": "storage.type.c++" }, "2": { "name": "entity.name.type.c++" }, "4": { "name": "storage.type.modifier.c++" }, "5": { "name": "entity.name.type.inherited.c++" }, "6": { "patterns": [ { "name": "storage.type.modifier.c++", "match": "\\b(public|protected|private)\\b" }, { "name": "entity.name.type.inherited.c++", "match": "[_A-Za-z][_A-Za-z0-9]*" } ] } } }, { "name": "meta.extern-block.c++", "begin": "\\b(extern)(?=\\s*\")", "end": "(?\u003c=\\})|(?=\\w)", "patterns": [ { "begin": "\\{", "end": "\\}", "patterns": [ { "include": "#special_block" }, { "include": "$base" } ], "beginCaptures": { "0": { "name": "punctuation.section.block.begin.c" } }, "endCaptures": { "0": { "name": "punctuation.section.block.end.c" } } }, { "include": "$base" } ], "beginCaptures": { "1": { "name": "storage.modifier.c++" } } } ] }, "strings": { "patterns": [ { "name": "string.quoted.double.c++", "begin": "(u|u8|U|L)?\"", "end": "\"", "patterns": [ { "name": "constant.character.escape.c++", "match": "\\\\u[0-9A-Fa-f]{4}|\\\\U[0-9A-Fa-f]{8}" }, { "name": "constant.character.escape.c++", "match": "\\\\['\"?\\\\abfnrtv]" }, { "name": "constant.character.escape.c++", "match": "\\\\[0-7]{1,3}" }, { "name": "constant.character.escape.c++", "match": "\\\\x[0-9A-Fa-f]+" } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.c++" }, "1": { "name": "meta.encoding.c++" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.c++" } } }, { "name": "string.quoted.double.raw.c++", "begin": "(u|u8|U|L)?R\"(?:([^ ()\\\\\\t]{0,16})|([^ ()\\\\\\t]*))\\(", "end": "\\)\\2(\\3)\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.c++" }, "1": { "name": "meta.encoding.c++" }, "3": { "name": "invalid.illegal.delimiter-too-long.c++" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.c++" }, "1": { "name": "invalid.illegal.delimiter-too-long.c++" } } } ] } } }