@@ -585,12 +585,12 @@ func (p *printer) expr(v Expr, outerPrec int) {
585
585
p .margin = m
586
586
587
587
case * ParenExpr :
588
- p .seq ("()" , & v .Start , & []Expr {v .X }, & v .End , modeParen , false , v .ForceMultiLine , false )
588
+ p .seq ("()" , & v .Start , & []Expr {v .X }, & v .End , modeParen , false , v .ForceMultiLine )
589
589
590
590
case * CallExpr :
591
591
addParen (precSuffix )
592
592
p .expr (v .X , precSuffix )
593
- p .seq ("()" , & v .ListStart , & v .List , & v .End , modeCall , v .ForceCompact , v .ForceMultiLine , false )
593
+ p .seq ("()" , & v .ListStart , & v .List , & v .End , modeCall , v .ForceCompact , v .ForceMultiLine )
594
594
595
595
case * LoadStmt :
596
596
addParen (precSuffix )
@@ -615,13 +615,17 @@ func (p *printer) expr(v Expr, outerPrec int) {
615
615
}
616
616
args = append (args , arg )
617
617
}
618
- p .seq ("()" , & v .Load , & args , & v .Rparen , modeLoad , v .ForceCompact , false , false )
618
+ p .seq ("()" , & v .Load , & args , & v .Rparen , modeLoad , v .ForceCompact , false )
619
619
620
620
case * ListExpr :
621
- p .seq ("[]" , & v .Start , & v .List , & v .End , modeList , false , v .ForceMultiLine , v .FormatAsTable )
621
+ mode := modeList
622
+ if v .FormatAsTable {
623
+ mode = modeTable
624
+ }
625
+ p .seq ("[]" , & v .Start , & v .List , & v .End , mode , false , v .ForceMultiLine )
622
626
623
627
case * SetExpr :
624
- p .seq ("{}" , & v .Start , & v .List , & v .End , modeList , false , v .ForceMultiLine , false )
628
+ p .seq ("{}" , & v .Start , & v .List , & v .End , modeList , false , v .ForceMultiLine )
625
629
626
630
case * TupleExpr :
627
631
mode := modeTuple
@@ -632,15 +636,15 @@ func (p *printer) expr(v Expr, outerPrec int) {
632
636
if v .FormatAsTableRow {
633
637
p .tabbedSeq ("()" , & v .Start , & v .List , & v .End )
634
638
} else {
635
- p .seq ("()" , & v .Start , & v .List , & v .End , mode , v .ForceCompact , v .ForceMultiLine , false )
639
+ p .seq ("()" , & v .Start , & v .List , & v .End , mode , v .ForceCompact , v .ForceMultiLine )
636
640
}
637
641
638
642
case * DictExpr :
639
643
var list []Expr
640
644
for _ , x := range v .List {
641
645
list = append (list , x )
642
646
}
643
- p .seq ("{}" , & v .Start , & list , & v .End , modeDict , false , v .ForceMultiLine , false )
647
+ p .seq ("{}" , & v .Start , & list , & v .End , modeDict , false , v .ForceMultiLine )
644
648
645
649
case * Comprehension :
646
650
p .listFor (v )
@@ -663,7 +667,7 @@ func (p *printer) expr(v Expr, outerPrec int) {
663
667
case * DefStmt :
664
668
p .printf ("def " )
665
669
p .printf (v .Name )
666
- p .seq ("()" , & v .StartPos , & v .Params , nil , modeDef , v .ForceCompact , v .ForceMultiLine , false )
670
+ p .seq ("()" , & v .StartPos , & v .Params , nil , modeDef , v .ForceCompact , v .ForceMultiLine )
667
671
if v .Type != nil {
668
672
p .printf (" -> " )
669
673
p .expr (v .Type , precLow )
@@ -763,6 +767,7 @@ const (
763
767
modeSeq // x, y
764
768
modeDef // def f(x, y)
765
769
modeLoad // load(a, b, c)
770
+ modeTable // [(x,y)] : List that prints as a table
766
771
)
767
772
768
773
// useCompactMode reports whether a sequence should be formatted in a compact mode
@@ -778,6 +783,10 @@ func (p *printer) useCompactMode(start *Position, list *[]Expr, end *End, mode s
778
783
return false
779
784
}
780
785
786
+ // Tables are always multiline
787
+ if mode == modeTable {
788
+ return false
789
+ }
781
790
// Implicit tuples are always compact
782
791
if mode == modeSeq {
783
792
return true
@@ -833,19 +842,19 @@ func (p *printer) useCompactMode(start *Position, list *[]Expr, end *End, mode s
833
842
// The mode parameter specifies the sequence mode (see above).
834
843
// If multiLine is true, seq avoids the compact form even
835
844
// for 0- and 1-element sequences.
836
- func (p * printer ) seq (brack string , start * Position , list * []Expr , end * End , mode seqMode , forceCompact , forceMultiLine , forceTabular bool ) {
845
+ func (p * printer ) seq (brack string , start * Position , list * []Expr , end * End , mode seqMode , forceCompact , forceMultiLine bool ) {
837
846
if mode != modeSeq {
838
847
p .printf ("%s" , brack [:1 ])
839
848
}
840
849
841
850
p .depth ++
842
- if forceTabular {
851
+ if mode == modeTable {
843
852
p .tabWriterOn = true
844
853
p .tWriter = new (tabwriter.Writer )
845
854
p .tWriter .Init (p , 0 , 0 , 4 , ' ' , tabwriter .TabIndent )
846
855
}
847
856
defer func () {
848
- if forceTabular {
857
+ if mode == modeTable {
849
858
p .tWriter .Flush ()
850
859
}
851
860
}()
0 commit comments