Skip to content

Commit d2ce17d

Browse files
authored
Merge branch 'main' into patch-1
2 parents e97f293 + 4ef351b commit d2ce17d

1 file changed

Lines changed: 134 additions & 9 deletions

File tree

packages/cli/src/utils/editor.ts

Lines changed: 134 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,119 @@ const VSCODE_EXTENSIONS = {
2121
recommendations: ['VoidZero.vite-plus-extension-pack'],
2222
} as const;
2323

24+
const ZED_SETTINGS = {
25+
lsp: {
26+
oxlint: {
27+
initialization_options: {
28+
settings: {
29+
configPath: './.oxlintrc.json',
30+
run: 'onType',
31+
disableNestedConfig: false,
32+
fixKind: 'safe_fix',
33+
typeAware: true,
34+
unusedDisableDirectives: 'deny',
35+
},
36+
},
37+
},
38+
oxfmt: {
39+
initialization_options: {
40+
settings: {
41+
configPath: './.oxfmtrc.jsonc',
42+
run: 'onSave',
43+
},
44+
},
45+
},
46+
},
47+
languages: {
48+
CSS: {
49+
format_on_save: 'on',
50+
prettier: { allowed: false },
51+
formatter: [{ language_server: { name: 'oxfmt' } }],
52+
},
53+
GraphQL: {
54+
format_on_save: 'on',
55+
prettier: { allowed: false },
56+
formatter: [{ language_server: { name: 'oxfmt' } }],
57+
},
58+
Handlebars: {
59+
format_on_save: 'on',
60+
prettier: { allowed: false },
61+
formatter: [{ language_server: { name: 'oxfmt' } }],
62+
},
63+
HTML: {
64+
format_on_save: 'on',
65+
prettier: { allowed: false },
66+
formatter: [{ language_server: { name: 'oxfmt' } }],
67+
},
68+
JavaScript: {
69+
format_on_save: 'on',
70+
prettier: { allowed: false },
71+
formatter: [{ language_server: { name: 'oxfmt' } }],
72+
code_action: 'source.fixAll.oxc',
73+
},
74+
JSX: {
75+
format_on_save: 'on',
76+
prettier: { allowed: false },
77+
formatter: [{ language_server: { name: 'oxfmt' } }],
78+
},
79+
JSON: {
80+
format_on_save: 'on',
81+
prettier: { allowed: false },
82+
formatter: [{ language_server: { name: 'oxfmt' } }],
83+
},
84+
JSON5: {
85+
format_on_save: 'on',
86+
prettier: { allowed: false },
87+
formatter: [{ language_server: { name: 'oxfmt' } }],
88+
},
89+
JSONC: {
90+
format_on_save: 'on',
91+
prettier: { allowed: false },
92+
formatter: [{ language_server: { name: 'oxfmt' } }],
93+
},
94+
Less: {
95+
format_on_save: 'on',
96+
prettier: { allowed: false },
97+
formatter: [{ language_server: { name: 'oxfmt' } }],
98+
},
99+
Markdown: {
100+
format_on_save: 'on',
101+
prettier: { allowed: false },
102+
formatter: [{ language_server: { name: 'oxfmt' } }],
103+
},
104+
MDX: {
105+
format_on_save: 'on',
106+
prettier: { allowed: false },
107+
formatter: [{ language_server: { name: 'oxfmt' } }],
108+
},
109+
SCSS: {
110+
format_on_save: 'on',
111+
prettier: { allowed: false },
112+
formatter: [{ language_server: { name: 'oxfmt' } }],
113+
},
114+
TypeScript: {
115+
format_on_save: 'on',
116+
prettier: { allowed: false },
117+
formatter: [{ language_server: { name: 'oxfmt' } }],
118+
},
119+
TSX: {
120+
format_on_save: 'on',
121+
prettier: { allowed: false },
122+
formatter: [{ language_server: { name: 'oxfmt' } }],
123+
},
124+
Vue: {
125+
format_on_save: 'on',
126+
prettier: { allowed: false },
127+
formatter: [{ language_server: { name: 'oxfmt' } }],
128+
},
129+
YAML: {
130+
format_on_save: 'on',
131+
prettier: { allowed: false },
132+
formatter: [{ language_server: { name: 'oxfmt' } }],
133+
},
134+
},
135+
} as const;
136+
24137
export const EDITORS = [
25138
{
26139
id: 'vscode',
@@ -31,6 +144,14 @@ export const EDITORS = [
31144
'extensions.json': VSCODE_EXTENSIONS as Record<string, unknown>,
32145
},
33146
},
147+
{
148+
id: 'zed',
149+
label: 'Zed',
150+
targetDir: '.zed',
151+
files: {
152+
'settings.json': ZED_SETTINGS as Record<string, unknown>,
153+
},
154+
},
34155
] as const;
35156

36157
export type EditorId = (typeof EDITORS)[number]['id'];
@@ -247,9 +368,15 @@ function mergeEditorConfigs(
247368
};
248369
}
249370

250-
// settings.json: 2-level deep merge, preserving existing keys
251-
const result = { ...existing };
252-
for (const [key, value] of Object.entries(incoming)) {
371+
return deepMerge(existing, incoming);
372+
}
373+
374+
function deepMerge(
375+
target: Record<string, unknown>,
376+
source: Record<string, unknown>,
377+
): Record<string, unknown> {
378+
const result = { ...target };
379+
for (const [key, value] of Object.entries(source)) {
253380
if (!(key in result)) {
254381
result[key] = value;
255382
} else if (
@@ -260,13 +387,11 @@ function mergeEditorConfigs(
260387
value !== null &&
261388
!Array.isArray(value)
262389
) {
263-
// Nested object: merge preserving existing keys
264-
result[key] = {
265-
...(value as Record<string, unknown>),
266-
...(result[key] as Record<string, unknown>),
267-
};
390+
result[key] = deepMerge(
391+
result[key] as Record<string, unknown>,
392+
value as Record<string, unknown>,
393+
);
268394
}
269-
// else: existing key is preserved as-is
270395
}
271396
return result;
272397
}

0 commit comments

Comments
 (0)