@@ -57,5 +57,63 @@ export async function formatFile({ parserName, fileName, code }: FormatFileArgs)
5757 ...prettierConfig ,
5858 parser : parserName ,
5959 filepath : fileName ,
60+ // TODO remove this, enabling for test
61+ embeddedLanguageFormatting : "auto" ,
62+ // TODO: cache this
63+ plugins : await getPlugins ( prettierCache ) ,
6064 } ) ;
6165}
66+
67+ async function getPlugins ( prettier ) {
68+ const { languages } = await prettier . getSupportInfo ( ) ;
69+
70+ const programParser = {
71+ astFormat : "oxfmt" ,
72+ parse : ( text ) => ( {
73+ type : "Program" ,
74+ body : [ ] ,
75+ sourceType : "module" ,
76+ __oxfmtFormatted : "formatted by oxfmt" ,
77+ } ) ,
78+ } ;
79+
80+ const expressionParser = {
81+ astFormat : "oxfmt" ,
82+ parse : ( text ) => ( {
83+ type : "Program" ,
84+ body : [ ] ,
85+ sourceType : "module" ,
86+ __oxfmtFormatted : "formatted by oxfmt expr" ,
87+ } ) ,
88+ } ;
89+
90+ return [
91+ {
92+ languages : languages
93+ . filter ( ( l ) => [ "JavaScript" , "JSX" , "TypeScript" , "TSX" ] . includes ( l . name ) )
94+ . map ( ( l ) => ( { ...l , parsers : l . name . includes ( "Type" ) ? [ "oxc-ts" ] : [ "oxc" ] } ) ) ,
95+
96+ parsers : {
97+ oxc : programParser ,
98+ "oxc-ts" : programParser ,
99+ babel : programParser ,
100+ "babel-flow" : programParser ,
101+ "babel-ts" : programParser ,
102+ typescript : programParser ,
103+ flow : programParser ,
104+ __vue_expression : expressionParser ,
105+ __vue_ts_expression : expressionParser ,
106+ __vue_event_binding : expressionParser ,
107+ __vue_ts_event_binding : expressionParser ,
108+ __js_expression : expressionParser ,
109+ __ts_expression : expressionParser ,
110+ } ,
111+
112+ printers : {
113+ oxfmt : {
114+ print : ( path ) => path . node . __oxfmtFormatted || "/* ERROR */" ,
115+ } ,
116+ } ,
117+ } ,
118+ ] ;
119+ }
0 commit comments