@@ -41,39 +41,6 @@ export const layer = Layer.effect(
4141 const commands : Record < string , string [ ] | false > = { }
4242 const formatters : Record < string , Formatter . Info > = { }
4343
44- const cfg = yield * config . get ( )
45-
46- if ( cfg . formatter !== false ) {
47- for ( const item of Object . values ( Formatter ) ) {
48- formatters [ item . name ] = item
49- }
50- for ( const [ name , item ] of Object . entries ( cfg . formatter ?? { } ) ) {
51- // Ruff and uv are both the same formatter, so disabling either should disable both.
52- if ( [ "ruff" , "uv" ] . includes ( name ) && ( cfg . formatter ?. ruff ?. disabled || cfg . formatter ?. uv ?. disabled ) ) {
53- // TODO combine formatters so shared backends like Ruff/uv don't need linked disable handling here.
54- delete formatters . ruff
55- delete formatters . uv
56- continue
57- }
58- if ( item . disabled ) {
59- delete formatters [ name ]
60- continue
61- }
62- const info = mergeDeep ( formatters [ name ] ?? { } , {
63- extensions : [ ] ,
64- ...item ,
65- } )
66-
67- formatters [ name ] = {
68- ...info ,
69- name,
70- enabled : async ( ) => info . command ?? false ,
71- }
72- }
73- } else {
74- log . info ( "all formatters are disabled" )
75- }
76-
7744 async function getCommand ( item : Formatter . Info ) {
7845 let cmd = commands [ item . name ]
7946 if ( cmd === false || cmd === undefined ) {
@@ -149,6 +116,48 @@ export const layer = Layer.effect(
149116 } )
150117 }
151118
119+ const cfg = yield * config . get ( )
120+
121+ if ( ! cfg . formatter ) {
122+ log . info ( "all formatters are disabled" )
123+ log . info ( "init" )
124+ return {
125+ formatters,
126+ isEnabled,
127+ formatFile,
128+ }
129+ }
130+
131+ for ( const item of Object . values ( Formatter ) ) {
132+ formatters [ item . name ] = item
133+ }
134+
135+ if ( cfg . formatter !== true ) {
136+ for ( const [ name , item ] of Object . entries ( cfg . formatter ) ) {
137+ const builtIn = Formatter [ name as keyof typeof Formatter ]
138+
139+ // Ruff and uv are both the same formatter, so disabling either should disable both.
140+ if ( [ "ruff" , "uv" ] . includes ( name ) && ( cfg . formatter . ruff ?. disabled || cfg . formatter . uv ?. disabled ) ) {
141+ // TODO combine formatters so shared backends like Ruff/uv don't need linked disable handling here.
142+ delete formatters . ruff
143+ delete formatters . uv
144+ continue
145+ }
146+ if ( item . disabled ) {
147+ delete formatters [ name ]
148+ continue
149+ }
150+ const info = mergeDeep ( builtIn ?? { extensions : [ ] } , item )
151+
152+ formatters [ name ] = {
153+ ...info ,
154+ name,
155+ extensions : info . extensions ?? [ ] ,
156+ enabled : builtIn && ! info . command ? builtIn . enabled : async ( ) => info . command ?? false ,
157+ }
158+ }
159+ }
160+
152161 log . info ( "init" )
153162
154163 return {
0 commit comments