@@ -1469,6 +1469,11 @@ pub fn (mut f Fmt) fn_type_decl(node ast.FnTypeDecl) {
1469
1469
f.writeln ('' )
1470
1470
}
1471
1471
1472
+ struct Variant {
1473
+ name string
1474
+ id int
1475
+ }
1476
+
1472
1477
pub fn (mut f Fmt) sum_type_decl (node ast.SumTypeDecl) {
1473
1478
f.attrs (node.attrs)
1474
1479
start_pos := f.out.len
@@ -1479,33 +1484,42 @@ pub fn (mut f Fmt) sum_type_decl(node ast.SumTypeDecl) {
1479
1484
f.write_generic_types (node.generic_types)
1480
1485
f.write (' = ' )
1481
1486
1482
- mut sum_type_names := []string {cap: node.variants.len}
1483
- for variant in node.variants {
1484
- sum_type_names << f.table.type_to_str_using_aliases (variant.typ, f.mod2 alias)
1487
+ mut variants := []Variant {cap: node.variants.len}
1488
+ for i, variant in node.variants {
1489
+ variants << Variant{ f.table.type_to_str_using_aliases (variant.typ, f.mod2 alias), i}
1485
1490
f.mark_types_import_as_used (variant.typ)
1486
1491
}
1487
- sum_type_names .sort ()
1492
+ variants .sort (a.name < b.name )
1488
1493
1489
1494
mut separator := ' | '
1495
+ mut is_multiline := false
1490
1496
// if line length is too long, put each type on its own line
1491
1497
mut line_length := f.out.len - start_pos
1492
- for sum_type_name in sum_type_names {
1498
+ for variant in variants {
1493
1499
// 3 = length of ' = ' or ' | '
1494
- line_length + = 3 + sum_type_name.len
1495
- if line_length > fmt.max_len.last () {
1500
+ line_length + = 3 + variant.name.len
1501
+ if line_length > fmt.max_len.last () || (variant.id != node.variants.len - 1
1502
+ && node.variants[variant.id].end_comments.len > 0 ) {
1496
1503
separator = '\n\t | '
1504
+ is_multiline = true
1497
1505
break
1498
1506
}
1499
1507
}
1500
1508
1501
- for i, name in sum_type_names {
1509
+ for i, variant in variants {
1502
1510
if i > 0 {
1503
1511
f.write (separator)
1504
1512
}
1505
- f.write (name)
1513
+ f.write (variant.name)
1514
+ if node.variants[variant.id].end_comments.len > 0 && is_multiline {
1515
+ f.comments (node.variants[variant.id].end_comments, has_nl: false )
1516
+ }
1517
+ }
1518
+ if ! is_multiline {
1519
+ f.comments (node.variants.last ().end_comments,
1520
+ has_nl: false
1521
+ )
1506
1522
}
1507
-
1508
- f.comments (node.comments, has_nl: false )
1509
1523
}
1510
1524
1511
1525
// === Specific Expr methods ===//
0 commit comments