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,111 @@
1
+ filetype: groovy
2
+
3
+ detect:
4
+ filename: "(\\.(groovy|gy|gvy|gsh|gradle)$|^[Jj]enkinsfile$)"
5
+ header: "^#!.*/(env +)?groovy *$"
6
+
7
+ rules:
8
+ # And the style guide for constants is CONSTANT_CASE
9
+ - identifier: "\\b[A-Z_$]+\\b"
10
+ # The style guide for JVM languages is PascalCase for classes and interfaces
11
+ - identifier.class: "\\b[A-Z][a-zA-Z0-9$]+\\b"
12
+
13
+ # Primitive types
14
+ - type: "\\b(byte|short|int|long|float|double|char|boolean|void)\\b"
15
+
16
+ # Type-related keywords
17
+ - type.keyword: "\\b(private|public|protected|static|final|var|def)\\b"
18
+
19
+ # Keywords
20
+ - statement: "\\b(for|while|do|if|else|switch|case|default|try|catch|finally)\\b"
21
+ - statement: "\\b(break|continue|return|throw|assert)\\b"
22
+ - statement: "\\b(package|import|class|interface|trait|enum|extends|implements|throws)\\b"
23
+ - statement: "\\b(this|super)\\b"
24
+ # Unsused, but reserved keywords
25
+ - statement: "\\b(goto|const)\\b"
26
+
27
+ # Operators and punctuation
28
+ - symbol.operator: "[-+*/%=<>^~&|!?:;,.@]|\\b(in|is|as|instanceof|new)\\b"
29
+ - symbol.brackets: "[(){}]|\\[|\\]"
30
+
31
+ # Decimal integer literal
32
+ - constant.number: "(?i)\\b[1-9]([_0-9]*[0-9])?[GLIDF]?\\b"
33
+ # Binary integer literal
34
+ - constant.number: "(?i)\\b0b[01]([01_]*[01])?[GLIDF]?\\b"
35
+ # Octal integer literal
36
+ - constant.number: "(?i)\\b0[0-7]([0-7_]*[0-7])?[GLIDF]?\\b"
37
+ # Hexadecimal integer literal
38
+ - constant.number: "(?i)\\b0x[0-9a-fA-F]([0-9a-f_]*[0-9a-fA-F])?[GLIDF]?\\b"
39
+ # Floating-point literal
40
+ - constant.number: "(?i)\\b[0-9]([0-9_]*[0-9])?([.][0-9]([0-9_]*[0-9])?)?(e[+-]?[0-9]([0-9_]*[0-9])?)?[DF]?\\b"
41
+ - constant.bool: "\\b(true|false|null)\\b"
42
+
43
+ # Annotations
44
+ - identifier: "@[A-Za-z_$][A-Za-z0-9_$]*\\b"
45
+
46
+ # Triple-double-quoted strings
47
+ - constant.string:
48
+ start: '"""'
49
+ end: '"""'
50
+ skip: "\\\\."
51
+ rules:
52
+ - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})"
53
+ - identifier.var: "\\x24[\\w\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+([.][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+)*"
54
+ - identifier:
55
+ start: "[$][{]"
56
+ end: "[}]"
57
+ rules: []
58
+
59
+ # Triple-single-quoted strings
60
+ - constant.string:
61
+ start: "'''"
62
+ end: "'''"
63
+ skip: "\\\\."
64
+ rules:
65
+ - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})"
66
+
67
+ # Nesting ${} are never going to be matched correctly with just regex either, so highlighting will break if one is to nest interpolation
68
+ # Double-quoted strings
69
+ - constant.string:
70
+ start: '"'
71
+ end: '"'
72
+ skip: "\\\\."
73
+ rules:
74
+ - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})"
75
+ - identifier.var: "\\x24[\\w\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+([.][a-zA-Z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE]+)*"
76
+ - identifier: "\\x24[{].*[}]"
77
+
78
+ # Single-quoted strings
79
+ - constant.string:
80
+ start: "'"
81
+ end: "'"
82
+ skip: "\\\\."
83
+ rules:
84
+ - constant.specialChar: "\\\\([\"'bfnrst\\x24\\\\]|u[a-fA-F0-9]{4})"
85
+
86
+ # Slashy strings are left out, because they match in unwanted places pretty much all the time
87
+ # Dollar-slashy strings
88
+ - constant.string:
89
+ start: "[$]/"
90
+ end: "/[$]"
91
+ rules: []
92
+
93
+ # Single-line comments
94
+ - comment:
95
+ start: "//"
96
+ end: "$"
97
+ rules:
98
+ - todo: "(TODO|XXX|FIXME):?"
99
+
100
+ # Multiline comments
101
+ - comment:
102
+ start: "/[*]"
103
+ end: "[*]/"
104
+ rules:
105
+ - todo: "(TODO|XXX|FIXME):?"
106
+
107
+ # Groovydoc comments
108
+ - comment:
109
+ start: "/[*][*]@?"
110
+ end: "[*]/"
111
+ rules: []
@@ -0,0 +1,16 @@
1
+ filetype: haml
2
+
3
+ detect:
4
+ filename: "\\.haml$"
5
+
6
+ rules:
7
+ - symbol: "-|="
8
+ - default: "->|=>"
9
+ - constant: "([ ]|^)%[0-9A-Za-z_]+>"
10
+ - special: ":[0-9A-Za-z_]+>"
11
+ - type: "\\.[A-Za-z_]+>"
12
+ - constant.string: "\"([^\"]|(\\\\\"))*\"|%[QW]?\\{[^}]*\\}|%[QW]?\\([^)]*\\)|%[QW]?<[^>]*>|%[QW]?\\$[^$]*\\$|%[QW]?\\^[^^]*\\^|%[QW]?![^!]*!"
13
+ - constant.string: "'([^']|(\\\\'))*'|%[qw]\\{[^}]*\\}|%[qw]\\([^)]*\\)|%[qw]<[^>]*>|%[qw]\\[[^]]*\\]|%[qw]\\$[^$]*\\$|%[qw]\\^[^^]*\\^|%[qw]![^!]*!"
14
+ - identifier: "#\\{[^}]*\\}"
15
+ - identifier.var: "(@|@@)[0-9A-Z_a-z]+"
16
+ - comment: "#[^{].*$|#$"
@@ -0,0 +1,52 @@
1
+ filetype: haskell
2
+
3
+ detect:
4
+ filename: "\\.hs$"
5
+
6
+ rules:
7
+ - symbol.operator: "[!#$%&:*+/<=>?@.\\\\^\\|~\\p{Sm}\\-]+"
8
+
9
+ # Identifiers (with or without a module name)
10
+ - type: "\\b([A-Z][A-Za-z0-9_]*\\.)*[A-Z]+[A-Za-z0-9_']*\\b"
11
+ - default: "\\b([A-Z][A-Za-z0-9_]*\\.)*[a-z][A-Za-z0-9_']*\\b"
12
+
13
+ - statement: ";"
14
+ - symbol.bracket: "[\\(\\)\\[\\]\\{\\}]"
15
+ - special: "`[A-Za-z0-9']+`"
16
+
17
+ # Keywords
18
+ - statement: "\\b(case|of|class|data|default|deriving|do|forall|foreign|hiding|if|then|else|import|infix|infixl|infixr|instance|let|in|mdo|module|newtype|qualified|type|where)\\b"
19
+
20
+ # Data constructors
21
+ - constant.bool: "\\b(True|False)\\b"
22
+ - constant: "\\b(Nothing|Just|Left|Right|LT|EQ|GT)\\b"
23
+
24
+ - constant: "\\(\\)" # Unit
25
+ - constant.number: "\\b(0[xX][0-9A-Fa-f]+|0[oO][0-7]+|0[bB][01]+|[-]?[0-9]+([.][0-9]+)?([eE][+-]?[0-9]+)?)\\b"
26
+
27
+ # Data classes
28
+ - identifier.class: "\\b(Additive|Applicative|Bounded|Data|Enum|Eq|Floating|Foldable|Fractional|Functor|Integral|Monad|MonadPlus|Monoid|Num|Ord|Read|Real|RealFloat|RealFrac|Semigroup|Show|Traversable|Typeable|Zip)[ ]"
29
+
30
+ # Strings
31
+ - constant.string:
32
+ start: '"'
33
+ end: '"'
34
+ skip: "\\\\."
35
+ rules:
36
+ - special: "\\\\&"
37
+ - constant.specialChar: "\\\\([abfnrtv\"'\\\\]|[0-9]+|x[0-9a-fA-F]+|o[0-7]+|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC[1-4]|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL)"
38
+
39
+ # Comments
40
+ - comment:
41
+ start: "--"
42
+ end: "$"
43
+ rules:
44
+ - todo: "(TODO|XXX|FIXME):?"
45
+
46
+ - comment:
47
+ start: "\\{-"
48
+ end: "-\\}"
49
+ rules:
50
+ - todo: "(TODO|XXX|FIXME):?"
51
+
52
+ - identifier.macro: "undefined"
@@ -0,0 +1,23 @@
1
+ filetype: ini
2
+
3
+ detect:
4
+ filename: "\\.(ini|desktop|lfl|override|tscn|tres)$|(mimeapps\\.list|pinforc|setup\\.cfg|project\\.godot)$|weechat/.+\\.conf$"
5
+
6
+ rules:
7
+ - constant.bool.true: "\\btrue\\b"
8
+ - constant.bool.false: "\\bfalse\\b"
9
+ - identifier: "^[[:space:]]*[^=]*="
10
+ - special: "^[[:space:]]*\\[.*\\]$"
11
+ - statement: "[=;]"
12
+ - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'"
13
+
14
+ - comment:
15
+ start: "#"
16
+ end: "$"
17
+ rules:
18
+ - todo: "(TODO|XXX|FIXME):?"
19
+ - comment:
20
+ start: ";"
21
+ end: "$"
22
+ rules:
23
+ - todo: "(TODO|XXX|FIXME):?"
@@ -0,0 +1,36 @@
1
+ filetype: java
2
+
3
+ detect:
4
+ filename: "\\.java$"
5
+
6
+ rules:
7
+ - type: "\\b(boolean|byte|char|double|float|int|long|new|var|short|this|transient|void)\\b"
8
+ - statement: "\\b(break|case|catch|continue|default|do|else|finally|for|if|return|switch|throw|try|while)\\b"
9
+ - type: "\\b(abstract|class|extends|final|implements|import|instanceof|interface|native|package|private|protected|public|static|strictfp|super|synchronized|throws|volatile)\\b"
10
+ - constant: "\\b(true|false|null)\\b"
11
+ - constant.number: "\\b[0-9]+\\b"
12
+
13
+ - constant.string:
14
+ start: '"'
15
+ end: '"'
16
+ skip: "\\\\."
17
+ rules:
18
+ - constant.specialChar: "\\\\."
19
+
20
+ - constant.string:
21
+ start: "'"
22
+ end: "'"
23
+ skip: "\\\\."
24
+ rules:
25
+ - preproc: "..+"
26
+ - constant.specialChar: "\\\\."
27
+
28
+ - comment:
29
+ start: "//"
30
+ end: "$"
31
+ rules: []
32
+
33
+ - comment:
34
+ start: "/\\*"
35
+ end: "\\*/"
36
+ rules: []
@@ -0,0 +1,56 @@
1
+ filetype: julia
2
+
3
+ detect:
4
+ filename: "\\.jl$"
5
+ header: "^#!.*/(env +)?julia( |$)"
6
+
7
+ rules:
8
+ # built-in objects
9
+ - constant.bool: "\\b(true|false)\\b"
10
+ - constant: "\\b(nothing|missing)\\b"
11
+ # built-in attributes
12
+ - constant: "__[A-Za-z0-9_]+__"
13
+ # definitions
14
+ - identifier: "[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[(]"
15
+ # keywords
16
+ - statement: "\\b(baremodule|begin|break|catch|const|continue|do|else|elseif|end|export|finally|for|function|global|if|import|let|local|macro|module|public|quote|return|struct|try|using|while)\\b"
17
+ - statement: "\\b(abstract\\s+type|primitive\\s+type|mutable\\s+struct)\\b"
18
+ # decorators
19
+ - identifier.macro: "@[A-Za-z0-9_]+"
20
+ # operators
21
+ - symbol.operator: "[:+*|=!%~<>/\\-?&\\\\÷∈∉∘]|\\b(in|isa|where)\\b"
22
+ # for some reason having ^ in the same regex with the other operators broke things
23
+ - symbol.operator: "\\^"
24
+ # parentheses
25
+ - symbol.brackets: "([(){}]|\\[|\\])"
26
+ # numbers
27
+ - constant.number: "\\b([0-9]+(_[0-9]+)*|0x[0-9a-fA-F]+(_[0-9a-fA-F]+)*|0b[01]+(_[01]+)*|0o[0-7]+(_[0-7]+)*|Inf(16|32|64)?|NaN(16|32|64)?)\\b"
28
+
29
+ - constant.string:
30
+ start: '"""'
31
+ end: '"""'
32
+ rules: []
33
+
34
+ - constant.string:
35
+ start: '"'
36
+ end: '"'
37
+ skip: "\\\\."
38
+ rules:
39
+ - constant.specialChar: "\\\\([\"'abfnrtv\\\\]|[0-3]?[0-7]{1,2}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{1,4}|U[0-9A-Fa-f]{1,8})"
40
+
41
+ # Lifted from Rust's syntax highlighting
42
+ - constant.string: "'(\\\\.|.)'"
43
+ - constant.string:
44
+ start: '''"'
45
+ end: "'"
46
+ rules: []
47
+
48
+ - comment:
49
+ start: "#="
50
+ end: "=#"
51
+ rules: []
52
+
53
+ - comment:
54
+ start: "#"
55
+ end: "$"
56
+ rules: []
@@ -0,0 +1,65 @@
1
+ filetype: kotlin
2
+
3
+ detect:
4
+ filename: "\\.kts?$"
5
+
6
+ rules:
7
+ # Operators
8
+ - symbol.operator: ([.:;,+*|=!?\\%]|<|>|/|-|&)
9
+
10
+ # Statements Keywords
11
+ - statement: \b(as|by|class|constructor|companion|const|fun|import|in|infix|interface|inline|is|out|operator|package|return|suspend|super|this|when|val|var)\b
12
+ - statement.properties: \b(get|set)\b
13
+ - statement.control: \b(break|continue|else|do|if|try|catch|finally|for|while)\b
14
+ - statement.class: \b(abstract|annotation|data|enum|final|open|sealed)\b
15
+ - statement.member: \b(override|lateinit|init)\b
16
+ - statement.access: \b(internal|private|protected|public)\b
17
+ - statement.parameter: \b(crossinline|noinline|reified|vararg)\b
18
+
19
+ # Expression and types
20
+ - type: \b(dynamic|object|throw|typealias)\b
21
+
22
+ # Meta
23
+ - statement.meta: \@(\bfile|delegate|field|get|property|receiver|set|setparam|param|)\b
24
+
25
+ # Constant
26
+ - constant: \b(true|false|null)
27
+ - constant.number: ([0-9]+)
28
+
29
+ # Storage Types
30
+ - type.storage: \b(Byte|UByte|Char|Double|Float|Int|UInt|Long|ULong|Short|UShort|Boolean|Unit|Nothing)\b
31
+
32
+ # Collections
33
+ - type.collections: \b(Array)\b
34
+
35
+ # String
36
+ - constant.string:
37
+ start: \"
38
+ end: \"
39
+ skip: \\.
40
+ rules:
41
+ - constant.specialChar: (\\0|\\\\|\\t|\\n|\\r|\\"|\\')
42
+ - constant.unicode: \\u\{[[:xdigit:]]+}
43
+
44
+ # Shebang Line
45
+ - comment.shebang: ^(#!).*
46
+
47
+ # Line Comment
48
+ - comment.line: "//.*"
49
+
50
+ # Block Comment
51
+ - comment.block:
52
+ start: "/\\*"
53
+ end: "\\*/"
54
+ rules:
55
+ - todo: "(TODO|XXX|FIXME):?"
56
+
57
+ # Doc Block Comment
58
+ - comment.block:
59
+ start: "/\\*\\*"
60
+ end: "\\*/"
61
+ rules:
62
+ - todo: "(TODO|XXX|FIXME):?"
63
+
64
+ # Todo
65
+ - todo: "(TODO|XXX|FIXME):?"
@@ -0,0 +1,37 @@
1
+ filetype: makefile
2
+
3
+ detect:
4
+ filename: "([Mm]akefile|\\.ma?k)$"
5
+ header: "^#!.*/(env +)?[bg]?make( |$)"
6
+
7
+ rules:
8
+ - preproc: "\\<(ifeq|ifdef|ifneq|ifndef|else|endif)\\>"
9
+ - statement: "^(export|include|override)\\>"
10
+ - symbol.operator: "^[^:= ]+:"
11
+ - symbol.operator: "([=,%]|\\+=|\\?=|:=|&&|\\|\\|)"
12
+ - statement: "\\$\\((abspath|addprefix|addsuffix|and|basename|call|dir)[[:space:]]"
13
+ - statement: "\\$\\((error|eval|filter|filter-out|findstring|firstword)[[:space:]]"
14
+ - statement: "\\$\\((flavor|foreach|if|info|join|lastword|notdir|or)[[:space:]]"
15
+ - statement: "\\$\\((origin|patsubst|realpath|shell|sort|strip|suffix)[[:space:]]"
16
+ - statement: "\\$\\((value|warning|wildcard|word|wordlist|words)[[:space:]]"
17
+ - identifier: "^.+:"
18
+ - identifier: "[()$]"
19
+ - constant.string:
20
+ start: '"'
21
+ end: '"'
22
+ skip: "\\\\."
23
+ rules:
24
+ - constant.specialChar: "\\\\."
25
+ - constant.string:
26
+ start: "'"
27
+ end: "'"
28
+ skip: "\\\\."
29
+ rules:
30
+ - constant.specialChar: "\\\\."
31
+ - identifier: "\\$+(\\{[^} ]+\\}|\\([^) ]+\\))"
32
+ - identifier: "\\$[@^<*?%|+]|\\$\\([@^<*?%+-][DF]\\)"
33
+ - identifier: "\\$\\$|\\\\.?"
34
+ - comment:
35
+ start: "#"
36
+ end: "$"
37
+ rules: []
@@ -0,0 +1,22 @@
1
+ filetype: nginx
2
+
3
+ detect:
4
+ filename: "nginx.*\\.conf$|\\.nginx$|\\.sub(domain|folder)\\.conf$"
5
+ header: "^(server|upstream)[a-z ]*\\{$"
6
+
7
+ rules:
8
+ - preproc: "\\b(events|server|http|location|upstream)[[:space:]]*\\{"
9
+ - statement: "(^|[[:space:]{;])(access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth_basic|auth_basic_user_file|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|default_type|deny|directio|directio_alignment|disable_symlinks|empty_gif|env|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|log_format|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|port_in_redirect|postpone_output|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_header|proxy_read_timeout|proxy_redirect|proxy_send_timeout|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|working_directory|xml_entities|xslt_stylesheet|xslt_types)([[:space:]]|$)"
10
+ - constant.bool.true: "\\b(on)\\b"
11
+ - constant.bool.false: "\\b(off)\\b"
12
+ - identifier: "\\$[A-Za-z][A-Za-z0-9_]*"
13
+ - symbol: "[*]"
14
+ - constant-string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'"
15
+ - constant.string:
16
+ start: "'$"
17
+ end: "';$"
18
+ rules: []
19
+
20
+ - comment: "(^|[[:space:]])#([^{].*)?$"
21
+ - indent-char.whitespace: "[[:space:]]+$"
22
+ - indent-char: " + +| + +"
@@ -0,0 +1,27 @@
1
+ filetype: nim
2
+
3
+ detect:
4
+ filename: "\\.nims?$|nim.cfg"
5
+
6
+ rules:
7
+ - preproc: "[\\{\\|]\\b(atom|lit|sym|ident|call|lvalue|sideeffect|nosideeffect|param|genericparam|module|type|let|var|const|result|proc|method|iterator|converter|macro|template|field|enumfield|forvar|label|nk[a-zA-Z]+|alias|noalias)\\b[\\}\\|]"
8
+ - statement: "\\b(addr|and|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|div|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|in|include|interface|is|isnot|iterator|let|macro|method|mixin|mod|nil|not|notin|object|of|or|out|proc|ptr|raise|ref|return|shl|shr|static|template|try|tuple|type|using|var|when|while|with|without|xor|yield)\\b"
9
+ - statement: "\\b(deprecated|noSideEffect|constructor|destructor|override|procvar|compileTime|noReturn|acyclic|final|shallow|pure|asmNoStackFrame|error|fatal|warning|hint|line|linearScanEnd|computedGoto|unroll|immediate|checks|boundsChecks|overflowChecks|nilChecks|assertations|warnings|hints|optimization|patterns|callconv|push|pop|global|pragma|experimental|bitsize|volatile|noDecl|header|incompleteStruct|compile|link|passC|passL|emit|importc|importcpp|importobjc|codegenDecl|injectStmt|intdefine|strdefine|varargs|exportc|extern|bycopy|byref|union|packed|unchecked|dynlib|cdecl|thread|gcsafe|threadvar|guard|locks|compileTime)\\b"
10
+ - symbol.operator: "[=\\+\\-\\*/<>@\\$~&%\\|!\\?\\^\\.:\\\\]+"
11
+ - special: "\\{\\.|\\.\\}|\\[\\.|\\.\\]|\\(\\.|\\.\\)|;|,|`"
12
+ - statement: "\\.\\."
13
+ - type: "\\b(int|cint|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|float32|float64|bool|char|enum|string|cstring|cstringArray|cdouble|csize_t|pointer|array|openarray|seq|varargs|tuple|object|set|void|auto|cshort|clong|range|nil|T|untyped|typedesc)\\b"
14
+ - type: "'[iI](8|16|32|64)?\\b|'[uU](8|16|32|64)?\\b|'[fF](32|64|128)?\\b|'[dD]\\b"
15
+ - constant.number: "\\b[0-9]+\\b"
16
+ - constant.number: "\\b0[xX][0-9A-Fa-f][0-9_A-Fa-f]+\\b"
17
+ - constant.number: "\\b0[ocC][0-7][0-7_]+\\b"
18
+ - constant.number: "\\b0[bB][01][01_]+\\b"
19
+ - constant.number: "\\b[0-9_]((\\.?)[0-9_]+)?[eE][+\\-][0-9][0-9_]+\\b"
20
+ - constant.string: "\"(\\\\.|[^\"])*\"|'(\\\\.|[^'])*'"
21
+ - comment: "[[:space:]]*(?:[^\\\\]|^)#.*$"
22
+ - comment:
23
+ start: "\\#\\["
24
+ end: "\\]\\#"
25
+ rules: []
26
+
27
+ - todo: "(TODO|FIXME|XXX):?"
@@ -0,0 +1,32 @@
1
+ filetype: nix
2
+
3
+ detect:
4
+ filename: "\\.nix$"
5
+
6
+ rules:
7
+ - special: "\\b(Ellipsis|null|self|super|true|false|abort)\\b"
8
+ - statement: "\\b(let|in|with|import|rec|inherit)\\b"
9
+ - symbol.operator: "([~^.:;,+*|=!\\%@]|<|>|/|-|&)"
10
+ - symbol.brackets: "([(){}]|\\[|\\])"
11
+
12
+ - constant.number: "\\b[0-9](_?[0-9])*(\\.([0-9](_?[0-9])*)?)?(e[0-9](_?[0-9])*)?\\b"
13
+
14
+ - constant.string:
15
+ start: '"'
16
+ end: '"'
17
+ rules: []
18
+
19
+ - constant.string:
20
+ start: "''"
21
+ end: "''"
22
+ rules: []
23
+
24
+ - comment:
25
+ start: "#"
26
+ end: "$"
27
+ rules: []
28
+
29
+ - comment:
30
+ start: "/\\*"
31
+ end: "\\*/"
32
+ rules: []
@@ -0,0 +1,60 @@
1
+ filetype: objective-c
2
+
3
+ detect:
4
+ filename: "\\.(m|mm|h)$"
5
+ signature: "(obj|objective)-c|#import|@(encode|end|interface|implementation|selector|protocol|synchronized|try|catch|finally|property|optional|required|import|autoreleasepool)"
6
+
7
+ rules:
8
+ - type: "\\b(float|double|CGFloat|id|bool|BOOL|Boolean|char|int|short|long|sizeof|enum|void|static|const|struct|union|typedef|extern|(un)?signed|inline|Class|SEL|IMP|NS(U)?Integer)\\b"
9
+ - type: "\\b((s?size)|((u_?)?int(8|16|32|64|ptr)))_t\\b"
10
+ - type: "\\b[A-Z][A-Z][[:alnum:]]*\\b"
11
+ - type: "\\b[A-Za-z0-9_]*_t\\b"
12
+ - type: "\\bdispatch_[a-zA-Z0-9_]*_t\\b"
13
+
14
+ - statement: "(__attribute__[[:space:]]*\\(\\([^)]*\\)\\)|__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__|__unused|_Nonnull|_Nullable|__block|__builtin.*)"
15
+ - statement: "\\b(class|namespace|template|public|protected|private|typename|this|friend|virtual|using|mutable|volatile|register|explicit)\\b"
16
+ - statement: "\\b(for|if|while|do|else|case|default|switch)\\b"
17
+ - statement: "\\b(try|throw|catch|operator|new|delete)\\b"
18
+ - statement: "\\b(goto|continue|break|return)\\b"
19
+ - statement: "\\b(nonatomic|atomic|readonly|readwrite|strong|weak|assign)\\b"
20
+ - statement: "@(encode|end|interface|implementation|class|selector|protocol|synchronized|try|catch|finally|property|optional|required|import|autoreleasepool)"
21
+
22
+ - preproc: "^[[:space:]]*#[[:space:]]*(define|include|import|(un|ifn?)def|endif|el(if|se)|if|warning|error|pragma).*$"
23
+ - preproc: "__[A-Z0-9_]*__"
24
+
25
+ - special: "^[[:space:]]*[#|@][[:space:]]*(import|include)[[:space:]]*[\"|<].*\\/?[>|\"][[:space:]]*$"
26
+
27
+ - statement: "([.:;,+*|=!\\%\\[\\]]|<|>|/|-|&)"
28
+
29
+ - constant.number: "(\\b(-?)?[0-9]+\\b|\\b\\[0-9]+\\.[0-9]+\\b|\\b0x[0-9a-fA-F]+\\b)"
30
+ - constant: "(@\\[(\\\\.|[^\\]])*\\]|@\\{(\\\\.|[^\\}])*\\}|@\\((\\\\.|[^\\)])*\\))"
31
+ - constant: "\\b<(\\\\.[^\\>])*\\>\\b"
32
+ - constant: "\\b(nil|NULL|YES|NO|TRUE|true|FALSE|false|self)\\b"
33
+ - constant: "\\bk[[:alnum]]*\\b"
34
+ - constant.string: "'.'"
35
+
36
+ - constant.string:
37
+ start: '@"'
38
+ end: '"'
39
+ skip: "\\\\."
40
+ rules:
41
+ - constant.specialChar: "\\\\."
42
+
43
+ - constant.string:
44
+ start: '"'
45
+ end: '"'
46
+ skip: "\\\\."
47
+ rules:
48
+ - constant.specialChar: "\\\\."
49
+
50
+ - comment:
51
+ start: "//"
52
+ end: "$"
53
+ rules:
54
+ - todo: "(TODO|XXX|FIXME):?"
55
+
56
+ - comment:
57
+ start: "/\\*"
58
+ end: "\\*/"
59
+ rules:
60
+ - todo: "(TODO|XXX|FIXME):?"
@@ -0,0 +1,43 @@
1
+ filetype: ocaml
2
+
3
+ detect:
4
+ filename: "\\.mli?$"
5
+
6
+ rules:
7
+ - identifier: "\\b[A-Z][0-9a-z_]{2,}\\b"
8
+ #declarations
9
+ - statement: "\\b(let|val|method|in|and|rec|private|virtual|constraint)\\b"
10
+ #structure items
11
+ - type: "\\b(type|open|class|module|exception|external)\\b"
12
+ #patterns
13
+ - statement: "\\b(fun|function|functor|match|try|with)\\b"
14
+ #patterns-modifiers
15
+ - statement: "\\b(as|when|of)\\b"
16
+ #conditions
17
+ - statement: "\\b(if|then|else)\\b"
18
+ #blocs
19
+ - type: "\\b(begin|end|object|struct|sig|for|while|do|done|to|downto)\\b"
20
+ - type: "'[0-9A-Za-z_]+"
21
+ #constantes
22
+ - constant.bool: "\\b(true|false)\\b"
23
+ #modules/classes
24
+ - special: "\\b(include|inherit|initializer)\\b"
25
+ #expr modifiers
26
+ - special: "\\b(new|ref|mutable|lazy|assert|raise)\\b"
27
+ #character literal
28
+ - constant.string: "'(\\\\[0-7]{3}|\\\\x[A-Fa-f0-9]{2}|\\\\u[A-Fa-f0-9]{4}|\\\\U[A-Fa-f0-9]{8}|\\\\[abfnrtv'\\\"\\\\]|.)'"
29
+ - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]"
30
+ - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})"
31
+ #string literal
32
+ - constant.string:
33
+ start: '"'
34
+ end: '"'
35
+ skip: "\\\\."
36
+ rules:
37
+ - constant.specialChar: "%."
38
+ - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]"
39
+ - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})"
40
+ - comment:
41
+ start: "\\(\\*"
42
+ end: "\\*\\)"
43
+ rules: []
@@ -0,0 +1,58 @@
1
+ filetype: perl
2
+
3
+ detect:
4
+ filename: "\\.p[lmp]$"
5
+ header: "^#!.*/(env +)?perl( |$)"
6
+
7
+ rules:
8
+ - type: "\\b(accept|alarm|atan2|bin(d|mode)|c(aller|homp|h(dir|mod|op|own|root)|lose(dir)?|onnect|os|rypt)|d(bm(close|open)|efined|elete|ie|o|ump)|e(ach|of|val|x(ec|ists|it|p))|f(cntl|ileno|lock|ork))\\b|\\b(get(c|login|peername|pgrp|ppid|priority|pwnam|(host|net|proto|serv)byname|pwuid|grgid|(host|net)byaddr|protobynumber|servbyport)|([gs]et|end)(pw|gr|host|net|proto|serv)ent|getsock(name|opt)|gmtime|goto|grep|hex|index|int|ioctl|join)\\b|\\b(keys|kill|last|length|link|listen|local(time)?|log|lstat|m|mkdir|msg(ctl|get|snd|rcv)|next|oct|open(dir)?|ord|pack|pipe|pop|printf?|push|q|qq|qx|rand|re(ad(dir|link)?|cv|say|do|name|quire|set|turn|verse|winddir)|rindex|rmdir|s|scalar|seek(dir)?)\\b|\\b(se(lect|mctl|mget|mop|nd|tpgrp|tpriority|tsockopt)|shift|shm(ctl|get|read|write)|shutdown|sin|sleep|socket(pair)?|sort|spli(ce|t)|sprintf|sqrt|srand|stat|study|substr|symlink|sys(call|read|tem|write)|tell(dir)?|time|tr(y)?|truncate|umask)\\b|\\b(un(def|link|pack|shift)|utime|values|vec|wait(pid)?|wantarray|warn|write)\\b"
9
+ - statement: "\\b(continue|else|elsif|do|for|foreach|if|unless|until|while|eq|ne|lt|gt|le|ge|cmp|x|my|sub|use|package|can|isa)\\b"
10
+
11
+ - special: "\\-\\>"
12
+ - symbol: "(,|\\.)"
13
+
14
+ #regexes
15
+ - identifier.macro: "m?\\/.*?\\/[a-z]*"
16
+ - identifier.macro: "m?\\|.*?\\|[a-z]*"
17
+ - identifier.macro: "\\bs/.*?/.*?/[a-z]*"
18
+ - identifier.macro: "\\bs\\|.*?\\|.*?\\|[a-z]*"
19
+
20
+ - constant.string:
21
+ start: '"'
22
+ end: '"'
23
+ skip: '\\"'
24
+ rules:
25
+ - identifier.var: '[\\$@%].[a-zA-Z0-9_]*'
26
+
27
+ - constant.string:
28
+ start: "'"
29
+ end: "'"
30
+ skip: "\\\\'"
31
+ rules: []
32
+
33
+ - comment:
34
+ start: "#"
35
+ end: "$"
36
+ rules: []
37
+
38
+ - constant.string: "\"\\(.*\\)\"|qq?\\|.*\\||qq?\\{.*\\}|qq?\\/.*\\/"
39
+ - constant.number: "\\b([0-9]*[.])?[0-9]+"
40
+ - constant.number: "\\b[0-9]+"
41
+ - constant.number: "\\b0x[a-f0-9]+"
42
+ - constant.string.url: "`(.+?)`"
43
+ - identifier.var: '[\\$@%].[a-zA-Z0-9_]*'
44
+
45
+ - preproc:
46
+ start: "(^use| = new)"
47
+ end: ";"
48
+ rules: []
49
+
50
+ - comment:
51
+ start: "^="
52
+ end: "^=cut"
53
+ rules: []
54
+
55
+ - identifier.macro:
56
+ start: "<< 'STOP'"
57
+ end: "STOP"
58
+ rules: []