|
1 | 1 | filetype: c3 |
2 | 2 |
|
3 | 3 | detect: |
4 | | - filename: "(\\.(c3)$)" |
| 4 | + filename: "(\\.(c3|c3i|c3t)$)" |
5 | 5 |
|
6 | 6 | rules: |
7 | 7 | - identifier: "\\b[A-Z_][0-9A-Z_]+\\b" |
8 | | - - type: "\\b[A-Z][A-Za-z_]+\\b" |
9 | | - - identifier.constant: "\\b[A-Z_]+\\b" |
10 | | - - identifer: "\\$[A-Za-z_][0-9A-Za-z_]+" |
11 | | - - type: "\\b(void|bool|char|double|float|float16|bfloat|int128|ichar|int|iptr|isz|long|short|uint128|uint|ulong|uptr|ushort|usz|float128|any|anyfault|String)\\b" |
12 | | - - type: "\\b(CChar|CShort|CUShort|CInt|CUInt|CLong|CULong|CLongLong|CULongLong|CLongDouble)\\b" |
13 | | - - statement: "\\b(typeid|assert|asm|bitstruct|break|case|catch|const|continue|def|default|defer|distinct|do|else|enum|extern|fault|for|foreach|foreach_r|fn|tlocal|if|inline|import|macro|module|nextcase|null|interface|return|static|struct|switch|try|union|var|while)\\b" |
14 | | - - statement: "(\\$\\$abs|\\$\\$any_make|\\$\\$atomic_load|\\$\\$atomic_store|\\$\\$atomic_fetch_exchange|\\$\\$atomic_fetch_add|\\$\\$atomic_fetch_sub|\\$\\$atomic_fetch_and|\\$\\$atomic_fetch_nand|\\$\\$atomic_fetch_or|\\$\\$atomic_fetch_xor|\\$\\$atomic_fetch_max|\\$\\$atomic_fetch_min|\\$\\$atomic_fetch_inc_wrap|\\$\\$atomic_fetch_dec_wrap|\\$\\$bitreverse|\\$\\$breakpoint|\\$\\$bswap|\\$\\$ceil|\\$\\$compare_exchange|\\$\\$copysign|\\$\\$cos|\\$\\$clz|\\$\\$ctz|\\$\\$add|\\$\\$div|\\$\\$mod|\\$\\$mul|\\$\\$neg|\\$\\$sub|\\$\\$exp|\\$\\$exp2|\\$\\$floor|\\$\\$fma|\\$\\$fmuladd|\\$\\$frameaddress|\\$\\$fshl|\\$\\$fshr|\\$\\$gather|\\$\\$get_rounding_mode|\\$\\$log|\\$\\$log10|\\$\\$log2|\\$\\$masked_load|\\$\\$masked_store|\\$\\$max|\\$\\$memcpy|\\$\\$memcpy_inline|\\$\\$memmove|\\$\\$memset|\\$\\$memset_inline|\\$\\$min|\\$\\$nearbyint|\\$\\$overflow_add|\\$\\$overflow_mul|\\$\\$overflow_sub|\\$\\$popcount|\\$\\$pow|\\$\\$pow_int|\\$\\$prefetch|\\$\\$reduce_add|\\$\\$reduce_and|\\$\\$reduce_fadd|\\$\\$reduce_fmul|\\$\\$reduce_max|\\$\\$reduce_min|\\$\\$reduce_mul|\\$\\$reduce_or|\\$\\$reduce_xor|\\$\\$reverse|\\$\\$returnaddress|\\$\\$rint|\\$\\$round|\\$\\$roundeven|\\$\\$sat_add|\\$\\$sat_shl|\\$\\$sat_sub|\\$\\$scatter|\\$\\$select|\\$\\$set_rounding_mode|\\$\\$str_hash|\\$\\$str_upper|\\$\\$str_lower|\\$\\$str_find|\\$\\$swizzle|\\$\\$swizzle2|\\$\\$sin|\\$\\$sqrt|\\$\\$syscall|\\$\\$sysclock|\\$\\$trap|\\$\\$trunc|\\$\\$unaligned_load|\\$\\$unaligned_store|\\$\\$unreachable|\\$\\$veccomplt|\\$\\$veccomple|\\$\\$veccompgt|\\$\\$veccompge|\\$\\$veccompeq|\\$\\$veccompne|\\$\\$volatile_load|\\$\\$volatile_store|\\$\\$wasm_memory_size|\\$\\$wasm_memory_grow|\\$\\$DATE|\\$\\$FILE|\\$\\$FILEPATH|\\$\\$FUNC|\\$\\$FUNCTION|\\$\\$LINE|\\$\\$LINE_RAW|\\$\\$MODULE|\\$\\$BENCHMARK_NAMES|\\$\\$BENCHMARK_FNS|\\$\\$TEST_NAMES|\\$\\$TEST_FNS|\\$\\$TIME)" |
15 | | - - statement: "(\\$\\$expect_with_probability|\\$\\$expect)" |
16 | | - - preproc: "(\\$alignof|\\$and|\\$append|\\$assert|\\$assignable|\\$case|\\$concat|\\$default|\\$defined|\\$echo|\\$else|\\$embed|\\$endfor|\\$endforeach|\\$endif|\\$endswitch|\\$eval|\\$evaltype|\\$error|\\$exec|\\$extnameof|\\$feature|\\$for|\\$foreach|\\$if|\\$include|\\$is_const|\\$nameof|\\$offsetof|\\$or|\\$qnameof|\\$sizeof|\\$stringify|\\$switch|\\$typefrom|\\$typeof|\\$vacount|\\$vatype|\\$vaconst|\\$varef|\\$vaarg|\\$vaexpr|\\$vasplat)" |
17 | | - - preproc: "(@align|@benchmark|@bigendian|@builtin|@callconv|@compact|@const|@deprecated|@dynamic|@export|@extern|@finalizer|@if|@inline|@init|@link|@littleendian|@local|@maydiscard|@naked|@noalias|@nodiscard|@noinit|@noinline|@nopadding|@noreturn|@nostrip|@obfuscate|@operator|@optional|@overlap|@packed|@private|@public|@pure|@reflect|@safemacro|@section|@test|@unused|@used|@wasm|@weak|@winmain)" |
18 | | - - symbol.operator: "[-+*/%=<>.:;,~&|^!?]\\b" |
19 | | - - symbol.brackets: "[(){}]|\\[|\\]" |
20 | | - |
21 | | - # Integer Constants |
22 | | - - constant.number: "(\\b([0-9_]+|0x[0-9A-Fa-f_]+|0b[01_]+)\\b)" |
23 | | - # Decimal Floating Constants |
24 | | - - constant.number: "(\\b([0-9_]+.[0-9]+)\\b)" |
25 | | - |
26 | | - - constant.bool: "(\\b(true|false|null)\\b)" |
| 8 | + - type: "\\b[A-Z][A-Za-z_0-9]+\\b" |
| 9 | + - identifier.constant: "\\b[A-Z_][A-Z0-9_]*\\b" |
| 10 | + - identifier: "\\$[A-Za-z_][0-9A-Za-z_]*" |
27 | 11 |
|
| 12 | + # Built-in types |
| 13 | + - type: "\\b(void|any|bool|char|double|float|float16|bfloat|int128|ichar|int|iptr|isz|long|short|uint128|uint|ulong|uptr|ushort|usz|float128|any|String|fault|sz|typeid)\\b" |
| 14 | + |
| 15 | + # Keywords |
| 16 | + - statement: "\\b(alias|asm|assert|attrdef|bitstruct|break|case|catch|const|continue|default|defer|do|else|enum|extern|false|faultdef|fn|for|foreach|foreach_r|if|import|inline|interface|macro|module|nextcase|null|return|struct|static|switch|tlocal|true|try|typedef|union|var|while|constdef|lengthof)\\b" |
| 17 | + |
| 18 | + # $$ builtins |
| 19 | + - statement: "(\\$\\$BENCHMARK_FNS|\\$\\$BENCHMARK_NAMES|\\$\\$TEST_FNS|\\$\\$TEST_NAMES|\\$\\$abs|\\$\\$add|\\$\\$any_make|\\$\\$atomic_fetch_add|\\$\\$atomic_fetch_and|\\$\\$atomic_fetch_dec_wrap|\\$\\$atomic_fetch_exchange|\\$\\$atomic_fetch_inc_wrap|\\$\\$atomic_fetch_max|\\$\\$atomic_fetch_min|\\$\\$atomic_fetch_nand|\\$\\$atomic_fetch_or|\\$\\$atomic_fetch_sub|\\$\\$atomic_fetch_xor|\\$\\$atomic_load|\\$\\$atomic_store|\\$\\$bitreverse|\\$\\$breakpoint|\\$\\$bswap|\\$\\$ceil|\\$\\$clz|\\$\\$compare_exchange|\\$\\$copysign|\\$\\$cos|\\$\\$ctz|\\$\\$DATE|\\$\\$div|\\$\\$exp|\\$\\$exp2|\\$\\$expect|\\$\\$expect_with_probability|\\$\\$fabs|\\$\\$FILE|\\$\\$FILEPATH|\\$\\$floor|\\$\\$fma|\\$\\$fmuladd|\\$\\$frameaddress|\\$\\$fshl|\\$\\$fshr|\\$\\$FUNC|\\$\\$FUNCTION|\\$\\$gather|\\$\\$get_rounding_mode|\\$\\$int_to_mask|\\$\\$LINE|\\$\\$LINE_RAW|\\$\\$log|\\$\\$log10|\\$\\$log2|\\$\\$masked_load|\\$\\$masked_store|\\$\\$max|\\$\\$memcpy|\\$\\$memcpy_inline|\\$\\$memmove|\\$\\$memset|\\$\\$memset_inline|\\$\\$min|\\$\\$MODULE|\\$\\$mask_to_int|\\$\\$nearbyint|\\$\\$neg|\\$\\$overflow_add|\\$\\$overflow_mul|\\$\\$overflow_sub|\\$\\$popcount|\\$\\$pow|\\$\\$pow_int|\\$\\$prefetch|\\$\\$PRERELEASE|\\$\\$reduce_add|\\$\\$reduce_and|\\$\\$reduce_fadd|\\$\\$reduce_fmul|\\$\\$reduce_max|\\$\\$reduce_min|\\$\\$reduce_mul|\\$\\$reduce_or|\\$\\$reduce_xor|\\$\\$reverse|\\$\\$returnaddress|\\$\\$rint|\\$\\$round|\\$\\$roundeven|\\$\\$sat_add|\\$\\$sat_shl|\\$\\$sat_sub|\\$\\$scatter|\\$\\$select|\\$\\$set_rounding_mode|\\$\\$shufflevector|\\$\\$sin|\\$\\$sqrt|\\$\\$stacktrace|\\$\\$str_find|\\$\\$str_hash|\\$\\$str_lower|\\$\\$str_pascalcase|\\$\\$str_replace|\\$\\$str_snakecase|\\$\\$str_upper|\\$\\$swizzle|\\$\\$swizzle2|\\$\\$syscall|\\$\\$sysclock|\\$\\$TIME|\\$\\$trap|\\$\\$trunc|\\$\\$unaligned_load|\\$\\$unaligned_store|\\$\\$unreachable|\\$\\$veccompeq|\\$\\$veccompge|\\$\\$veccompgt|\\$\\$veccomple|\\$\\$veccomplt|\\$\\$veccompne|\\$\\$VERSION|\\$\\$volatile_load|\\$\\$volatile_store|\\$\\$wasm_memory_grow|\\$\\$wasm_memory_size)" |
| 20 | + |
| 21 | + # $ compile-time directives |
| 22 | + - preproc: "(\\$foreach|\\$endforeach|\\$endswitch|\\$endfor|\\$typeof|\\$typefrom|\\$qnameof|\\$offsetof|\\$nameof|\\$kindof|\\$is_const|\\$include|\\$if|\\$foreach_r|\\$feature|\\$extnameof|\\$exec|\\$evaltype|\\$eval|\\$error|\\$embed|\\$else|\\$echo|\\$endif|\\$defined|\\$default|\\$case|\\$assert|\\$alignof|\\$and|\\$append|\\$assignable|\\$for|\\$switch|\\$sizeof|\\$stringify|\\$vaarg|\\$vaconst|\\$vacount|\\$vaexpr|\\$varef|\\$vasplat|\\$vatype)" |
| 23 | + |
| 24 | + # @ attributes |
| 25 | + - preproc: "(@align|@benchmark|@bigendian|@builtin|@callconv|@cdecl|@cname|@compact|@const|@constinit|@deprecated|@dynamic|@export|@extname|@finalizer|@if|@init|@inline|@interface|@link|@littleendian|@local|@maydiscard|@naked|@noalias|@nodiscard|@noinit|@noinline|@nopadding|@norecurse|@noreturn|@nosanitize|@nostrip|@obfuscate|@operator|@optional|@overlap|@packed|@param|@priority|@private|@public|@pure|@reflect|@safemacro|@safeinfer|@section|@simd|@stdcall|@structlike|@tag|@test|@try|@try_catch|@unused|@used|@veccall|@wasm|@weak|@winmain|@catch|@ok|@weaklink)" |
| 26 | + |
| 27 | + # Operators |
| 28 | + - symbol.operator: "(=>|\\?\\?\\?|\\?\\?|\\?:|&&&|\\|\\|\\||\\+\\+\\+|\\.\\.\\.|\\.\\.|!!|==|!=|<=|>=|&&|\\|\\||<<|>>|\\[<|>]|[-+*/%=<>.:;,~&|^!\\?])" |
| 29 | + |
| 30 | + - symbol.brackets: "[(){}\\[\\]]" |
| 31 | + |
| 32 | + # Vectors |
| 33 | + - symbol.operator: |
| 34 | + start: "\\[<" |
| 35 | + end: ">]" |
| 36 | + rules: |
| 37 | + - constant.number: "\\*" |
| 38 | + - constant.number: "\\b[0-9_]+\\b" |
| 39 | + |
| 40 | + |
| 41 | + # Numbers |
| 42 | + - constant.number: "\\b(0[xX][0-9a-fA-F_]+|0[oO][0-7_]+|0[bB][01_]+|[0-9_]+)([ui](8|16|32|64|128)|[Uu][Ll]{0,2}|[Ll]{1,2}|[Zz])?\\b" |
| 43 | + - constant.number: "\\b[0-9_]+(\\.[0-9_]*)?([eEpP][+-]?[0-9_]+)?([fd](16|32|64|128)?)?\\b" |
| 44 | + |
| 45 | + - constant.bool: "\\b(true|false|null)\\b" |
| 46 | + |
| 47 | + # Strings |
28 | 48 | - constant.string: |
29 | 49 | start: "\"" |
30 | 50 | end: "\"" |
31 | 51 | skip: "\\\\." |
32 | 52 | rules: |
33 | | - - constant.specialChar: "\\\\([\"'abfnrtv\\\\]|[0-3]?[0-7]{1,2}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})" |
| 53 | + - constant.specialChar: "\\\\." |
34 | 54 |
|
35 | 55 | - constant.string: |
36 | 56 | start: "'" |
37 | 57 | end: "'" |
38 | 58 | skip: "\\\\." |
39 | 59 | rules: |
40 | | - - error: "..+" |
41 | | - - constant.specialChar: "\\\\([\"'abfnrtv\\\\]|[0-3]?[0-7]{1,2}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})" |
| 60 | + - error: ".[^']+" |
| 61 | + - constant.specialChar: "\\\\." |
| 62 | + |
| 63 | + # Raw strings `...` |
| 64 | + - constant.string: |
| 65 | + start: "`" |
| 66 | + end: "`" |
| 67 | + skip: "``" |
| 68 | + |
| 69 | + # Bytes literals x'...', b64"..." |
| 70 | + - constant.string: |
| 71 | + start: "(x|b64)[`'\"]" |
| 72 | + end: "[`'\"]" |
| 73 | + skip: "\\\\." |
42 | 74 |
|
| 75 | + # Comments |
43 | 76 | - comment: |
44 | 77 | start: "//" |
45 | 78 | end: "$" |
46 | 79 | rules: |
47 | 80 | - todo: "(TODO|XXX|FIXME):?" |
48 | 81 |
|
49 | | - - comment: |
| 82 | + - comment.block: |
50 | 83 | start: "/\\*" |
51 | 84 | end: "\\*/" |
52 | 85 | rules: |
53 | 86 | - todo: "(TODO|XXX|FIXME):?" |
54 | 87 |
|
55 | 88 | - comment.block: |
56 | | - start: "<\\*" |
57 | | - end: "\\*>" |
| 89 | + start: "([^[]|^|\\s+)<\\*" |
| 90 | + end: "\\s*\\*>" |
58 | 91 | rules: |
59 | 92 | - todo: "(TODO|XXX|FIXME):?" |
| 93 | + - preproc: "@(param|require|ensure|return|return\\?|deprecated|pure)\\b" |
| 94 | + - type: "\\[(?:&)?(in|out|inout)\\]" |
| 95 | + |
| 96 | + # Shebang |
| 97 | + - preproc.shebang: |
| 98 | + start: "^#!" |
| 99 | + end: "$" |
0 commit comments