@@ -20,29 +20,37 @@ func (l *LanguageService) ProvideCodeLenses(ctx context.Context, documentURI lsp
2020 return lsproto.CodeLensResponse {}, nil
2121 }
2222
23- var lenses []* lsproto.CodeLens
23+ // Keeps track of the last symbol to avoid duplicating code lenses across overloads.
24+ var lastSymbol * ast.Symbol
25+ var result []* lsproto.CodeLens
2426 var visit func (node * ast.Node ) bool
2527 visit = func (node * ast.Node ) bool {
2628 if ctx .Err () != nil {
2729 return true
2830 }
2931
30- if userPrefs .ReferencesCodeLensEnabled && isValidReferenceLensNode (node , userPrefs ) {
31- lenses = append (lenses , l .newCodeLensForNode (documentURI , file , node , lsproto .CodeLensKindReferences ))
32- }
32+ if currentSymbol := node .Symbol (); lastSymbol != currentSymbol {
33+ lastSymbol = currentSymbol
34+
35+ if userPrefs .ReferencesCodeLensEnabled && isValidReferenceLensNode (node , userPrefs ) {
36+ result = append (result , l .newCodeLensForNode (documentURI , file , node , lsproto .CodeLensKindReferences ))
37+ }
3338
34- if userPrefs .ImplementationsCodeLensEnabled && isValidImplementationsCodeLensNode (node , userPrefs ) {
35- lenses = append (lenses , l .newCodeLensForNode (documentURI , file , node , lsproto .CodeLensKindImplementations ))
39+ if userPrefs .ImplementationsCodeLensEnabled && isValidImplementationsCodeLensNode (node , userPrefs ) {
40+ result = append (result , l .newCodeLensForNode (documentURI , file , node , lsproto .CodeLensKindImplementations ))
41+ }
3642 }
3743
44+ savedLastSymbol := lastSymbol
3845 node .ForEachChild (visit )
46+ lastSymbol = savedLastSymbol
3947 return false
4048 }
4149
4250 visit (file .AsNode ())
4351
4452 return lsproto.CodeLensResponse {
45- CodeLenses : & lenses ,
53+ CodeLenses : & result ,
4654 }, nil
4755}
4856
0 commit comments