@@ -4,9 +4,9 @@ use biome_db::ParsedSource;
44use biome_html_syntax:: {
55 AnyHtmlComponentObjectName , AnyHtmlTagName , AnySvelteBindingAssignmentBinding ,
66 AnySvelteBindingProperty , AnySvelteBlock , AnySvelteBlockItem , AnySvelteDestructuredName ,
7- AnySvelteDirective , AnySvelteEachName , AnyVueVForBinding , AnyVueVForBindingListElement ,
8- AnyVueVForDestructuredBinding , HtmlElement , HtmlRoot , HtmlSelfClosingElement ,
9- VueVForIdentifierBinding , VueVForValue ,
7+ AnySvelteDirective , AnySvelteEachName , AnyVueDirective , AnyVueDirectiveArgument ,
8+ AnyVueVForBinding , AnyVueVForBindingListElement , AnyVueVForDestructuredBinding , HtmlElement ,
9+ HtmlRoot , HtmlSelfClosingElement , VueVForIdentifierBinding , VueVForValue ,
1010} ;
1111use biome_js_syntax:: {
1212 AnyJsArrayAssignmentPatternElement , AnyJsArrayBindingPatternElement , AnyJsArrayElement ,
@@ -1211,6 +1211,7 @@ impl EmbeddedReferencesBuilder {
12111211
12121212 fn visit_html_root ( & mut self , root : & HtmlRoot , file_source : & HtmlFileSource ) {
12131213 let is_svelte = file_source. is_svelte ( ) ;
1214+ let is_vue = file_source. is_vue ( ) ;
12141215 for node in root. syntax ( ) . descendants ( ) {
12151216 if let Some ( element) = HtmlElement :: cast_ref ( & node) {
12161217 self . visit_html_element ( & element) ;
@@ -1223,6 +1224,10 @@ impl EmbeddedReferencesBuilder {
12231224 if is_svelte && let Some ( directive) = AnySvelteDirective :: cast_ref ( & node) {
12241225 self . register_svelte_directive_reference ( & directive) ;
12251226 }
1227+
1228+ if is_vue && let Some ( directive) = AnyVueDirective :: cast_ref ( & node) {
1229+ self . register_vue_directive_reference ( & directive) ;
1230+ }
12261231 }
12271232 }
12281233
@@ -1264,6 +1269,37 @@ impl EmbeddedReferencesBuilder {
12641269 Some ( ( ) )
12651270 }
12661271
1272+ fn register_vue_directive_reference ( & mut self , directive : & AnyVueDirective ) -> Option < ( ) > {
1273+ let value = match directive {
1274+ AnyVueDirective :: VueVBindShorthandDirective ( directive)
1275+ if directive. initializer ( ) . is_none ( ) =>
1276+ {
1277+ directive. arg ( ) . ok ( ) ?
1278+ }
1279+ AnyVueDirective :: VueDirective ( directive)
1280+ if directive. is_binding ( ) && directive. initializer ( ) . is_none ( ) =>
1281+ {
1282+ directive. arg ( ) ?
1283+ }
1284+ _ => return None ,
1285+ } ;
1286+
1287+ self . register_vue_binding_attribute ( value. arg ( ) )
1288+ }
1289+
1290+ fn register_vue_binding_attribute (
1291+ & mut self ,
1292+ arg : Option < AnyVueDirectiveArgument > ,
1293+ ) -> Option < ( ) > {
1294+ let token = match arg? {
1295+ AnyVueDirectiveArgument :: VueStaticArgument ( arg) => arg. name_token ( ) . ok ( ) ?,
1296+ _ => return None ,
1297+ } ;
1298+
1299+ self . register_reference ( token. text_trimmed_range ( ) , token. token_text_trimmed ( ) ) ;
1300+ Some ( ( ) )
1301+ }
1302+
12671303 fn visit_html_element ( & mut self , element : & HtmlElement ) -> Option < ( ) > {
12681304 if element. is_script_tag ( ) || element. is_style_tag ( ) {
12691305 return None ;
0 commit comments