1
1
import prettier from 'prettier'
2
2
import prettierParserHTML from 'prettier/parser-html'
3
+ import prettierParserAngular from 'prettier/parser-angular'
3
4
import prettierParserPostCSS from 'prettier/parser-postcss'
4
5
import prettierParserBabel from 'prettier/parser-babel'
5
6
import prettierParserEspree from 'prettier/parser-espree'
@@ -177,13 +178,13 @@ function createParser(original, transform) {
177
178
contextMap . set ( tailwindConfigPath , { context, hash } )
178
179
}
179
180
180
- transform ( ast , { env : { context, generateRules } } )
181
+ transform ( ast , { env : { context, generateRules, parsers , options } } )
181
182
return ast
182
183
} ,
183
184
}
184
185
}
185
186
186
- function transformHtml ( attributes , computedAttributes = [ ] ) {
187
+ function transformHtml ( attributes , computedAttributes = [ ] , computedType = 'js' ) {
187
188
let transform = ( ast , { env } ) => {
188
189
for ( let attr of ast . attrs ?? [ ] ) {
189
190
if ( attributes . includes ( attr . name ) ) {
@@ -193,6 +194,24 @@ function transformHtml(attributes, computedAttributes = []) {
193
194
continue
194
195
}
195
196
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
+
196
215
let ast = recast . parse ( `let __prettier_temp__ = ${ attr . value } ` , {
197
216
parser : prettierParserBabel . parsers [ 'babel-ts' ] ,
198
217
} )
@@ -409,7 +428,7 @@ export const parsers = {
409
428
lwc : createParser ( prettierParserHTML . parsers . lwc , transformHtml ( [ 'class' ] ) ) ,
410
429
angular : createParser (
411
430
prettierParserHTML . parsers . angular ,
412
- transformHtml ( [ 'class' ] , [ '[ngClass]' ] )
431
+ transformHtml ( [ 'class' ] , [ '[ngClass]' ] , 'angular' )
413
432
) ,
414
433
vue : createParser ( prettierParserHTML . parsers . vue , transformHtml ( [ 'class' ] , [ ':class' ] ) ) ,
415
434
css : createParser ( prettierParserPostCSS . parsers . css , transformCss ) ,
0 commit comments