pair-mode 0.2.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.claude-plugin/plugin.json +12 -0
  2. package/.codex-plugin/plugin.json +29 -0
  3. package/README.md +79 -0
  4. package/assets/syntax/clojure.yaml +36 -0
  5. package/assets/syntax/cmake.yaml +41 -0
  6. package/assets/syntax/crystal.yaml +71 -0
  7. package/assets/syntax/csharp.yaml +51 -0
  8. package/assets/syntax/dart.yaml +45 -0
  9. package/assets/syntax/elm.yaml +38 -0
  10. package/assets/syntax/erb.yaml +42 -0
  11. package/assets/syntax/erlang.yaml +45 -0
  12. package/assets/syntax/fsharp.yaml +48 -0
  13. package/assets/syntax/graphql.yaml +47 -0
  14. package/assets/syntax/groovy.yaml +111 -0
  15. package/assets/syntax/haml.yaml +16 -0
  16. package/assets/syntax/haskell.yaml +52 -0
  17. package/assets/syntax/ini.yaml +23 -0
  18. package/assets/syntax/java.yaml +36 -0
  19. package/assets/syntax/julia.yaml +56 -0
  20. package/assets/syntax/kotlin.yaml +65 -0
  21. package/assets/syntax/makefile.yaml +37 -0
  22. package/assets/syntax/nginx.yaml +22 -0
  23. package/assets/syntax/nim.yaml +27 -0
  24. package/assets/syntax/nix.yaml +32 -0
  25. package/assets/syntax/objc.yaml +60 -0
  26. package/assets/syntax/ocaml.yaml +43 -0
  27. package/assets/syntax/perl.yaml +58 -0
  28. package/assets/syntax/php.yaml +60 -0
  29. package/assets/syntax/r.yaml +30 -0
  30. package/assets/syntax/scala.yaml +32 -0
  31. package/assets/syntax/svelte.yaml +27 -0
  32. package/assets/syntax/swift.yaml +102 -0
  33. package/assets/syntax/vue.yaml +63 -0
  34. package/assets/syntax/xml.yaml +37 -0
  35. package/assets/syntax/zig.yaml +52 -0
  36. package/dist/claude-code.js +461 -149
  37. package/dist/cli.js +1490 -476
  38. package/dist/codex.js +461 -149
  39. package/dist/opencode.js +453 -142
  40. package/dist/pair-tui.js +172 -26
  41. package/dist/pi.js +508 -155
  42. package/hooks/codex.json +17 -0
  43. package/hooks/hooks.json +16 -0
  44. package/package.json +8 -3
  45. package/skills/toggle/SKILL.md +24 -0
@@ -0,0 +1,60 @@
1
+ filetype: php
2
+
3
+ detect:
4
+ filename: "\\.php[2345s~]?$"
5
+
6
+ rules:
7
+ - symbol.operator: "<|>"
8
+ - error: "<[^!].*?>"
9
+ - symbol.tag: "(?i)<[/]?(a(bbr|cronym|ddress|pplet|rea|rticle|side|udio)?|b(ase(font)?|d(i|o)|ig|lockquote|r)?|ca(nvas|ption)|center|cite|co(de|l|lgroup)|d(ata(list)?|d|el|etails|fn|ialog|ir|l|t)|em(bed)?|fieldset|fig(caption|ure)|font|form|(i)?frame|frameset|h[1-6]|hr|i|img|in(put|s)|kbd|keygen|label|legend|li(nk)?|ma(in|p|rk)|menu(item)?|met(a|er)|nav|no(frames|script)|o(l|pt(group|ion)|utput)|p(aram|icture|re|rogress)?|q|r(p|t|uby)|s(trike)?|samp|se(ction|lect)|small|source|span|strong|su(b|p|mmary)|textarea|time|track|u(l)?|var|video|wbr)( .*|>)*?>"
10
+ - symbol.tag.extended: "(?i)<[/]?(body|div|html|head(er)?|footer|title|table|t(body|d|h(ead)?|r|foot))( .*|>)*?>"
11
+ - preproc: "(?i)<[/]?(script|style)( .*|>)*?>"
12
+ - preproc: "<\\?(php|=)?"
13
+ - preproc: "\\?>"
14
+ - preproc: "<!DOCTYPE.+?>"
15
+ - special: "&[^;[[:space:]]]*;"
16
+ - symbol: "[:=]"
17
+ - identifier: "(alt|bgcolor|height|href|label|longdesc|name|onclick|onfocus|onload|onmouseover|size|span|src|style|target|type|value|width)="
18
+ - constant.number: "(?i)#[0-9a-fA-F]{6,6}"
19
+ - constant.string.url: "(ftp(s)?|http(s)?|git|chrome)://[^ ]+"
20
+ - comment: "<!--.+?-->"
21
+ - default: "<\\?(php|=)\" end=\"\\?>"
22
+ - identifier.class: "([a-zA-Z0-9_-]+)\\("
23
+ - type: "\\b(array|bool|callable|float|int|iterable|object|mixed|string|void)\\b"
24
+ - identifier.class: "[a-zA-Z\\\\]+::"
25
+ - identifier: "\\b([A-Z][a-zA-Z0-9_]+)\\b"
26
+ - identifier: "([A-Z0-9_]+)[;|\\s|\\)|,]"
27
+ - type.keyword: "\\b(global|final|public|private|protected|static|const|var)\\b"
28
+ - statement: "\\b(abstract|catch|class|declare|do|else(if)?|end(declare|for(each)?|if|switch|while)|enum|finally|for(each)|function|if|interface|namespace|switch|trait|try|while)\\b"
29
+ - identifier: "\\bnew\\s+([a-zA-Z0-9\\\\]+)"
30
+ - special: "\\b(as|and|break|case|clone|continue|default|die|fn|echo|empty|eval|exit|extends|goto|or|include(_once)?|implements|instanceof|insteadof|isset|list|match|new|print|return|require(_once)?|unset|use|throw|xor|yield(\\s+from))\\b"
31
+ - constant.bool: "\\b(true|false|null|TRUE|FALSE|NULL)\\b"
32
+ - constant: "[\\s|=|\\s|\\(|/|+|-|\\*|\\[]"
33
+ - constant.number: "[0-9]"
34
+ - identifier: "(\\$this|parent|self|\\$this->)"
35
+ - symbol.operator: "(=>|===|!==|==|!=|&&|\\|\\||::|=|->|\\!)"
36
+ - identifier.var: "(\\$[a-zA-Z0-9\\-_]+)"
37
+ - symbol.operator: "[\\(|\\)|/|+|\\-|\\*|\\[|.|,|;]"
38
+ - symbol.brackets: "(\\[|\\]|\\{|\\}|[()])"
39
+
40
+ - comment:
41
+ start: "(^|[[:space:]])*(//|#)"
42
+ end: "$"
43
+ rules: []
44
+ - comment:
45
+ start: "/\\*"
46
+ end: "\\*/"
47
+ rules: []
48
+
49
+ - constant.string:
50
+ start: '"'
51
+ end: '"'
52
+ skip: "\\\\."
53
+ rules:
54
+ - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]"
55
+ - constant.string:
56
+ start: "'"
57
+ end: "'"
58
+ skip: "\\\\."
59
+ rules:
60
+ - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]"
@@ -0,0 +1,30 @@
1
+ filetype: r
2
+
3
+ detect:
4
+ filename: "\\.(r|R)$"
5
+
6
+ rules:
7
+ - statement: "\\b(library|require|break|else|for|function|if|ifelse|in|next|names|switch|repeat|print|try|tryCatch|isTRUE|return|while)\\b"
8
+ - constant: "\\b(T|TRUE|F|FALSE|NULL|Inf|NaN|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\\b"
9
+ - constant.number: "(\\b[0-9]+\\b|\\b0x[0-9A-Fa-f]+\\b)"
10
+ - symbol.operator: "([.:;,+*|=!\\%]|<|>|/|-|&|\\^|\\$)"
11
+
12
+ - comment:
13
+ start: "#"
14
+ end: "$"
15
+ rules:
16
+ - todo: "(TODO|XXX|FIXME):?"
17
+
18
+ - constant.string:
19
+ start: '"'
20
+ end: '"'
21
+ skip: "\\\\."
22
+ rules:
23
+ - constant.specialChar: "\\\\."
24
+
25
+ - constant.string:
26
+ start: "'"
27
+ end: "'"
28
+ skip: "\\\\."
29
+ rules:
30
+ - constant.specialChar: "\\\\."
@@ -0,0 +1,32 @@
1
+ filetype: scala
2
+
3
+ detect:
4
+ filename: "\\.sc(ala)?$|\\.sbt$"
5
+
6
+ rules:
7
+ - type: "\\b(boolean|byte|char|double|float|int|long|new|short|this|transient|void)\\b"
8
+ - statement: "\\b(match|val|var|break|case|catch|continue|default|do|else|finally|for|if|return|switch|throw|try|while)\\b"
9
+ - statement: "\\b(def|object|case|trait|lazy|implicit|abstract|class|extends|with|final|implements|override|import|instanceof|interface|native|package|private|protected|public|static|strictfp|super|synchronized|throws|volatile|sealed)\\b"
10
+ - constant.string:
11
+ start: '"""'
12
+ end: '"""'
13
+ rules: []
14
+ - constant.string:
15
+ start: '"'
16
+ end: '"'
17
+ skip: "\\\\."
18
+ rules:
19
+ - constant.specialChar: "\\\\."
20
+ - constant: "\\b(true|false|null)\\b"
21
+ - comment:
22
+ start: "//"
23
+ end: "$"
24
+ rules: []
25
+ - comment:
26
+ start: "/\\*"
27
+ end: "\\*/"
28
+ rules: []
29
+ - comment:
30
+ start: "/\\*\\*"
31
+ end: "\\*/"
32
+ rules: []
@@ -0,0 +1,27 @@
1
+ filetype: svelte
2
+
3
+ detect:
4
+ filename: "\\.svelte$"
5
+
6
+ rules:
7
+ - default:
8
+ start: "<script>"
9
+ end: "</script>"
10
+ rules:
11
+ - include: "javascript"
12
+
13
+ - default:
14
+ start: '<script lang="ts">'
15
+ end: "</script>"
16
+ rules:
17
+ - include: "typescript"
18
+ - default:
19
+ start: "<style.*?>"
20
+ end: "</style.*?>"
21
+ rules:
22
+ - include: "css"
23
+ - default:
24
+ start: "^"
25
+ end: "$"
26
+ rules:
27
+ - include: "html5"
@@ -0,0 +1,102 @@
1
+ filetype: swift
2
+
3
+ detect:
4
+ filename: "\\.swift$"
5
+ header: "^#!.*bin/(env +)?swift( |$)"
6
+
7
+ rules:
8
+ # Patterns
9
+ - type: \b(_)\b
10
+
11
+ # Operators
12
+ - symbol.operator: ([.:;,+*|=!?\\%]|<|>|/|-|&)
13
+
14
+ # Declaration Keywords
15
+ - statement.declaration: \b(associatedtype|class|deinit|enum|extension|fileprivate|func|import|init)\b
16
+ - statement.declaration: \b(inout|internal|let|open|operator|private|protocol|public|static|struct|subscript|typealias|var)\b
17
+
18
+ # Statements Keywords
19
+ - statement: \b(break|case|continue|default|defer|do|else|fallthrough|for|guard)\b
20
+ - statement: \b(if|inif|repeat|return|switch|where|while)\b
21
+
22
+ # keyword.reserved
23
+ - statement.reserved: \b(associativity|convenience|dynamic|didSet|final|get|infix|indirect|lazy|left|mutating)\b
24
+ - statement.reserved: \b(none|nonmutating|override|postfix|precedence|prefix|Protocol|required)\b
25
+ - statement.reserved: \b(right|set|Type|unowned|weak|willSet)\b
26
+
27
+ # Expression and types
28
+ - type: \b(as|Any|catch|is|rethrows|super|self|throw|throws|try)\b
29
+
30
+ - statement.built_in: \b(abs|advance|alignof|alignofValue|anyGenerator|assert|assertionFailure|bridgeFromObjectiveC)\b
31
+ - statement.built_in: \b(bridgeFromObjectiveCUnconditional|bridgeToObjectiveC|bridgeToObjectiveCUnconditional|contains)\b
32
+ - statement.built_in: \b(count|countElements|countLeadingZeros|debugPrint|debugPrintln|distance|dropFirst|dropLast|dump|encodeBitsAsWords)\b
33
+ - statement.built_in: \b(enumerate|equal|fatalError|filter|find|getBridgedObjectiveCType|getVaList|indices|insertionSort)\b
34
+ - statement.built_in: \b(isBridgedToObjectiveC|isBridgedVerbatimToObjectiveC|isUniquelyReferenced|isUniquelyReferencedNonObjC)\b
35
+ - statement.built_in: \b(join|lexicographicalCompare|map|max|maxElement|min|minElement|numericCast|overlaps|partition|posix)\b
36
+ - statement.built_in: \b(precondition|preconditionFailure|print|println|quickSort|readLine|reduce|reflect)\b
37
+ - statement.built_in: \b(reinterpretCast!reverse|roundUpToAlignment|sizeof|sizeofValue|sort|split|startsWith|stride)\b
38
+ - statement.built_in: \b(strideof|strideofValue|swap|toString|transcode|underestimateCount|unsafeAddressOf|unsafeBitCast)\b
39
+ - statement.built_in: \b(unsafeDowncast|unsafeUnwrap|unsafeReflect|withExtendedLifetime|withObjectAtPlusZero|withUnsafePointer)\b
40
+ - statement.built_in: \b(withUnsafePointerToObject|withUnsafeMutablePointer|withUnsafeMutablePointers|withUnsafePointer)\b
41
+ - statement.built_in: \b(withUnsafePointers|withVaList|zip)\b
42
+
43
+ # Meta
44
+ - statement.meta: \@\b(autoclosure|available|convention|exported|IBAction|IBDesignable|IBOutlet|IBInspectable|infix)\b
45
+ - statement.meta: \@\b(lazy|noreturn|noescape|nonobjc|NSApplicationMain|NSCopying|NSManaged|objc|prefix|postfix)\b
46
+ - statement.meta: \@\b(required|testable|warn_unused_result|UIApplicationMain)\b
47
+
48
+ #preprocessor
49
+ - preproc: ^[[:space:]]*#[[:space:]]*(define|else|elseif|endif|if|selector)\b
50
+ - preproc.DebugIdentifier: \b(__COLUMN__|__FILE__|__FUNCTION__|__LINE__)\b
51
+ - preproc.DebugIdentifier: ^[[:space:]]*#[[:space:]]*(column|file|function|line)\b
52
+
53
+ # Constant
54
+ - constant: \b(true|false|nil)
55
+ - constant.number: ([0-9]+)
56
+
57
+ # Storage Types
58
+ - type.storage: \b((U)?Int(8|16|32|64))\b
59
+ - type.storage: \b(Int|UInt|String|Bit|Bool|Character|Double|Optional|Float|Range)\b
60
+ - type.storage: \b(AnyObject)\b
61
+
62
+ # Collections
63
+ - type.collections: \b(Array|Dictionary|Set)\b
64
+
65
+ # Ctypes
66
+ - type.ctypes: \b(CBool|CChar|CUnsignedChar|CShort|CUnsignedShort|CInt|CUnsignedInt|CLong|CUnsignedLong|CLongLong|CUnsignedLongLong|CWideChar|CChar16|CChar32|CFloat|CDouble)\b
67
+
68
+ # String
69
+ - constant.string:
70
+ start: \"
71
+ end: \"
72
+ skip: \\.
73
+ rules:
74
+ - constant.specialChar: (\\0|\\\\|\\t|\\n|\\r|\\"|\\')
75
+ - constant.interpolation: \\\([[:graph:]]*\)
76
+ - constant.unicode: \\u\{[[:xdigit:]]+}
77
+
78
+ # Shebang Line
79
+ - comment.shebang: ^(#!).*
80
+
81
+ # Doc Comment
82
+ - comment.doc: (///).*
83
+
84
+ # Line Comment
85
+ - comment.line: "//.*"
86
+
87
+ # Block Comment
88
+ - comment.block:
89
+ start: "/\\*"
90
+ end: "\\*/"
91
+ rules:
92
+ - todo: "(TODO|XXX|FIXME):?"
93
+
94
+ # Doc Block Comment
95
+ - comment.block:
96
+ start: "/\\*\\*"
97
+ end: "\\*/"
98
+ rules:
99
+ - todo: "(TODO|XXX|FIXME):?"
100
+
101
+ # Todo
102
+ - todo: "(TODO|XXX|FIXME):?"
@@ -0,0 +1,63 @@
1
+ filetype: vue
2
+
3
+ detect:
4
+ filename: "\\.vue$"
5
+
6
+ rules:
7
+ - default:
8
+ start: "<template.*?>"
9
+ end: "</template.*?>"
10
+ limit-group: symbol.tag
11
+ rules:
12
+ - error: "<[^!].*?>"
13
+ - symbol.tag: "(?i)<[/]?(a|a(bbr|ddress|rea|rticle|side|udio)|b|b(ase|d(i|o)|lockquote|r|utton)|ca(nvas|ption)|center|cite|co(de|l|lgroup)|d(ata|atalist|d|el|etails|fn|ialog|l|t)|em|embed|fieldset|fig(caption|ure)|form|iframe|h[1-6]|hr|i|img|in(put|s)|kbd|keygen|label|legend|li|link|ma(in|p|rk)|menu|menuitem|met(a|er)|nav|noscript|o(bject|l|pt(group|ion)|utput)|p|param|picture|pre|progress|q|r(p|t|uby)|s|samp|se(ction|lect)|svg|small|source|span|strong|su(b|p|mmary)|textarea|time|track|u|ul|var|video|wbr)( .*)*?>"
14
+ - symbol.tag.extended: "(?i)<[/]?(body|div|html|head(er)?|footer|title|table|t(body|d|h(ead)?|r|foot))( .*)*?>"
15
+ - preproc: "(?i)<[/]?(script|style)( .*)*?>"
16
+ - special: "&[^;[[:space:]]]*;"
17
+
18
+ - identifier: "(alt|bgcolor|class|height|href|id|label|longdesc|name|on(click|focus|load|mouseover)|placeholder|size|span|src|style|target|type|value|width)="
19
+ - symbol: "[:=]"
20
+ - constant.string: '"[^"]*"'
21
+ - constant.number: "(?i)#[0-9a-fA-F]{6,6}"
22
+
23
+ - symbol.tag: "<|>"
24
+ - constant.string.url: "(ftp(s)?|http(s)?|git|chrome)://[^ ]+"
25
+ - comment: "<!--.+?-->"
26
+ #- preproc: "<!DOCTYPE.+?>"
27
+ - comment.block:
28
+ start: "<!\\-\\-"
29
+ end: "\\-\\->"
30
+ rules: []
31
+
32
+ # Bootstrap
33
+ - symbol.tag.extended: "(?i)<[/]?(b-alert|b-aspect|b-avatar|b-badge|b-icon|b-breadcrumb|b-button-group|b-button-toolbar|b-button|b-calendar|b-card-text|b-card-input|b-card|b-carousel-slide|b-carousel|b-collapse|b-dropdown|b-dropdown-item|b-dropdown-divider|b-embed|b-form-checkbox-group|b-form-checkbox|b-form-datepicker|b-form-file|b-form-group|b-form-input|b-form-radio|b-form-rating|b-form-select|b-form-spinbutton|b-form-tags|b-form-textarea|b-form|b-form-timepicker|b-img-lazy|b-img|b-input-group|b-jumbotron|b-input|b-container|b-row|b-col|b-link|b-list-group|b-list-group-item|b-media|b-modal|b-nav|b-nav-item|b-nav-item-dropdown|b-nav-text|b-nav-form|b-navbar|b-navbar-brand|b-navbar-toggle|b-navbar-nav|b-overlay|b-pagination|b-pagination-nav|b-popover|b-progress|b-progress-bar|b-sidebar|b-skeleton-wrapper|b-skeleton|b-spinner|b-table|b-table-lite|b-table-simple|b-tabs|b-tab|b-time|b-toast|b-tooltip)\\b"
34
+ - identifier: "(variant|title|show|shadow|icon|align-h|align-v|label-for|@submit|tag|img-alt|img-src|data-toggle|data-target|aria-controls|aria-expanded|aria-label|aria-disabled|tabindex|:interval|background|img-width|img-height|@sliding-start|@sliding-end|cols|header|@reset)="
35
+ - symbol: "[:=]"
36
+ # Vue
37
+ - symbol.tag.extended: "(?i)<[/]?(component|transition|transition-group|keep-alive|slot)\\b"
38
+ - identifier: "(v-text|v-html|v-show|v-if|v-else|v-else-if|v-for|v-on|v-bind|v-model|v-slot|v-pre|v-cloak|v-once|key|ref|is|@click)="
39
+ - symbol: "[:=]"
40
+ # Vue-router
41
+ - symbol.tag.extended: "(?i)<[/]?(router-link|router-view)\\b"
42
+ - identifier: "(to|v-slot)="
43
+ - symbol: "[:=]"
44
+
45
+ - default:
46
+ start: "<script>"
47
+ end: "</script>"
48
+ limit-group: symbol.tag
49
+ rules:
50
+ - include: "javascript"
51
+
52
+ - default:
53
+ start: '<script[ ]+lang=("ts"|''ts'')>'
54
+ end: "</script>"
55
+ rules:
56
+ - include: "typescript"
57
+
58
+ - default:
59
+ start: "<style.*?>"
60
+ end: "</style.*?>"
61
+ limit-group: symbol.tag
62
+ rules:
63
+ - include: "css"
@@ -0,0 +1,37 @@
1
+ filetype: xml
2
+
3
+ detect:
4
+ filename: "\\.(xml|sgml?|rng|svg|plist)$"
5
+ header: "<\\?xml.*\\?>"
6
+
7
+ rules:
8
+ - preproc:
9
+ start: "<!DOCTYPE"
10
+ end: "[/]?>"
11
+ rules: []
12
+
13
+ - comment:
14
+ start: "<!--"
15
+ end: "-->"
16
+ rules: []
17
+
18
+ - symbol.tag:
19
+ start: "<\\??"
20
+ end: "\\??>"
21
+ rules:
22
+ - identifier:
23
+ start: " "
24
+ end: "="
25
+ rules: []
26
+ - constant.string:
27
+ start: '"'
28
+ end: '"'
29
+ skip: "\\\\."
30
+ rules:
31
+ - constant.specialChar: "\\\\."
32
+ - constant.string:
33
+ start: "'"
34
+ end: "'"
35
+ skip: "\\\\."
36
+ rules:
37
+ - constant.specialChar: "\\\\."
@@ -0,0 +1,52 @@
1
+ filetype: zig
2
+
3
+ detect:
4
+ filename: "\\.z(ig|on)$"
5
+
6
+ rules:
7
+ # Reserved words
8
+ - statement: "\\b(addrspace|align|allowzero|and|asm|async|await|break|callconv|catch|comptime|const|continue|defer|else|errdefer|error|export|extern|fn|for|if|inline|noalias|noinline|nosuspend|or|orelse|packed|pub|resume|return|linksection|suspend|switch|test|threadlocal|try|unreachable|usingnamespace|var|volatile|while)\\b"
9
+ # builtin functions
10
+ - special: "@[a-zA-Z_]+"
11
+ # Primitive Types
12
+ - type: "\\b(anyframe|anytype|anyerror|anyopaque|bool|comptime_int|comptime_float|enum|f(16|32|64|80|128)|i(8|16|32|64|128)|isize|noreturn|opaque|struct|type|union|u(8|16|32|64|128)|usize|void)\\b"
13
+ - type: "\\b(c_u?(short|int|long(long)?)|c_longdouble|c_void)\\b"
14
+
15
+ # Operators
16
+ - symbol.operator: "[-!|=;%.+^*:&?<>~]"
17
+
18
+ # Parenthesis
19
+ - symbol.brackets: "[(){}]|\\[|\\]"
20
+
21
+ # Constants
22
+ - constant: "\\b(null|undefined)\\b"
23
+ - constant.number: "\\b(0b[01_]+|0o[0-7_]+|[0-9_]+|0x[a-fA-F0-9_]+)\\b"
24
+ - constant.bool: "\\b(true|false)\\b"
25
+
26
+ - constant.string:
27
+ start: '"'
28
+ end: '"'
29
+ skip: "\\\\."
30
+ rules:
31
+ - constant.specialChar: "\\\\([nrt\\\\'\"]|x[a-fA-F0-9]{2}|u{[a-fA-F0-9]+})"
32
+
33
+ - constant.string:
34
+ start: "'"
35
+ end: "'"
36
+ skip: "\\\\."
37
+ rules:
38
+ - error: "..+"
39
+ - constant.specialChar: "\\\\([nrt\\\\'\"]|x[a-fA-F0-9]{2}|u{[a-fA-F0-9]+})"
40
+
41
+ - constant.string:
42
+ start: "\\\\\\\\"
43
+ end: "$"
44
+ skip: "\\\\."
45
+ rules:
46
+ - constant.specialChar: "\\\\([nrt\\\\'\"]|x[a-fA-F0-9]{2}|u{[a-fA-F0-9]+})"
47
+
48
+ - comment:
49
+ start: "//"
50
+ end: "$"
51
+ rules:
52
+ - todo: "(TODO|XXX|FIXME):?"