Skip to content

Commit 93927ca

Browse files
committed
format: don't group interface members of different kinds
For instance, don't group exported and unexported methods, nor methods with non-methods. Fixes #168.
1 parent 7ca7e6c commit 93927ca

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

format/format.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,11 @@ func (f *fumpter) applyPre(c *astutil.Cursor) {
483483
f.removeLines(f.Line(node.Interface)+1, f.Line(removeToPos))
484484

485485
case len(f.commentsBetween(prev.End(), method.Pos())) > 0:
486-
// continue
486+
// comments in between; leave newlines alone
487+
case len(prev.Names) != len(method.Names):
488+
// don't group type unions with methods
489+
case len(prev.Names) == 1 && token.IsExported(prev.Names[0].Name) != token.IsExported(method.Names[0].Name):
490+
// don't group exported and unexported methods together
487491
default:
488492
f.removeLinesBetween(prev.End(), method.Pos())
489493
}

testdata/scripts/interface.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ type i1 interface {
1515

1616
c(x int) int
1717

18+
D()
19+
20+
E()
21+
22+
f()
1823
}
1924

2025
type i2 interface {
@@ -103,6 +108,11 @@ type i1 interface {
103108
a(x int) int
104109
b(x int) int
105110
c(x int) int
111+
112+
D()
113+
E()
114+
115+
f()
106116
}
107117

108118
type i2 interface {

testdata/scripts/typeparams.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,20 @@ type PredeclaredSignedInteger interface {
2222
}
2323

2424
type StringableSignedInteger interface {
25+
2526
~int | ~int8 | ~int16 | ~int32 | ~int64
27+
2628
String() string
2729

2830
}
2931

32+
type CombineEmbeds interface {
33+
fmt.Stringer
34+
comparable | io.Reader
35+
36+
Foo()
37+
}
38+
3039
func Caller() {
3140
Foo[int,int](1,2)
3241
}
@@ -45,9 +54,17 @@ type PredeclaredSignedInteger interface {
4554

4655
type StringableSignedInteger interface {
4756
~int | ~int8 | ~int16 | ~int32 | ~int64
57+
4858
String() string
4959
}
5060

61+
type CombineEmbeds interface {
62+
fmt.Stringer
63+
comparable | io.Reader
64+
65+
Foo()
66+
}
67+
5168
func Caller() {
5269
Foo[int, int](1, 2)
5370
}

0 commit comments

Comments
 (0)