@@ -37,6 +37,15 @@ import { languages } from './languages'
3737import { useAppStore } from ' @/store/app'
3838import { useSnippetStore } from ' @/store/snippets'
3939import { track } from ' @/electron'
40+ import prettier from ' prettier/standalone'
41+ import parserTypescript from ' prettier/parser-typescript'
42+ import parserBabel from ' prettier/parser-babel'
43+ import parserHtml from ' prettier/parser-html'
44+ import parserGraphql from ' prettier/parser-graphql'
45+ import parserMarkdown from ' prettier/parser-markdown'
46+ import parserPostcss from ' prettier/parser-postcss'
47+ import parserYaml from ' prettier/parser-yaml'
48+ import { emitter } from ' @/composable'
4049
4150interface Props {
4251 lang: Language
@@ -148,6 +157,54 @@ const setValue = () => {
148157 }
149158}
150159
160+ const format = () => {
161+ const availableLang: Language [] = [
162+ ' javascript' ,
163+ ' typescript' ,
164+ ' json' ,
165+ ' json5' ,
166+ ' yaml' ,
167+ ' html' ,
168+ ' markdown' ,
169+ ' graphqlschema' ,
170+ ' css' ,
171+ ' sass' ,
172+ ' scss' ,
173+ ' less'
174+ ]
175+
176+ if (! availableLang .includes (props .lang )) return
177+
178+ let parser = props .lang as string
179+
180+ if (props .lang === ' javascript' ) parser = ' babel'
181+ if (props .lang === ' graphqlschema' ) parser = ' graphql'
182+
183+ try {
184+ const formatted = prettier .format (props .modelValue , {
185+ parser ,
186+ plugins: [
187+ parserTypescript ,
188+ parserBabel ,
189+ parserHtml ,
190+ parserMarkdown ,
191+ parserPostcss ,
192+ parserGraphql ,
193+ parserYaml
194+ ],
195+ tabWidth: appStore .editor .tabSize ,
196+ trailingComma: appStore .editor .trailingComma ,
197+ semi: appStore .editor .semi ,
198+ singleQuote: appStore .editor .singleQuote
199+ })
200+
201+ // Обновляем напрямую без debounce
202+ snippetStore .patchCurrentSnippetContentByKey (' value' , formatted )
203+ } catch (err ) {
204+ console .error (err )
205+ }
206+ }
207+
151208const setLang = () => {
152209 editor .session .setMode (` ace/mode/${localLang .value } ` )
153210 track (' snippets/set-language' , localLang .value )
@@ -213,6 +270,8 @@ watch(
213270 }
214271)
215272
273+ emitter .on (' format-snippet' , () => format ())
274+
216275window .addEventListener (' resize' , () => {
217276 forceRefresh .value = Math .random ()
218277})
0 commit comments