@@ -312,30 +312,8 @@ fn writeNodeTokens(builder: *Builder, node: Ast.Node.Index) error{OutOfMemory}!v
312312 .aligned_var_decl ,
313313 = > {
314314 const var_decl = tree .fullVarDecl (node ).? ;
315- try writeToken (builder , var_decl .visib_token , .keyword );
316- try writeToken (builder , var_decl .extern_export_token , .keyword );
317- try writeToken (builder , var_decl .threadlocal_token , .keyword );
318- try writeToken (builder , var_decl .comptime_token , .keyword );
319- try writeToken (builder , var_decl .ast .mut_token , .keyword );
320-
321- if (try builder .analyser .resolveTypeOfNode (.{ .node = node , .handle = handle })) | decl_type | {
322- try colorIdentifierBasedOnType (builder , decl_type , var_decl .ast .mut_token + 1 , false , .{ .declaration = true });
323- } else {
324- try writeTokenMod (builder , var_decl .ast .mut_token + 1 , .variable , .{ .declaration = true });
325- }
326-
327- try writeNodeTokens (builder , var_decl .ast .type_node );
328- try writeNodeTokens (builder , var_decl .ast .align_node );
329- try writeNodeTokens (builder , var_decl .ast .section_node );
330-
331- if (var_decl .ast .init_node != 0 ) {
332- const equal_token = tree .firstToken (var_decl .ast .init_node ) - 1 ;
333- if (token_tags [equal_token ] == .equal ) {
334- try writeToken (builder , equal_token , .operator );
335- }
336- }
337-
338- try writeNodeTokens (builder , var_decl .ast .init_node );
315+ const resolved_type = try builder .analyser .resolveTypeOfNode (.{ .node = node , .handle = handle });
316+ try writeVarDecl (builder , var_decl , resolved_type );
339317 },
340318 .@"usingnamespace" = > {
341319 const first_token = tree .firstToken (node );
@@ -829,9 +807,14 @@ fn writeNodeTokens(builder: *Builder, node: Ast.Node.Index) error{OutOfMemory}!v
829807 .assign_destructure = > {
830808 const lhs_count = tree .extra_data [node_data [node ].lhs ];
831809 const lhs_exprs = tree .extra_data [node_data [node ].lhs + 1 .. ][0.. lhs_count ];
810+ const init_expr = node_data [node ].rhs ;
832811
833- for (lhs_exprs ) | lhs_node | {
834- try writeNodeTokens (builder , lhs_node );
812+ const resolved_type = try builder .analyser .resolveTypeOfNode (.{ .node = init_expr , .handle = handle });
813+
814+ for (lhs_exprs , 0.. ) | lhs_node , index | {
815+ const var_decl = tree .fullVarDecl (lhs_node ).? ;
816+ const field_type = if (resolved_type ) | ty | try builder .analyser .resolveTupleFieldType (ty , index ) else null ;
817+ try writeVarDecl (builder , var_decl , field_type );
835818 }
836819
837820 try writeToken (builder , main_token , .operator );
@@ -989,6 +972,35 @@ fn writeContainerField(builder: *Builder, node: Ast.Node.Index, container_decl:
989972 }
990973}
991974
975+ fn writeVarDecl (builder : * Builder , var_decl : Ast.full.VarDecl , resolved_type : ? Analyser.Type ) error {OutOfMemory }! void {
976+ const tree = builder .handle .tree ;
977+ const token_tags = tree .tokens .items (.tag );
978+
979+ try writeToken (builder , var_decl .visib_token , .keyword );
980+ try writeToken (builder , var_decl .extern_export_token , .keyword );
981+ try writeToken (builder , var_decl .threadlocal_token , .keyword );
982+ try writeToken (builder , var_decl .comptime_token , .keyword );
983+ try writeToken (builder , var_decl .ast .mut_token , .keyword );
984+
985+ if (resolved_type ) | decl_type | {
986+ try colorIdentifierBasedOnType (builder , decl_type , var_decl .ast .mut_token + 1 , false , .{ .declaration = true });
987+ } else {
988+ try writeTokenMod (builder , var_decl .ast .mut_token + 1 , .variable , .{ .declaration = true });
989+ }
990+
991+ try writeNodeTokens (builder , var_decl .ast .type_node );
992+ try writeNodeTokens (builder , var_decl .ast .align_node );
993+ try writeNodeTokens (builder , var_decl .ast .section_node );
994+
995+ if (var_decl .ast .init_node != 0 ) {
996+ const equal_token = tree .firstToken (var_decl .ast .init_node ) - 1 ;
997+ if (token_tags [equal_token ] == .equal ) {
998+ try writeToken (builder , equal_token , .operator );
999+ }
1000+ try writeNodeTokens (builder , var_decl .ast .init_node );
1001+ }
1002+ }
1003+
9921004fn writeIdentifier (builder : * Builder , name_token : Ast.Node.Index ) error {OutOfMemory }! void {
9931005 const handle = builder .handle ;
9941006 const tree = handle .tree ;
0 commit comments