march-cli 0.1.0

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 (217) hide show
  1. package/bin/march.mjs +13 -0
  2. package/package.json +36 -0
  3. package/src/agent/command-exec-tool.mjs +91 -0
  4. package/src/agent/context-stats-tool.mjs +57 -0
  5. package/src/agent/editing/diff-apply.mjs +28 -0
  6. package/src/agent/editing/diff-format.mjs +57 -0
  7. package/src/agent/file-edit-tool.mjs +276 -0
  8. package/src/agent/find-tool.mjs +112 -0
  9. package/src/agent/model-payload-dumper.mjs +201 -0
  10. package/src/agent/pi-session/pi-session-sidecar-failure.mjs +10 -0
  11. package/src/agent/provider/payload-messages.mjs +138 -0
  12. package/src/agent/read-file-tool.mjs +112 -0
  13. package/src/agent/runner/fast-model.mjs +36 -0
  14. package/src/agent/runner/runner-cleanup.mjs +12 -0
  15. package/src/agent/runner/runner-init.mjs +15 -0
  16. package/src/agent/runner/runner-session-state.mjs +40 -0
  17. package/src/agent/runner.mjs +266 -0
  18. package/src/agent/runtime/runner-runtime-host.mjs +73 -0
  19. package/src/agent/runtime/runtime-factory.mjs +42 -0
  20. package/src/agent/runtime/runtime-host.mjs +34 -0
  21. package/src/agent/session/session-auto-name.mjs +41 -0
  22. package/src/agent/session/session-binding.mjs +12 -0
  23. package/src/agent/session/session-options.mjs +46 -0
  24. package/src/agent/tool-names.mjs +1 -0
  25. package/src/agent/tool-result.mjs +3 -0
  26. package/src/agent/tools.mjs +54 -0
  27. package/src/agent/turn/turn-events.mjs +64 -0
  28. package/src/agent/turn/turn-runner.mjs +103 -0
  29. package/src/auth/login-command.mjs +90 -0
  30. package/src/auth/storage.mjs +33 -0
  31. package/src/cli/args.mjs +71 -0
  32. package/src/cli/commands/copy-command.mjs +73 -0
  33. package/src/cli/commands/export-command.mjs +206 -0
  34. package/src/cli/commands/extensions-command.mjs +53 -0
  35. package/src/cli/commands/help-command.mjs +7 -0
  36. package/src/cli/commands/model-command.mjs +110 -0
  37. package/src/cli/commands/paste-image-command.mjs +43 -0
  38. package/src/cli/commands/provider-command.mjs +55 -0
  39. package/src/cli/commands/status-command.mjs +157 -0
  40. package/src/cli/commands/thinking-command.mjs +80 -0
  41. package/src/cli/fallback-ui.mjs +156 -0
  42. package/src/cli/input/attachment-tokens.mjs +20 -0
  43. package/src/cli/input/autocomplete.mjs +106 -0
  44. package/src/cli/input/external-editor.mjs +39 -0
  45. package/src/cli/input/history-store.mjs +35 -0
  46. package/src/cli/input/image-clipboard.mjs +55 -0
  47. package/src/cli/input/keybinding-dispatch.mjs +76 -0
  48. package/src/cli/input/keybindings.mjs +96 -0
  49. package/src/cli/input/mode-state.mjs +43 -0
  50. package/src/cli/input/prompt-templates.mjs +84 -0
  51. package/src/cli/input/select-with-keyboard.mjs +67 -0
  52. package/src/cli/permissions.mjs +103 -0
  53. package/src/cli/repl-commands.mjs +86 -0
  54. package/src/cli/repl-loop.mjs +157 -0
  55. package/src/cli/selector-list.mjs +21 -0
  56. package/src/cli/session/pi-session-switch-command.mjs +41 -0
  57. package/src/cli/session/session-command.mjs +23 -0
  58. package/src/cli/session/session-list-command.mjs +68 -0
  59. package/src/cli/session/session-name-command.mjs +26 -0
  60. package/src/cli/session/session-source-command.mjs +89 -0
  61. package/src/cli/session/session-switch-command.mjs +1 -0
  62. package/src/cli/shell/shell-command.mjs +55 -0
  63. package/src/cli/shell/shell-drawer-controls.mjs +33 -0
  64. package/src/cli/shell/shell-drawer.mjs +192 -0
  65. package/src/cli/shell/shell-split-layout.mjs +70 -0
  66. package/src/cli/slash-commands.mjs +176 -0
  67. package/src/cli/startup/startup-banner.mjs +17 -0
  68. package/src/cli/startup/startup-session.mjs +51 -0
  69. package/src/cli/status-line-updater.mjs +74 -0
  70. package/src/cli/tool-output.mjs +9 -0
  71. package/src/cli/tui/editor/external-editor-runner.mjs +24 -0
  72. package/src/cli/tui/input/mouse-selection-controller.mjs +89 -0
  73. package/src/cli/tui/input/mouse-tracking.mjs +20 -0
  74. package/src/cli/tui/layout/main-pane-layout.mjs +38 -0
  75. package/src/cli/tui/layout/safe-render-boundary.mjs +46 -0
  76. package/src/cli/tui/markdown-renderer.mjs +279 -0
  77. package/src/cli/tui/output/scroll-state.mjs +79 -0
  78. package/src/cli/tui/output/tool-card-renderer.mjs +59 -0
  79. package/src/cli/tui/output-buffer.mjs +297 -0
  80. package/src/cli/tui/permission-request-ui.mjs +18 -0
  81. package/src/cli/tui/recall-rendering.mjs +25 -0
  82. package/src/cli/tui/select/editor-select-list.mjs +111 -0
  83. package/src/cli/tui/selection-screen.mjs +212 -0
  84. package/src/cli/tui/status/retry-status.mjs +72 -0
  85. package/src/cli/tui/status/spinner-status.mjs +42 -0
  86. package/src/cli/tui/status/status-bar.mjs +88 -0
  87. package/src/cli/tui/syntax/highlighting.mjs +277 -0
  88. package/src/cli/tui/syntax/languages.mjs +91 -0
  89. package/src/cli/tui/syntax/tree-sitter/bash.highlights.scm +261 -0
  90. package/src/cli/tui/syntax/tree-sitter/c.highlights.scm +341 -0
  91. package/src/cli/tui/syntax/tree-sitter/cpp.highlights.scm +268 -0
  92. package/src/cli/tui/syntax/tree-sitter/csharp.highlights.scm +577 -0
  93. package/src/cli/tui/syntax/tree-sitter/css.highlights.scm +109 -0
  94. package/src/cli/tui/syntax/tree-sitter/diff.highlights.scm +49 -0
  95. package/src/cli/tui/syntax/tree-sitter/go.highlights.scm +254 -0
  96. package/src/cli/tui/syntax/tree-sitter/html.highlights.scm +13 -0
  97. package/src/cli/tui/syntax/tree-sitter/java.highlights.scm +330 -0
  98. package/src/cli/tui/syntax/tree-sitter/json.highlights.scm +38 -0
  99. package/src/cli/tui/syntax/tree-sitter/php.highlights.scm +203 -0
  100. package/src/cli/tui/syntax/tree-sitter/python.highlights.scm +137 -0
  101. package/src/cli/tui/syntax/tree-sitter/ruby.highlights.scm +309 -0
  102. package/src/cli/tui/syntax/tree-sitter/rust.highlights.scm +531 -0
  103. package/src/cli/tui/syntax/tree-sitter/toml.highlights.scm +39 -0
  104. package/src/cli/tui/syntax/tree-sitter/tree-sitter-bash.wasm +0 -0
  105. package/src/cli/tui/syntax/tree-sitter/tree-sitter-c-sharp.wasm +0 -0
  106. package/src/cli/tui/syntax/tree-sitter/tree-sitter-c.wasm +0 -0
  107. package/src/cli/tui/syntax/tree-sitter/tree-sitter-cpp.wasm +0 -0
  108. package/src/cli/tui/syntax/tree-sitter/tree-sitter-css.wasm +0 -0
  109. package/src/cli/tui/syntax/tree-sitter/tree-sitter-diff.wasm +0 -0
  110. package/src/cli/tui/syntax/tree-sitter/tree-sitter-go.wasm +0 -0
  111. package/src/cli/tui/syntax/tree-sitter/tree-sitter-html.wasm +0 -0
  112. package/src/cli/tui/syntax/tree-sitter/tree-sitter-java.wasm +0 -0
  113. package/src/cli/tui/syntax/tree-sitter/tree-sitter-json.wasm +0 -0
  114. package/src/cli/tui/syntax/tree-sitter/tree-sitter-php.wasm +0 -0
  115. package/src/cli/tui/syntax/tree-sitter/tree-sitter-python.wasm +0 -0
  116. package/src/cli/tui/syntax/tree-sitter/tree-sitter-ruby.wasm +0 -0
  117. package/src/cli/tui/syntax/tree-sitter/tree-sitter-rust.wasm +0 -0
  118. package/src/cli/tui/syntax/tree-sitter/tree-sitter-toml.wasm +0 -0
  119. package/src/cli/tui/syntax/tree-sitter/tree-sitter-tsx.wasm +0 -0
  120. package/src/cli/tui/syntax/tree-sitter/tree-sitter-typescript.wasm +0 -0
  121. package/src/cli/tui/syntax/tree-sitter/tree-sitter-yaml.wasm +0 -0
  122. package/src/cli/tui/syntax/tree-sitter/tsx.highlights.scm +35 -0
  123. package/src/cli/tui/syntax/tree-sitter/typescript.highlights.scm +35 -0
  124. package/src/cli/tui/syntax/tree-sitter/yaml.highlights.scm +99 -0
  125. package/src/cli/tui/tool-rendering.mjs +194 -0
  126. package/src/cli/tui/tui-diff-rendering.mjs +157 -0
  127. package/src/cli/tui/tui-handlers.mjs +110 -0
  128. package/src/cli/tui/tui-input-controller.mjs +61 -0
  129. package/src/cli/tui/ui-theme.mjs +148 -0
  130. package/src/cli/ui.mjs +299 -0
  131. package/src/config/config-json.mjs +73 -0
  132. package/src/config/dotenv.mjs +20 -0
  133. package/src/config/features.mjs +75 -0
  134. package/src/config/loader.mjs +109 -0
  135. package/src/config/settings-command.mjs +97 -0
  136. package/src/context/diagnostics.mjs +70 -0
  137. package/src/context/engine.mjs +148 -0
  138. package/src/context/injections.mjs +26 -0
  139. package/src/context/project-context.mjs +20 -0
  140. package/src/context/session-status.mjs +15 -0
  141. package/src/context/shell-layers.mjs +23 -0
  142. package/src/context/system-core/base.md +60 -0
  143. package/src/context/system-core/prompts/deepseek-v4-pro.md +3 -0
  144. package/src/context/system-core/prompts/default.md +3 -0
  145. package/src/context/system-core.mjs +35 -0
  146. package/src/debug/model-context-dumper.mjs +52 -0
  147. package/src/extensions/discovery.mjs +40 -0
  148. package/src/extensions/lifecycle-adapter.mjs +210 -0
  149. package/src/extensions/lifecycle-manifest.mjs +69 -0
  150. package/src/image-gen/index.mjs +7 -0
  151. package/src/image-gen/provider.mjs +231 -0
  152. package/src/image-gen/tool.mjs +84 -0
  153. package/src/lsp/client.mjs +204 -0
  154. package/src/lsp/diagnostic-store.mjs +39 -0
  155. package/src/lsp/servers.mjs +212 -0
  156. package/src/lsp/service.mjs +65 -0
  157. package/src/main.mjs +294 -0
  158. package/src/mcp/client.mjs +195 -0
  159. package/src/mcp/config.mjs +130 -0
  160. package/src/mcp/index.mjs +48 -0
  161. package/src/mcp/tools.mjs +98 -0
  162. package/src/memory/database.mjs +219 -0
  163. package/src/memory/glossary.mjs +124 -0
  164. package/src/memory/graph/graph-cascades.mjs +109 -0
  165. package/src/memory/graph/graph-diagnostics.mjs +73 -0
  166. package/src/memory/graph/graph-path-removal.mjs +50 -0
  167. package/src/memory/graph/graph-path-utils.mjs +17 -0
  168. package/src/memory/graph/graph-primitives.mjs +103 -0
  169. package/src/memory/graph/graph-read.mjs +159 -0
  170. package/src/memory/graph.mjs +282 -0
  171. package/src/memory/markdown/markdown-delete.mjs +23 -0
  172. package/src/memory/markdown/markdown-format.mjs +128 -0
  173. package/src/memory/markdown/markdown-recall.mjs +28 -0
  174. package/src/memory/markdown/ripgrep.mjs +16 -0
  175. package/src/memory/markdown/sqlite-index.mjs +87 -0
  176. package/src/memory/markdown-store.mjs +286 -0
  177. package/src/memory/markdown-tools.mjs +103 -0
  178. package/src/memory/search.mjs +142 -0
  179. package/src/memory/snapshot.mjs +86 -0
  180. package/src/memory/system-views.mjs +120 -0
  181. package/src/memory/tools.mjs +282 -0
  182. package/src/notification/desktop-notifier.mjs +85 -0
  183. package/src/platform/open-file.mjs +28 -0
  184. package/src/provider/config-command.mjs +129 -0
  185. package/src/provider/presets.mjs +72 -0
  186. package/src/session/attachment-display.mjs +16 -0
  187. package/src/session/attachment-references.mjs +65 -0
  188. package/src/session/attachments.mjs +140 -0
  189. package/src/session/persist.mjs +1 -0
  190. package/src/session/pi-manager.mjs +34 -0
  191. package/src/session/session-utils.mjs +16 -0
  192. package/src/session/sidecar-sync.mjs +19 -0
  193. package/src/session/sidecar.mjs +68 -0
  194. package/src/session/transcript.mjs +83 -0
  195. package/src/session/tree.mjs +42 -0
  196. package/src/shell/cli-runtime.mjs +11 -0
  197. package/src/shell/hints.mjs +12 -0
  198. package/src/shell/node-pty-adapter.mjs +81 -0
  199. package/src/shell/runtime-state.mjs +126 -0
  200. package/src/shell/runtime.mjs +244 -0
  201. package/src/shell/screen-buffer.mjs +136 -0
  202. package/src/shell/tool-read.mjs +74 -0
  203. package/src/shell/tools.mjs +299 -0
  204. package/src/supergrok/actions/image-generate.mjs +60 -0
  205. package/src/supergrok/actions/search.mjs +78 -0
  206. package/src/supergrok/auth.mjs +36 -0
  207. package/src/supergrok/constants.mjs +18 -0
  208. package/src/supergrok/oauth-provider.mjs +278 -0
  209. package/src/supergrok/provider.mjs +36 -0
  210. package/src/supergrok/response.mjs +76 -0
  211. package/src/supergrok/tool.mjs +61 -0
  212. package/src/text/ansi.mjs +3 -0
  213. package/src/web/config-command.mjs +43 -0
  214. package/src/web/fetch.mjs +78 -0
  215. package/src/web/presets.mjs +16 -0
  216. package/src/web/search.mjs +83 -0
  217. package/src/web/tools.mjs +107 -0
@@ -0,0 +1,203 @@
1
+ [
2
+ (php_tag)
3
+ (php_end_tag)
4
+ ] @tag
5
+
6
+ ; Keywords
7
+
8
+ [
9
+ "and"
10
+ "as"
11
+ "break"
12
+ "case"
13
+ "catch"
14
+ "class"
15
+ "clone"
16
+ "const"
17
+ "continue"
18
+ "declare"
19
+ "default"
20
+ "do"
21
+ "echo"
22
+ "else"
23
+ "elseif"
24
+ "enddeclare"
25
+ "endfor"
26
+ "endforeach"
27
+ "endif"
28
+ "endswitch"
29
+ "endwhile"
30
+ "enum"
31
+ "exit"
32
+ "extends"
33
+ "finally"
34
+ "fn"
35
+ "for"
36
+ "foreach"
37
+ "function"
38
+ "global"
39
+ "goto"
40
+ "if"
41
+ "implements"
42
+ "include"
43
+ "include_once"
44
+ "instanceof"
45
+ "insteadof"
46
+ "interface"
47
+ "match"
48
+ "namespace"
49
+ "new"
50
+ "or"
51
+ "print"
52
+ "require"
53
+ "require_once"
54
+ "return"
55
+ "switch"
56
+ "throw"
57
+ "trait"
58
+ "try"
59
+ "use"
60
+ "while"
61
+ "xor"
62
+ "yield"
63
+ "yield from"
64
+ (abstract_modifier)
65
+ (final_modifier)
66
+ (readonly_modifier)
67
+ (static_modifier)
68
+ (visibility_modifier)
69
+ ] @keyword
70
+
71
+ (function_static_declaration "static" @keyword)
72
+
73
+ ; Namespace
74
+
75
+ (namespace_definition
76
+ name: (namespace_name
77
+ (name) @module))
78
+
79
+ (namespace_name
80
+ (name) @module)
81
+
82
+ (namespace_use_clause
83
+ [
84
+ (name) @type
85
+ (qualified_name
86
+ (name) @type)
87
+ alias: (name) @type
88
+ ])
89
+
90
+ (namespace_use_clause
91
+ type: "function"
92
+ [
93
+ (name) @function
94
+ (qualified_name
95
+ (name) @function)
96
+ alias: (name) @function
97
+ ])
98
+
99
+ (namespace_use_clause
100
+ type: "const"
101
+ [
102
+ (name) @constant
103
+ (qualified_name
104
+ (name) @constant)
105
+ alias: (name) @constant
106
+ ])
107
+
108
+ (relative_name "namespace" @module.builtin)
109
+
110
+ ; Variables
111
+
112
+ (relative_scope) @variable.builtin
113
+
114
+ (variable_name) @variable
115
+
116
+ (method_declaration name: (name) @constructor
117
+ (#eq? @constructor "__construct"))
118
+
119
+ (object_creation_expression [
120
+ (name) @constructor
121
+ (qualified_name (name) @constructor)
122
+ (relative_name (name) @constructor)
123
+ ])
124
+
125
+ ((name) @constant
126
+ (#match? @constant "^_?[A-Z][A-Z\\d_]+$"))
127
+ ((name) @constant.builtin
128
+ (#match? @constant.builtin "^__[A-Z][A-Z\d_]+__$"))
129
+ (const_declaration (const_element (name) @constant))
130
+
131
+ ; Types
132
+
133
+ (primitive_type) @type.builtin
134
+ (cast_type) @type.builtin
135
+ (named_type [
136
+ (name) @type
137
+ (qualified_name (name) @type)
138
+ (relative_name (name) @type)
139
+ ]) @type
140
+ (named_type (name) @type.builtin
141
+ (#any-of? @type.builtin "static" "self"))
142
+
143
+ (scoped_call_expression
144
+ scope: [
145
+ (name) @type
146
+ (qualified_name (name) @type)
147
+ (relative_name (name) @type)
148
+ ])
149
+
150
+ ; Functions
151
+
152
+ (array_creation_expression "array" @function.builtin)
153
+ (list_literal "list" @function.builtin)
154
+ (exit_statement "exit" @function.builtin "(")
155
+
156
+ (method_declaration
157
+ name: (name) @function.method)
158
+
159
+ (function_call_expression
160
+ function: [
161
+ (qualified_name (name))
162
+ (relative_name (name))
163
+ (name)
164
+ ] @function)
165
+
166
+ (scoped_call_expression
167
+ name: (name) @function)
168
+
169
+ (member_call_expression
170
+ name: (name) @function.method)
171
+
172
+ (function_definition
173
+ name: (name) @function)
174
+
175
+ ; Member
176
+
177
+ (property_element
178
+ (variable_name) @property)
179
+
180
+ (member_access_expression
181
+ name: (variable_name (name)) @property)
182
+ (member_access_expression
183
+ name: (name) @property)
184
+
185
+ ; Basic tokens
186
+ [
187
+ (string)
188
+ (string_content)
189
+ (encapsed_string)
190
+ (heredoc)
191
+ (heredoc_body)
192
+ (nowdoc_body)
193
+ ] @string
194
+ (boolean) @constant.builtin
195
+ (null) @constant.builtin
196
+ (integer) @number
197
+ (float) @number
198
+ (comment) @comment
199
+
200
+ ((name) @variable.builtin
201
+ (#eq? @variable.builtin "this"))
202
+
203
+ "$" @operator
@@ -0,0 +1,137 @@
1
+ ; Identifier naming conventions
2
+
3
+ (identifier) @variable
4
+
5
+ ((identifier) @constructor
6
+ (#match? @constructor "^[A-Z]"))
7
+
8
+ ((identifier) @constant
9
+ (#match? @constant "^[A-Z][A-Z_]*$"))
10
+
11
+ ; Function calls
12
+
13
+ (decorator) @function
14
+ (decorator
15
+ (identifier) @function)
16
+
17
+ (call
18
+ function: (attribute attribute: (identifier) @function.method))
19
+ (call
20
+ function: (identifier) @function)
21
+
22
+ ; Builtin functions
23
+
24
+ ((call
25
+ function: (identifier) @function.builtin)
26
+ (#match?
27
+ @function.builtin
28
+ "^(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dict|dir|divmod|enumerate|eval|exec|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|isinstance|issubclass|iter|len|list|locals|map|max|memoryview|min|next|object|oct|open|ord|pow|print|property|range|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|vars|zip|__import__)$"))
29
+
30
+ ; Function definitions
31
+
32
+ (function_definition
33
+ name: (identifier) @function)
34
+
35
+ (attribute attribute: (identifier) @property)
36
+ (type (identifier) @type)
37
+
38
+ ; Literals
39
+
40
+ [
41
+ (none)
42
+ (true)
43
+ (false)
44
+ ] @constant.builtin
45
+
46
+ [
47
+ (integer)
48
+ (float)
49
+ ] @number
50
+
51
+ (comment) @comment
52
+ (string) @string
53
+ (escape_sequence) @escape
54
+
55
+ (interpolation
56
+ "{" @punctuation.special
57
+ "}" @punctuation.special) @embedded
58
+
59
+ [
60
+ "-"
61
+ "-="
62
+ "!="
63
+ "*"
64
+ "**"
65
+ "**="
66
+ "*="
67
+ "/"
68
+ "//"
69
+ "//="
70
+ "/="
71
+ "&"
72
+ "&="
73
+ "%"
74
+ "%="
75
+ "^"
76
+ "^="
77
+ "+"
78
+ "->"
79
+ "+="
80
+ "<"
81
+ "<<"
82
+ "<<="
83
+ "<="
84
+ "<>"
85
+ "="
86
+ ":="
87
+ "=="
88
+ ">"
89
+ ">="
90
+ ">>"
91
+ ">>="
92
+ "|"
93
+ "|="
94
+ "~"
95
+ "@="
96
+ "and"
97
+ "in"
98
+ "is"
99
+ "not"
100
+ "or"
101
+ "is not"
102
+ "not in"
103
+ ] @operator
104
+
105
+ [
106
+ "as"
107
+ "assert"
108
+ "async"
109
+ "await"
110
+ "break"
111
+ "class"
112
+ "continue"
113
+ "def"
114
+ "del"
115
+ "elif"
116
+ "else"
117
+ "except"
118
+ "exec"
119
+ "finally"
120
+ "for"
121
+ "from"
122
+ "global"
123
+ "if"
124
+ "import"
125
+ "lambda"
126
+ "nonlocal"
127
+ "pass"
128
+ "print"
129
+ "raise"
130
+ "return"
131
+ "try"
132
+ "while"
133
+ "with"
134
+ "yield"
135
+ "match"
136
+ "case"
137
+ ] @keyword
@@ -0,0 +1,309 @@
1
+ ; Variables
2
+ [
3
+ (identifier)
4
+ (global_variable)
5
+ ] @variable
6
+
7
+ ; Keywords
8
+ [
9
+ "alias"
10
+ "begin"
11
+ "do"
12
+ "end"
13
+ "ensure"
14
+ "module"
15
+ "rescue"
16
+ "then"
17
+ ] @keyword
18
+
19
+ "class" @keyword.type
20
+
21
+ [
22
+ "return"
23
+ "yield"
24
+ ] @keyword.return
25
+
26
+ [
27
+ "and"
28
+ "or"
29
+ "in"
30
+ "not"
31
+ ] @keyword.operator
32
+
33
+ [
34
+ "def"
35
+ "undef"
36
+ ] @keyword.function
37
+
38
+ (method
39
+ "end" @keyword.function)
40
+
41
+ [
42
+ "case"
43
+ "else"
44
+ "elsif"
45
+ "if"
46
+ "unless"
47
+ "when"
48
+ "then"
49
+ ] @keyword.conditional
50
+
51
+ (if
52
+ "end" @keyword.conditional)
53
+
54
+ [
55
+ "for"
56
+ "until"
57
+ "while"
58
+ "break"
59
+ "redo"
60
+ "retry"
61
+ "next"
62
+ ] @keyword.repeat
63
+
64
+ (constant) @constant
65
+
66
+ ((identifier) @keyword.modifier
67
+ (#any-of? @keyword.modifier "private" "protected" "public"))
68
+
69
+ [
70
+ "rescue"
71
+ "ensure"
72
+ ] @keyword.exception
73
+
74
+ ; Function calls
75
+ "defined?" @function
76
+
77
+ (call
78
+ receiver: (constant)? @type
79
+ method: [
80
+ (identifier)
81
+ (constant)
82
+ ] @function.call)
83
+
84
+ (program
85
+ (call
86
+ (identifier) @keyword.import)
87
+ (#any-of? @keyword.import "require" "require_relative" "load"))
88
+
89
+ ; Function definitions
90
+ (alias
91
+ (identifier) @function)
92
+
93
+ (setter
94
+ (identifier) @function)
95
+
96
+ (method
97
+ name: [
98
+ (identifier) @function
99
+ (constant) @type
100
+ ])
101
+
102
+ (singleton_method
103
+ name: [
104
+ (identifier) @function
105
+ (constant) @type
106
+ ])
107
+
108
+ (class
109
+ name: (constant) @type)
110
+
111
+ (module
112
+ name: (constant) @type)
113
+
114
+ (superclass
115
+ (constant) @type)
116
+
117
+ ; Identifiers
118
+ [
119
+ (class_variable)
120
+ (instance_variable)
121
+ ] @variable.member
122
+
123
+ ((identifier) @constant.builtin
124
+ (#any-of? @constant.builtin
125
+ "__callee__" "__dir__" "__id__" "__method__" "__send__" "__ENCODING__" "__FILE__" "__LINE__"))
126
+
127
+ ((identifier) @function.builtin
128
+ (#any-of? @function.builtin "attr_reader" "attr_writer" "attr_accessor" "module_function"))
129
+
130
+ ((call
131
+ !receiver
132
+ method: (identifier) @function.builtin)
133
+ (#any-of? @function.builtin "include" "extend" "prepend" "refine" "using"))
134
+
135
+ ((identifier) @keyword.exception
136
+ (#any-of? @keyword.exception "raise" "fail" "catch" "throw"))
137
+
138
+ ((constant) @type
139
+ (#not-lua-match? @type "^[A-Z0-9_]+$"))
140
+
141
+ [
142
+ (self)
143
+ (super)
144
+ ] @variable.builtin
145
+
146
+ (method_parameters
147
+ (identifier) @variable.parameter)
148
+
149
+ (lambda_parameters
150
+ (identifier) @variable.parameter)
151
+
152
+ (block_parameters
153
+ (identifier) @variable.parameter)
154
+
155
+ (splat_parameter
156
+ (identifier) @variable.parameter)
157
+
158
+ (hash_splat_parameter
159
+ (identifier) @variable.parameter)
160
+
161
+ (optional_parameter
162
+ (identifier) @variable.parameter)
163
+
164
+ (destructured_parameter
165
+ (identifier) @variable.parameter)
166
+
167
+ (block_parameter
168
+ (identifier) @variable.parameter)
169
+
170
+ (keyword_parameter
171
+ (identifier) @variable.parameter)
172
+
173
+ ; TODO: Re-enable this once it is supported
174
+ ; ((identifier) @function
175
+ ; (#is-not? local))
176
+ ; Literals
177
+ [
178
+ (string_content)
179
+ (heredoc_content)
180
+ "\""
181
+ "`"
182
+ ] @string
183
+
184
+ [
185
+ (heredoc_beginning)
186
+ (heredoc_end)
187
+ ] @label
188
+
189
+ [
190
+ (bare_symbol)
191
+ (simple_symbol)
192
+ (delimited_symbol)
193
+ (hash_key_symbol)
194
+ ] @string.special.symbol
195
+
196
+ (regex
197
+ (string_content) @string.regexp)
198
+
199
+ (escape_sequence) @string.escape
200
+
201
+ (integer) @number
202
+
203
+ (float) @number.float
204
+
205
+ [
206
+ (true)
207
+ (false)
208
+ ] @boolean
209
+
210
+ (nil) @constant.builtin
211
+
212
+ (comment) @comment @spell
213
+
214
+ ((program
215
+ .
216
+ (comment) @keyword.directive @nospell)
217
+ (#lua-match? @keyword.directive "^#!/"))
218
+
219
+ (program
220
+ (comment)+ @comment.documentation
221
+ (class))
222
+
223
+ (module
224
+ (comment)+ @comment.documentation
225
+ (body_statement
226
+ (class)))
227
+
228
+ (class
229
+ (comment)+ @comment.documentation
230
+ (body_statement
231
+ (method)))
232
+
233
+ (body_statement
234
+ (comment)+ @comment.documentation
235
+ (method))
236
+
237
+ ; Operators
238
+ [
239
+ "!"
240
+ "="
241
+ "=="
242
+ "==="
243
+ "<=>"
244
+ "=>"
245
+ "->"
246
+ ">>"
247
+ "<<"
248
+ ">"
249
+ "<"
250
+ ">="
251
+ "<="
252
+ "**"
253
+ "*"
254
+ "/"
255
+ "%"
256
+ "+"
257
+ "-"
258
+ "&"
259
+ "|"
260
+ "^"
261
+ "&&"
262
+ "||"
263
+ "||="
264
+ "&&="
265
+ "!="
266
+ "%="
267
+ "+="
268
+ "-="
269
+ "*="
270
+ "/="
271
+ "=~"
272
+ "!~"
273
+ "?"
274
+ ":"
275
+ ".."
276
+ "..."
277
+ ] @operator
278
+
279
+ [
280
+ ","
281
+ ";"
282
+ "."
283
+ "&."
284
+ "::"
285
+ ] @punctuation.delimiter
286
+
287
+ (regex
288
+ "/" @punctuation.bracket)
289
+
290
+ (pair
291
+ ":" @punctuation.delimiter)
292
+
293
+ [
294
+ "("
295
+ ")"
296
+ "["
297
+ "]"
298
+ "{"
299
+ "}"
300
+ "%w("
301
+ "%i("
302
+ ] @punctuation.bracket
303
+
304
+ (block_parameters
305
+ "|" @punctuation.bracket)
306
+
307
+ (interpolation
308
+ "#{" @punctuation.special
309
+ "}" @punctuation.special)