@@ -6,20 +6,39 @@ import path from "path"
66
77import * as Formatter from "./formatter"
88import { Config } from "../config/config"
9+ import { mergeDeep } from "remeda"
910
1011export namespace Format {
1112 const log = Log . create ( { service : "format" } )
1213
13- const state = App . state ( "format" , ( ) => {
14+ const state = App . state ( "format" , async ( ) => {
1415 const enabled : Record < string , boolean > = { }
16+ const cfg = await Config . get ( )
17+
18+ const formatters = { ...Formatter } as Record < string , Formatter . Info >
19+ for ( const [ name , item ] of Object . entries ( cfg . formatter ?? { } ) ) {
20+ if ( item . disabled ) {
21+ delete formatters [ name ]
22+ continue
23+ }
24+ const result : Formatter . Info = mergeDeep ( formatters [ name ] ?? { } , {
25+ command : [ ] ,
26+ extensions : [ ] ,
27+ ...item ,
28+ } )
29+ result . enabled = async ( ) => true
30+ result . name = name
31+ formatters [ name ] = result
32+ }
1533
1634 return {
1735 enabled,
36+ formatters,
1837 }
1938 } )
2039
2140 async function isEnabled ( item : Formatter . Info ) {
22- const s = state ( )
41+ const s = await state ( )
2342 let status = s . enabled [ item . name ]
2443 if ( status === undefined ) {
2544 status = await item . enabled ( )
@@ -29,11 +48,11 @@ export namespace Format {
2948 }
3049
3150 async function getFormatter ( ext : string ) {
32- const cfg = await Config . get ( )
51+ const formatters = await state ( ) . then ( ( x ) => x . formatters )
3352 const result = [ ]
34- for ( const item of Object . values ( Formatter ) ) {
53+ for ( const item of Object . values ( formatters ) ) {
54+ log . info ( "checking" , { name : item . name , ext } )
3555 if ( ! item . extensions . includes ( ext ) ) continue
36- if ( cfg . formatter ?. [ item . name ] ?. disabled ) continue
3756 if ( ! ( await isEnabled ( item ) ) ) continue
3857 result . push ( item )
3958 }
0 commit comments