--- /dev/null
+# By default, this rule isn't enabled.
+gofumpt foo.go
+cmp stdout foo.go
+
+# It's run with -extra. Note that the flag isn't available in gofumports,
+# following the lack of -s.
+[!gofumpt] skip
+gofumpt -extra foo.go
+cmp stdout foo.go.golden
+
+gofumpt -d foo.go.golden
+! stdout .
+
+-- foo.go --
+package p
+
+type f func(x int, y int) int
+
+type i interface {
+ add(x int, y int)
+}
+
+type s struct {
+ x int
+ y int
+}
+
+func mergeAdjacent(x int, y int) {}
+
+func mergeThreeAdjacent(x int, y int, z int) {}
+
+func mergeOneWithTwo(x, y int, z int) {}
+
+func mergeTwoWithOne(x int, y, z int) {}
+
+func mergeWithComment(
+ x int, y int, // comment
+)
+
+func mergeAllSyntax(x chan []*foo.Bar, y chan []*foo.Bar) {}
+
+func dontMergeAnonymousParams(int, int) {}
+
+func dontMergeMultipleLines(
+ x int,
+ y int,
+) {
+}
+
+func dontMergeMultipleLines2(
+ x,
+ y int,
+ z int,
+) {
+}
+-- foo.go.golden --
+package p
+
+type f func(x, y int) int
+
+type i interface {
+ add(x, y int)
+}
+
+type s struct {
+ x int
+ y int
+}
+
+func mergeAdjacent(x, y int) {}
+
+func mergeThreeAdjacent(x, y, z int) {}
+
+func mergeOneWithTwo(x, y, z int) {}
+
+func mergeTwoWithOne(x, y, z int) {}
+
+func mergeWithComment(
+ x, y int, // comment
+)
+
+func mergeAllSyntax(x, y chan []*foo.Bar) {}
+
+func dontMergeAnonymousParams(int, int) {}
+
+func dontMergeMultipleLines(
+ x int,
+ y int,
+) {
+}
+
+func dontMergeMultipleLines2(
+ x,
+ y int,
+ z int,
+) {
+}