From e66da59b073c2d509cfba3591e432d06e07bfaaa Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Mon, 4 May 2026 11:00:23 +0200 Subject: [PATCH] Go: Fix comments within field access --- rewrite-go/pkg/parser/go_parser.go | 2 +- rewrite-go/pkg/printer/go_printer.go | 1 + rewrite-go/test/comment_test.go | 13 +++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/rewrite-go/pkg/parser/go_parser.go b/rewrite-go/pkg/parser/go_parser.go index dfcb59b3d5f..d3f75b01786 100644 --- a/rewrite-go/pkg/parser/go_parser.go +++ b/rewrite-go/pkg/parser/go_parser.go @@ -1758,7 +1758,7 @@ func (ctx *parseContext) mapCallExpr(expr *ast.CallExpr) tree.Expression { switch f := fun.(type) { case *tree.FieldAccess: - selRP := tree.RightPadded[tree.Expression]{Element: f.Target} + selRP := tree.RightPadded[tree.Expression]{Element: f.Target, After: f.Name.Before} sel = &selRP name = f.Name.Element case *tree.Identifier: diff --git a/rewrite-go/pkg/printer/go_printer.go b/rewrite-go/pkg/printer/go_printer.go index 23578e6da66..244e073c9ee 100644 --- a/rewrite-go/pkg/printer/go_printer.go +++ b/rewrite-go/pkg/printer/go_printer.go @@ -279,6 +279,7 @@ func (p *GoPrinter) VisitMethodInvocation(mi *tree.MethodInvocation, param any) if mi.Select != nil { p.Visit(mi.Select.Element, out) if mi.Name.Name != "" { + p.visitSpace(mi.Select.After, out) out.Append(".") } } diff --git a/rewrite-go/test/comment_test.go b/rewrite-go/test/comment_test.go index 7b81e364ff7..08899e75720 100644 --- a/rewrite-go/test/comment_test.go +++ b/rewrite-go/test/comment_test.go @@ -113,6 +113,19 @@ func TestParseCommentInsideEmptyDelimiters(t *testing.T) { `)) } +func TestParseBlockCommentBeforeSelector(t *testing.T) { + NewRecipeSpec().RewriteRun(t, + Golang(` + package main + + import "unsafe" + + func f(x int) { + unsafe /* a comment */ .Alignof(x) + } + `)) +} + func TestParseMultilineBlockComment(t *testing.T) { NewRecipeSpec().RewriteRun(t, Golang(`