mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
internal/lsp: do not complete inside comments in functions
The previous change (https://go-review.googlesource.com/c/tools/+/157678) only stopped completion in comments in global scope. This change prevents completions results from being sent for comments inside of functions. Fixes golang/go#29370 Change-Id: I2b43ae2942c6ce7376d2a5f88c40e6ac45c2b773 GitHub-Last-Rev: bc4aac1370aa5758941cdfae63290f061a55e204 GitHub-Pull-Request: golang/tools#71 Reviewed-on: https://go-review.googlesource.com/c/158538 Reviewed-by: Rebecca Stambler <rstambler@golang.org>
This commit is contained in:
parent
b2f1847864
commit
2d2e1b1749
@ -73,8 +73,11 @@ func Completion(ctx context.Context, f File, pos token.Pos) (items []CompletionI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Skip completion inside comment blocks.
|
// Skip completion inside comment blocks.
|
||||||
if p, ok := path[0].(*ast.File); ok && isCommentNode(p, pos) {
|
switch path[0].(type) {
|
||||||
return items, prefix, nil
|
case *ast.File, *ast.BlockStmt:
|
||||||
|
if inComment(pos, file.Comments) {
|
||||||
|
return items, prefix, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save certain facts about the query position, including the expected type
|
// Save certain facts about the query position, including the expected type
|
||||||
@ -252,22 +255,16 @@ func lexical(path []ast.Node, pos token.Pos, pkg *types.Package, info *types.Inf
|
|||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
|
|
||||||
// isCommentNode checks if given token position is inside ast.Comment node.
|
// inComment checks if given token position is inside ast.Comment node.
|
||||||
func isCommentNode(root ast.Node, pos token.Pos) bool {
|
func inComment(pos token.Pos, commentGroups []*ast.CommentGroup) bool {
|
||||||
var found bool
|
for _, g := range commentGroups {
|
||||||
ast.Inspect(root, func(n ast.Node) bool {
|
for _, c := range g.List {
|
||||||
if n == nil {
|
if c.Pos() <= pos && pos <= c.End() {
|
||||||
return false
|
return true
|
||||||
}
|
|
||||||
if n.Pos() <= pos && pos <= n.End() {
|
|
||||||
if _, ok := n.(*ast.Comment); ok {
|
|
||||||
found = true
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
}
|
||||||
})
|
return false
|
||||||
return found
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// complit finds completions for field names inside a composite literal.
|
// complit finds completions for field names inside a composite literal.
|
||||||
|
4
internal/lsp/testdata/foo/foo.go
vendored
4
internal/lsp/testdata/foo/foo.go
vendored
@ -19,6 +19,4 @@ func _() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@complete("", Foo, IntFoo, StructFoo)
|
type IntFoo int //@item(IntFoo, "IntFoo", "int", "type"),complete("", Foo, IntFoo, StructFoo)
|
||||||
|
|
||||||
type IntFoo int //@item(IntFoo, "IntFoo", "int", "type")
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user