@@ -1382,6 +1382,7 @@ fn collectContainerFields(
1382
1382
const decl = document_scope .declarations .get (@intFromEnum (decl_index ));
1383
1383
if (decl != .ast_node ) continue ;
1384
1384
const decl_handle : Analyser.DeclWithHandle = .{ .decl = decl , .handle = scope_handle .handle , .container_type = container };
1385
+ const maybe_resolved_ty = try decl_handle .resolveType (builder .analyser );
1385
1386
const tree = scope_handle .handle .tree ;
1386
1387
1387
1388
const name = offsets .tokenToSlice (tree , decl .nameToken (tree ));
@@ -1396,6 +1397,14 @@ fn collectContainerFields(
1396
1397
1397
1398
const insert_text = insert_text : {
1398
1399
if (likely != .struct_field and likely != .enum_comparison and likely != .switch_case and ! field .ast .tuple_like ) {
1400
+ if (container .isTaggedUnion () and
1401
+ maybe_resolved_ty != null and
1402
+ maybe_resolved_ty .? .data == .ip_index and
1403
+ maybe_resolved_ty .? .data .ip_index .type != .unknown_type and
1404
+ builder .analyser .ip .onePossibleValue (maybe_resolved_ty .? .data .ip_index .type ) != .none )
1405
+ {
1406
+ break :insert_text name ;
1407
+ }
1399
1408
if (use_snippets )
1400
1409
break :insert_text try std .fmt .allocPrint (builder .arena , "{{ .{s} = $1 }}$0" , .{name })
1401
1410
else
@@ -1419,7 +1428,7 @@ fn collectContainerFields(
1419
1428
break :insert_text try std .fmt .allocPrint (builder .arena , "{s} = " , .{name });
1420
1429
};
1421
1430
1422
- const detail = if (try decl_handle . resolveType ( builder . analyser ) ) | ty | detail : {
1431
+ const detail = if (maybe_resolved_ty ) | ty | detail : {
1423
1432
const type_str = try ty .stringifyTypeOf (builder .analyser , .{ .truncate_container_decls = false });
1424
1433
if (field .ast .value_expr .unwrap ()) | value_expr | {
1425
1434
const value_str = offsets .nodeToSlice (tree , value_expr );
@@ -1447,7 +1456,7 @@ fn collectContainerFields(
1447
1456
if (container .data != .container ) continue ;
1448
1457
if (! likely .allowsDeclLiterals ()) continue ;
1449
1458
// decl literal
1450
- var expected_ty = try decl_handle . resolveType ( builder . analyser ) orelse continue ;
1459
+ var expected_ty = maybe_resolved_ty orelse continue ;
1451
1460
expected_ty = try expected_ty .typeOf (builder .analyser );
1452
1461
expected_ty = expected_ty .resolveDeclLiteralResultType ();
1453
1462
if (expected_ty .data != .container ) continue ;
@@ -1464,7 +1473,7 @@ fn collectContainerFields(
1464
1473
if (container .data != .container ) continue ;
1465
1474
if (! likely .allowsDeclLiterals ()) continue ;
1466
1475
// decl literal
1467
- const resolved_ty = try decl_handle . resolveType ( builder . analyser ) orelse continue ;
1476
+ const resolved_ty = maybe_resolved_ty orelse continue ;
1468
1477
var expected_ty = try builder .analyser .resolveReturnType (resolved_ty ) orelse continue ;
1469
1478
expected_ty = expected_ty .resolveDeclLiteralResultType ();
1470
1479
if (expected_ty .data != .container ) continue ;
0 commit comments