@involvex/fresh-editor 0.1.76 → 0.1.78

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 (90) hide show
  1. package/bin/CHANGELOG.md +1017 -0
  2. package/bin/LICENSE +117 -0
  3. package/bin/README.md +248 -0
  4. package/bin/fresh.exe +0 -0
  5. package/bin/plugins/README.md +71 -0
  6. package/bin/plugins/audit_mode.i18n.json +821 -0
  7. package/bin/plugins/audit_mode.ts +1810 -0
  8. package/bin/plugins/buffer_modified.i18n.json +67 -0
  9. package/bin/plugins/buffer_modified.ts +281 -0
  10. package/bin/plugins/calculator.i18n.json +93 -0
  11. package/bin/plugins/calculator.ts +770 -0
  12. package/bin/plugins/clangd-lsp.ts +168 -0
  13. package/bin/plugins/clangd_support.i18n.json +223 -0
  14. package/bin/plugins/clangd_support.md +20 -0
  15. package/bin/plugins/clangd_support.ts +325 -0
  16. package/bin/plugins/color_highlighter.i18n.json +145 -0
  17. package/bin/plugins/color_highlighter.ts +304 -0
  18. package/bin/plugins/config-schema.json +768 -0
  19. package/bin/plugins/csharp-lsp.ts +147 -0
  20. package/bin/plugins/csharp_support.i18n.json +80 -0
  21. package/bin/plugins/csharp_support.ts +170 -0
  22. package/bin/plugins/css-lsp.ts +143 -0
  23. package/bin/plugins/diagnostics_panel.i18n.json +236 -0
  24. package/bin/plugins/diagnostics_panel.ts +642 -0
  25. package/bin/plugins/examples/README.md +85 -0
  26. package/bin/plugins/examples/async_demo.ts +165 -0
  27. package/bin/plugins/examples/bookmarks.ts +329 -0
  28. package/bin/plugins/examples/buffer_query_demo.ts +110 -0
  29. package/bin/plugins/examples/git_grep.ts +262 -0
  30. package/bin/plugins/examples/hello_world.ts +93 -0
  31. package/bin/plugins/examples/virtual_buffer_demo.ts +116 -0
  32. package/bin/plugins/find_references.i18n.json +275 -0
  33. package/bin/plugins/find_references.ts +359 -0
  34. package/bin/plugins/git_blame.i18n.json +496 -0
  35. package/bin/plugins/git_blame.ts +707 -0
  36. package/bin/plugins/git_find_file.i18n.json +314 -0
  37. package/bin/plugins/git_find_file.ts +300 -0
  38. package/bin/plugins/git_grep.i18n.json +171 -0
  39. package/bin/plugins/git_grep.ts +191 -0
  40. package/bin/plugins/git_gutter.i18n.json +93 -0
  41. package/bin/plugins/git_gutter.ts +477 -0
  42. package/bin/plugins/git_log.i18n.json +481 -0
  43. package/bin/plugins/git_log.ts +1285 -0
  44. package/bin/plugins/go-lsp.ts +143 -0
  45. package/bin/plugins/html-lsp.ts +145 -0
  46. package/bin/plugins/json-lsp.ts +145 -0
  47. package/bin/plugins/lib/fresh.d.ts +1321 -0
  48. package/bin/plugins/lib/index.ts +24 -0
  49. package/bin/plugins/lib/navigation-controller.ts +214 -0
  50. package/bin/plugins/lib/panel-manager.ts +220 -0
  51. package/bin/plugins/lib/types.ts +72 -0
  52. package/bin/plugins/lib/virtual-buffer-factory.ts +130 -0
  53. package/bin/plugins/live_grep.i18n.json +171 -0
  54. package/bin/plugins/live_grep.ts +422 -0
  55. package/bin/plugins/markdown_compose.i18n.json +223 -0
  56. package/bin/plugins/markdown_compose.ts +630 -0
  57. package/bin/plugins/merge_conflict.i18n.json +821 -0
  58. package/bin/plugins/merge_conflict.ts +1810 -0
  59. package/bin/plugins/path_complete.i18n.json +80 -0
  60. package/bin/plugins/path_complete.ts +165 -0
  61. package/bin/plugins/python-lsp.ts +162 -0
  62. package/bin/plugins/rust-lsp.ts +166 -0
  63. package/bin/plugins/search_replace.i18n.json +405 -0
  64. package/bin/plugins/search_replace.ts +484 -0
  65. package/bin/plugins/test_i18n.i18n.json +67 -0
  66. package/bin/plugins/test_i18n.ts +18 -0
  67. package/bin/plugins/theme_editor.i18n.json +3746 -0
  68. package/bin/plugins/theme_editor.ts +2063 -0
  69. package/bin/plugins/todo_highlighter.i18n.json +184 -0
  70. package/bin/plugins/todo_highlighter.ts +206 -0
  71. package/bin/plugins/typescript-lsp.ts +167 -0
  72. package/bin/plugins/vi_mode.i18n.json +1549 -0
  73. package/bin/plugins/vi_mode.ts +2747 -0
  74. package/bin/plugins/welcome.i18n.json +236 -0
  75. package/bin/plugins/welcome.ts +76 -0
  76. package/bin/themes/dark.json +102 -0
  77. package/bin/themes/dracula.json +62 -0
  78. package/bin/themes/high-contrast.json +102 -0
  79. package/bin/themes/light.json +102 -0
  80. package/bin/themes/nord.json +62 -0
  81. package/bin/themes/nostalgia.json +102 -0
  82. package/bin/themes/solarized-dark.json +62 -0
  83. package/binary-install.js +1 -1
  84. package/dist/bin/fresh.js +9 -0
  85. package/dist/binary-install.js +149 -0
  86. package/dist/binary.js +30 -0
  87. package/dist/fresh-6yhknp07.exe +0 -0
  88. package/dist/install.js +158 -0
  89. package/dist/run-fresh.js +43 -0
  90. package/package.json +7 -2
@@ -0,0 +1,768 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Config",
4
+ "description": "Main configuration structure",
5
+ "type": "object",
6
+ "properties": {
7
+ "version": {
8
+ "description": "Configuration version (for migration support)\nConfigs without this field are treated as version 0",
9
+ "type": "integer",
10
+ "format": "uint32",
11
+ "minimum": 0,
12
+ "default": 0
13
+ },
14
+ "theme": {
15
+ "description": "Color theme name",
16
+ "$ref": "#/$defs/ThemeOptions",
17
+ "default": "high-contrast"
18
+ },
19
+ "locale": {
20
+ "description": "UI locale (language) for translations\nIf not set, auto-detected from environment (LC_ALL, LC_MESSAGES, LANG)",
21
+ "$ref": "#/$defs/LocaleOptions",
22
+ "default": null
23
+ },
24
+ "check_for_updates": {
25
+ "description": "Check for new versions on quit (default: true)",
26
+ "type": "boolean",
27
+ "default": true
28
+ },
29
+ "editor": {
30
+ "description": "Editor behavior settings (indentation, line numbers, wrapping, etc.)",
31
+ "$ref": "#/$defs/EditorConfig",
32
+ "default": {
33
+ "tab_size": 4,
34
+ "auto_indent": true,
35
+ "line_numbers": true,
36
+ "relative_line_numbers": false,
37
+ "scroll_offset": 3,
38
+ "syntax_highlighting": true,
39
+ "line_wrap": true,
40
+ "highlight_timeout_ms": 5,
41
+ "snapshot_interval": 100,
42
+ "large_file_threshold_bytes": 1048576,
43
+ "estimated_line_length": 80,
44
+ "enable_inlay_hints": true,
45
+ "recovery_enabled": true,
46
+ "auto_save_interval_secs": 2,
47
+ "highlight_context_bytes": 10000,
48
+ "mouse_hover_enabled": true,
49
+ "mouse_hover_delay_ms": 500,
50
+ "double_click_time_ms": 500,
51
+ "auto_revert_poll_interval_ms": 2000,
52
+ "file_tree_poll_interval_ms": 3000,
53
+ "default_line_ending": "lf",
54
+ "cursor_style": "default",
55
+ "quick_suggestions": true
56
+ }
57
+ },
58
+ "file_explorer": {
59
+ "description": "File explorer panel settings",
60
+ "$ref": "#/$defs/FileExplorerConfig",
61
+ "default": {
62
+ "respect_gitignore": true,
63
+ "show_hidden": false,
64
+ "show_gitignored": false,
65
+ "custom_ignore_patterns": [],
66
+ "width": 0.30000001192092896
67
+ }
68
+ },
69
+ "file_browser": {
70
+ "description": "File browser settings (Open File dialog)",
71
+ "$ref": "#/$defs/FileBrowserConfig",
72
+ "default": {
73
+ "show_hidden": false
74
+ }
75
+ },
76
+ "terminal": {
77
+ "description": "Terminal settings",
78
+ "$ref": "#/$defs/TerminalConfig",
79
+ "default": {
80
+ "jump_to_end_on_output": true
81
+ }
82
+ },
83
+ "keybindings": {
84
+ "description": "Custom keybindings (overrides for the active map)",
85
+ "type": "array",
86
+ "items": {
87
+ "$ref": "#/$defs/Keybinding"
88
+ },
89
+ "default": []
90
+ },
91
+ "keybinding_maps": {
92
+ "description": "Named keybinding maps (user can define custom maps here)\nEach map can optionally inherit from another map",
93
+ "type": "object",
94
+ "additionalProperties": {
95
+ "$ref": "#/$defs/KeymapConfig"
96
+ },
97
+ "default": {}
98
+ },
99
+ "active_keybinding_map": {
100
+ "description": "Active keybinding map name",
101
+ "$ref": "#/$defs/KeybindingMapOptions",
102
+ "default": "default"
103
+ },
104
+ "languages": {
105
+ "description": "Per-language configuration overrides (tab size, formatters, etc.)",
106
+ "type": "object",
107
+ "additionalProperties": {
108
+ "$ref": "#/$defs/LanguageConfig"
109
+ },
110
+ "default": {}
111
+ },
112
+ "lsp": {
113
+ "description": "LSP server configurations by language",
114
+ "type": "object",
115
+ "additionalProperties": {
116
+ "$ref": "#/$defs/LspServerConfig"
117
+ },
118
+ "default": {}
119
+ },
120
+ "warnings": {
121
+ "description": "Warning notification settings",
122
+ "$ref": "#/$defs/WarningsConfig",
123
+ "default": {
124
+ "show_status_indicator": true
125
+ }
126
+ }
127
+ },
128
+ "$defs": {
129
+ "ThemeOptions": {
130
+ "description": "Available color themes",
131
+ "type": "string",
132
+ "enum": [
133
+ "dark",
134
+ "light",
135
+ "high-contrast",
136
+ "nostalgia"
137
+ ]
138
+ },
139
+ "LocaleOptions": {
140
+ "description": "UI locale (language). Use null for auto-detection from environment.",
141
+ "enum": [
142
+ null,
143
+ "cs",
144
+ "de",
145
+ "en",
146
+ "es",
147
+ "fr",
148
+ "it",
149
+ "ja",
150
+ "ko",
151
+ "pt-BR",
152
+ "ru",
153
+ "th",
154
+ "uk",
155
+ "zh-CN"
156
+ ]
157
+ },
158
+ "EditorConfig": {
159
+ "description": "Editor behavior configuration",
160
+ "type": "object",
161
+ "properties": {
162
+ "tab_size": {
163
+ "description": "Number of spaces per tab character",
164
+ "type": "integer",
165
+ "format": "uint",
166
+ "minimum": 0,
167
+ "default": 4
168
+ },
169
+ "auto_indent": {
170
+ "description": "Automatically indent new lines based on the previous line",
171
+ "type": "boolean",
172
+ "default": true
173
+ },
174
+ "line_numbers": {
175
+ "description": "Show line numbers in the gutter (default for new buffers)",
176
+ "type": "boolean",
177
+ "default": true
178
+ },
179
+ "relative_line_numbers": {
180
+ "description": "Show line numbers relative to cursor position",
181
+ "type": "boolean",
182
+ "default": false
183
+ },
184
+ "scroll_offset": {
185
+ "description": "Minimum lines to keep visible above/below cursor when scrolling",
186
+ "type": "integer",
187
+ "format": "uint",
188
+ "minimum": 0,
189
+ "default": 3
190
+ },
191
+ "syntax_highlighting": {
192
+ "description": "Enable syntax highlighting for code files",
193
+ "type": "boolean",
194
+ "default": true
195
+ },
196
+ "line_wrap": {
197
+ "description": "Wrap long lines to fit the window width (default for new views)",
198
+ "type": "boolean",
199
+ "default": true
200
+ },
201
+ "highlight_timeout_ms": {
202
+ "description": "Maximum time in milliseconds for syntax highlighting per frame",
203
+ "type": "integer",
204
+ "format": "uint64",
205
+ "minimum": 0,
206
+ "default": 5
207
+ },
208
+ "snapshot_interval": {
209
+ "description": "Undo history snapshot interval (number of edits between snapshots)",
210
+ "type": "integer",
211
+ "format": "uint",
212
+ "minimum": 0,
213
+ "default": 100
214
+ },
215
+ "large_file_threshold_bytes": {
216
+ "description": "File size threshold in bytes for \"large file\" behavior\nFiles larger than this will:\n- Skip LSP features\n- Use constant-size scrollbar thumb (1 char)\nFiles smaller will count actual lines for accurate scrollbar rendering",
217
+ "type": "integer",
218
+ "format": "uint64",
219
+ "minimum": 0,
220
+ "default": 1048576
221
+ },
222
+ "estimated_line_length": {
223
+ "description": "Estimated average line length in bytes (used for large file line estimation)\nThis is used by LineIterator to estimate line positions in large files\nwithout line metadata. Typical values: 80-120 bytes.",
224
+ "type": "integer",
225
+ "format": "uint",
226
+ "minimum": 0,
227
+ "default": 80
228
+ },
229
+ "enable_inlay_hints": {
230
+ "description": "Whether to enable LSP inlay hints (type hints, parameter hints, etc.)",
231
+ "type": "boolean",
232
+ "default": true
233
+ },
234
+ "recovery_enabled": {
235
+ "description": "Whether to enable file recovery (Emacs-style auto-save)\nWhen enabled, buffers are periodically saved to recovery files\nso they can be recovered if the editor crashes.",
236
+ "type": "boolean",
237
+ "default": true
238
+ },
239
+ "auto_save_interval_secs": {
240
+ "description": "Auto-save interval in seconds for file recovery\nModified buffers are saved to recovery files at this interval.\nDefault: 2 seconds for fast recovery with minimal data loss.\nSet to 0 to disable periodic auto-save (manual recovery only).",
241
+ "type": "integer",
242
+ "format": "uint32",
243
+ "minimum": 0,
244
+ "default": 2
245
+ },
246
+ "highlight_context_bytes": {
247
+ "description": "Number of bytes to look back/forward from the viewport for syntax highlighting context.\nLarger values improve accuracy for multi-line constructs (strings, comments, nested blocks)\nbut may slow down highlighting for very large files.\nDefault: 10KB (10000 bytes)",
248
+ "type": "integer",
249
+ "format": "uint",
250
+ "minimum": 0,
251
+ "default": 10000
252
+ },
253
+ "mouse_hover_enabled": {
254
+ "description": "Whether mouse hover triggers LSP hover requests.\nWhen enabled, hovering over code with the mouse will show documentation.\nDefault: true",
255
+ "type": "boolean",
256
+ "default": true
257
+ },
258
+ "mouse_hover_delay_ms": {
259
+ "description": "Delay in milliseconds before a mouse hover triggers an LSP hover request.\nLower values show hover info faster but may cause more LSP server load.\nDefault: 500ms",
260
+ "type": "integer",
261
+ "format": "uint64",
262
+ "minimum": 0,
263
+ "default": 500
264
+ },
265
+ "double_click_time_ms": {
266
+ "description": "Time window in milliseconds for detecting double-clicks.\nTwo clicks within this time are treated as a double-click (word selection).\nDefault: 500ms",
267
+ "type": "integer",
268
+ "format": "uint64",
269
+ "minimum": 0,
270
+ "default": 500
271
+ },
272
+ "auto_revert_poll_interval_ms": {
273
+ "description": "Poll interval in milliseconds for auto-reverting open buffers.\nWhen auto-revert is enabled, file modification times are checked at this interval.\nLower values detect external changes faster but use more CPU.\nDefault: 2000ms (2 seconds)",
274
+ "type": "integer",
275
+ "format": "uint64",
276
+ "minimum": 0,
277
+ "default": 2000
278
+ },
279
+ "file_tree_poll_interval_ms": {
280
+ "description": "Poll interval in milliseconds for refreshing expanded directories in the file explorer.\nDirectory modification times are checked at this interval to detect new/deleted files.\nLower values detect changes faster but use more CPU.\nDefault: 3000ms (3 seconds)",
281
+ "type": "integer",
282
+ "format": "uint64",
283
+ "minimum": 0,
284
+ "default": 3000
285
+ },
286
+ "default_line_ending": {
287
+ "description": "Default line ending format for new files.\nFiles loaded from disk will use their detected line ending format.\nOptions: \"lf\" (Unix/Linux/macOS), \"crlf\" (Windows), \"cr\" (Classic Mac)\nDefault: \"lf\"",
288
+ "$ref": "#/$defs/LineEndingOption",
289
+ "default": "lf"
290
+ },
291
+ "cursor_style": {
292
+ "description": "Cursor style for the terminal cursor.\nOptions: blinking_block, steady_block, blinking_bar, steady_bar, blinking_underline, steady_underline\nDefault: blinking_block",
293
+ "$ref": "#/$defs/CursorStyle",
294
+ "default": "default"
295
+ },
296
+ "quick_suggestions": {
297
+ "description": "Enable quick suggestions (VS Code-like behavior).\nWhen enabled, completion suggestions appear automatically while typing,\nnot just on trigger characters (like `.` or `::`).\nDefault: true",
298
+ "type": "boolean",
299
+ "default": true
300
+ }
301
+ }
302
+ },
303
+ "LineEndingOption": {
304
+ "description": "Default line ending format for new files",
305
+ "type": "string",
306
+ "enum": [
307
+ "lf",
308
+ "crlf",
309
+ "cr"
310
+ ],
311
+ "default": "lf"
312
+ },
313
+ "CursorStyle": {
314
+ "description": "Terminal cursor style",
315
+ "type": "string",
316
+ "enum": [
317
+ "default",
318
+ "blinking_block",
319
+ "steady_block",
320
+ "blinking_bar",
321
+ "steady_bar",
322
+ "blinking_underline",
323
+ "steady_underline"
324
+ ]
325
+ },
326
+ "FileExplorerConfig": {
327
+ "description": "File explorer configuration",
328
+ "type": "object",
329
+ "properties": {
330
+ "respect_gitignore": {
331
+ "description": "Whether to respect .gitignore files",
332
+ "type": "boolean",
333
+ "default": true
334
+ },
335
+ "show_hidden": {
336
+ "description": "Whether to show hidden files (starting with .) by default",
337
+ "type": "boolean",
338
+ "default": false
339
+ },
340
+ "show_gitignored": {
341
+ "description": "Whether to show gitignored files by default",
342
+ "type": "boolean",
343
+ "default": false
344
+ },
345
+ "custom_ignore_patterns": {
346
+ "description": "Custom patterns to ignore (in addition to .gitignore)",
347
+ "type": "array",
348
+ "items": {
349
+ "type": "string"
350
+ },
351
+ "default": []
352
+ },
353
+ "width": {
354
+ "description": "Width of file explorer as percentage (0.0 to 1.0)",
355
+ "type": "number",
356
+ "format": "float",
357
+ "default": 0.30000001192092896
358
+ }
359
+ }
360
+ },
361
+ "FileBrowserConfig": {
362
+ "description": "File browser configuration (for Open File dialog)",
363
+ "type": "object",
364
+ "properties": {
365
+ "show_hidden": {
366
+ "description": "Whether to show hidden files (starting with .) by default in Open File dialog",
367
+ "type": "boolean",
368
+ "default": false
369
+ }
370
+ }
371
+ },
372
+ "TerminalConfig": {
373
+ "description": "Terminal configuration",
374
+ "type": "object",
375
+ "properties": {
376
+ "jump_to_end_on_output": {
377
+ "description": "When viewing terminal scrollback and new output arrives,\nautomatically jump back to terminal mode (default: true)",
378
+ "type": "boolean",
379
+ "default": true
380
+ }
381
+ }
382
+ },
383
+ "Keybinding": {
384
+ "description": "Keybinding definition",
385
+ "type": "object",
386
+ "properties": {
387
+ "key": {
388
+ "description": "Key name (e.g., \"a\", \"Enter\", \"F1\") - for single-key bindings",
389
+ "type": "string"
390
+ },
391
+ "modifiers": {
392
+ "description": "Modifiers (e.g., [\"ctrl\"], [\"ctrl\", \"shift\"]) - for single-key bindings",
393
+ "type": "array",
394
+ "items": {
395
+ "type": "string"
396
+ }
397
+ },
398
+ "keys": {
399
+ "description": "Key sequence for chord bindings (e.g., [{\"key\": \"x\", \"modifiers\": [\"ctrl\"]}, {\"key\": \"s\", \"modifiers\": [\"ctrl\"]}])\nIf present, takes precedence over key + modifiers",
400
+ "type": "array",
401
+ "items": {
402
+ "$ref": "#/$defs/KeyPress"
403
+ }
404
+ },
405
+ "action": {
406
+ "description": "Action to perform (e.g., \"insert_char\", \"move_left\")",
407
+ "type": "string"
408
+ },
409
+ "args": {
410
+ "description": "Optional arguments for the action",
411
+ "type": "object",
412
+ "additionalProperties": true,
413
+ "default": {}
414
+ },
415
+ "when": {
416
+ "description": "Optional condition (e.g., \"mode == insert\")",
417
+ "type": [
418
+ "string",
419
+ "null"
420
+ ],
421
+ "default": null
422
+ }
423
+ },
424
+ "required": [
425
+ "action"
426
+ ],
427
+ "x-display-field": "/action"
428
+ },
429
+ "KeyPress": {
430
+ "description": "A single key in a sequence",
431
+ "type": "object",
432
+ "properties": {
433
+ "key": {
434
+ "description": "Key name (e.g., \"a\", \"Enter\", \"F1\")",
435
+ "type": "string"
436
+ },
437
+ "modifiers": {
438
+ "description": "Modifiers (e.g., [\"ctrl\"], [\"ctrl\", \"shift\"])",
439
+ "type": "array",
440
+ "items": {
441
+ "type": "string"
442
+ },
443
+ "default": []
444
+ }
445
+ },
446
+ "required": [
447
+ "key"
448
+ ]
449
+ },
450
+ "KeymapConfig": {
451
+ "description": "Keymap configuration (for built-in and user-defined keymaps)",
452
+ "type": "object",
453
+ "properties": {
454
+ "inherits": {
455
+ "description": "Optional parent keymap to inherit from",
456
+ "type": [
457
+ "string",
458
+ "null"
459
+ ]
460
+ },
461
+ "bindings": {
462
+ "description": "Keybindings defined in this keymap",
463
+ "type": "array",
464
+ "items": {
465
+ "$ref": "#/$defs/Keybinding"
466
+ },
467
+ "default": []
468
+ }
469
+ },
470
+ "x-display-field": "/inherits"
471
+ },
472
+ "KeybindingMapOptions": {
473
+ "description": "Available keybinding maps",
474
+ "type": "string",
475
+ "enum": [
476
+ "default",
477
+ "emacs",
478
+ "vscode",
479
+ "macos"
480
+ ]
481
+ },
482
+ "LanguageConfig": {
483
+ "description": "Language-specific configuration",
484
+ "type": "object",
485
+ "properties": {
486
+ "extensions": {
487
+ "description": "File extensions for this language (e.g., [\"rs\"] for Rust)",
488
+ "type": "array",
489
+ "items": {
490
+ "type": "string"
491
+ },
492
+ "default": []
493
+ },
494
+ "filenames": {
495
+ "description": "Exact filenames for this language (e.g., [\"Makefile\", \"GNUmakefile\"])",
496
+ "type": "array",
497
+ "items": {
498
+ "type": "string"
499
+ },
500
+ "default": []
501
+ },
502
+ "grammar": {
503
+ "description": "Tree-sitter grammar name",
504
+ "type": "string",
505
+ "default": ""
506
+ },
507
+ "comment_prefix": {
508
+ "description": "Comment prefix",
509
+ "type": [
510
+ "string",
511
+ "null"
512
+ ],
513
+ "default": null
514
+ },
515
+ "auto_indent": {
516
+ "description": "Whether to auto-indent",
517
+ "type": "boolean",
518
+ "default": true
519
+ },
520
+ "highlighter": {
521
+ "description": "Preferred highlighter backend (auto, tree-sitter, or textmate)",
522
+ "$ref": "#/$defs/HighlighterPreference",
523
+ "default": "auto"
524
+ },
525
+ "textmate_grammar": {
526
+ "description": "Path to custom TextMate grammar file (optional)\nIf specified, this grammar will be used when highlighter is \"textmate\"",
527
+ "type": [
528
+ "string",
529
+ "null"
530
+ ],
531
+ "default": null
532
+ },
533
+ "show_whitespace_tabs": {
534
+ "description": "Whether to show whitespace tab indicators (→) for this language\nDefaults to true. Set to false for languages like Go that use tabs for indentation.",
535
+ "type": "boolean",
536
+ "default": true
537
+ },
538
+ "use_tabs": {
539
+ "description": "Whether pressing Tab should insert a tab character instead of spaces.\nDefaults to false (insert spaces based on tab_size).\nSet to true for languages like Go and Makefile that require tabs.",
540
+ "type": "boolean",
541
+ "default": false
542
+ },
543
+ "tab_size": {
544
+ "description": "Tab size (number of spaces per tab) for this language.\nIf not specified, falls back to the global editor.tab_size setting.",
545
+ "type": [
546
+ "integer",
547
+ "null"
548
+ ],
549
+ "format": "uint",
550
+ "minimum": 0,
551
+ "default": null
552
+ },
553
+ "formatter": {
554
+ "description": "The formatter for this language (used by format_buffer command)",
555
+ "anyOf": [
556
+ {
557
+ "$ref": "#/$defs/FormatterConfig"
558
+ },
559
+ {
560
+ "type": "null"
561
+ }
562
+ ],
563
+ "default": null
564
+ },
565
+ "format_on_save": {
566
+ "description": "Whether to automatically format on save (uses the formatter above)",
567
+ "type": "boolean",
568
+ "default": false
569
+ },
570
+ "on_save": {
571
+ "description": "Actions to run when a file of this language is saved (linters, etc.)\nActions are run in order; if any fails (non-zero exit), subsequent actions don't run\nNote: Use `formatter` + `format_on_save` for formatting, not on_save",
572
+ "type": "array",
573
+ "items": {
574
+ "$ref": "#/$defs/OnSaveAction"
575
+ },
576
+ "default": []
577
+ }
578
+ },
579
+ "x-display-field": "/grammar"
580
+ },
581
+ "HighlighterPreference": {
582
+ "description": "Preference for which syntax highlighting backend to use",
583
+ "oneOf": [
584
+ {
585
+ "description": "Use tree-sitter if available, fall back to TextMate",
586
+ "type": "string",
587
+ "const": "auto"
588
+ },
589
+ {
590
+ "description": "Force tree-sitter only (no highlighting if unavailable)",
591
+ "type": "string",
592
+ "const": "tree-sitter"
593
+ },
594
+ {
595
+ "description": "Force TextMate grammar (skip tree-sitter even if available)",
596
+ "type": "string",
597
+ "const": "textmate"
598
+ }
599
+ ]
600
+ },
601
+ "FormatterConfig": {
602
+ "description": "Formatter configuration for a language",
603
+ "type": "object",
604
+ "properties": {
605
+ "command": {
606
+ "description": "The formatter command to run (e.g., \"rustfmt\", \"prettier\")",
607
+ "type": "string"
608
+ },
609
+ "args": {
610
+ "description": "Arguments to pass to the formatter\nUse \"$FILE\" to include the file path",
611
+ "type": "array",
612
+ "items": {
613
+ "type": "string"
614
+ },
615
+ "default": []
616
+ },
617
+ "stdin": {
618
+ "description": "Whether to pass buffer content via stdin (default: true)\nMost formatters read from stdin and write to stdout",
619
+ "type": "boolean",
620
+ "default": true
621
+ },
622
+ "timeout_ms": {
623
+ "description": "Timeout in milliseconds (default: 10000)",
624
+ "type": "integer",
625
+ "format": "uint64",
626
+ "minimum": 0,
627
+ "default": 10000
628
+ }
629
+ },
630
+ "required": [
631
+ "command"
632
+ ],
633
+ "x-display-field": "/command"
634
+ },
635
+ "OnSaveAction": {
636
+ "description": "Action to run when a file is saved (for linters, etc.)",
637
+ "type": "object",
638
+ "properties": {
639
+ "command": {
640
+ "description": "The shell command to run\nThe file path is available as $FILE or as an argument",
641
+ "type": "string"
642
+ },
643
+ "args": {
644
+ "description": "Arguments to pass to the command\nUse \"$FILE\" to include the file path",
645
+ "type": "array",
646
+ "items": {
647
+ "type": "string"
648
+ },
649
+ "default": []
650
+ },
651
+ "working_dir": {
652
+ "description": "Working directory for the command (defaults to project root)",
653
+ "type": [
654
+ "string",
655
+ "null"
656
+ ],
657
+ "default": null
658
+ },
659
+ "stdin": {
660
+ "description": "Whether to use the buffer content as stdin",
661
+ "type": "boolean",
662
+ "default": false
663
+ },
664
+ "timeout_ms": {
665
+ "description": "Timeout in milliseconds (default: 10000)",
666
+ "type": "integer",
667
+ "format": "uint64",
668
+ "minimum": 0,
669
+ "default": 10000
670
+ },
671
+ "enabled": {
672
+ "description": "Whether this action is enabled (default: true)\nSet to false to disable an action without removing it from config",
673
+ "type": "boolean",
674
+ "default": true
675
+ }
676
+ },
677
+ "required": [
678
+ "command"
679
+ ],
680
+ "x-display-field": "/command"
681
+ },
682
+ "LspServerConfig": {
683
+ "description": "LSP server configuration",
684
+ "type": "object",
685
+ "properties": {
686
+ "command": {
687
+ "description": "Command to spawn the server.\nRequired when enabled=true, ignored when enabled=false.",
688
+ "type": "string",
689
+ "default": ""
690
+ },
691
+ "args": {
692
+ "description": "Arguments to pass to the server",
693
+ "type": "array",
694
+ "items": {
695
+ "type": "string"
696
+ },
697
+ "default": []
698
+ },
699
+ "enabled": {
700
+ "description": "Whether the server is enabled",
701
+ "type": "boolean",
702
+ "default": true
703
+ },
704
+ "auto_start": {
705
+ "description": "Whether to auto-start this LSP server when opening matching files\nIf false (default), the server must be started manually via command palette",
706
+ "type": "boolean",
707
+ "default": false
708
+ },
709
+ "process_limits": {
710
+ "description": "Process resource limits (memory and CPU)",
711
+ "$ref": "#/$defs/ProcessLimits",
712
+ "default": {
713
+ "max_memory_percent": 50,
714
+ "max_cpu_percent": 90,
715
+ "enabled": true
716
+ }
717
+ },
718
+ "initialization_options": {
719
+ "description": "Custom initialization options to send to the server\nThese are passed in the `initializationOptions` field of the LSP Initialize request",
720
+ "default": null
721
+ }
722
+ },
723
+ "x-display-field": "/command"
724
+ },
725
+ "ProcessLimits": {
726
+ "description": "Configuration for process resource limits",
727
+ "type": "object",
728
+ "properties": {
729
+ "max_memory_percent": {
730
+ "description": "Maximum memory usage as percentage of total system memory (None = no limit)\nDefault is 50% of total system memory",
731
+ "type": [
732
+ "integer",
733
+ "null"
734
+ ],
735
+ "format": "uint32",
736
+ "minimum": 0,
737
+ "default": null
738
+ },
739
+ "max_cpu_percent": {
740
+ "description": "Maximum CPU usage as percentage of total CPU (None = no limit)\nFor multi-core systems, 100% = 1 core, 200% = 2 cores, etc.",
741
+ "type": [
742
+ "integer",
743
+ "null"
744
+ ],
745
+ "format": "uint32",
746
+ "minimum": 0,
747
+ "default": null
748
+ },
749
+ "enabled": {
750
+ "description": "Enable resource limiting (can be disabled per-platform)",
751
+ "type": "boolean",
752
+ "default": true
753
+ }
754
+ }
755
+ },
756
+ "WarningsConfig": {
757
+ "description": "Warning notification configuration",
758
+ "type": "object",
759
+ "properties": {
760
+ "show_status_indicator": {
761
+ "description": "Show warning/error indicators in the status bar (default: true)\nWhen enabled, displays a colored indicator for LSP errors and other warnings",
762
+ "type": "boolean",
763
+ "default": true
764
+ }
765
+ }
766
+ }
767
+ }
768
+ }