Skip to content

Commit 0ab4b7a

Browse files
Oiyoomvdan
authored andcommitted
mixed function's signatures interpreted incorrectly
fixes #143
1 parent f3595ed commit 0ab4b7a

File tree

2 files changed

+308
-7
lines changed

2 files changed

+308
-7
lines changed

format/format.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -532,14 +532,19 @@ func (f *fumpter) applyPre(c *astutil.Cursor) {
532532
return
533533
}
534534
if sign != nil {
535-
var lastParam *ast.Field
536-
if l := sign.Results; l != nil && len(l.List) > 0 {
537-
lastParam = l.List[len(l.List)-1]
538-
} else if l := sign.Params; l != nil && len(l.List) > 0 {
539-
lastParam = l.List[len(l.List)-1]
540-
}
541535
endLine := f.Line(sign.End())
542-
if lastParam != nil && f.Line(sign.Pos()) != endLine && f.Line(lastParam.Pos()) == endLine {
536+
537+
paramClosingIsFirstCharOnEndLine := sign.Params != nil &&
538+
f.Position(sign.Params.Closing).Column == 1 &&
539+
f.Line(sign.Params.Closing) == endLine
540+
541+
resultClosingIsFirstCharOnEndLine := sign.Results != nil &&
542+
f.Position(sign.Results.Closing).Column == 1 &&
543+
f.Line(sign.Results.Closing) == endLine
544+
545+
if f.Line(sign.Pos()) != endLine &&
546+
// param/result closing is not the 1st char of the left bracket line
547+
!(paramClosingIsFirstCharOnEndLine || resultClosingIsFirstCharOnEndLine) {
543548
// The body is preceded by a multi-line function
544549
// signature, and the empty line helps readability.
545550
return

testdata/scripts/func-newlines.txt

Lines changed: 296 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,149 @@ func multilineParamsUnambiguous(p1 string,
4747

4848
}
4949

50+
func multilineParamsListNoReturn(
51+
p1 string,
52+
p2 string,
53+
) {
54+
55+
println("body")
56+
57+
}
58+
59+
func multilineParamsListReturningNamedSingleValue(
60+
p1 string,
61+
p2 string,
62+
) (err error) {
63+
64+
println("body")
65+
return err
66+
67+
}
68+
69+
func multilineParamsListReturningSingleValue(
70+
p1 string,
71+
p2 string,
72+
) error {
73+
74+
println("body")
75+
return nil
76+
77+
}
78+
79+
func multilineParamsListReturningNamedMultiValues(
80+
p1 string,
81+
p2 string,
82+
) (s string, err error) {
83+
84+
println("body")
85+
return s, err
86+
87+
}
88+
89+
func multilineParamsListReturningMultiValues(
90+
p1 string,
91+
p2 string,
92+
) (string, error) {
93+
94+
println("body")
95+
return "", nil
96+
97+
}
98+
99+
func multilineParamsListReturningNamedMultiLineValuesList(
100+
p1 string,
101+
p2 string,
102+
) (
103+
s string,
104+
err error,
105+
) {
106+
107+
println("body")
108+
return s, err
109+
110+
}
111+
112+
func multilineParamsListReturningMultiLineValues(
113+
p1 string,
114+
p2 string,
115+
) (
116+
string,
117+
error,
118+
) {
119+
120+
println("body")
121+
return "", nil
122+
123+
}
124+
125+
func multilineParamsOneParamNoReturn(
126+
p1 string,
127+
) {
128+
129+
println("body")
130+
131+
}
132+
133+
func multilineParamsOneParamReturningNamedSingleValue(
134+
p1 string,
135+
) (err error) {
136+
137+
println("body")
138+
return err
139+
140+
}
141+
142+
func multilineParamsOneParamReturningSingleValue(
143+
p1 string,
144+
) error {
145+
146+
println("body")
147+
return nil
148+
149+
}
150+
151+
func multilineParamsOneParamReturningNamedMultiValues(
152+
p1 string,
153+
) (s string, err error) {
154+
155+
println("body")
156+
return s, err
157+
158+
}
159+
160+
func multilineParamsOneParamReturningMultiValues(
161+
p1 string,
162+
) (string, error) {
163+
164+
println("body")
165+
return "", nil
166+
167+
}
168+
169+
func multilineParamsOneParamReturningNamedMultiLineValuesList(
170+
p1 string,
171+
) (
172+
s string,
173+
err error,
174+
) {
175+
176+
println("body")
177+
return s, err
178+
179+
}
180+
181+
func multilineParamsOneParamReturningMultiLineValues(
182+
p1 string,
183+
) (
184+
string,
185+
error,
186+
) {
187+
188+
println("body")
189+
return "", nil
190+
191+
}
192+
50193
func multilineResults() (p1 string,
51194
p2 string) {
52195

@@ -68,6 +211,25 @@ func multilineNoFields(
68211
println("body")
69212

70213
}
214+
215+
func f(
216+
foo int,
217+
bar string,
218+
/* baz */) {
219+
220+
body()
221+
}
222+
223+
func f2(
224+
foo int,
225+
bar string,
226+
) (
227+
string,
228+
error,
229+
/* baz */) {
230+
231+
return "", nil
232+
}
71233
-- foo.go.golden --
72234
package p
73235

@@ -102,6 +264,121 @@ func multilineParamsUnambiguous(p1 string,
102264
println("body")
103265
}
104266

267+
func multilineParamsListNoReturn(
268+
p1 string,
269+
p2 string,
270+
) {
271+
println("body")
272+
}
273+
274+
func multilineParamsListReturningNamedSingleValue(
275+
p1 string,
276+
p2 string,
277+
) (err error) {
278+
println("body")
279+
return err
280+
}
281+
282+
func multilineParamsListReturningSingleValue(
283+
p1 string,
284+
p2 string,
285+
) error {
286+
println("body")
287+
return nil
288+
}
289+
290+
func multilineParamsListReturningNamedMultiValues(
291+
p1 string,
292+
p2 string,
293+
) (s string, err error) {
294+
println("body")
295+
return s, err
296+
}
297+
298+
func multilineParamsListReturningMultiValues(
299+
p1 string,
300+
p2 string,
301+
) (string, error) {
302+
println("body")
303+
return "", nil
304+
}
305+
306+
func multilineParamsListReturningNamedMultiLineValuesList(
307+
p1 string,
308+
p2 string,
309+
) (
310+
s string,
311+
err error,
312+
) {
313+
println("body")
314+
return s, err
315+
}
316+
317+
func multilineParamsListReturningMultiLineValues(
318+
p1 string,
319+
p2 string,
320+
) (
321+
string,
322+
error,
323+
) {
324+
println("body")
325+
return "", nil
326+
}
327+
328+
func multilineParamsOneParamNoReturn(
329+
p1 string,
330+
) {
331+
println("body")
332+
}
333+
334+
func multilineParamsOneParamReturningNamedSingleValue(
335+
p1 string,
336+
) (err error) {
337+
println("body")
338+
return err
339+
}
340+
341+
func multilineParamsOneParamReturningSingleValue(
342+
p1 string,
343+
) error {
344+
println("body")
345+
return nil
346+
}
347+
348+
func multilineParamsOneParamReturningNamedMultiValues(
349+
p1 string,
350+
) (s string, err error) {
351+
println("body")
352+
return s, err
353+
}
354+
355+
func multilineParamsOneParamReturningMultiValues(
356+
p1 string,
357+
) (string, error) {
358+
println("body")
359+
return "", nil
360+
}
361+
362+
func multilineParamsOneParamReturningNamedMultiLineValuesList(
363+
p1 string,
364+
) (
365+
s string,
366+
err error,
367+
) {
368+
println("body")
369+
return s, err
370+
}
371+
372+
func multilineParamsOneParamReturningMultiLineValues(
373+
p1 string,
374+
) (
375+
string,
376+
error,
377+
) {
378+
println("body")
379+
return "", nil
380+
}
381+
105382
func multilineResults() (p1 string,
106383
p2 string) {
107384

@@ -117,3 +394,22 @@ func multilineResultsUnambiguous() (p1 string,
117394
func multilineNoFields() {
118395
println("body")
119396
}
397+
398+
func f(
399+
foo int,
400+
bar string,
401+
/* baz */) {
402+
403+
body()
404+
}
405+
406+
func f2(
407+
foo int,
408+
bar string,
409+
) (
410+
string,
411+
error,
412+
/* baz */) {
413+
414+
return "", nil
415+
}

0 commit comments

Comments
 (0)