11import prettier from 'prettier'
22import prettierParserHTML from 'prettier/parser-html'
3+ import prettierParserAngular from 'prettier/parser-angular'
34import prettierParserPostCSS from 'prettier/parser-postcss'
45import prettierParserBabel from 'prettier/parser-babel'
56import prettierParserEspree from 'prettier/parser-espree'
@@ -177,13 +178,13 @@ function createParser(original, transform) {
177178 contextMap . set ( tailwindConfigPath , { context, hash } )
178179 }
179180
180- transform ( ast , { env : { context, generateRules } } )
181+ transform ( ast , { env : { context, generateRules, parsers , options } } )
181182 return ast
182183 } ,
183184 }
184185}
185186
186- function transformHtml ( attributes , computedAttributes = [ ] ) {
187+ function transformHtml ( attributes , computedAttributes = [ ] , computedType = 'js' ) {
187188 let transform = ( ast , { env } ) => {
188189 for ( let attr of ast . attrs ?? [ ] ) {
189190 if ( attributes . includes ( attr . name ) ) {
@@ -193,6 +194,24 @@ function transformHtml(attributes, computedAttributes = []) {
193194 continue
194195 }
195196
197+ if ( computedType === 'angular' ) {
198+ let directiveAst = prettierParserAngular . parsers . __ng_directive . parse (
199+ attr . value ,
200+ env . parsers ,
201+ env . options
202+ )
203+ visit ( directiveAst , {
204+ StringLiteral ( node ) {
205+ if ( ! node . value ) return
206+ attr . value =
207+ attr . value . slice ( 0 , node . start + 1 ) +
208+ sortClasses ( node . value , { env } ) +
209+ attr . value . slice ( node . end - 1 )
210+ } ,
211+ } )
212+ continue
213+ }
214+
196215 let ast = recast . parse ( `let __prettier_temp__ = ${ attr . value } ` , {
197216 parser : prettierParserBabel . parsers [ 'babel-ts' ] ,
198217 } )
@@ -409,7 +428,7 @@ export const parsers = {
409428 lwc : createParser ( prettierParserHTML . parsers . lwc , transformHtml ( [ 'class' ] ) ) ,
410429 angular : createParser (
411430 prettierParserHTML . parsers . angular ,
412- transformHtml ( [ 'class' ] , [ '[ngClass]' ] )
431+ transformHtml ( [ 'class' ] , [ '[ngClass]' ] , 'angular' )
413432 ) ,
414433 vue : createParser ( prettierParserHTML . parsers . vue , transformHtml ( [ 'class' ] , [ ':class' ] ) ) ,
415434 css : createParser ( prettierParserPostCSS . parsers . css , transformCss ) ,
0 commit comments