Skip to content

Commit ab2af5d

Browse files
Fix more cases of comments in empty enumerations (#7269)
1 parent 341d1aa commit ab2af5d

2 files changed

Lines changed: 57 additions & 9 deletions

File tree

rewrite-go/rewrite/pkg/parser/go_parser.go

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,7 @@ func (ctx *parseContext) mapFile(file *ast.File, sourcePath string) *tree.Compil
146146

147147
// Imports
148148
var imports *tree.Container[*tree.Import]
149-
if len(file.Imports) > 0 {
150-
imports = ctx.mapImports(file)
151-
}
149+
imports = ctx.mapImports(file)
152150

153151
// Top-level declarations (functions, types, vars, consts - excluding imports)
154152
var stmts []tree.RightPadded[tree.Statement]
@@ -224,6 +222,11 @@ func (ctx *parseContext) mapImports(file *ast.File) *tree.Container[*tree.Import
224222
ctx.skip(1) // skip ")"
225223
if len(elements) > 0 {
226224
elements[len(elements)-1].After = closeParen
225+
} else if len(closeParen.Comments) > 0 {
226+
elements = append(elements, tree.RightPadded[*tree.Import]{
227+
Element: &tree.Import{ID: uuid.New(), Qualid: &tree.Empty{ID: uuid.New()}},
228+
After: closeParen,
229+
})
227230
}
228231
}
229232

@@ -237,19 +240,30 @@ func (ctx *parseContext) mapImports(file *ast.File) *tree.Container[*tree.Import
237240
ctx.skip(1) // skip "("
238241
}
239242

240-
ctx.mapImportBlockSpecs(importDecl, &elements, tree.ImportBlock{
243+
importBlockMarker := tree.ImportBlock{
241244
Ident: uuid.New(),
242245
ClosePrevious: prevGrouped,
243246
Before: blockBefore,
244247
Grouped: grouped,
245248
GroupedBefore: groupedBefore,
246-
})
249+
}
250+
ctx.mapImportBlockSpecs(importDecl, &elements, importBlockMarker)
247251

248252
if grouped {
249253
closeParen := ctx.prefix(importDecl.Rparen)
250254
ctx.skip(1) // skip ")"
251-
if len(elements) > 0 {
255+
if len(importDecl.Specs) > 0 {
252256
elements[len(elements)-1].After = closeParen
257+
} else if len(closeParen.Comments) > 0 {
258+
imp := &tree.Import{ID: uuid.New(), Qualid: &tree.Empty{ID: uuid.New()}}
259+
imp.Markers = tree.Markers{
260+
ID: uuid.New(),
261+
Entries: []tree.Marker{importBlockMarker},
262+
}
263+
elements = append(elements, tree.RightPadded[*tree.Import]{
264+
Element: imp,
265+
After: closeParen,
266+
})
253267
}
254268
}
255269
prevGrouped = grouped
@@ -345,6 +359,11 @@ func (ctx *parseContext) mapVarConstDecl(decl *ast.GenDecl) tree.Statement {
345359

346360
if len(elements) > 0 {
347361
elements[len(elements)-1].After = rparenPrefix
362+
} else if len(rparenPrefix.Comments) > 0 {
363+
elements = append(elements, tree.RightPadded[tree.Statement]{
364+
Element: &tree.Empty{ID: uuid.New()},
365+
After: rparenPrefix,
366+
})
348367
}
349368

350369
var markerEntries []tree.Marker
@@ -473,6 +492,11 @@ func (ctx *parseContext) mapTypeDecl(decl *ast.GenDecl) tree.Statement {
473492

474493
if len(elements) > 0 {
475494
elements[len(elements)-1].After = rparenPrefix
495+
} else if len(rparenPrefix.Comments) > 0 {
496+
elements = append(elements, tree.RightPadded[tree.Statement]{
497+
Element: &tree.Empty{ID: uuid.New()},
498+
After: rparenPrefix,
499+
})
476500
}
477501

478502
specs := &tree.Container[tree.Statement]{Before: lparenPrefix, Elements: elements}
@@ -705,6 +729,11 @@ func (ctx *parseContext) mapFieldListAsParams(fl *ast.FieldList) tree.Container[
705729

706730
if len(elements) > 0 {
707731
elements[len(elements)-1].After = closeParen
732+
} else if len(closeParen.Comments) > 0 {
733+
elements = append(elements, tree.RightPadded[tree.Statement]{
734+
Element: &tree.Empty{ID: uuid.New()},
735+
After: closeParen,
736+
})
708737
}
709738

710739
return tree.Container[tree.Statement]{Before: before, Elements: elements}
@@ -1785,8 +1814,14 @@ func (ctx *parseContext) mapCompositeLit(expr *ast.CompositeLit) tree.Expression
17851814
elements[len(elements)-1].After = rbracePrefix
17861815
}
17871816
} else {
1788-
ctx.prefix(expr.Rbrace) // consume space
1789-
ctx.skip(1) // "}"
1817+
closePrefix := ctx.prefix(expr.Rbrace)
1818+
ctx.skip(1) // "}"
1819+
if len(closePrefix.Comments) > 0 {
1820+
elements = append(elements, tree.RightPadded[tree.Expression]{
1821+
Element: &tree.Empty{ID: uuid.New()},
1822+
After: closePrefix,
1823+
})
1824+
}
17901825
}
17911826

17921827
return &tree.Composite{

rewrite-go/rewrite/test/comment_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,31 @@ func TestParseCommentOnImport(t *testing.T) {
8484
`))
8585
}
8686

87-
func TestParseCommentInsideEmptyArgList(t *testing.T) {
87+
func TestParseCommentInsideEmptyDelimiters(t *testing.T) {
8888
NewRecipeSpec().RewriteRun(t,
8989
Golang(`
9090
package main
9191
92+
import ( /* unused */ )
93+
94+
type ( /* placeholder */ )
95+
96+
var ( /* placeholder */ )
97+
9298
type Client struct{}
9399
94100
func (c *Client) Unsubscribe() {}
95101
102+
type Migration struct {
103+
File string
104+
}
105+
106+
func foo( /* deprecated */ ) {}
107+
96108
func main() {
97109
c := &Client{}
98110
c.Unsubscribe( /* all */ )
111+
_ = &Migration{ /* auto detect file name */ }
99112
}
100113
`))
101114
}

0 commit comments

Comments
 (0)