1*5c90c05cSAndroid Build Coastguard Worker%YAML 1.2 2*5c90c05cSAndroid Build Coastguard Worker--- 3*5c90c05cSAndroid Build Coastguard Worker# http://www.sublimetext.com/docs/3/syntax.html 4*5c90c05cSAndroid Build Coastguard Workername: C++ (fmt) 5*5c90c05cSAndroid Build Coastguard Workercomment: I don't think anyone uses .hp. .cp tends to be paired with .h. (I could be wrong. :) -- chris 6*5c90c05cSAndroid Build Coastguard Workerfile_extensions: 7*5c90c05cSAndroid Build Coastguard Worker - cpp 8*5c90c05cSAndroid Build Coastguard Worker - cc 9*5c90c05cSAndroid Build Coastguard Worker - cp 10*5c90c05cSAndroid Build Coastguard Worker - cxx 11*5c90c05cSAndroid Build Coastguard Worker - c++ 12*5c90c05cSAndroid Build Coastguard Worker - C 13*5c90c05cSAndroid Build Coastguard Worker - h 14*5c90c05cSAndroid Build Coastguard Worker - hh 15*5c90c05cSAndroid Build Coastguard Worker - hpp 16*5c90c05cSAndroid Build Coastguard Worker - hxx 17*5c90c05cSAndroid Build Coastguard Worker - h++ 18*5c90c05cSAndroid Build Coastguard Worker - inl 19*5c90c05cSAndroid Build Coastguard Worker - ipp 20*5c90c05cSAndroid Build Coastguard Workerfirst_line_match: '-\*- C\+\+ -\*-' 21*5c90c05cSAndroid Build Coastguard Workerscope: source.c++ 22*5c90c05cSAndroid Build Coastguard Workervariables: 23*5c90c05cSAndroid Build Coastguard Worker identifier: \b[[:alpha:]_][[:alnum:]_]*\b # upper and lowercase 24*5c90c05cSAndroid Build Coastguard Worker macro_identifier: \b[[:upper:]_][[:upper:][:digit:]_]{2,}\b # only uppercase, at least 3 chars 25*5c90c05cSAndroid Build Coastguard Worker path_lookahead: '(?:::\s*)?(?:{{identifier}}\s*::\s*)*(?:template\s+)?{{identifier}}' 26*5c90c05cSAndroid Build Coastguard Worker operator_method_name: '\boperator\s*(?:[-+*/%^&|~!=<>]|[-+*/%^&|=!<>]=|<<=?|>>=?|&&|\|\||\+\+|--|,|->\*?|\(\)|\[\]|""\s*{{identifier}})' 27*5c90c05cSAndroid Build Coastguard Worker casts: 'const_cast|dynamic_cast|reinterpret_cast|static_cast' 28*5c90c05cSAndroid Build Coastguard Worker operator_keywords: 'and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|xor|xor_eq|noexcept' 29*5c90c05cSAndroid Build Coastguard Worker control_keywords: 'break|case|catch|continue|default|do|else|for|goto|if|_Pragma|return|switch|throw|try|while' 30*5c90c05cSAndroid Build Coastguard Worker memory_operators: 'new|delete' 31*5c90c05cSAndroid Build Coastguard Worker basic_types: 'asm|__asm__|auto|bool|_Bool|char|_Complex|double|float|_Imaginary|int|long|short|signed|unsigned|void' 32*5c90c05cSAndroid Build Coastguard Worker before_tag: 'struct|union|enum\s+class|enum\s+struct|enum|class' 33*5c90c05cSAndroid Build Coastguard Worker declspec: '__declspec\(\s*\w+(?:\([^)]+\))?\s*\)' 34*5c90c05cSAndroid Build Coastguard Worker storage_classes: 'static|export|extern|friend|explicit|virtual|register|thread_local' 35*5c90c05cSAndroid Build Coastguard Worker type_qualifier: 'const|constexpr|mutable|typename|volatile' 36*5c90c05cSAndroid Build Coastguard Worker compiler_directive: 'inline|restrict|__restrict__|__restrict' 37*5c90c05cSAndroid Build Coastguard Worker visibility_modifiers: 'private|protected|public' 38*5c90c05cSAndroid Build Coastguard Worker other_keywords: 'typedef|nullptr|{{visibility_modifiers}}|static_assert|sizeof|using|typeid|alignof|alignas|namespace|template' 39*5c90c05cSAndroid Build Coastguard Worker modifiers: '{{storage_classes}}|{{type_qualifier}}|{{compiler_directive}}' 40*5c90c05cSAndroid Build Coastguard Worker non_angle_brackets: '(?=<<|<=)' 41*5c90c05cSAndroid Build Coastguard Worker 42*5c90c05cSAndroid Build Coastguard Worker regular: '[^(){}&;*^%=<>-]*' 43*5c90c05cSAndroid Build Coastguard Worker paren_open: (?:\( 44*5c90c05cSAndroid Build Coastguard Worker paren_close: '\))?' 45*5c90c05cSAndroid Build Coastguard Worker generic_open: (?:< 46*5c90c05cSAndroid Build Coastguard Worker generic_close: '>)?' 47*5c90c05cSAndroid Build Coastguard Worker balance_parentheses: '{{regular}}{{paren_open}}{{regular}}{{paren_close}}{{regular}}' 48*5c90c05cSAndroid Build Coastguard Worker generic_lookahead: <{{regular}}{{generic_open}}{{regular}}{{generic_open}}{{regular}}{{generic_close}}\s*{{generic_close}}{{balance_parentheses}}> 49*5c90c05cSAndroid Build Coastguard Worker 50*5c90c05cSAndroid Build Coastguard Worker data_structures_forward_decl_lookahead: '(\s+{{macro_identifier}})*\s*(:\s*({{path_lookahead}}|{{visibility_modifiers}}|,|\s|<[^;]*>)+)?;' 51*5c90c05cSAndroid Build Coastguard Worker non_func_keywords: 'if|for|switch|while|decltype|sizeof|__declspec|__attribute__|typeid|alignof|alignas|static_assert' 52*5c90c05cSAndroid Build Coastguard Worker 53*5c90c05cSAndroid Build Coastguard Worker format_spec: |- 54*5c90c05cSAndroid Build Coastguard Worker (?x: 55*5c90c05cSAndroid Build Coastguard Worker (?:.? [<>=^])? # fill align 56*5c90c05cSAndroid Build Coastguard Worker [ +-]? # sign 57*5c90c05cSAndroid Build Coastguard Worker \#? # alternate form 58*5c90c05cSAndroid Build Coastguard Worker # technically, octal and hexadecimal integers are also supported as 'width', but rarely used 59*5c90c05cSAndroid Build Coastguard Worker \d* # width 60*5c90c05cSAndroid Build Coastguard Worker ,? # thousands separator 61*5c90c05cSAndroid Build Coastguard Worker (?:\.\d+)? # precision 62*5c90c05cSAndroid Build Coastguard Worker [bcdeEfFgGnosxX%]? # type 63*5c90c05cSAndroid Build Coastguard Worker ) 64*5c90c05cSAndroid Build Coastguard Worker 65*5c90c05cSAndroid Build Coastguard Workercontexts: 66*5c90c05cSAndroid Build Coastguard Worker main: 67*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 68*5c90c05cSAndroid Build Coastguard Worker - include: global 69*5c90c05cSAndroid Build Coastguard Worker 70*5c90c05cSAndroid Build Coastguard Worker ############################################################################# 71*5c90c05cSAndroid Build Coastguard Worker # Reusable contexts 72*5c90c05cSAndroid Build Coastguard Worker # 73*5c90c05cSAndroid Build Coastguard Worker # The follow contexts are currently constructed to be reused in the 74*5c90c05cSAndroid Build Coastguard Worker # Objetive-C++ syntax. They are specifically constructed to not push into 75*5c90c05cSAndroid Build Coastguard Worker # sub-contexts, which ensures that Objective-C++ code isn't accidentally 76*5c90c05cSAndroid Build Coastguard Worker # lexed as plain C++. 77*5c90c05cSAndroid Build Coastguard Worker # 78*5c90c05cSAndroid Build Coastguard Worker # The "unique-*" contexts are additions that C++ makes over C, and thus can 79*5c90c05cSAndroid Build Coastguard Worker # be directly reused in Objective-C++ along with contexts from Objective-C 80*5c90c05cSAndroid Build Coastguard Worker # and C. 81*5c90c05cSAndroid Build Coastguard Worker ############################################################################# 82*5c90c05cSAndroid Build Coastguard Worker 83*5c90c05cSAndroid Build Coastguard Worker unique-late-expressions: 84*5c90c05cSAndroid Build Coastguard Worker # This is highlighted after all of the other control keywords 85*5c90c05cSAndroid Build Coastguard Worker # to allow operator overloading to be lexed properly 86*5c90c05cSAndroid Build Coastguard Worker - match: \boperator\b 87*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 88*5c90c05cSAndroid Build Coastguard Worker 89*5c90c05cSAndroid Build Coastguard Worker unique-modifiers: 90*5c90c05cSAndroid Build Coastguard Worker - match: \b({{modifiers}})\b 91*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 92*5c90c05cSAndroid Build Coastguard Worker 93*5c90c05cSAndroid Build Coastguard Worker unique-variables: 94*5c90c05cSAndroid Build Coastguard Worker - match: \bthis\b 95*5c90c05cSAndroid Build Coastguard Worker scope: variable.language.c++ 96*5c90c05cSAndroid Build Coastguard Worker # common C++ instance var naming idiom -- fMemberName 97*5c90c05cSAndroid Build Coastguard Worker - match: '\b(f|m)[[:upper:]]\w*\b' 98*5c90c05cSAndroid Build Coastguard Worker scope: variable.other.readwrite.member.c++ 99*5c90c05cSAndroid Build Coastguard Worker # common C++ instance var naming idiom -- m_member_name 100*5c90c05cSAndroid Build Coastguard Worker - match: '\bm_[[:alnum:]_]+\b' 101*5c90c05cSAndroid Build Coastguard Worker scope: variable.other.readwrite.member.c++ 102*5c90c05cSAndroid Build Coastguard Worker 103*5c90c05cSAndroid Build Coastguard Worker unique-constants: 104*5c90c05cSAndroid Build Coastguard Worker - match: \bnullptr\b 105*5c90c05cSAndroid Build Coastguard Worker scope: constant.language.c++ 106*5c90c05cSAndroid Build Coastguard Worker 107*5c90c05cSAndroid Build Coastguard Worker unique-keywords: 108*5c90c05cSAndroid Build Coastguard Worker - match: \busing\b 109*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 110*5c90c05cSAndroid Build Coastguard Worker - match: \bbreak\b 111*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.flow.break.c++ 112*5c90c05cSAndroid Build Coastguard Worker - match: \bcontinue\b 113*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.flow.continue.c++ 114*5c90c05cSAndroid Build Coastguard Worker - match: \bgoto\b 115*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.flow.goto.c++ 116*5c90c05cSAndroid Build Coastguard Worker - match: \breturn\b 117*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.flow.return.c++ 118*5c90c05cSAndroid Build Coastguard Worker - match: \bthrow\b 119*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.flow.throw.c++ 120*5c90c05cSAndroid Build Coastguard Worker - match: \b({{control_keywords}})\b 121*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 122*5c90c05cSAndroid Build Coastguard Worker - match: '\bdelete\b(\s*\[\])?|\bnew\b(?!])' 123*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 124*5c90c05cSAndroid Build Coastguard Worker - match: \b({{operator_keywords}})\b 125*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.word.c++ 126*5c90c05cSAndroid Build Coastguard Worker 127*5c90c05cSAndroid Build Coastguard Worker unique-types: 128*5c90c05cSAndroid Build Coastguard Worker - match: \b(char16_t|char32_t|wchar_t|nullptr_t)\b 129*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 130*5c90c05cSAndroid Build Coastguard Worker - match: \bclass\b 131*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 132*5c90c05cSAndroid Build Coastguard Worker 133*5c90c05cSAndroid Build Coastguard Worker unique-strings: 134*5c90c05cSAndroid Build Coastguard Worker - match: '((?:L|u8|u|U)?R)("([^\(\)\\ ]{0,16})\()' 135*5c90c05cSAndroid Build Coastguard Worker captures: 136*5c90c05cSAndroid Build Coastguard Worker 1: storage.type.string.c++ 137*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.definition.string.begin.c++ 138*5c90c05cSAndroid Build Coastguard Worker push: 139*5c90c05cSAndroid Build Coastguard Worker - meta_scope: string.quoted.double.c++ 140*5c90c05cSAndroid Build Coastguard Worker - match: '\)\3"' 141*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.string.end.c++ 142*5c90c05cSAndroid Build Coastguard Worker pop: true 143*5c90c05cSAndroid Build Coastguard Worker - match: '\{\{|\}\}' 144*5c90c05cSAndroid Build Coastguard Worker scope: constant.character.escape.c++ 145*5c90c05cSAndroid Build Coastguard Worker - include: formatting-syntax 146*5c90c05cSAndroid Build Coastguard Worker 147*5c90c05cSAndroid Build Coastguard Worker unique-numbers: 148*5c90c05cSAndroid Build Coastguard Worker - match: |- 149*5c90c05cSAndroid Build Coastguard Worker (?x) 150*5c90c05cSAndroid Build Coastguard Worker (?: 151*5c90c05cSAndroid Build Coastguard Worker # floats 152*5c90c05cSAndroid Build Coastguard Worker (?: 153*5c90c05cSAndroid Build Coastguard Worker (?:\b\d(?:[\d']*\d)?\.\d(?:[\d']*\d)?|\B\.\d(?:[\d']*\d)?)(?:[Ee][+-]?\d(?:[\d']*\d)?)?(?:[fFlL]|(?:i[fl]?|h|min|[mun]?s|_\w*))?\b 154*5c90c05cSAndroid Build Coastguard Worker | 155*5c90c05cSAndroid Build Coastguard Worker (?:\b\d(?:[\d']*\d)?\.)(?:\B|(?:[fFlL]|(?:i[fl]?|h|min|[mun]?s|_\w*))\b|(?:[Ee][+-]?\d(?:[\d']*\d)?)(?:[fFlL]|(?:i[fl]?|h|min|[mun]?s|_\w*))?\b) 156*5c90c05cSAndroid Build Coastguard Worker | 157*5c90c05cSAndroid Build Coastguard Worker \b\d(?:[\d']*\d)?(?:[Ee][+-]?\d(?:[\d']*\d)?)(?:[fFlL]|(?:i[fl]?|h|min|[mun]?s|_\w*))?\b 158*5c90c05cSAndroid Build Coastguard Worker ) 159*5c90c05cSAndroid Build Coastguard Worker | 160*5c90c05cSAndroid Build Coastguard Worker # ints 161*5c90c05cSAndroid Build Coastguard Worker \b(?: 162*5c90c05cSAndroid Build Coastguard Worker (?: 163*5c90c05cSAndroid Build Coastguard Worker # dec 164*5c90c05cSAndroid Build Coastguard Worker [1-9](?:[\d']*\d)? 165*5c90c05cSAndroid Build Coastguard Worker | 166*5c90c05cSAndroid Build Coastguard Worker # oct 167*5c90c05cSAndroid Build Coastguard Worker 0(?:[0-7']*[0-7])? 168*5c90c05cSAndroid Build Coastguard Worker | 169*5c90c05cSAndroid Build Coastguard Worker # hex 170*5c90c05cSAndroid Build Coastguard Worker 0[Xx][\da-fA-F](?:[\da-fA-F']*[\da-fA-F])? 171*5c90c05cSAndroid Build Coastguard Worker | 172*5c90c05cSAndroid Build Coastguard Worker # bin 173*5c90c05cSAndroid Build Coastguard Worker 0[Bb][01](?:[01']*[01])? 174*5c90c05cSAndroid Build Coastguard Worker ) 175*5c90c05cSAndroid Build Coastguard Worker # int suffixes 176*5c90c05cSAndroid Build Coastguard Worker (?:(?:l{1,2}|L{1,2})[uU]?|[uU](?:l{0,2}|L{0,2})|(?:i[fl]?|h|min|[mun]?s|_\w*))?)\b 177*5c90c05cSAndroid Build Coastguard Worker ) 178*5c90c05cSAndroid Build Coastguard Worker (?!\.) # Number must not be followed by a decimal point 179*5c90c05cSAndroid Build Coastguard Worker scope: constant.numeric.c++ 180*5c90c05cSAndroid Build Coastguard Worker 181*5c90c05cSAndroid Build Coastguard Worker identifiers: 182*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}\s*(::)\s*' 183*5c90c05cSAndroid Build Coastguard Worker captures: 184*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.c++ 185*5c90c05cSAndroid Build Coastguard Worker - match: '(?:(::)\s*)?{{identifier}}' 186*5c90c05cSAndroid Build Coastguard Worker captures: 187*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.c++ 188*5c90c05cSAndroid Build Coastguard Worker 189*5c90c05cSAndroid Build Coastguard Worker function-specifiers: 190*5c90c05cSAndroid Build Coastguard Worker - match: \b(const|final|noexcept|override)\b 191*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 192*5c90c05cSAndroid Build Coastguard Worker 193*5c90c05cSAndroid Build Coastguard Worker ############################################################################# 194*5c90c05cSAndroid Build Coastguard Worker # The following are C++-specific contexts that should not be reused. This is 195*5c90c05cSAndroid Build Coastguard Worker # because they push into subcontexts and use variables that are C++-specific. 196*5c90c05cSAndroid Build Coastguard Worker ############################################################################# 197*5c90c05cSAndroid Build Coastguard Worker 198*5c90c05cSAndroid Build Coastguard Worker ## Common context layout 199*5c90c05cSAndroid Build Coastguard Worker 200*5c90c05cSAndroid Build Coastguard Worker global: 201*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\btemplate\b)' 202*5c90c05cSAndroid Build Coastguard Worker push: 203*5c90c05cSAndroid Build Coastguard Worker - include: template 204*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) 205*5c90c05cSAndroid Build Coastguard Worker set: global-modifier 206*5c90c05cSAndroid Build Coastguard Worker - include: namespace 207*5c90c05cSAndroid Build Coastguard Worker - include: keywords-angle-brackets 208*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*<)' 209*5c90c05cSAndroid Build Coastguard Worker push: global-modifier 210*5c90c05cSAndroid Build Coastguard Worker # Take care of comments just before a function definition. 211*5c90c05cSAndroid Build Coastguard Worker - match: /\* 212*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.comment.c 213*5c90c05cSAndroid Build Coastguard Worker push: 214*5c90c05cSAndroid Build Coastguard Worker - - match: \s*(?=\w) 215*5c90c05cSAndroid Build Coastguard Worker set: global-modifier 216*5c90c05cSAndroid Build Coastguard Worker - match: "" 217*5c90c05cSAndroid Build Coastguard Worker pop: true 218*5c90c05cSAndroid Build Coastguard Worker - - meta_scope: comment.block.c 219*5c90c05cSAndroid Build Coastguard Worker - match: \*/ 220*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.comment.c 221*5c90c05cSAndroid Build Coastguard Worker pop: true 222*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions 223*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*\b(extern)(?=\s+"C(\+\+)?") 224*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 225*5c90c05cSAndroid Build Coastguard Worker push: 226*5c90c05cSAndroid Build Coastguard Worker - include: comments 227*5c90c05cSAndroid Build Coastguard Worker - include: strings 228*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 229*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 230*5c90c05cSAndroid Build Coastguard Worker set: 231*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.extern-c.c++ 232*5c90c05cSAndroid Build Coastguard Worker - match: '^\s*(#\s*ifdef)\s*__cplusplus\s*' 233*5c90c05cSAndroid Build Coastguard Worker scope: meta.preprocessor.c++ 234*5c90c05cSAndroid Build Coastguard Worker captures: 235*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.c++ 236*5c90c05cSAndroid Build Coastguard Worker set: 237*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 238*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 239*5c90c05cSAndroid Build Coastguard Worker pop: true 240*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 241*5c90c05cSAndroid Build Coastguard Worker - include: global 242*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 243*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 244*5c90c05cSAndroid Build Coastguard Worker pop: true 245*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 246*5c90c05cSAndroid Build Coastguard Worker - include: global 247*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) 248*5c90c05cSAndroid Build Coastguard Worker set: global-modifier 249*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(?=\w) 250*5c90c05cSAndroid Build Coastguard Worker push: global-modifier 251*5c90c05cSAndroid Build Coastguard Worker - include: late-expressions 252*5c90c05cSAndroid Build Coastguard Worker 253*5c90c05cSAndroid Build Coastguard Worker statements: 254*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-statements 255*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#label 256*5c90c05cSAndroid Build Coastguard Worker - include: expressions 257*5c90c05cSAndroid Build Coastguard Worker 258*5c90c05cSAndroid Build Coastguard Worker expressions: 259*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions 260*5c90c05cSAndroid Build Coastguard Worker - include: late-expressions 261*5c90c05cSAndroid Build Coastguard Worker 262*5c90c05cSAndroid Build Coastguard Worker early-expressions: 263*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions-before-generic-type 264*5c90c05cSAndroid Build Coastguard Worker - include: generic-type 265*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions-after-generic-type 266*5c90c05cSAndroid Build Coastguard Worker 267*5c90c05cSAndroid Build Coastguard Worker early-expressions-before-generic-type: 268*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-expressions 269*5c90c05cSAndroid Build Coastguard Worker - include: comments 270*5c90c05cSAndroid Build Coastguard Worker - include: case-default 271*5c90c05cSAndroid Build Coastguard Worker - include: typedef 272*5c90c05cSAndroid Build Coastguard Worker - include: keywords-angle-brackets 273*5c90c05cSAndroid Build Coastguard Worker - include: keywords-parens 274*5c90c05cSAndroid Build Coastguard Worker - include: keywords 275*5c90c05cSAndroid Build Coastguard Worker - include: numbers 276*5c90c05cSAndroid Build Coastguard Worker # Prevent a '<' from getting scoped as the start of another template 277*5c90c05cSAndroid Build Coastguard Worker # parameter list, if in reality a less-than-or-equals sign is meant. 278*5c90c05cSAndroid Build Coastguard Worker - match: <= 279*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.comparison.c 280*5c90c05cSAndroid Build Coastguard Worker 281*5c90c05cSAndroid Build Coastguard Worker early-expressions-after-generic-type: 282*5c90c05cSAndroid Build Coastguard Worker - include: members-arrow 283*5c90c05cSAndroid Build Coastguard Worker - include: operators 284*5c90c05cSAndroid Build Coastguard Worker - include: members-dot 285*5c90c05cSAndroid Build Coastguard Worker - include: strings 286*5c90c05cSAndroid Build Coastguard Worker - include: parens 287*5c90c05cSAndroid Build Coastguard Worker - include: brackets 288*5c90c05cSAndroid Build Coastguard Worker - include: block 289*5c90c05cSAndroid Build Coastguard Worker - include: variables 290*5c90c05cSAndroid Build Coastguard Worker - include: constants 291*5c90c05cSAndroid Build Coastguard Worker - match: ',' 292*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 293*5c90c05cSAndroid Build Coastguard Worker - match: '\)|\}' 294*5c90c05cSAndroid Build Coastguard Worker scope: invalid.illegal.stray-bracket-end.c++ 295*5c90c05cSAndroid Build Coastguard Worker 296*5c90c05cSAndroid Build Coastguard Worker expressions-minus-generic-type: 297*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions-before-generic-type 298*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 299*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions-after-generic-type 300*5c90c05cSAndroid Build Coastguard Worker - include: late-expressions 301*5c90c05cSAndroid Build Coastguard Worker 302*5c90c05cSAndroid Build Coastguard Worker expressions-minus-generic-type-function-call: 303*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions-before-generic-type 304*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 305*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions-after-generic-type 306*5c90c05cSAndroid Build Coastguard Worker - include: late-expressions-before-function-call 307*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 308*5c90c05cSAndroid Build Coastguard Worker - match: ';' 309*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.terminator.c++ 310*5c90c05cSAndroid Build Coastguard Worker 311*5c90c05cSAndroid Build Coastguard Worker late-expressions: 312*5c90c05cSAndroid Build Coastguard Worker - include: late-expressions-before-function-call 313*5c90c05cSAndroid Build Coastguard Worker - include: function-call 314*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 315*5c90c05cSAndroid Build Coastguard Worker - match: ';' 316*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.terminator.c++ 317*5c90c05cSAndroid Build Coastguard Worker 318*5c90c05cSAndroid Build Coastguard Worker late-expressions-before-function-call: 319*5c90c05cSAndroid Build Coastguard Worker - include: unique-late-expressions 320*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 321*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 322*5c90c05cSAndroid Build Coastguard Worker - include: types 323*5c90c05cSAndroid Build Coastguard Worker 324*5c90c05cSAndroid Build Coastguard Worker expressions-minus-function-call: 325*5c90c05cSAndroid Build Coastguard Worker - include: early-expressions 326*5c90c05cSAndroid Build Coastguard Worker - include: late-expressions-before-function-call 327*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 328*5c90c05cSAndroid Build Coastguard Worker - match: ';' 329*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.terminator.c++ 330*5c90c05cSAndroid Build Coastguard Worker 331*5c90c05cSAndroid Build Coastguard Worker comments: 332*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#comments 333*5c90c05cSAndroid Build Coastguard Worker 334*5c90c05cSAndroid Build Coastguard Worker operators: 335*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#operators 336*5c90c05cSAndroid Build Coastguard Worker 337*5c90c05cSAndroid Build Coastguard Worker modifiers: 338*5c90c05cSAndroid Build Coastguard Worker - include: unique-modifiers 339*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#modifiers 340*5c90c05cSAndroid Build Coastguard Worker 341*5c90c05cSAndroid Build Coastguard Worker variables: 342*5c90c05cSAndroid Build Coastguard Worker - include: unique-variables 343*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#variables 344*5c90c05cSAndroid Build Coastguard Worker 345*5c90c05cSAndroid Build Coastguard Worker constants: 346*5c90c05cSAndroid Build Coastguard Worker - include: unique-constants 347*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#constants 348*5c90c05cSAndroid Build Coastguard Worker 349*5c90c05cSAndroid Build Coastguard Worker keywords: 350*5c90c05cSAndroid Build Coastguard Worker - include: unique-keywords 351*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#keywords 352*5c90c05cSAndroid Build Coastguard Worker 353*5c90c05cSAndroid Build Coastguard Worker types: 354*5c90c05cSAndroid Build Coastguard Worker - include: unique-types 355*5c90c05cSAndroid Build Coastguard Worker - include: types-parens 356*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#types 357*5c90c05cSAndroid Build Coastguard Worker 358*5c90c05cSAndroid Build Coastguard Worker strings: 359*5c90c05cSAndroid Build Coastguard Worker - include: unique-strings 360*5c90c05cSAndroid Build Coastguard Worker - match: '(L|u8|u|U)?(")' 361*5c90c05cSAndroid Build Coastguard Worker captures: 362*5c90c05cSAndroid Build Coastguard Worker 1: storage.type.string.c++ 363*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.definition.string.begin.c++ 364*5c90c05cSAndroid Build Coastguard Worker push: 365*5c90c05cSAndroid Build Coastguard Worker - meta_scope: string.quoted.double.c++ 366*5c90c05cSAndroid Build Coastguard Worker - match: '"' 367*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.string.end.c++ 368*5c90c05cSAndroid Build Coastguard Worker pop: true 369*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#string_escaped_char 370*5c90c05cSAndroid Build Coastguard Worker - match: |- 371*5c90c05cSAndroid Build Coastguard Worker (?x)% 372*5c90c05cSAndroid Build Coastguard Worker (\d+\$)? # field (argument #) 373*5c90c05cSAndroid Build Coastguard Worker [#0\- +']* # flags 374*5c90c05cSAndroid Build Coastguard Worker [,;:_]? # separator character (AltiVec) 375*5c90c05cSAndroid Build Coastguard Worker ((-?\d+)|\*(-?\d+\$)?)? # minimum field width 376*5c90c05cSAndroid Build Coastguard Worker (\.((-?\d+)|\*(-?\d+\$)?)?)? # precision 377*5c90c05cSAndroid Build Coastguard Worker (hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier 378*5c90c05cSAndroid Build Coastguard Worker (\[[^\]]+\]|[am]s|[diouxXDOUeEfFgGaACcSspn%]) # conversion type 379*5c90c05cSAndroid Build Coastguard Worker scope: constant.other.placeholder.c++ 380*5c90c05cSAndroid Build Coastguard Worker - match: '\{\{|\}\}' 381*5c90c05cSAndroid Build Coastguard Worker scope: constant.character.escape.c++ 382*5c90c05cSAndroid Build Coastguard Worker - include: formatting-syntax 383*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#strings 384*5c90c05cSAndroid Build Coastguard Worker 385*5c90c05cSAndroid Build Coastguard Worker formatting-syntax: 386*5c90c05cSAndroid Build Coastguard Worker # https://docs.python.org/3.6/library/string.html#formatstrings 387*5c90c05cSAndroid Build Coastguard Worker - match: |- # simple form 388*5c90c05cSAndroid Build Coastguard Worker (?x) 389*5c90c05cSAndroid Build Coastguard Worker (\{) 390*5c90c05cSAndroid Build Coastguard Worker (?: [\w.\[\]]+)? # field_name 391*5c90c05cSAndroid Build Coastguard Worker ( ! [ars])? # conversion 392*5c90c05cSAndroid Build Coastguard Worker ( : (?:{{format_spec}}| # format_spec OR 393*5c90c05cSAndroid Build Coastguard Worker [^}%]*%.[^}]*) # any format-like string 394*5c90c05cSAndroid Build Coastguard Worker )? 395*5c90c05cSAndroid Build Coastguard Worker (\}) 396*5c90c05cSAndroid Build Coastguard Worker scope: constant.other.placeholder.c++ 397*5c90c05cSAndroid Build Coastguard Worker captures: 398*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.definition.placeholder.begin.c++ 399*5c90c05cSAndroid Build Coastguard Worker 2: storage.modifier.c++onversion.c++ 400*5c90c05cSAndroid Build Coastguard Worker 3: constant.other.format-spec.c++ 401*5c90c05cSAndroid Build Coastguard Worker 4: punctuation.definition.placeholder.end.c++ 402*5c90c05cSAndroid Build Coastguard Worker - match: \{(?=[^\}"']+\{[^"']*\}) # complex (nested) form 403*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.placeholder.begin.c++ 404*5c90c05cSAndroid Build Coastguard Worker push: 405*5c90c05cSAndroid Build Coastguard Worker - meta_scope: constant.other.placeholder.c++ 406*5c90c05cSAndroid Build Coastguard Worker - match: \} 407*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.placeholder.end.c++ 408*5c90c05cSAndroid Build Coastguard Worker pop: true 409*5c90c05cSAndroid Build Coastguard Worker - match: '[\w.\[\]]+' 410*5c90c05cSAndroid Build Coastguard Worker - match: '![ars]' 411*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.conversion.c++ 412*5c90c05cSAndroid Build Coastguard Worker - match: ':' 413*5c90c05cSAndroid Build Coastguard Worker push: 414*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.format-spec.c++ constant.other.format-spec.c++ 415*5c90c05cSAndroid Build Coastguard Worker - match: (?=\}) 416*5c90c05cSAndroid Build Coastguard Worker pop: true 417*5c90c05cSAndroid Build Coastguard Worker - include: formatting-syntax 418*5c90c05cSAndroid Build Coastguard Worker 419*5c90c05cSAndroid Build Coastguard Worker numbers: 420*5c90c05cSAndroid Build Coastguard Worker - include: unique-numbers 421*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#numbers 422*5c90c05cSAndroid Build Coastguard Worker 423*5c90c05cSAndroid Build Coastguard Worker ## C++-specific contexts 424*5c90c05cSAndroid Build Coastguard Worker 425*5c90c05cSAndroid Build Coastguard Worker case-default: 426*5c90c05cSAndroid Build Coastguard Worker - match: '\b(default|case)\b' 427*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 428*5c90c05cSAndroid Build Coastguard Worker push: 429*5c90c05cSAndroid Build Coastguard Worker - match: (?=[);,]) 430*5c90c05cSAndroid Build Coastguard Worker pop: true 431*5c90c05cSAndroid Build Coastguard Worker - match: ':' 432*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 433*5c90c05cSAndroid Build Coastguard Worker pop: true 434*5c90c05cSAndroid Build Coastguard Worker - include: expressions 435*5c90c05cSAndroid Build Coastguard Worker 436*5c90c05cSAndroid Build Coastguard Worker modifiers-parens: 437*5c90c05cSAndroid Build Coastguard Worker - match: '\b(alignas)\b\s*(\()' 438*5c90c05cSAndroid Build Coastguard Worker captures: 439*5c90c05cSAndroid Build Coastguard Worker 1: storage.modifier.c++ 440*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 441*5c90c05cSAndroid Build Coastguard Worker push: 442*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 443*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 444*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 445*5c90c05cSAndroid Build Coastguard Worker pop: true 446*5c90c05cSAndroid Build Coastguard Worker - include: expressions 447*5c90c05cSAndroid Build Coastguard Worker - match: \b(__attribute__)\s*(\(\() 448*5c90c05cSAndroid Build Coastguard Worker captures: 449*5c90c05cSAndroid Build Coastguard Worker 1: storage.modifier.c++ 450*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 451*5c90c05cSAndroid Build Coastguard Worker push : 452*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.attribute.c++ 453*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 454*5c90c05cSAndroid Build Coastguard Worker - include: parens 455*5c90c05cSAndroid Build Coastguard Worker - include: strings 456*5c90c05cSAndroid Build Coastguard Worker - match: \)\) 457*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 458*5c90c05cSAndroid Build Coastguard Worker pop: true 459*5c90c05cSAndroid Build Coastguard Worker - match: \b(__declspec)(\() 460*5c90c05cSAndroid Build Coastguard Worker captures: 461*5c90c05cSAndroid Build Coastguard Worker 1: storage.modifier.c++ 462*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 463*5c90c05cSAndroid Build Coastguard Worker push: 464*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 465*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 466*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 467*5c90c05cSAndroid Build Coastguard Worker pop: true 468*5c90c05cSAndroid Build Coastguard Worker - match: '\b(align|allocate|code_seg|deprecated|property|uuid)\b\s*(\()' 469*5c90c05cSAndroid Build Coastguard Worker captures: 470*5c90c05cSAndroid Build Coastguard Worker 1: storage.modifier.c++ 471*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 472*5c90c05cSAndroid Build Coastguard Worker push: 473*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 474*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 475*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 476*5c90c05cSAndroid Build Coastguard Worker pop: true 477*5c90c05cSAndroid Build Coastguard Worker - include: numbers 478*5c90c05cSAndroid Build Coastguard Worker - include: strings 479*5c90c05cSAndroid Build Coastguard Worker - match: \b(get|put)\b 480*5c90c05cSAndroid Build Coastguard Worker scope: variable.parameter.c++ 481*5c90c05cSAndroid Build Coastguard Worker - match: ',' 482*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 483*5c90c05cSAndroid Build Coastguard Worker - match: '=' 484*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.assignment.c++ 485*5c90c05cSAndroid Build Coastguard Worker - match: '\b(appdomain|deprecated|dllimport|dllexport|jintrinsic|naked|noalias|noinline|noreturn|nothrow|novtable|process|restrict|safebuffers|selectany|thread)\b' 486*5c90c05cSAndroid Build Coastguard Worker scope: constant.other.c++ 487*5c90c05cSAndroid Build Coastguard Worker 488*5c90c05cSAndroid Build Coastguard Worker types-parens: 489*5c90c05cSAndroid Build Coastguard Worker - match: '\b(decltype)\b\s*(\()' 490*5c90c05cSAndroid Build Coastguard Worker captures: 491*5c90c05cSAndroid Build Coastguard Worker 1: storage.type.c++ 492*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 493*5c90c05cSAndroid Build Coastguard Worker push: 494*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 495*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 496*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 497*5c90c05cSAndroid Build Coastguard Worker pop: true 498*5c90c05cSAndroid Build Coastguard Worker - include: expressions 499*5c90c05cSAndroid Build Coastguard Worker 500*5c90c05cSAndroid Build Coastguard Worker keywords-angle-brackets: 501*5c90c05cSAndroid Build Coastguard Worker - match: \b({{casts}})\b\s* 502*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.word.cast.c++ 503*5c90c05cSAndroid Build Coastguard Worker push: 504*5c90c05cSAndroid Build Coastguard Worker - match: '>' 505*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.end.c++ 506*5c90c05cSAndroid Build Coastguard Worker pop: true 507*5c90c05cSAndroid Build Coastguard Worker - match: '<' 508*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.begin.c++ 509*5c90c05cSAndroid Build Coastguard Worker push: 510*5c90c05cSAndroid Build Coastguard Worker - match: '(?=>)' 511*5c90c05cSAndroid Build Coastguard Worker pop: true 512*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type-function-call 513*5c90c05cSAndroid Build Coastguard Worker 514*5c90c05cSAndroid Build Coastguard Worker keywords-parens: 515*5c90c05cSAndroid Build Coastguard Worker - match: '\b(alignof|typeid|static_assert|sizeof)\b\s*(\()' 516*5c90c05cSAndroid Build Coastguard Worker captures: 517*5c90c05cSAndroid Build Coastguard Worker 1: keyword.operator.word.c++ 518*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 519*5c90c05cSAndroid Build Coastguard Worker push: 520*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 521*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 522*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 523*5c90c05cSAndroid Build Coastguard Worker pop: true 524*5c90c05cSAndroid Build Coastguard Worker - include: expressions 525*5c90c05cSAndroid Build Coastguard Worker 526*5c90c05cSAndroid Build Coastguard Worker namespace: 527*5c90c05cSAndroid Build Coastguard Worker - match: '\b(using)\s+(namespace)\s+(?={{path_lookahead}})' 528*5c90c05cSAndroid Build Coastguard Worker captures: 529*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.c++ 530*5c90c05cSAndroid Build Coastguard Worker 2: keyword.control.c++ 531*5c90c05cSAndroid Build Coastguard Worker push: 532*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 533*5c90c05cSAndroid Build Coastguard Worker - match: '' 534*5c90c05cSAndroid Build Coastguard Worker pop: true 535*5c90c05cSAndroid Build Coastguard Worker - match: '\b(namespace)\s+(?=({{path_lookahead}})?(?!\s*[;,]))' 536*5c90c05cSAndroid Build Coastguard Worker scope: meta.namespace.c++ 537*5c90c05cSAndroid Build Coastguard Worker captures: 538*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.c++ 539*5c90c05cSAndroid Build Coastguard Worker push: 540*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.namespace.c++ entity.name.namespace.c++ 541*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 542*5c90c05cSAndroid Build Coastguard Worker - match: '' 543*5c90c05cSAndroid Build Coastguard Worker set: 544*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.namespace.c++ 545*5c90c05cSAndroid Build Coastguard Worker - include: comments 546*5c90c05cSAndroid Build Coastguard Worker - match: '=' 547*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.alias.c++ 548*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 549*5c90c05cSAndroid Build Coastguard Worker pop: true 550*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 551*5c90c05cSAndroid Build Coastguard Worker scope: meta.block.c++ punctuation.section.block.end.c++ 552*5c90c05cSAndroid Build Coastguard Worker pop: true 553*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 554*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 555*5c90c05cSAndroid Build Coastguard Worker push: 556*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.block.c++ 557*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\})' 558*5c90c05cSAndroid Build Coastguard Worker pop: true 559*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 560*5c90c05cSAndroid Build Coastguard Worker - include: global 561*5c90c05cSAndroid Build Coastguard Worker - include: expressions 562*5c90c05cSAndroid Build Coastguard Worker 563*5c90c05cSAndroid Build Coastguard Worker template-common: 564*5c90c05cSAndroid Build Coastguard Worker # Exit the template scope if we hit some basic invalid characters. This 565*5c90c05cSAndroid Build Coastguard Worker # helps when a user is in the middle of typing their template types and 566*5c90c05cSAndroid Build Coastguard Worker # prevents re-highlighting the whole file until the next > is found. 567*5c90c05cSAndroid Build Coastguard Worker - match: (?=[{};]) 568*5c90c05cSAndroid Build Coastguard Worker pop: true 569*5c90c05cSAndroid Build Coastguard Worker - include: expressions 570*5c90c05cSAndroid Build Coastguard Worker 571*5c90c05cSAndroid Build Coastguard Worker template: 572*5c90c05cSAndroid Build Coastguard Worker - match: \btemplate\b 573*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.template.c++ 574*5c90c05cSAndroid Build Coastguard Worker push: 575*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.template.c++ 576*5c90c05cSAndroid Build Coastguard Worker # Explicitly include comments here at the top, in order to NOT match the 577*5c90c05cSAndroid Build Coastguard Worker # \S lookahead in the case of comments. 578*5c90c05cSAndroid Build Coastguard Worker - include: comments 579*5c90c05cSAndroid Build Coastguard Worker - match: < 580*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.begin.c++ 581*5c90c05cSAndroid Build Coastguard Worker set: 582*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.template.c++ 583*5c90c05cSAndroid Build Coastguard Worker - match: '>' 584*5c90c05cSAndroid Build Coastguard Worker scope: meta.template.c++ punctuation.section.generic.end.c++ 585*5c90c05cSAndroid Build Coastguard Worker pop: true 586*5c90c05cSAndroid Build Coastguard Worker - match: \.{3} 587*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.variadic.c++ 588*5c90c05cSAndroid Build Coastguard Worker - match: \b(typename|{{before_tag}})\b 589*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 590*5c90c05cSAndroid Build Coastguard Worker - include: template # include template here for nested templates 591*5c90c05cSAndroid Build Coastguard Worker - include: template-common 592*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) 593*5c90c05cSAndroid Build Coastguard Worker set: 594*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.template.c++ 595*5c90c05cSAndroid Build Coastguard Worker - match: \b({{before_tag}})\b 596*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 597*5c90c05cSAndroid Build Coastguard Worker - include: template-common 598*5c90c05cSAndroid Build Coastguard Worker 599*5c90c05cSAndroid Build Coastguard Worker generic-type: 600*5c90c05cSAndroid Build Coastguard Worker - match: '(?=(?!template){{path_lookahead}}\s*{{generic_lookahead}}\s*\()' 601*5c90c05cSAndroid Build Coastguard Worker push: 602*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.function-call.c++ 603*5c90c05cSAndroid Build Coastguard Worker - match: \btemplate\b 604*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.template.c++ 605*5c90c05cSAndroid Build Coastguard Worker - match: '(?:(::)\s*)?{{identifier}}\s*(::)\s*' 606*5c90c05cSAndroid Build Coastguard Worker captures: 607*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.double-colon.c++ 608*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.accessor.double-colon.c++ 609*5c90c05cSAndroid Build Coastguard Worker - match: (?:(::)\s*)?({{identifier}})\s*(<) 610*5c90c05cSAndroid Build Coastguard Worker captures: 611*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.double-colon.c++ 612*5c90c05cSAndroid Build Coastguard Worker 2: variable.function.c++ 613*5c90c05cSAndroid Build Coastguard Worker 3: punctuation.section.generic.begin.c++ 614*5c90c05cSAndroid Build Coastguard Worker push: 615*5c90c05cSAndroid Build Coastguard Worker - match: '>' 616*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.end.c++ 617*5c90c05cSAndroid Build Coastguard Worker pop: true 618*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type-function-call 619*5c90c05cSAndroid Build Coastguard Worker - match: (?:(::)\s*)?({{identifier}})\s*(\() 620*5c90c05cSAndroid Build Coastguard Worker captures: 621*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.double-colon.c++ 622*5c90c05cSAndroid Build Coastguard Worker 2: variable.function.c++ 623*5c90c05cSAndroid Build Coastguard Worker 3: punctuation.section.group.begin.c++ 624*5c90c05cSAndroid Build Coastguard Worker set: 625*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.function-call.c++ 626*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 627*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 628*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 629*5c90c05cSAndroid Build Coastguard Worker pop: true 630*5c90c05cSAndroid Build Coastguard Worker - include: expressions 631*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 632*5c90c05cSAndroid Build Coastguard Worker - match: '\(' 633*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.begin.c++ 634*5c90c05cSAndroid Build Coastguard Worker set: 635*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.function-call.c++ 636*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 637*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 638*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 639*5c90c05cSAndroid Build Coastguard Worker pop: true 640*5c90c05cSAndroid Build Coastguard Worker - include: expressions 641*5c90c05cSAndroid Build Coastguard Worker - match: '(?=(?!template){{path_lookahead}}\s*{{generic_lookahead}})' 642*5c90c05cSAndroid Build Coastguard Worker push: 643*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 644*5c90c05cSAndroid Build Coastguard Worker - match: '<' 645*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.begin.c++ 646*5c90c05cSAndroid Build Coastguard Worker set: 647*5c90c05cSAndroid Build Coastguard Worker - match: '>' 648*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.end.c++ 649*5c90c05cSAndroid Build Coastguard Worker pop: true 650*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type-function-call 651*5c90c05cSAndroid Build Coastguard Worker 652*5c90c05cSAndroid Build Coastguard Worker angle-brackets: 653*5c90c05cSAndroid Build Coastguard Worker - match: '<(?!<)' 654*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.begin.c++ 655*5c90c05cSAndroid Build Coastguard Worker push: 656*5c90c05cSAndroid Build Coastguard Worker - match: '>' 657*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.end.c++ 658*5c90c05cSAndroid Build Coastguard Worker pop: true 659*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type-function-call 660*5c90c05cSAndroid Build Coastguard Worker 661*5c90c05cSAndroid Build Coastguard Worker block: 662*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 663*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 664*5c90c05cSAndroid Build Coastguard Worker push: 665*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.block.c++ 666*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else|endif)\b) 667*5c90c05cSAndroid Build Coastguard Worker pop: true 668*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 669*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 670*5c90c05cSAndroid Build Coastguard Worker pop: true 671*5c90c05cSAndroid Build Coastguard Worker - include: statements 672*5c90c05cSAndroid Build Coastguard Worker 673*5c90c05cSAndroid Build Coastguard Worker function-call: 674*5c90c05cSAndroid Build Coastguard Worker - match: (?={{path_lookahead}}\s*\() 675*5c90c05cSAndroid Build Coastguard Worker push: 676*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.function-call.c++ 677*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#c99 678*5c90c05cSAndroid Build Coastguard Worker - match: '(?:(::)\s*)?{{identifier}}\s*(::)\s*' 679*5c90c05cSAndroid Build Coastguard Worker scope: variable.function.c++ 680*5c90c05cSAndroid Build Coastguard Worker captures: 681*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.c++ 682*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.accessor.c++ 683*5c90c05cSAndroid Build Coastguard Worker - match: '(?:(::)\s*)?{{identifier}}' 684*5c90c05cSAndroid Build Coastguard Worker scope: variable.function.c++ 685*5c90c05cSAndroid Build Coastguard Worker captures: 686*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.c++ 687*5c90c05cSAndroid Build Coastguard Worker - match: '\(' 688*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.begin.c++ 689*5c90c05cSAndroid Build Coastguard Worker set: 690*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function-call.c++ meta.group.c++ 691*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 692*5c90c05cSAndroid Build Coastguard Worker scope: meta.function-call.c++ meta.group.c++ punctuation.section.group.end.c++ 693*5c90c05cSAndroid Build Coastguard Worker pop: true 694*5c90c05cSAndroid Build Coastguard Worker - include: expressions 695*5c90c05cSAndroid Build Coastguard Worker 696*5c90c05cSAndroid Build Coastguard Worker members-inside-function-call: 697*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method-call.c++ meta.group.c++ 698*5c90c05cSAndroid Build Coastguard Worker - match: \) 699*5c90c05cSAndroid Build Coastguard Worker scope: meta.method-call.c++ meta.group.c++ punctuation.section.group.end.c++ 700*5c90c05cSAndroid Build Coastguard Worker pop: true 701*5c90c05cSAndroid Build Coastguard Worker - include: expressions 702*5c90c05cSAndroid Build Coastguard Worker 703*5c90c05cSAndroid Build Coastguard Worker members-after-accessor-junction: 704*5c90c05cSAndroid Build Coastguard Worker # After we've seen an accessor (dot or arrow), this context decides what 705*5c90c05cSAndroid Build Coastguard Worker # kind of entity we're accessing. 706*5c90c05cSAndroid Build Coastguard Worker - include: comments 707*5c90c05cSAndroid Build Coastguard Worker - match: \btemplate\b 708*5c90c05cSAndroid Build Coastguard Worker scope: meta.method-call.c++ storage.type.template.c++ 709*5c90c05cSAndroid Build Coastguard Worker # Guaranteed to be a template member function call after we match this 710*5c90c05cSAndroid Build Coastguard Worker set: 711*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method-call.c++ 712*5c90c05cSAndroid Build Coastguard Worker - include: comments 713*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 714*5c90c05cSAndroid Build Coastguard Worker scope: variable.function.member.c++ 715*5c90c05cSAndroid Build Coastguard Worker set: 716*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method-call.c++ 717*5c90c05cSAndroid Build Coastguard Worker - match: \( 718*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.begin.c++ 719*5c90c05cSAndroid Build Coastguard Worker set: members-inside-function-call 720*5c90c05cSAndroid Build Coastguard Worker - include: comments 721*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 722*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) # safety pop 723*5c90c05cSAndroid Build Coastguard Worker pop: true 724*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) # safety pop 725*5c90c05cSAndroid Build Coastguard Worker pop: true 726*5c90c05cSAndroid Build Coastguard Worker # Operator overloading 727*5c90c05cSAndroid Build Coastguard Worker - match: '({{operator_method_name}})\s*(\()' 728*5c90c05cSAndroid Build Coastguard Worker captures: 729*5c90c05cSAndroid Build Coastguard Worker 0: meta.method-call.c++ 730*5c90c05cSAndroid Build Coastguard Worker 1: variable.function.member.c++ 731*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 732*5c90c05cSAndroid Build Coastguard Worker set: members-inside-function-call 733*5c90c05cSAndroid Build Coastguard Worker # Non-templated member function call 734*5c90c05cSAndroid Build Coastguard Worker - match: (~?{{identifier}})\s*(\() 735*5c90c05cSAndroid Build Coastguard Worker captures: 736*5c90c05cSAndroid Build Coastguard Worker 0: meta.method-call.c++ 737*5c90c05cSAndroid Build Coastguard Worker 1: variable.function.member.c++ 738*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 739*5c90c05cSAndroid Build Coastguard Worker set: members-inside-function-call 740*5c90c05cSAndroid Build Coastguard Worker # Templated member function call 741*5c90c05cSAndroid Build Coastguard Worker - match: (~?{{identifier}})\s*(?={{generic_lookahead}}) 742*5c90c05cSAndroid Build Coastguard Worker captures: 743*5c90c05cSAndroid Build Coastguard Worker 1: variable.function.member.c++ 744*5c90c05cSAndroid Build Coastguard Worker set: 745*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.method-call.c++ 746*5c90c05cSAndroid Build Coastguard Worker - match: < 747*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.begin.c++ 748*5c90c05cSAndroid Build Coastguard Worker set: 749*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method-call.c++ 750*5c90c05cSAndroid Build Coastguard Worker - match: '>' 751*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.generic.end.c++ 752*5c90c05cSAndroid Build Coastguard Worker set: 753*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method-call.c++ 754*5c90c05cSAndroid Build Coastguard Worker - include: comments 755*5c90c05cSAndroid Build Coastguard Worker - match: \( 756*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.begin.c++ 757*5c90c05cSAndroid Build Coastguard Worker set: members-inside-function-call 758*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) # safety pop 759*5c90c05cSAndroid Build Coastguard Worker pop: true 760*5c90c05cSAndroid Build Coastguard Worker - include: expressions 761*5c90c05cSAndroid Build Coastguard Worker # Explicit base-class access 762*5c90c05cSAndroid Build Coastguard Worker - match: ({{identifier}})\s*(::) 763*5c90c05cSAndroid Build Coastguard Worker captures: 764*5c90c05cSAndroid Build Coastguard Worker 1: variable.other.base-class.c++ 765*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.accessor.double-colon.c++ 766*5c90c05cSAndroid Build Coastguard Worker set: members-after-accessor-junction # reset 767*5c90c05cSAndroid Build Coastguard Worker # Just a regular member variable 768*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 769*5c90c05cSAndroid Build Coastguard Worker scope: variable.other.readwrite.member.c++ 770*5c90c05cSAndroid Build Coastguard Worker pop: true 771*5c90c05cSAndroid Build Coastguard Worker 772*5c90c05cSAndroid Build Coastguard Worker members-dot: 773*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#access-illegal 774*5c90c05cSAndroid Build Coastguard Worker # No lookahead required because members-dot goes after operators in the 775*5c90c05cSAndroid Build Coastguard Worker # early-expressions-after-generic-type context. This means triple dots 776*5c90c05cSAndroid Build Coastguard Worker # (i.e. "..." or "variadic") is attempted first. 777*5c90c05cSAndroid Build Coastguard Worker - match: \. 778*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.accessor.dot.c++ 779*5c90c05cSAndroid Build Coastguard Worker push: members-after-accessor-junction 780*5c90c05cSAndroid Build Coastguard Worker 781*5c90c05cSAndroid Build Coastguard Worker members-arrow: 782*5c90c05cSAndroid Build Coastguard Worker # This needs to be before operators in the 783*5c90c05cSAndroid Build Coastguard Worker # early-expressions-after-generic-type context because otherwise the "->" 784*5c90c05cSAndroid Build Coastguard Worker # from the C language will match. 785*5c90c05cSAndroid Build Coastguard Worker - match: -> 786*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.accessor.arrow.c++ 787*5c90c05cSAndroid Build Coastguard Worker push: members-after-accessor-junction 788*5c90c05cSAndroid Build Coastguard Worker 789*5c90c05cSAndroid Build Coastguard Worker typedef: 790*5c90c05cSAndroid Build Coastguard Worker - match: \btypedef\b 791*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 792*5c90c05cSAndroid Build Coastguard Worker push: 793*5c90c05cSAndroid Build Coastguard Worker - match: ({{identifier}})?\s*(?=;) 794*5c90c05cSAndroid Build Coastguard Worker captures: 795*5c90c05cSAndroid Build Coastguard Worker 1: entity.name.type.typedef.c++ 796*5c90c05cSAndroid Build Coastguard Worker pop: true 797*5c90c05cSAndroid Build Coastguard Worker - match: \b(struct)\s+({{identifier}})\b 798*5c90c05cSAndroid Build Coastguard Worker captures: 799*5c90c05cSAndroid Build Coastguard Worker 1: storage.type.c++ 800*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type 801*5c90c05cSAndroid Build Coastguard Worker 802*5c90c05cSAndroid Build Coastguard Worker parens: 803*5c90c05cSAndroid Build Coastguard Worker - match: \( 804*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.begin.c++ 805*5c90c05cSAndroid Build Coastguard Worker push: 806*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.group.c++ 807*5c90c05cSAndroid Build Coastguard Worker - match: \) 808*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.end.c++ 809*5c90c05cSAndroid Build Coastguard Worker pop: true 810*5c90c05cSAndroid Build Coastguard Worker - include: expressions 811*5c90c05cSAndroid Build Coastguard Worker 812*5c90c05cSAndroid Build Coastguard Worker brackets: 813*5c90c05cSAndroid Build Coastguard Worker - match: \[ 814*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.brackets.begin.c++ 815*5c90c05cSAndroid Build Coastguard Worker push: 816*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.brackets.c++ 817*5c90c05cSAndroid Build Coastguard Worker - match: \] 818*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.brackets.end.c++ 819*5c90c05cSAndroid Build Coastguard Worker pop: true 820*5c90c05cSAndroid Build Coastguard Worker - include: expressions 821*5c90c05cSAndroid Build Coastguard Worker 822*5c90c05cSAndroid Build Coastguard Worker function-trailing-return-type: 823*5c90c05cSAndroid Build Coastguard Worker - match: '{{non_angle_brackets}}' 824*5c90c05cSAndroid Build Coastguard Worker pop: true 825*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 826*5c90c05cSAndroid Build Coastguard Worker - include: types 827*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 828*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 829*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 830*5c90c05cSAndroid Build Coastguard Worker - match: \*|& 831*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.c++ 832*5c90c05cSAndroid Build Coastguard Worker - include: function-trailing-return-type-parens 833*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 834*5c90c05cSAndroid Build Coastguard Worker pop: true 835*5c90c05cSAndroid Build Coastguard Worker 836*5c90c05cSAndroid Build Coastguard Worker function-trailing-return-type-parens: 837*5c90c05cSAndroid Build Coastguard Worker - match: \( 838*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.begin.c++ 839*5c90c05cSAndroid Build Coastguard Worker push: 840*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.group.c++ 841*5c90c05cSAndroid Build Coastguard Worker - match: \) 842*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.end.c++ 843*5c90c05cSAndroid Build Coastguard Worker pop: true 844*5c90c05cSAndroid Build Coastguard Worker - include: function-trailing-return-type 845*5c90c05cSAndroid Build Coastguard Worker 846*5c90c05cSAndroid Build Coastguard Worker ## Detection of function and data structure definitions at the global level 847*5c90c05cSAndroid Build Coastguard Worker 848*5c90c05cSAndroid Build Coastguard Worker global-modifier: 849*5c90c05cSAndroid Build Coastguard Worker - include: comments 850*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 851*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 852*5c90c05cSAndroid Build Coastguard Worker # Constructors and destructors don't have a type 853*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*::\s*{{identifier}}\s*(\(|$))' 854*5c90c05cSAndroid Build Coastguard Worker set: 855*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ entity.name.function.constructor.c++ 856*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 857*5c90c05cSAndroid Build Coastguard Worker - match: '(?=[^\w\s])' 858*5c90c05cSAndroid Build Coastguard Worker set: function-definition-params 859*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*::\s*~{{identifier}}\s*(\(|$))' 860*5c90c05cSAndroid Build Coastguard Worker set: 861*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ entity.name.function.destructor.c++ 862*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 863*5c90c05cSAndroid Build Coastguard Worker - match: '~{{identifier}}' 864*5c90c05cSAndroid Build Coastguard Worker - match: '(?=[^\w\s])' 865*5c90c05cSAndroid Build Coastguard Worker set: function-definition-params 866*5c90c05cSAndroid Build Coastguard Worker # If we see a path ending in :: before a newline, we don't know if it is 867*5c90c05cSAndroid Build Coastguard Worker # a constructor or destructor, or a long return type, so we are just going 868*5c90c05cSAndroid Build Coastguard Worker # to treat it like a regular function. Most likely it is a constructor, 869*5c90c05cSAndroid Build Coastguard Worker # since it doesn't seem most developers would create such a long typename. 870*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*::\s*$)' 871*5c90c05cSAndroid Build Coastguard Worker set: 872*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ entity.name.function.c++ 873*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 874*5c90c05cSAndroid Build Coastguard Worker - match: '~{{identifier}}' 875*5c90c05cSAndroid Build Coastguard Worker - match: '(?=[^\w\s])' 876*5c90c05cSAndroid Build Coastguard Worker set: function-definition-params 877*5c90c05cSAndroid Build Coastguard Worker - include: unique-strings 878*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 879*5c90c05cSAndroid Build Coastguard Worker set: global-type 880*5c90c05cSAndroid Build Coastguard Worker 881*5c90c05cSAndroid Build Coastguard Worker global-type: 882*5c90c05cSAndroid Build Coastguard Worker - include: comments 883*5c90c05cSAndroid Build Coastguard Worker - match: \*|& 884*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.c++ 885*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{control_keywords}}|{{operator_keywords}}|{{casts}}|{{memory_operators}}|{{other_keywords}}|operator)\b)' 886*5c90c05cSAndroid Build Coastguard Worker pop: true 887*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\s)' 888*5c90c05cSAndroid Build Coastguard Worker set: global-maybe-function 889*5c90c05cSAndroid Build Coastguard Worker # If a class/struct/enum followed by a name that is not a macro or declspec 890*5c90c05cSAndroid Build Coastguard Worker # then this is likely a return type of a function. This is uncommon. 891*5c90c05cSAndroid Build Coastguard Worker - match: |- 892*5c90c05cSAndroid Build Coastguard Worker (?x: 893*5c90c05cSAndroid Build Coastguard Worker ({{before_tag}}) 894*5c90c05cSAndroid Build Coastguard Worker \s+ 895*5c90c05cSAndroid Build Coastguard Worker (?= 896*5c90c05cSAndroid Build Coastguard Worker (?![[:upper:][:digit:]_]+\b|__declspec|{{before_tag}}) 897*5c90c05cSAndroid Build Coastguard Worker {{path_lookahead}} 898*5c90c05cSAndroid Build Coastguard Worker (\s+{{identifier}}\s*\(|\s*[*&]) 899*5c90c05cSAndroid Build Coastguard Worker ) 900*5c90c05cSAndroid Build Coastguard Worker ) 901*5c90c05cSAndroid Build Coastguard Worker captures: 902*5c90c05cSAndroid Build Coastguard Worker 1: storage.type.c++ 903*5c90c05cSAndroid Build Coastguard Worker set: 904*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 905*5c90c05cSAndroid Build Coastguard Worker - match: '' 906*5c90c05cSAndroid Build Coastguard Worker set: global-maybe-function 907*5c90c05cSAndroid Build Coastguard Worker # The previous match handles return types of struct/enum/etc from a func, 908*5c90c05cSAndroid Build Coastguard Worker # there this one exits the context to allow matching an actual struct/class 909*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{before_tag}})\b)' 910*5c90c05cSAndroid Build Coastguard Worker set: data-structures 911*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{casts}})\b\s*<)' 912*5c90c05cSAndroid Build Coastguard Worker pop: true 913*5c90c05cSAndroid Build Coastguard Worker - match: '{{non_angle_brackets}}' 914*5c90c05cSAndroid Build Coastguard Worker pop: true 915*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 916*5c90c05cSAndroid Build Coastguard Worker - include: types 917*5c90c05cSAndroid Build Coastguard Worker # Allow a macro call 918*5c90c05cSAndroid Build Coastguard Worker - match: '({{identifier}})\s*(\()(?=[^\)]+\))' 919*5c90c05cSAndroid Build Coastguard Worker captures: 920*5c90c05cSAndroid Build Coastguard Worker 1: variable.function.c++ 921*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 922*5c90c05cSAndroid Build Coastguard Worker push: 923*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.function-call.c++ 924*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 925*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 926*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 927*5c90c05cSAndroid Build Coastguard Worker pop: true 928*5c90c05cSAndroid Build Coastguard Worker - include: expressions 929*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*\()' 930*5c90c05cSAndroid Build Coastguard Worker set: 931*5c90c05cSAndroid Build Coastguard Worker - include: function-call 932*5c90c05cSAndroid Build Coastguard Worker - match: '' 933*5c90c05cSAndroid Build Coastguard Worker pop: true 934*5c90c05cSAndroid Build Coastguard Worker - include: variables 935*5c90c05cSAndroid Build Coastguard Worker - include: constants 936*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 937*5c90c05cSAndroid Build Coastguard Worker - match: (?=\W) 938*5c90c05cSAndroid Build Coastguard Worker pop: true 939*5c90c05cSAndroid Build Coastguard Worker 940*5c90c05cSAndroid Build Coastguard Worker global-maybe-function: 941*5c90c05cSAndroid Build Coastguard Worker - include: comments 942*5c90c05cSAndroid Build Coastguard Worker # Consume pointer info, macros and any type info that was offset by macros 943*5c90c05cSAndroid Build Coastguard Worker - match: \*|& 944*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.c++ 945*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{control_keywords}}|{{operator_keywords}}|{{casts}}|{{memory_operators}}|{{other_keywords}})\b)' 946*5c90c05cSAndroid Build Coastguard Worker pop: true 947*5c90c05cSAndroid Build Coastguard Worker - match: '\b({{type_qualifier}})\b' 948*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 949*5c90c05cSAndroid Build Coastguard Worker - match: '{{non_angle_brackets}}' 950*5c90c05cSAndroid Build Coastguard Worker pop: true 951*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 952*5c90c05cSAndroid Build Coastguard Worker - include: types 953*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 954*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 955*5c90c05cSAndroid Build Coastguard Worker # All uppercase identifier just before a newline is most likely a macro 956*5c90c05cSAndroid Build Coastguard Worker - match: '[[:upper:][:digit:]_]+\s*$' 957*5c90c05cSAndroid Build Coastguard Worker # Operator overloading 958*5c90c05cSAndroid Build Coastguard Worker - match: '(?=({{path_lookahead}}\s*(?:{{generic_lookahead}})?::\s*)?{{operator_method_name}}\s*(\(|$))' 959*5c90c05cSAndroid Build Coastguard Worker set: 960*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ entity.name.function.c++ 961*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 962*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\s*(\(|$))' 963*5c90c05cSAndroid Build Coastguard Worker set: function-definition-params 964*5c90c05cSAndroid Build Coastguard Worker # Identifier that is not the function name - likely a macro or type 965*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}([ \t]+|[*&])(?!\s*(<|::|\(|$)))' 966*5c90c05cSAndroid Build Coastguard Worker push: 967*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 968*5c90c05cSAndroid Build Coastguard Worker - match: '' 969*5c90c05cSAndroid Build Coastguard Worker pop: true 970*5c90c05cSAndroid Build Coastguard Worker # Real function definition 971*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}({{generic_lookahead}}({{path_lookahead}})?)\s*(\(|$))' 972*5c90c05cSAndroid Build Coastguard Worker set: [function-definition-params, global-function-identifier-generic] 973*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*(\(|$))' 974*5c90c05cSAndroid Build Coastguard Worker set: [function-definition-params, global-function-identifier] 975*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*::\s*$)' 976*5c90c05cSAndroid Build Coastguard Worker set: [function-definition-params, global-function-identifier] 977*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 978*5c90c05cSAndroid Build Coastguard Worker pop: true 979*5c90c05cSAndroid Build Coastguard Worker 980*5c90c05cSAndroid Build Coastguard Worker global-function-identifier-generic: 981*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 982*5c90c05cSAndroid Build Coastguard Worker - match: '::' 983*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.accessor.c++ 984*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{identifier}}<.*>\s*\()' 985*5c90c05cSAndroid Build Coastguard Worker push: 986*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: entity.name.function.c++ 987*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 988*5c90c05cSAndroid Build Coastguard Worker - match: '(?=<)' 989*5c90c05cSAndroid Build Coastguard Worker pop: true 990*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{identifier}}\s*\()' 991*5c90c05cSAndroid Build Coastguard Worker push: 992*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: entity.name.function.c++ 993*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 994*5c90c05cSAndroid Build Coastguard Worker - match: '' 995*5c90c05cSAndroid Build Coastguard Worker pop: true 996*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\()' 997*5c90c05cSAndroid Build Coastguard Worker pop: true 998*5c90c05cSAndroid Build Coastguard Worker 999*5c90c05cSAndroid Build Coastguard Worker global-function-identifier: 1000*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: entity.name.function.c++ 1001*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 1002*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1003*5c90c05cSAndroid Build Coastguard Worker pop: true 1004*5c90c05cSAndroid Build Coastguard Worker 1005*5c90c05cSAndroid Build Coastguard Worker function-definition-params: 1006*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ 1007*5c90c05cSAndroid Build Coastguard Worker - include: comments 1008*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\()' 1009*5c90c05cSAndroid Build Coastguard Worker set: 1010*5c90c05cSAndroid Build Coastguard Worker - match: \( 1011*5c90c05cSAndroid Build Coastguard Worker scope: meta.function.parameters.c++ meta.group.c++ punctuation.section.group.begin.c++ 1012*5c90c05cSAndroid Build Coastguard Worker set: 1013*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.parameters.c++ meta.group.c++ 1014*5c90c05cSAndroid Build Coastguard Worker - match : \) 1015*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.end.c++ 1016*5c90c05cSAndroid Build Coastguard Worker set: function-definition-continue 1017*5c90c05cSAndroid Build Coastguard Worker - match: '\bvoid\b' 1018*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1019*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}(?=\s*(\[|,|\)|=))' 1020*5c90c05cSAndroid Build Coastguard Worker scope: variable.parameter.c++ 1021*5c90c05cSAndroid Build Coastguard Worker - match: '=' 1022*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.assignment.c++ 1023*5c90c05cSAndroid Build Coastguard Worker push: 1024*5c90c05cSAndroid Build Coastguard Worker - match: '(?=,|\))' 1025*5c90c05cSAndroid Build Coastguard Worker pop: true 1026*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type 1027*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1028*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type 1029*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1030*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) 1031*5c90c05cSAndroid Build Coastguard Worker pop: true 1032*5c90c05cSAndroid Build Coastguard Worker 1033*5c90c05cSAndroid Build Coastguard Worker function-definition-continue: 1034*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ 1035*5c90c05cSAndroid Build Coastguard Worker - include: comments 1036*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1037*5c90c05cSAndroid Build Coastguard Worker pop: true 1038*5c90c05cSAndroid Build Coastguard Worker - match: '->' 1039*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 1040*5c90c05cSAndroid Build Coastguard Worker set: function-definition-trailing-return 1041*5c90c05cSAndroid Build Coastguard Worker - include: function-specifiers 1042*5c90c05cSAndroid Build Coastguard Worker - match: '=' 1043*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.assignment.c++ 1044*5c90c05cSAndroid Build Coastguard Worker - match: '&' 1045*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.c++ 1046*5c90c05cSAndroid Build Coastguard Worker - match: \b0\b 1047*5c90c05cSAndroid Build Coastguard Worker scope: constant.numeric.c++ 1048*5c90c05cSAndroid Build Coastguard Worker - match: \b(default|delete)\b 1049*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 1050*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\{)' 1051*5c90c05cSAndroid Build Coastguard Worker set: function-definition-body 1052*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1053*5c90c05cSAndroid Build Coastguard Worker pop: true 1054*5c90c05cSAndroid Build Coastguard Worker 1055*5c90c05cSAndroid Build Coastguard Worker function-definition-trailing-return: 1056*5c90c05cSAndroid Build Coastguard Worker - include: comments 1057*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1058*5c90c05cSAndroid Build Coastguard Worker pop: true 1059*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\{)' 1060*5c90c05cSAndroid Build Coastguard Worker set: function-definition-body 1061*5c90c05cSAndroid Build Coastguard Worker - include: function-specifiers 1062*5c90c05cSAndroid Build Coastguard Worker - include: function-trailing-return-type 1063*5c90c05cSAndroid Build Coastguard Worker 1064*5c90c05cSAndroid Build Coastguard Worker function-definition-body: 1065*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ meta.block.c++ 1066*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1067*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 1068*5c90c05cSAndroid Build Coastguard Worker set: 1069*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function.c++ meta.block.c++ 1070*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1071*5c90c05cSAndroid Build Coastguard Worker scope: meta.function.c++ meta.block.c++ punctuation.section.block.end.c++ 1072*5c90c05cSAndroid Build Coastguard Worker pop: true 1073*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else|endif)\b) 1074*5c90c05cSAndroid Build Coastguard Worker pop: true 1075*5c90c05cSAndroid Build Coastguard Worker - match: '(?=({{before_tag}})([^(;]+$|.*\{))' 1076*5c90c05cSAndroid Build Coastguard Worker push: data-structures 1077*5c90c05cSAndroid Build Coastguard Worker - include: statements 1078*5c90c05cSAndroid Build Coastguard Worker 1079*5c90c05cSAndroid Build Coastguard Worker ## Data structures including classes, structs, unions and enums 1080*5c90c05cSAndroid Build Coastguard Worker 1081*5c90c05cSAndroid Build Coastguard Worker data-structures: 1082*5c90c05cSAndroid Build Coastguard Worker - match: '\bclass\b' 1083*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1084*5c90c05cSAndroid Build Coastguard Worker set: data-structures-class-definition 1085*5c90c05cSAndroid Build Coastguard Worker # Detect variable type definitions using struct/enum/union followed by a tag 1086*5c90c05cSAndroid Build Coastguard Worker - match: '\b({{before_tag}})(?=\s+{{path_lookahead}}\s+{{path_lookahead}}\s*[=;\[])' 1087*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1088*5c90c05cSAndroid Build Coastguard Worker - match: '\bstruct\b' 1089*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1090*5c90c05cSAndroid Build Coastguard Worker set: data-structures-struct-definition 1091*5c90c05cSAndroid Build Coastguard Worker - match: '\benum(\s+(class|struct))?\b' 1092*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1093*5c90c05cSAndroid Build Coastguard Worker set: data-structures-enum-definition 1094*5c90c05cSAndroid Build Coastguard Worker - match: '\bunion\b' 1095*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1096*5c90c05cSAndroid Build Coastguard Worker set: data-structures-union-definition 1097*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1098*5c90c05cSAndroid Build Coastguard Worker pop: true 1099*5c90c05cSAndroid Build Coastguard Worker 1100*5c90c05cSAndroid Build Coastguard Worker preprocessor-workaround-eat-macro-before-identifier: 1101*5c90c05cSAndroid Build Coastguard Worker # Handle macros so they aren't matched as the class name 1102*5c90c05cSAndroid Build Coastguard Worker - match: ({{macro_identifier}})(?=\s+~?{{identifier}}) 1103*5c90c05cSAndroid Build Coastguard Worker captures: 1104*5c90c05cSAndroid Build Coastguard Worker 1: meta.assumed-macro.c 1105*5c90c05cSAndroid Build Coastguard Worker 1106*5c90c05cSAndroid Build Coastguard Worker data-structures-class-definition: 1107*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.class.c++ 1108*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1109*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}(?={{data_structures_forward_decl_lookahead}})' 1110*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.class.forward-decl.c++ 1111*5c90c05cSAndroid Build Coastguard Worker set: data-structures-class-definition-after-identifier 1112*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1113*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.class.c++ 1114*5c90c05cSAndroid Build Coastguard Worker set: data-structures-class-definition-after-identifier 1115*5c90c05cSAndroid Build Coastguard Worker - match: '(?=[:{])' 1116*5c90c05cSAndroid Build Coastguard Worker set: data-structures-class-definition-after-identifier 1117*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1118*5c90c05cSAndroid Build Coastguard Worker pop: true 1119*5c90c05cSAndroid Build Coastguard Worker 1120*5c90c05cSAndroid Build Coastguard Worker data-structures-class-definition-after-identifier: 1121*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.class.c++ 1122*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1123*5c90c05cSAndroid Build Coastguard Worker # No matching of identifiers since they should all be macros at this point 1124*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-end 1125*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1126*5c90c05cSAndroid Build Coastguard Worker scope: meta.block.c++ punctuation.section.block.begin.c++ 1127*5c90c05cSAndroid Build Coastguard Worker set: 1128*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.class.c++ meta.block.c++ 1129*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1130*5c90c05cSAndroid Build Coastguard Worker scope: meta.class.c++ meta.block.c++ punctuation.section.block.end.c++ 1131*5c90c05cSAndroid Build Coastguard Worker pop: true 1132*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-body 1133*5c90c05cSAndroid Build Coastguard Worker 1134*5c90c05cSAndroid Build Coastguard Worker data-structures-struct-definition: 1135*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.struct.c++ 1136*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1137*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}(?={{data_structures_forward_decl_lookahead}})' 1138*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.struct.forward-decl.c++ 1139*5c90c05cSAndroid Build Coastguard Worker set: data-structures-struct-definition-after-identifier 1140*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1141*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.struct.c++ 1142*5c90c05cSAndroid Build Coastguard Worker set: data-structures-struct-definition-after-identifier 1143*5c90c05cSAndroid Build Coastguard Worker - match: '(?=[:{])' 1144*5c90c05cSAndroid Build Coastguard Worker set: data-structures-struct-definition-after-identifier 1145*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1146*5c90c05cSAndroid Build Coastguard Worker pop: true 1147*5c90c05cSAndroid Build Coastguard Worker 1148*5c90c05cSAndroid Build Coastguard Worker data-structures-struct-definition-after-identifier: 1149*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.struct.c++ 1150*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1151*5c90c05cSAndroid Build Coastguard Worker # No matching of identifiers since they should all be macros at this point 1152*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-end 1153*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1154*5c90c05cSAndroid Build Coastguard Worker scope: meta.block.c++ punctuation.section.block.begin.c++ 1155*5c90c05cSAndroid Build Coastguard Worker set: 1156*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.struct.c++ meta.block.c++ 1157*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1158*5c90c05cSAndroid Build Coastguard Worker scope: meta.struct.c++ meta.block.c++ punctuation.section.block.end.c++ 1159*5c90c05cSAndroid Build Coastguard Worker pop: true 1160*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-body 1161*5c90c05cSAndroid Build Coastguard Worker 1162*5c90c05cSAndroid Build Coastguard Worker data-structures-enum-definition: 1163*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.enum.c++ 1164*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1165*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}(?={{data_structures_forward_decl_lookahead}})' 1166*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.enum.forward-decl.c++ 1167*5c90c05cSAndroid Build Coastguard Worker set: data-structures-enum-definition-after-identifier 1168*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1169*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.enum.c++ 1170*5c90c05cSAndroid Build Coastguard Worker set: data-structures-enum-definition-after-identifier 1171*5c90c05cSAndroid Build Coastguard Worker - match: '(?=[:{])' 1172*5c90c05cSAndroid Build Coastguard Worker set: data-structures-enum-definition-after-identifier 1173*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1174*5c90c05cSAndroid Build Coastguard Worker pop: true 1175*5c90c05cSAndroid Build Coastguard Worker 1176*5c90c05cSAndroid Build Coastguard Worker data-structures-enum-definition-after-identifier: 1177*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.enum.c++ 1178*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1179*5c90c05cSAndroid Build Coastguard Worker # No matching of identifiers since they should all be macros at this point 1180*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-end 1181*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1182*5c90c05cSAndroid Build Coastguard Worker scope: meta.block.c++ punctuation.section.block.begin.c++ 1183*5c90c05cSAndroid Build Coastguard Worker set: 1184*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.enum.c++ meta.block.c++ 1185*5c90c05cSAndroid Build Coastguard Worker # Enums don't support methods so we have a simplified body 1186*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1187*5c90c05cSAndroid Build Coastguard Worker scope: meta.enum.c++ meta.block.c++ punctuation.section.block.end.c++ 1188*5c90c05cSAndroid Build Coastguard Worker pop: true 1189*5c90c05cSAndroid Build Coastguard Worker - include: statements 1190*5c90c05cSAndroid Build Coastguard Worker 1191*5c90c05cSAndroid Build Coastguard Worker data-structures-union-definition: 1192*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.union.c++ 1193*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1194*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}(?={{data_structures_forward_decl_lookahead}})' 1195*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.union.forward-decl.c++ 1196*5c90c05cSAndroid Build Coastguard Worker set: data-structures-union-definition-after-identifier 1197*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1198*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.union.c++ 1199*5c90c05cSAndroid Build Coastguard Worker set: data-structures-union-definition-after-identifier 1200*5c90c05cSAndroid Build Coastguard Worker - match: '(?=[{])' 1201*5c90c05cSAndroid Build Coastguard Worker set: data-structures-union-definition-after-identifier 1202*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1203*5c90c05cSAndroid Build Coastguard Worker pop: true 1204*5c90c05cSAndroid Build Coastguard Worker 1205*5c90c05cSAndroid Build Coastguard Worker data-structures-union-definition-after-identifier: 1206*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.union.c++ 1207*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-definition-common-begin 1208*5c90c05cSAndroid Build Coastguard Worker # No matching of identifiers since they should all be macros at this point 1209*5c90c05cSAndroid Build Coastguard Worker # Unions don't support base classes 1210*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 1211*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1212*5c90c05cSAndroid Build Coastguard Worker scope: meta.block.c++ punctuation.section.block.begin.c++ 1213*5c90c05cSAndroid Build Coastguard Worker set: 1214*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.union.c++ meta.block.c++ 1215*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1216*5c90c05cSAndroid Build Coastguard Worker scope: meta.union.c++ meta.block.c++ punctuation.section.block.end.c++ 1217*5c90c05cSAndroid Build Coastguard Worker pop: true 1218*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-body 1219*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1220*5c90c05cSAndroid Build Coastguard Worker pop: true 1221*5c90c05cSAndroid Build Coastguard Worker 1222*5c90c05cSAndroid Build Coastguard Worker data-structures-definition-common-begin: 1223*5c90c05cSAndroid Build Coastguard Worker - include: comments 1224*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b(?:{{before_tag}}|{{control_keywords}})\b)' 1225*5c90c05cSAndroid Build Coastguard Worker pop: true 1226*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-other 1227*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 1228*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 1229*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-workaround-eat-macro-before-identifier 1230*5c90c05cSAndroid Build Coastguard Worker 1231*5c90c05cSAndroid Build Coastguard Worker data-structures-definition-common-end: 1232*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 1233*5c90c05cSAndroid Build Coastguard Worker - match: \bfinal\b 1234*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 1235*5c90c05cSAndroid Build Coastguard Worker - match: ':' 1236*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 1237*5c90c05cSAndroid Build Coastguard Worker push: 1238*5c90c05cSAndroid Build Coastguard Worker - include: comments 1239*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-other 1240*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 1241*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 1242*5c90c05cSAndroid Build Coastguard Worker - match: '\b(virtual|{{visibility_modifiers}})\b' 1243*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 1244*5c90c05cSAndroid Build Coastguard Worker - match: (?={{path_lookahead}}) 1245*5c90c05cSAndroid Build Coastguard Worker push: 1246*5c90c05cSAndroid Build Coastguard Worker - meta_scope: entity.other.inherited-class.c++ 1247*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 1248*5c90c05cSAndroid Build Coastguard Worker - match: '' 1249*5c90c05cSAndroid Build Coastguard Worker pop: true 1250*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 1251*5c90c05cSAndroid Build Coastguard Worker - match: ',' 1252*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 1253*5c90c05cSAndroid Build Coastguard Worker - match: (?=\{|;) 1254*5c90c05cSAndroid Build Coastguard Worker pop: true 1255*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1256*5c90c05cSAndroid Build Coastguard Worker pop: true 1257*5c90c05cSAndroid Build Coastguard Worker 1258*5c90c05cSAndroid Build Coastguard Worker data-structures-body: 1259*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-data-structures 1260*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\btemplate\b)' 1261*5c90c05cSAndroid Build Coastguard Worker push: 1262*5c90c05cSAndroid Build Coastguard Worker - include: template 1263*5c90c05cSAndroid Build Coastguard Worker - match: (?=\S) 1264*5c90c05cSAndroid Build Coastguard Worker set: data-structures-modifier 1265*5c90c05cSAndroid Build Coastguard Worker - include: typedef 1266*5c90c05cSAndroid Build Coastguard Worker - match: \b({{visibility_modifiers}})\s*(:)(?!:) 1267*5c90c05cSAndroid Build Coastguard Worker captures: 1268*5c90c05cSAndroid Build Coastguard Worker 1: storage.modifier.c++ 1269*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.section.class.c++ 1270*5c90c05cSAndroid Build Coastguard Worker - match: '^\s*(?=(?:~?\w+|::))' 1271*5c90c05cSAndroid Build Coastguard Worker push: data-structures-modifier 1272*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type 1273*5c90c05cSAndroid Build Coastguard Worker 1274*5c90c05cSAndroid Build Coastguard Worker data-structures-modifier: 1275*5c90c05cSAndroid Build Coastguard Worker - match: '\bfriend\b' 1276*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 1277*5c90c05cSAndroid Build Coastguard Worker push: 1278*5c90c05cSAndroid Build Coastguard Worker - match: (?=;) 1279*5c90c05cSAndroid Build Coastguard Worker pop: true 1280*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1281*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 1282*5c90c05cSAndroid Build Coastguard Worker set: 1283*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.block.c++ 1284*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1285*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1286*5c90c05cSAndroid Build Coastguard Worker pop: true 1287*5c90c05cSAndroid Build Coastguard Worker - include: statements 1288*5c90c05cSAndroid Build Coastguard Worker - match: '\b({{before_tag}})\b' 1289*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1290*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-function-call 1291*5c90c05cSAndroid Build Coastguard Worker - include: comments 1292*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 1293*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 1294*5c90c05cSAndroid Build Coastguard Worker - match: '\bstatic_assert(?=\s*\()' 1295*5c90c05cSAndroid Build Coastguard Worker scope: meta.static-assert.c++ keyword.operator.word.c++ 1296*5c90c05cSAndroid Build Coastguard Worker push: 1297*5c90c05cSAndroid Build Coastguard Worker - match: '\(' 1298*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.begin.c++ 1299*5c90c05cSAndroid Build Coastguard Worker set: 1300*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function-call.c++ meta.group.c++ 1301*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 1302*5c90c05cSAndroid Build Coastguard Worker scope: meta.function-call.c++ meta.group.c++ punctuation.section.group.end.c++ 1303*5c90c05cSAndroid Build Coastguard Worker pop: true 1304*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1305*5c90c05cSAndroid Build Coastguard Worker # Destructor 1306*5c90c05cSAndroid Build Coastguard Worker - match: '(?:{{identifier}}\s*(::)\s*)?~{{identifier}}(?=\s*(\(|$))' 1307*5c90c05cSAndroid Build Coastguard Worker scope: meta.method.destructor.c++ entity.name.function.destructor.c++ 1308*5c90c05cSAndroid Build Coastguard Worker captures: 1309*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.c++ 1310*5c90c05cSAndroid Build Coastguard Worker set: method-definition-params 1311*5c90c05cSAndroid Build Coastguard Worker # It's a macro, not a constructor if there is no type in the first param 1312*5c90c05cSAndroid Build Coastguard Worker - match: '({{identifier}})\s*(\()(?=\s*(?!void){{identifier}}\s*[),])' 1313*5c90c05cSAndroid Build Coastguard Worker captures: 1314*5c90c05cSAndroid Build Coastguard Worker 1: variable.function.c++ 1315*5c90c05cSAndroid Build Coastguard Worker 2: meta.group.c++ punctuation.section.group.begin.c++ 1316*5c90c05cSAndroid Build Coastguard Worker push: 1317*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.function-call.c++ 1318*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 1319*5c90c05cSAndroid Build Coastguard Worker - match: '\)' 1320*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 1321*5c90c05cSAndroid Build Coastguard Worker pop: true 1322*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1323*5c90c05cSAndroid Build Coastguard Worker # Constructor 1324*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-workaround-eat-macro-before-identifier 1325*5c90c05cSAndroid Build Coastguard Worker - match: '((?!{{before_tag}}|template){{identifier}})(?=\s*\()' 1326*5c90c05cSAndroid Build Coastguard Worker scope: meta.method.constructor.c++ entity.name.function.constructor.c++ 1327*5c90c05cSAndroid Build Coastguard Worker set: method-definition-params 1328*5c90c05cSAndroid Build Coastguard Worker # Long form constructor 1329*5c90c05cSAndroid Build Coastguard Worker - match: '({{identifier}}\s*(::)\s*{{identifier}})(?=\s*\()' 1330*5c90c05cSAndroid Build Coastguard Worker captures: 1331*5c90c05cSAndroid Build Coastguard Worker 1: meta.method.constructor.c++ entity.name.function.constructor.c++ 1332*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.accessor.c++ 1333*5c90c05cSAndroid Build Coastguard Worker push: method-definition-params 1334*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1335*5c90c05cSAndroid Build Coastguard Worker set: data-structures-type 1336*5c90c05cSAndroid Build Coastguard Worker 1337*5c90c05cSAndroid Build Coastguard Worker data-structures-type: 1338*5c90c05cSAndroid Build Coastguard Worker - include: comments 1339*5c90c05cSAndroid Build Coastguard Worker - match: \*|& 1340*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.c++ 1341*5c90c05cSAndroid Build Coastguard Worker # Cast methods 1342*5c90c05cSAndroid Build Coastguard Worker - match: '(operator)\s+({{identifier}})(?=\s*(\(|$))' 1343*5c90c05cSAndroid Build Coastguard Worker captures: 1344*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.c++ 1345*5c90c05cSAndroid Build Coastguard Worker 2: meta.method.c++ entity.name.function.c++ 1346*5c90c05cSAndroid Build Coastguard Worker set: method-definition-params 1347*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{control_keywords}}|{{operator_keywords}}|{{casts}}|{{memory_operators}}|{{other_keywords}}|operator)\b)' 1348*5c90c05cSAndroid Build Coastguard Worker pop: true 1349*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\s)' 1350*5c90c05cSAndroid Build Coastguard Worker set: data-structures-maybe-method 1351*5c90c05cSAndroid Build Coastguard Worker # If a class/struct/enum followed by a name that is not a macro or declspec 1352*5c90c05cSAndroid Build Coastguard Worker # then this is likely a return type of a function. This is uncommon. 1353*5c90c05cSAndroid Build Coastguard Worker - match: |- 1354*5c90c05cSAndroid Build Coastguard Worker (?x: 1355*5c90c05cSAndroid Build Coastguard Worker ({{before_tag}}) 1356*5c90c05cSAndroid Build Coastguard Worker \s+ 1357*5c90c05cSAndroid Build Coastguard Worker (?= 1358*5c90c05cSAndroid Build Coastguard Worker (?![[:upper:][:digit:]_]+\b|__declspec|{{before_tag}}) 1359*5c90c05cSAndroid Build Coastguard Worker {{path_lookahead}} 1360*5c90c05cSAndroid Build Coastguard Worker (\s+{{identifier}}\s*\(|\s*[*&]) 1361*5c90c05cSAndroid Build Coastguard Worker ) 1362*5c90c05cSAndroid Build Coastguard Worker ) 1363*5c90c05cSAndroid Build Coastguard Worker captures: 1364*5c90c05cSAndroid Build Coastguard Worker 1: storage.type.c++ 1365*5c90c05cSAndroid Build Coastguard Worker set: 1366*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 1367*5c90c05cSAndroid Build Coastguard Worker - match: '' 1368*5c90c05cSAndroid Build Coastguard Worker set: data-structures-maybe-method 1369*5c90c05cSAndroid Build Coastguard Worker # The previous match handles return types of struct/enum/etc from a func, 1370*5c90c05cSAndroid Build Coastguard Worker # there this one exits the context to allow matching an actual struct/class 1371*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{before_tag}})\b)' 1372*5c90c05cSAndroid Build Coastguard Worker set: data-structures 1373*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{casts}})\b\s*<)' 1374*5c90c05cSAndroid Build Coastguard Worker pop: true 1375*5c90c05cSAndroid Build Coastguard Worker - match: '{{non_angle_brackets}}' 1376*5c90c05cSAndroid Build Coastguard Worker pop: true 1377*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 1378*5c90c05cSAndroid Build Coastguard Worker - include: types 1379*5c90c05cSAndroid Build Coastguard Worker - include: variables 1380*5c90c05cSAndroid Build Coastguard Worker - include: constants 1381*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 1382*5c90c05cSAndroid Build Coastguard Worker - match: (?=[&*]) 1383*5c90c05cSAndroid Build Coastguard Worker set: data-structures-maybe-method 1384*5c90c05cSAndroid Build Coastguard Worker - match: (?=\W) 1385*5c90c05cSAndroid Build Coastguard Worker pop: true 1386*5c90c05cSAndroid Build Coastguard Worker 1387*5c90c05cSAndroid Build Coastguard Worker data-structures-maybe-method: 1388*5c90c05cSAndroid Build Coastguard Worker - include: comments 1389*5c90c05cSAndroid Build Coastguard Worker # Consume pointer info, macros and any type info that was offset by macros 1390*5c90c05cSAndroid Build Coastguard Worker - match: \*|& 1391*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.c++ 1392*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\b({{control_keywords}}|{{operator_keywords}}|{{casts}}|{{memory_operators}}|{{other_keywords}})\b)' 1393*5c90c05cSAndroid Build Coastguard Worker pop: true 1394*5c90c05cSAndroid Build Coastguard Worker - match: '\b({{type_qualifier}})\b' 1395*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 1396*5c90c05cSAndroid Build Coastguard Worker - match: '{{non_angle_brackets}}' 1397*5c90c05cSAndroid Build Coastguard Worker pop: true 1398*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 1399*5c90c05cSAndroid Build Coastguard Worker - include: types 1400*5c90c05cSAndroid Build Coastguard Worker - include: modifiers-parens 1401*5c90c05cSAndroid Build Coastguard Worker - include: modifiers 1402*5c90c05cSAndroid Build Coastguard Worker # Operator overloading 1403*5c90c05cSAndroid Build Coastguard Worker - match: '{{operator_method_name}}(?=\s*(\(|$))' 1404*5c90c05cSAndroid Build Coastguard Worker scope: meta.method.c++ entity.name.function.c++ 1405*5c90c05cSAndroid Build Coastguard Worker set: method-definition-params 1406*5c90c05cSAndroid Build Coastguard Worker # Identifier that is not the function name - likely a macro or type 1407*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}([ \t]+|[*&])(?!\s*(<|::|\()))' 1408*5c90c05cSAndroid Build Coastguard Worker push: 1409*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 1410*5c90c05cSAndroid Build Coastguard Worker - match: '' 1411*5c90c05cSAndroid Build Coastguard Worker pop: true 1412*5c90c05cSAndroid Build Coastguard Worker # Real function definition 1413*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}({{generic_lookahead}})\s*(\())' 1414*5c90c05cSAndroid Build Coastguard Worker set: [method-definition-params, data-structures-function-identifier-generic] 1415*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*(\())' 1416*5c90c05cSAndroid Build Coastguard Worker set: [method-definition-params, data-structures-function-identifier] 1417*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*::\s*$)' 1418*5c90c05cSAndroid Build Coastguard Worker set: [method-definition-params, data-structures-function-identifier] 1419*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1420*5c90c05cSAndroid Build Coastguard Worker pop: true 1421*5c90c05cSAndroid Build Coastguard Worker 1422*5c90c05cSAndroid Build Coastguard Worker data-structures-function-identifier-generic: 1423*5c90c05cSAndroid Build Coastguard Worker - include: angle-brackets 1424*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{identifier}})' 1425*5c90c05cSAndroid Build Coastguard Worker push: 1426*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: entity.name.function.c++ 1427*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 1428*5c90c05cSAndroid Build Coastguard Worker - match: '(?=<)' 1429*5c90c05cSAndroid Build Coastguard Worker pop: true 1430*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\()' 1431*5c90c05cSAndroid Build Coastguard Worker pop: true 1432*5c90c05cSAndroid Build Coastguard Worker 1433*5c90c05cSAndroid Build Coastguard Worker data-structures-function-identifier: 1434*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: entity.name.function.c++ 1435*5c90c05cSAndroid Build Coastguard Worker - include: identifiers 1436*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1437*5c90c05cSAndroid Build Coastguard Worker pop: true 1438*5c90c05cSAndroid Build Coastguard Worker 1439*5c90c05cSAndroid Build Coastguard Worker method-definition-params: 1440*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method.c++ 1441*5c90c05cSAndroid Build Coastguard Worker - include: comments 1442*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\()' 1443*5c90c05cSAndroid Build Coastguard Worker set: 1444*5c90c05cSAndroid Build Coastguard Worker - match: \( 1445*5c90c05cSAndroid Build Coastguard Worker scope: meta.method.parameters.c++ meta.group.c++ punctuation.section.group.begin.c++ 1446*5c90c05cSAndroid Build Coastguard Worker set: 1447*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method.parameters.c++ meta.group.c++ 1448*5c90c05cSAndroid Build Coastguard Worker - match : \) 1449*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.end.c++ 1450*5c90c05cSAndroid Build Coastguard Worker set: method-definition-continue 1451*5c90c05cSAndroid Build Coastguard Worker - match: '\bvoid\b' 1452*5c90c05cSAndroid Build Coastguard Worker scope: storage.type.c++ 1453*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}(?=\s*(\[|,|\)|=))' 1454*5c90c05cSAndroid Build Coastguard Worker scope: variable.parameter.c++ 1455*5c90c05cSAndroid Build Coastguard Worker - match: '=' 1456*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.assignment.c++ 1457*5c90c05cSAndroid Build Coastguard Worker push: 1458*5c90c05cSAndroid Build Coastguard Worker - match: '(?=,|\))' 1459*5c90c05cSAndroid Build Coastguard Worker pop: true 1460*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type 1461*5c90c05cSAndroid Build Coastguard Worker - include: expressions-minus-generic-type 1462*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1463*5c90c05cSAndroid Build Coastguard Worker pop: true 1464*5c90c05cSAndroid Build Coastguard Worker 1465*5c90c05cSAndroid Build Coastguard Worker method-definition-continue: 1466*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method.c++ 1467*5c90c05cSAndroid Build Coastguard Worker - include: comments 1468*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1469*5c90c05cSAndroid Build Coastguard Worker pop: true 1470*5c90c05cSAndroid Build Coastguard Worker - match: '->' 1471*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 1472*5c90c05cSAndroid Build Coastguard Worker set: method-definition-trailing-return 1473*5c90c05cSAndroid Build Coastguard Worker - include: function-specifiers 1474*5c90c05cSAndroid Build Coastguard Worker - match: '=' 1475*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.assignment.c++ 1476*5c90c05cSAndroid Build Coastguard Worker - match: '&' 1477*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.c++ 1478*5c90c05cSAndroid Build Coastguard Worker - match: \b0\b 1479*5c90c05cSAndroid Build Coastguard Worker scope: constant.numeric.c++ 1480*5c90c05cSAndroid Build Coastguard Worker - match: \b(default|delete)\b 1481*5c90c05cSAndroid Build Coastguard Worker scope: storage.modifier.c++ 1482*5c90c05cSAndroid Build Coastguard Worker - match: '(?=:)' 1483*5c90c05cSAndroid Build Coastguard Worker set: 1484*5c90c05cSAndroid Build Coastguard Worker - match: ':' 1485*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.initializer-list.c++ 1486*5c90c05cSAndroid Build Coastguard Worker set: 1487*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.method.constructor.initializer-list.c++ 1488*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1489*5c90c05cSAndroid Build Coastguard Worker scope: variable.other.readwrite.member.c++ 1490*5c90c05cSAndroid Build Coastguard Worker push: 1491*5c90c05cSAndroid Build Coastguard Worker - match: \( 1492*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.begin.c++ 1493*5c90c05cSAndroid Build Coastguard Worker set: 1494*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 1495*5c90c05cSAndroid Build Coastguard Worker - match: \) 1496*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 1497*5c90c05cSAndroid Build Coastguard Worker pop: true 1498*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1499*5c90c05cSAndroid Build Coastguard Worker - match: \{ 1500*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.begin.c++ 1501*5c90c05cSAndroid Build Coastguard Worker set: 1502*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.group.c++ 1503*5c90c05cSAndroid Build Coastguard Worker - match: \} 1504*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.end.c++ 1505*5c90c05cSAndroid Build Coastguard Worker pop: true 1506*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1507*5c90c05cSAndroid Build Coastguard Worker - include: comments 1508*5c90c05cSAndroid Build Coastguard Worker - match: (?=\{|;) 1509*5c90c05cSAndroid Build Coastguard Worker set: method-definition-continue 1510*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1511*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\{)' 1512*5c90c05cSAndroid Build Coastguard Worker set: method-definition-body 1513*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\S)' 1514*5c90c05cSAndroid Build Coastguard Worker pop: true 1515*5c90c05cSAndroid Build Coastguard Worker 1516*5c90c05cSAndroid Build Coastguard Worker method-definition-trailing-return: 1517*5c90c05cSAndroid Build Coastguard Worker - include: comments 1518*5c90c05cSAndroid Build Coastguard Worker - match: '(?=;)' 1519*5c90c05cSAndroid Build Coastguard Worker pop: true 1520*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\{)' 1521*5c90c05cSAndroid Build Coastguard Worker set: method-definition-body 1522*5c90c05cSAndroid Build Coastguard Worker - include: function-specifiers 1523*5c90c05cSAndroid Build Coastguard Worker - include: function-trailing-return-type 1524*5c90c05cSAndroid Build Coastguard Worker 1525*5c90c05cSAndroid Build Coastguard Worker method-definition-body: 1526*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method.c++ meta.block.c++ 1527*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1528*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 1529*5c90c05cSAndroid Build Coastguard Worker set: 1530*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.method.c++ meta.block.c++ 1531*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1532*5c90c05cSAndroid Build Coastguard Worker scope: meta.method.c++ meta.block.c++ punctuation.section.block.end.c++ 1533*5c90c05cSAndroid Build Coastguard Worker pop: true 1534*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else|endif)\b) 1535*5c90c05cSAndroid Build Coastguard Worker pop: true 1536*5c90c05cSAndroid Build Coastguard Worker - match: '(?=({{before_tag}})([^(;]+$|.*\{))' 1537*5c90c05cSAndroid Build Coastguard Worker push: data-structures 1538*5c90c05cSAndroid Build Coastguard Worker - include: statements 1539*5c90c05cSAndroid Build Coastguard Worker 1540*5c90c05cSAndroid Build Coastguard Worker ## Preprocessor for data-structures 1541*5c90c05cSAndroid Build Coastguard Worker 1542*5c90c05cSAndroid Build Coastguard Worker preprocessor-data-structures: 1543*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-enabled-data-structures 1544*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-disabled-data-structures 1545*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-practical-workarounds 1546*5c90c05cSAndroid Build Coastguard Worker 1547*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-disabled-data-structures: 1548*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*((#if)\s+(0))\b 1549*5c90c05cSAndroid Build Coastguard Worker captures: 1550*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ 1551*5c90c05cSAndroid Build Coastguard Worker 2: keyword.control.import.c++ 1552*5c90c05cSAndroid Build Coastguard Worker 3: constant.numeric.preprocessor.c++ 1553*5c90c05cSAndroid Build Coastguard Worker push: 1554*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1555*5c90c05cSAndroid Build Coastguard Worker captures: 1556*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1557*5c90c05cSAndroid Build Coastguard Worker pop: true 1558*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*else)\b 1559*5c90c05cSAndroid Build Coastguard Worker captures: 1560*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.else.c++ 1561*5c90c05cSAndroid Build Coastguard Worker push: 1562*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*endif\b) 1563*5c90c05cSAndroid Build Coastguard Worker pop: true 1564*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1565*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-body 1566*5c90c05cSAndroid Build Coastguard Worker - match: "" 1567*5c90c05cSAndroid Build Coastguard Worker push: 1568*5c90c05cSAndroid Build Coastguard Worker - meta_scope: comment.block.preprocessor.if-branch.c++ 1569*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(else|endif)\b) 1570*5c90c05cSAndroid Build Coastguard Worker pop: true 1571*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-disabled 1572*5c90c05cSAndroid Build Coastguard Worker 1573*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-enabled-data-structures: 1574*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*((#if)\s+(0*1))\b 1575*5c90c05cSAndroid Build Coastguard Worker captures: 1576*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ 1577*5c90c05cSAndroid Build Coastguard Worker 2: keyword.control.import.c++ 1578*5c90c05cSAndroid Build Coastguard Worker 3: constant.numeric.preprocessor.c++ 1579*5c90c05cSAndroid Build Coastguard Worker push: 1580*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1581*5c90c05cSAndroid Build Coastguard Worker captures: 1582*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1583*5c90c05cSAndroid Build Coastguard Worker pop: true 1584*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*else)\b 1585*5c90c05cSAndroid Build Coastguard Worker captures: 1586*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.else.c++ 1587*5c90c05cSAndroid Build Coastguard Worker push: 1588*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: comment.block.preprocessor.else-branch.c++ 1589*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*endif\b) 1590*5c90c05cSAndroid Build Coastguard Worker pop: true 1591*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-disabled 1592*5c90c05cSAndroid Build Coastguard Worker - match: "" 1593*5c90c05cSAndroid Build Coastguard Worker push: 1594*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(else|endif)\b) 1595*5c90c05cSAndroid Build Coastguard Worker pop: true 1596*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1597*5c90c05cSAndroid Build Coastguard Worker - include: data-structures-body 1598*5c90c05cSAndroid Build Coastguard Worker 1599*5c90c05cSAndroid Build Coastguard Worker ## Preprocessor for global 1600*5c90c05cSAndroid Build Coastguard Worker 1601*5c90c05cSAndroid Build Coastguard Worker preprocessor-global: 1602*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-enabled-global 1603*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-disabled-global 1604*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-other-global 1605*5c90c05cSAndroid Build Coastguard Worker 1606*5c90c05cSAndroid Build Coastguard Worker preprocessor-statements: 1607*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-enabled-statements 1608*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-disabled-statements 1609*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-rule-other-statements 1610*5c90c05cSAndroid Build Coastguard Worker 1611*5c90c05cSAndroid Build Coastguard Worker preprocessor-expressions: 1612*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#incomplete-inc 1613*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-macro-define 1614*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#pragma-mark 1615*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-other 1616*5c90c05cSAndroid Build Coastguard Worker 1617*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-disabled-global: 1618*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*((#if)\s+(0))\b 1619*5c90c05cSAndroid Build Coastguard Worker captures: 1620*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ 1621*5c90c05cSAndroid Build Coastguard Worker 2: keyword.control.import.c++ 1622*5c90c05cSAndroid Build Coastguard Worker 3: constant.numeric.preprocessor.c++ 1623*5c90c05cSAndroid Build Coastguard Worker push: 1624*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1625*5c90c05cSAndroid Build Coastguard Worker captures: 1626*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1627*5c90c05cSAndroid Build Coastguard Worker pop: true 1628*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*else)\b 1629*5c90c05cSAndroid Build Coastguard Worker captures: 1630*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.else.c++ 1631*5c90c05cSAndroid Build Coastguard Worker push: 1632*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*endif\b) 1633*5c90c05cSAndroid Build Coastguard Worker pop: true 1634*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 1635*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1636*5c90c05cSAndroid Build Coastguard Worker - include: global 1637*5c90c05cSAndroid Build Coastguard Worker - match: "" 1638*5c90c05cSAndroid Build Coastguard Worker push: 1639*5c90c05cSAndroid Build Coastguard Worker - meta_scope: comment.block.preprocessor.if-branch.c++ 1640*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(else|endif)\b) 1641*5c90c05cSAndroid Build Coastguard Worker pop: true 1642*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-disabled 1643*5c90c05cSAndroid Build Coastguard Worker 1644*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-enabled-global: 1645*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*((#if)\s+(0*1))\b 1646*5c90c05cSAndroid Build Coastguard Worker captures: 1647*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ 1648*5c90c05cSAndroid Build Coastguard Worker 2: keyword.control.import.c++ 1649*5c90c05cSAndroid Build Coastguard Worker 3: constant.numeric.preprocessor.c++ 1650*5c90c05cSAndroid Build Coastguard Worker push: 1651*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1652*5c90c05cSAndroid Build Coastguard Worker captures: 1653*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1654*5c90c05cSAndroid Build Coastguard Worker pop: true 1655*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*else)\b 1656*5c90c05cSAndroid Build Coastguard Worker captures: 1657*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.else.c++ 1658*5c90c05cSAndroid Build Coastguard Worker push: 1659*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: comment.block.preprocessor.else-branch.c++ 1660*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*endif\b) 1661*5c90c05cSAndroid Build Coastguard Worker pop: true 1662*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-disabled 1663*5c90c05cSAndroid Build Coastguard Worker - match: "" 1664*5c90c05cSAndroid Build Coastguard Worker push: 1665*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(else|endif)\b) 1666*5c90c05cSAndroid Build Coastguard Worker pop: true 1667*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 1668*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1669*5c90c05cSAndroid Build Coastguard Worker - include: global 1670*5c90c05cSAndroid Build Coastguard Worker 1671*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-other-global: 1672*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:if|ifdef|ifndef))\b 1673*5c90c05cSAndroid Build Coastguard Worker captures: 1674*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.c++ 1675*5c90c05cSAndroid Build Coastguard Worker push: 1676*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.preprocessor.c++ 1677*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1678*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 1679*5c90c05cSAndroid Build Coastguard Worker - match: \bdefined\b 1680*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 1681*5c90c05cSAndroid Build Coastguard Worker # Enter a new scope where all elif/else branches have their 1682*5c90c05cSAndroid Build Coastguard Worker # contexts popped by a subsequent elif/else/endif. This ensures that 1683*5c90c05cSAndroid Build Coastguard Worker # preprocessor branches don't push multiple meta.block scopes on 1684*5c90c05cSAndroid Build Coastguard Worker # the stack, thus messing up the "global" context's detection of 1685*5c90c05cSAndroid Build Coastguard Worker # functions. 1686*5c90c05cSAndroid Build Coastguard Worker - match: $\n 1687*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-global 1688*5c90c05cSAndroid Build Coastguard Worker 1689*5c90c05cSAndroid Build Coastguard Worker # These gymnastics here ensure that we are properly handling scope even 1690*5c90c05cSAndroid Build Coastguard Worker # when the preprocessor is used to create different scope beginnings, such 1691*5c90c05cSAndroid Build Coastguard Worker # as a different if/while condition 1692*5c90c05cSAndroid Build Coastguard Worker preprocessor-if-branch-global: 1693*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1694*5c90c05cSAndroid Build Coastguard Worker captures: 1695*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1696*5c90c05cSAndroid Build Coastguard Worker pop: true 1697*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else)\b) 1698*5c90c05cSAndroid Build Coastguard Worker push: preprocessor-elif-else-branch-global 1699*5c90c05cSAndroid Build Coastguard Worker - match: \{ 1700*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 1701*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-block-if-branch-global 1702*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 1703*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1704*5c90c05cSAndroid Build Coastguard Worker - include: global 1705*5c90c05cSAndroid Build Coastguard Worker 1706*5c90c05cSAndroid Build Coastguard Worker preprocessor-block-if-branch-global: 1707*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.block.c++ 1708*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1709*5c90c05cSAndroid Build Coastguard Worker captures: 1710*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1711*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-block-finish-global 1712*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else)\b) 1713*5c90c05cSAndroid Build Coastguard Worker push: preprocessor-elif-else-branch-global 1714*5c90c05cSAndroid Build Coastguard Worker - match: \} 1715*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1716*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-global 1717*5c90c05cSAndroid Build Coastguard Worker - include: statements 1718*5c90c05cSAndroid Build Coastguard Worker 1719*5c90c05cSAndroid Build Coastguard Worker preprocessor-block-finish-global: 1720*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.block.c++ 1721*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:if|ifdef|ifndef))\b 1722*5c90c05cSAndroid Build Coastguard Worker captures: 1723*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1724*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-block-finish-if-branch-global 1725*5c90c05cSAndroid Build Coastguard Worker - match: \} 1726*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1727*5c90c05cSAndroid Build Coastguard Worker pop: true 1728*5c90c05cSAndroid Build Coastguard Worker - include: statements 1729*5c90c05cSAndroid Build Coastguard Worker 1730*5c90c05cSAndroid Build Coastguard Worker preprocessor-block-finish-if-branch-global: 1731*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1732*5c90c05cSAndroid Build Coastguard Worker captures: 1733*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.c++ 1734*5c90c05cSAndroid Build Coastguard Worker pop: true 1735*5c90c05cSAndroid Build Coastguard Worker - match: \} 1736*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1737*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-global 1738*5c90c05cSAndroid Build Coastguard Worker - include: statements 1739*5c90c05cSAndroid Build Coastguard Worker 1740*5c90c05cSAndroid Build Coastguard Worker preprocessor-elif-else-branch-global: 1741*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(endif)\b) 1742*5c90c05cSAndroid Build Coastguard Worker pop: true 1743*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-global 1744*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1745*5c90c05cSAndroid Build Coastguard Worker - include: global 1746*5c90c05cSAndroid Build Coastguard Worker 1747*5c90c05cSAndroid Build Coastguard Worker ## Preprocessor for statements 1748*5c90c05cSAndroid Build Coastguard Worker 1749*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-disabled-statements: 1750*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*((#if)\s+(0))\b 1751*5c90c05cSAndroid Build Coastguard Worker captures: 1752*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ 1753*5c90c05cSAndroid Build Coastguard Worker 2: keyword.control.import.c++ 1754*5c90c05cSAndroid Build Coastguard Worker 3: constant.numeric.preprocessor.c++ 1755*5c90c05cSAndroid Build Coastguard Worker push: 1756*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1757*5c90c05cSAndroid Build Coastguard Worker captures: 1758*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1759*5c90c05cSAndroid Build Coastguard Worker pop: true 1760*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*else)\b 1761*5c90c05cSAndroid Build Coastguard Worker captures: 1762*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.else.c++ 1763*5c90c05cSAndroid Build Coastguard Worker push: 1764*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*endif\b) 1765*5c90c05cSAndroid Build Coastguard Worker pop: true 1766*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1767*5c90c05cSAndroid Build Coastguard Worker - include: statements 1768*5c90c05cSAndroid Build Coastguard Worker - match: "" 1769*5c90c05cSAndroid Build Coastguard Worker push: 1770*5c90c05cSAndroid Build Coastguard Worker - meta_scope: comment.block.preprocessor.if-branch.c++ 1771*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(else|endif)\b) 1772*5c90c05cSAndroid Build Coastguard Worker pop: true 1773*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-disabled 1774*5c90c05cSAndroid Build Coastguard Worker 1775*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-enabled-statements: 1776*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*((#if)\s+(0*1))\b 1777*5c90c05cSAndroid Build Coastguard Worker captures: 1778*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ 1779*5c90c05cSAndroid Build Coastguard Worker 2: keyword.control.import.c++ 1780*5c90c05cSAndroid Build Coastguard Worker 3: constant.numeric.preprocessor.c++ 1781*5c90c05cSAndroid Build Coastguard Worker push: 1782*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1783*5c90c05cSAndroid Build Coastguard Worker captures: 1784*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1785*5c90c05cSAndroid Build Coastguard Worker pop: true 1786*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*else)\b 1787*5c90c05cSAndroid Build Coastguard Worker captures: 1788*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.else.c++ 1789*5c90c05cSAndroid Build Coastguard Worker push: 1790*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: comment.block.preprocessor.else-branch.c++ 1791*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*endif\b) 1792*5c90c05cSAndroid Build Coastguard Worker pop: true 1793*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-disabled 1794*5c90c05cSAndroid Build Coastguard Worker - match: "" 1795*5c90c05cSAndroid Build Coastguard Worker push: 1796*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(else|endif)\b) 1797*5c90c05cSAndroid Build Coastguard Worker pop: true 1798*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1799*5c90c05cSAndroid Build Coastguard Worker - include: statements 1800*5c90c05cSAndroid Build Coastguard Worker 1801*5c90c05cSAndroid Build Coastguard Worker preprocessor-rule-other-statements: 1802*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:if|ifdef|ifndef))\b 1803*5c90c05cSAndroid Build Coastguard Worker captures: 1804*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.c++ 1805*5c90c05cSAndroid Build Coastguard Worker push: 1806*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.preprocessor.c++ 1807*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1808*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 1809*5c90c05cSAndroid Build Coastguard Worker - match: \bdefined\b 1810*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 1811*5c90c05cSAndroid Build Coastguard Worker # Enter a new scope where all elif/else branches have their 1812*5c90c05cSAndroid Build Coastguard Worker # contexts popped by a subsequent elif/else/endif. This ensures that 1813*5c90c05cSAndroid Build Coastguard Worker # preprocessor branches don't push multiple meta.block scopes on 1814*5c90c05cSAndroid Build Coastguard Worker # the stack, thus messing up the "global" context's detection of 1815*5c90c05cSAndroid Build Coastguard Worker # functions. 1816*5c90c05cSAndroid Build Coastguard Worker - match: $\n 1817*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-statements 1818*5c90c05cSAndroid Build Coastguard Worker 1819*5c90c05cSAndroid Build Coastguard Worker # These gymnastics here ensure that we are properly handling scope even 1820*5c90c05cSAndroid Build Coastguard Worker # when the preprocessor is used to create different scope beginnings, such 1821*5c90c05cSAndroid Build Coastguard Worker # as a different if/while condition 1822*5c90c05cSAndroid Build Coastguard Worker preprocessor-if-branch-statements: 1823*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1824*5c90c05cSAndroid Build Coastguard Worker captures: 1825*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1826*5c90c05cSAndroid Build Coastguard Worker pop: true 1827*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else)\b) 1828*5c90c05cSAndroid Build Coastguard Worker push: preprocessor-elif-else-branch-statements 1829*5c90c05cSAndroid Build Coastguard Worker - match: \{ 1830*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 1831*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-block-if-branch-statements 1832*5c90c05cSAndroid Build Coastguard Worker - match: (?=(?!{{non_func_keywords}}){{path_lookahead}}\s*\() 1833*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-function-call 1834*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1835*5c90c05cSAndroid Build Coastguard Worker - include: statements 1836*5c90c05cSAndroid Build Coastguard Worker 1837*5c90c05cSAndroid Build Coastguard Worker preprocessor-if-branch-function-call: 1838*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function-call.c++ 1839*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#c99 1840*5c90c05cSAndroid Build Coastguard Worker - match: '(?:(::)\s*)?{{identifier}}\s*(::)\s*' 1841*5c90c05cSAndroid Build Coastguard Worker scope: variable.function.c++ 1842*5c90c05cSAndroid Build Coastguard Worker captures: 1843*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.c++ 1844*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.accessor.c++ 1845*5c90c05cSAndroid Build Coastguard Worker - match: '(?:(::)\s*)?{{identifier}}' 1846*5c90c05cSAndroid Build Coastguard Worker scope: variable.function.c++ 1847*5c90c05cSAndroid Build Coastguard Worker captures: 1848*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.accessor.c++ 1849*5c90c05cSAndroid Build Coastguard Worker - match: '\(' 1850*5c90c05cSAndroid Build Coastguard Worker scope: meta.group.c++ punctuation.section.group.begin.c++ 1851*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-function-call-arguments 1852*5c90c05cSAndroid Build Coastguard Worker 1853*5c90c05cSAndroid Build Coastguard Worker preprocessor-if-branch-function-call-arguments: 1854*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function-call.c++ meta.group.c++ 1855*5c90c05cSAndroid Build Coastguard Worker - match : \) 1856*5c90c05cSAndroid Build Coastguard Worker scope: meta.function-call.c++ meta.group.c++ punctuation.section.group.end.c++ 1857*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-statements 1858*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:elif|else))\b 1859*5c90c05cSAndroid Build Coastguard Worker captures: 1860*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1861*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-statements 1862*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1863*5c90c05cSAndroid Build Coastguard Worker captures: 1864*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1865*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-function-call-arguments-finish 1866*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1867*5c90c05cSAndroid Build Coastguard Worker 1868*5c90c05cSAndroid Build Coastguard Worker preprocessor-if-branch-function-call-arguments-finish: 1869*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.function-call.c++ meta.group.c++ 1870*5c90c05cSAndroid Build Coastguard Worker - match: \) 1871*5c90c05cSAndroid Build Coastguard Worker scope: meta.function-call.c++ meta.group.c++ punctuation.section.group.end.c++ 1872*5c90c05cSAndroid Build Coastguard Worker pop: true 1873*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1874*5c90c05cSAndroid Build Coastguard Worker 1875*5c90c05cSAndroid Build Coastguard Worker preprocessor-block-if-branch-statements: 1876*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.block.c++ 1877*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1878*5c90c05cSAndroid Build Coastguard Worker captures: 1879*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1880*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-block-finish-statements 1881*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else)\b) 1882*5c90c05cSAndroid Build Coastguard Worker push: preprocessor-elif-else-branch-statements 1883*5c90c05cSAndroid Build Coastguard Worker - match: \} 1884*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1885*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-statements 1886*5c90c05cSAndroid Build Coastguard Worker - include: statements 1887*5c90c05cSAndroid Build Coastguard Worker 1888*5c90c05cSAndroid Build Coastguard Worker preprocessor-block-finish-statements: 1889*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.block.c++ 1890*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:if|ifdef|ifndef))\b 1891*5c90c05cSAndroid Build Coastguard Worker captures: 1892*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 1893*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-block-finish-if-branch-statements 1894*5c90c05cSAndroid Build Coastguard Worker - match: \} 1895*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1896*5c90c05cSAndroid Build Coastguard Worker pop: true 1897*5c90c05cSAndroid Build Coastguard Worker - include: statements 1898*5c90c05cSAndroid Build Coastguard Worker 1899*5c90c05cSAndroid Build Coastguard Worker preprocessor-block-finish-if-branch-statements: 1900*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 1901*5c90c05cSAndroid Build Coastguard Worker captures: 1902*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.c++ 1903*5c90c05cSAndroid Build Coastguard Worker pop: true 1904*5c90c05cSAndroid Build Coastguard Worker - match: \} 1905*5c90c05cSAndroid Build Coastguard Worker scope: meta.block.c++ punctuation.section.block.end.c++ 1906*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-if-branch-statements 1907*5c90c05cSAndroid Build Coastguard Worker - include: statements 1908*5c90c05cSAndroid Build Coastguard Worker 1909*5c90c05cSAndroid Build Coastguard Worker preprocessor-elif-else-branch-statements: 1910*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*endif\b) 1911*5c90c05cSAndroid Build Coastguard Worker pop: true 1912*5c90c05cSAndroid Build Coastguard Worker - include: negated-block 1913*5c90c05cSAndroid Build Coastguard Worker - include: statements 1914*5c90c05cSAndroid Build Coastguard Worker 1915*5c90c05cSAndroid Build Coastguard Worker ## Preprocessor other 1916*5c90c05cSAndroid Build Coastguard Worker 1917*5c90c05cSAndroid Build Coastguard Worker negated-block: 1918*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1919*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1920*5c90c05cSAndroid Build Coastguard Worker push: 1921*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1922*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 1923*5c90c05cSAndroid Build Coastguard Worker pop: true 1924*5c90c05cSAndroid Build Coastguard Worker - match: (?=^\s*#\s*(elif|else|endif)\b) 1925*5c90c05cSAndroid Build Coastguard Worker pop: true 1926*5c90c05cSAndroid Build Coastguard Worker - include: statements 1927*5c90c05cSAndroid Build Coastguard Worker 1928*5c90c05cSAndroid Build Coastguard Worker preprocessor-macro-define: 1929*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(\#\s*define)\b 1930*5c90c05cSAndroid Build Coastguard Worker captures: 1931*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.macro.c++ keyword.control.import.define.c++ 1932*5c90c05cSAndroid Build Coastguard Worker push: 1933*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.preprocessor.macro.c++ 1934*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1935*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-ending 1936*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 1937*5c90c05cSAndroid Build Coastguard Worker - match: '({{identifier}})(?=\()' 1938*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.function.preprocessor.c++ 1939*5c90c05cSAndroid Build Coastguard Worker set: 1940*5c90c05cSAndroid Build Coastguard Worker - match: '\(' 1941*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.begin.c++ 1942*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-macro-params 1943*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1944*5c90c05cSAndroid Build Coastguard Worker scope: entity.name.constant.preprocessor.c++ 1945*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-macro-definition 1946*5c90c05cSAndroid Build Coastguard Worker 1947*5c90c05cSAndroid Build Coastguard Worker preprocessor-macro-params: 1948*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.preprocessor.macro.parameters.c++ meta.group.c++ 1949*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1950*5c90c05cSAndroid Build Coastguard Worker scope: variable.parameter.c++ 1951*5c90c05cSAndroid Build Coastguard Worker - match: \) 1952*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.group.end.c++ 1953*5c90c05cSAndroid Build Coastguard Worker set: preprocessor-macro-definition 1954*5c90c05cSAndroid Build Coastguard Worker - match: ',' 1955*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.separator.c++ 1956*5c90c05cSAndroid Build Coastguard Worker push: 1957*5c90c05cSAndroid Build Coastguard Worker - match: '{{identifier}}' 1958*5c90c05cSAndroid Build Coastguard Worker scope: variable.parameter.c++ 1959*5c90c05cSAndroid Build Coastguard Worker pop: true 1960*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1961*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 1962*5c90c05cSAndroid Build Coastguard Worker - match: '\.\.\.' 1963*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.variadic.c++ 1964*5c90c05cSAndroid Build Coastguard Worker - match: '(?=\))' 1965*5c90c05cSAndroid Build Coastguard Worker pop: true 1966*5c90c05cSAndroid Build Coastguard Worker - match: (/\*).*(\*/) 1967*5c90c05cSAndroid Build Coastguard Worker scope: comment.block.c++ 1968*5c90c05cSAndroid Build Coastguard Worker captures: 1969*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.definition.comment.c++ 1970*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.definition.comment.c++ 1971*5c90c05cSAndroid Build Coastguard Worker - match: '\S+' 1972*5c90c05cSAndroid Build Coastguard Worker scope: invalid.illegal.unexpected-character.c++ 1973*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1974*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 1975*5c90c05cSAndroid Build Coastguard Worker - match: '\.\.\.' 1976*5c90c05cSAndroid Build Coastguard Worker scope: keyword.operator.variadic.c++ 1977*5c90c05cSAndroid Build Coastguard Worker - match: (/\*).*(\*/) 1978*5c90c05cSAndroid Build Coastguard Worker scope: comment.block.c++ 1979*5c90c05cSAndroid Build Coastguard Worker captures: 1980*5c90c05cSAndroid Build Coastguard Worker 1: punctuation.definition.comment.c++ 1981*5c90c05cSAndroid Build Coastguard Worker 2: punctuation.definition.comment.c++ 1982*5c90c05cSAndroid Build Coastguard Worker - match: $\n 1983*5c90c05cSAndroid Build Coastguard Worker scope: invalid.illegal.unexpected-end-of-line.c++ 1984*5c90c05cSAndroid Build Coastguard Worker 1985*5c90c05cSAndroid Build Coastguard Worker preprocessor-macro-definition: 1986*5c90c05cSAndroid Build Coastguard Worker - meta_content_scope: meta.preprocessor.macro.c++ 1987*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 1988*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-ending 1989*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 1990*5c90c05cSAndroid Build Coastguard Worker # Don't define blocks in define statements 1991*5c90c05cSAndroid Build Coastguard Worker - match: '\{' 1992*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.begin.c++ 1993*5c90c05cSAndroid Build Coastguard Worker - match: '\}' 1994*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.section.block.end.c++ 1995*5c90c05cSAndroid Build Coastguard Worker - include: expressions 1996*5c90c05cSAndroid Build Coastguard Worker 1997*5c90c05cSAndroid Build Coastguard Worker preprocessor-practical-workarounds: 1998*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-convention-ignore-uppercase-ident-lines 1999*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-convention-ignore-uppercase-calls-without-semicolon 2000*5c90c05cSAndroid Build Coastguard Worker 2001*5c90c05cSAndroid Build Coastguard Worker preprocessor-convention-ignore-uppercase-ident-lines: 2002*5c90c05cSAndroid Build Coastguard Worker - match: ^(\s*{{macro_identifier}})+\s*$ 2003*5c90c05cSAndroid Build Coastguard Worker scope: meta.assumed-macro.c++ 2004*5c90c05cSAndroid Build Coastguard Worker push: 2005*5c90c05cSAndroid Build Coastguard Worker # It's possible that we are dealing with a function return type on its own line, and the 2006*5c90c05cSAndroid Build Coastguard Worker # name of the function is on the subsequent line. 2007*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}({{generic_lookahead}}({{path_lookahead}})?)\s*\()' 2008*5c90c05cSAndroid Build Coastguard Worker set: [function-definition-params, global-function-identifier-generic] 2009*5c90c05cSAndroid Build Coastguard Worker - match: '(?={{path_lookahead}}\s*\()' 2010*5c90c05cSAndroid Build Coastguard Worker set: [function-definition-params, global-function-identifier] 2011*5c90c05cSAndroid Build Coastguard Worker - match: ^ 2012*5c90c05cSAndroid Build Coastguard Worker pop: true 2013*5c90c05cSAndroid Build Coastguard Worker 2014*5c90c05cSAndroid Build Coastguard Worker preprocessor-other: 2015*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:if|ifdef|ifndef|elif|else|line|pragma|undef))\b 2016*5c90c05cSAndroid Build Coastguard Worker captures: 2017*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.c++ 2018*5c90c05cSAndroid Build Coastguard Worker push: 2019*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.preprocessor.c++ 2020*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 2021*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-ending 2022*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 2023*5c90c05cSAndroid Build Coastguard Worker - match: \bdefined\b 2024*5c90c05cSAndroid Build Coastguard Worker scope: keyword.control.c++ 2025*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*endif)\b 2026*5c90c05cSAndroid Build Coastguard Worker captures: 2027*5c90c05cSAndroid Build Coastguard Worker 1: meta.preprocessor.c++ keyword.control.import.c++ 2028*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:error|warning))\b 2029*5c90c05cSAndroid Build Coastguard Worker captures: 2030*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.error.c++ 2031*5c90c05cSAndroid Build Coastguard Worker push: 2032*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.preprocessor.diagnostic.c++ 2033*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 2034*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-ending 2035*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 2036*5c90c05cSAndroid Build Coastguard Worker - include: strings 2037*5c90c05cSAndroid Build Coastguard Worker - match: '\S+' 2038*5c90c05cSAndroid Build Coastguard Worker scope: string.unquoted.c++ 2039*5c90c05cSAndroid Build Coastguard Worker - match: ^\s*(#\s*(?:include|include_next|import))\b 2040*5c90c05cSAndroid Build Coastguard Worker captures: 2041*5c90c05cSAndroid Build Coastguard Worker 1: keyword.control.import.include.c++ 2042*5c90c05cSAndroid Build Coastguard Worker push: 2043*5c90c05cSAndroid Build Coastguard Worker - meta_scope: meta.preprocessor.include.c++ 2044*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-continuation 2045*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-line-ending 2046*5c90c05cSAndroid Build Coastguard Worker - include: scope:source.c#preprocessor-comments 2047*5c90c05cSAndroid Build Coastguard Worker - match: '"' 2048*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.string.begin.c++ 2049*5c90c05cSAndroid Build Coastguard Worker push: 2050*5c90c05cSAndroid Build Coastguard Worker - meta_scope: string.quoted.double.include.c++ 2051*5c90c05cSAndroid Build Coastguard Worker - match: '"' 2052*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.string.end.c++ 2053*5c90c05cSAndroid Build Coastguard Worker pop: true 2054*5c90c05cSAndroid Build Coastguard Worker - match: < 2055*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.string.begin.c++ 2056*5c90c05cSAndroid Build Coastguard Worker push: 2057*5c90c05cSAndroid Build Coastguard Worker - meta_scope: string.quoted.other.lt-gt.include.c++ 2058*5c90c05cSAndroid Build Coastguard Worker - match: '>' 2059*5c90c05cSAndroid Build Coastguard Worker scope: punctuation.definition.string.end.c++ 2060*5c90c05cSAndroid Build Coastguard Worker pop: true 2061*5c90c05cSAndroid Build Coastguard Worker - include: preprocessor-practical-workarounds 2062