Skip to content

Commit 7527cb2

Browse files
committed
internal/lsp/source: sort cached package completions by relevance
Cached packages are probably more relevant than uncached packages, but we still need to go in relevance order, since we'll stop adding results after we hit the cap. Fixes golang/go#38461. (Hopefully.) Change-Id: I555dd5f7568baa8d69760ed5836341a474e94346 Reviewed-on: https://go-review.googlesource.com/c/tools/+/231619 Run-TryBot: Heschi Kreinick <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Rebecca Stambler <[email protected]>
1 parent 6a7cf61 commit 7527cb2

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

internal/lsp/source/completion.go

+10-4
Original file line numberDiff line numberDiff line change
@@ -849,8 +849,11 @@ func (c *completer) unimportedMembers(ctx context.Context, id *ast.Ident) error
849849
return nil
850850
})
851851
}
852+
sort.Slice(paths, func(i, j int) bool {
853+
return relevances[paths[i]] > relevances[paths[j]]
854+
})
852855

853-
for path, relevance := range relevances {
856+
for _, path := range paths {
854857
pkg := known[path]
855858
if pkg.GetTypes().Name() != id.Name {
856859
continue
@@ -862,7 +865,7 @@ func (c *completer) unimportedMembers(ctx context.Context, id *ast.Ident) error
862865
if imports.ImportPathToAssumedName(path) != pkg.GetTypes().Name() {
863866
imp.name = pkg.GetTypes().Name()
864867
}
865-
c.packageMembers(ctx, pkg.GetTypes(), unimportedScore(relevance), imp)
868+
c.packageMembers(ctx, pkg.GetTypes(), unimportedScore(relevances[path]), imp)
866869
if len(c.items) >= unimportedMemberTarget {
867870
return nil
868871
}
@@ -1134,8 +1137,11 @@ func (c *completer) unimportedPackages(ctx context.Context, seen map[string]stru
11341137
return nil
11351138
})
11361139
}
1140+
sort.Slice(paths, func(i, j int) bool {
1141+
return relevances[paths[i]] > relevances[paths[j]]
1142+
})
11371143

1138-
for path, relevance := range relevances {
1144+
for _, path := range paths {
11391145
pkg := known[path]
11401146
if _, ok := seen[pkg.GetTypes().Name()]; ok {
11411147
continue
@@ -1152,7 +1158,7 @@ func (c *completer) unimportedPackages(ctx context.Context, seen map[string]stru
11521158
}
11531159
c.found(ctx, candidate{
11541160
obj: types.NewPkgName(0, nil, pkg.GetTypes().Name(), pkg.GetTypes()),
1155-
score: unimportedScore(relevance),
1161+
score: unimportedScore(relevances[path]),
11561162
imp: imp,
11571163
})
11581164
count++

0 commit comments

Comments
 (0)