diff --git a/internal/lsp/source/rename.go b/internal/lsp/source/rename.go index da7faf8f7d..70dfcfbc93 100644 --- a/internal/lsp/source/rename.go +++ b/internal/lsp/source/rename.go @@ -289,6 +289,38 @@ func (r *renamer) docComment(pkg Package, id *ast.Ident) *ast.CommentGroup { return decl.Doc } case *ast.Ident: + case *ast.AssignStmt: + // *ast.AssignStmt doesn't have an associated comment group. + // So, we try to find a comment just before the identifier. + + // Try to find a comment group only for short variable declarations (:=). + if decl.Tok != token.DEFINE { + return nil + } + + var file *ast.File + for _, f := range pkg.GetSyntax() { + if f.Pos() <= id.Pos() && id.Pos() <= f.End() { + file = f + break + } + } + if file == nil { + return nil + } + + identLine := r.fset.Position(id.Pos()).Line + for _, comment := range file.Comments { + if comment.Pos() > id.Pos() { + // Comment is after the identifier. + continue + } + + lastCommentLine := r.fset.Position(comment.End()).Line + if lastCommentLine+1 == identLine { + return comment + } + } default: return nil } diff --git a/internal/lsp/testdata/rename/issue42134/1.go b/internal/lsp/testdata/rename/issue42134/1.go new file mode 100644 index 0000000000..056f8476a2 --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/1.go @@ -0,0 +1,8 @@ +package issue42134 + +func _() { + // foo computes things. + foo := func() {} + + foo() //@rename("foo", "bar") +} diff --git a/internal/lsp/testdata/rename/issue42134/1.go.golden b/internal/lsp/testdata/rename/issue42134/1.go.golden new file mode 100644 index 0000000000..266aeef4b6 --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/1.go.golden @@ -0,0 +1,10 @@ +-- bar-rename -- +package issue42134 + +func _() { + // bar computes things. + bar := func() {} + + bar() //@rename("foo", "bar") +} + diff --git a/internal/lsp/testdata/rename/issue42134/2.go b/internal/lsp/testdata/rename/issue42134/2.go new file mode 100644 index 0000000000..e9f639575c --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/2.go @@ -0,0 +1,12 @@ +package issue42134 + +import "fmt" + +func _() { + // minNumber is a min number. + // Second line. + minNumber := min(1, 2) + fmt.Println(minNumber) //@rename("minNumber", "res") +} + +func min(a, b int) int { return a } diff --git a/internal/lsp/testdata/rename/issue42134/2.go.golden b/internal/lsp/testdata/rename/issue42134/2.go.golden new file mode 100644 index 0000000000..406a3833c4 --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/2.go.golden @@ -0,0 +1,14 @@ +-- res-rename -- +package issue42134 + +import "fmt" + +func _() { + // res is a min number. + // Second line. + res := min(1, 2) + fmt.Println(res) //@rename("minNumber", "res") +} + +func min(a, b int) int { return a } + diff --git a/internal/lsp/testdata/rename/issue42134/3.go b/internal/lsp/testdata/rename/issue42134/3.go new file mode 100644 index 0000000000..7666f57d34 --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/3.go @@ -0,0 +1,11 @@ +package issue42134 + +func _() { + /* + tests contains test cases + */ + tests := []struct { //@rename("tests", "testCases") + in, out string + }{} + _ = tests +} diff --git a/internal/lsp/testdata/rename/issue42134/3.go.golden b/internal/lsp/testdata/rename/issue42134/3.go.golden new file mode 100644 index 0000000000..cdcae18089 --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/3.go.golden @@ -0,0 +1,13 @@ +-- testCases-rename -- +package issue42134 + +func _() { + /* + testCases contains test cases + */ + testCases := []struct { //@rename("tests", "testCases") + in, out string + }{} + _ = testCases +} + diff --git a/internal/lsp/testdata/rename/issue42134/4.go b/internal/lsp/testdata/rename/issue42134/4.go new file mode 100644 index 0000000000..c953520bc9 --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/4.go @@ -0,0 +1,8 @@ +package issue42134 + +func _() { + // a is equal to 5. Comment must stay the same + + a := 5 + _ = a //@rename("a", "b") +} diff --git a/internal/lsp/testdata/rename/issue42134/4.go.golden b/internal/lsp/testdata/rename/issue42134/4.go.golden new file mode 100644 index 0000000000..2086cf74cf --- /dev/null +++ b/internal/lsp/testdata/rename/issue42134/4.go.golden @@ -0,0 +1,10 @@ +-- b-rename -- +package issue42134 + +func _() { + // a is equal to 5. Comment must stay the same + + b := 5 + _ = b //@rename("a", "b") +} + diff --git a/internal/lsp/testdata/summary.txt.golden b/internal/lsp/testdata/summary.txt.golden index ce4d7e4acf..edbb4fa568 100644 --- a/internal/lsp/testdata/summary.txt.golden +++ b/internal/lsp/testdata/summary.txt.golden @@ -19,7 +19,7 @@ DefinitionsCount = 95 TypeDefinitionsCount = 18 HighlightsCount = 69 ReferencesCount = 25 -RenamesCount = 33 +RenamesCount = 37 PrepareRenamesCount = 7 SymbolsCount = 5 WorkspaceSymbolsCount = 20