Skip to content

Commit 6218386

Browse files
committed
gopls/internal/lsp/source: signature help show overload func list
1 parent b88035b commit 6218386

File tree

4 files changed

+79
-23
lines changed

4 files changed

+79
-23
lines changed
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
func _() {
2-
Demo(100) //@signature_overload("100", "Demo__1(n int) int", 1, 0)
3-
Demo(100, 200) //@signature_overload("100", "Demo__2(n1 int, n2 int)", 2, 0)
4-
Demo(100, 200) //@signature_overload("200", "Demo__2(n1 int, n2 int)", 2, 1)
2+
Demo(100) //@signature_overload("100", "Demo(n int) int", 1, 0)
3+
Demo(100, 200) //@signature_overload("100", "Demo(n1 int, n2 int)", 2, 0)
4+
Demo(100, 200) //@signature_overload("200", "Demo(n1 int, n2 int)", 2, 1)
55
}
66

77
func _() {
8-
Demo 100 //@signature_overload("100", "Demo__1(n int) int", 1, 0)
9-
Demo 100, 200 //@signature_overload("100", "Demo__2(n1 int, n2 int)", 2, 0)
10-
Demo 100, 200 //@signature_overload("200", "Demo__2(n1 int, n2 int)", 2, 1)
8+
Demo 100 //@signature_overload("100", "Demo(n int) int", 1, 0)
9+
Demo 100, 200 //@signature_overload("100", "Demo(n1 int, n2 int)", 2, 0)
10+
Demo 100, 200 //@signature_overload("200", "Demo(n1 int, n2 int)", 2, 1)
1111
}
1212

1313
func _() {
14-
add(100, 200) //@signature_overload("100", "addInt(n1 int, n2 int) int", 0, 0)
15-
add(100, 200) //@signature_overload("200", "addInt(n1 int, n2 int) int", 0, 1)
16-
add(100, 200, 300) //@signature_overload("100", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 0)
17-
add(100, 200, 300) //@signature_overload(", 3", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 1)
18-
add(100, 200, 300) //@signature_overload(" 3", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 2)
19-
add(100, 200, 300) //@signature_overload(")", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 2)
14+
add(100, 200) //@signature_overload("100", "add(n1 int, n2 int) int", 0, 0)
15+
add(100, 200) //@signature_overload("200", "add(n1 int, n2 int) int", 0, 1)
16+
add(100, 200, 300) //@signature_overload("100", "add(n1 float64, n2 float64, n3 float64) float64", 1, 0)
17+
add(100, 200, 300) //@signature_overload(", 3", "add(n1 float64, n2 float64, n3 float64) float64", 1, 1)
18+
add(100, 200, 300) //@signature_overload(" 3", "add(n1 float64, n2 float64, n3 float64) float64", 1, 2)
19+
add(100, 200, 300) //@signature_overload(")", "add(n1 float64, n2 float64, n3 float64) float64", 1, 2)
2020
}
2121

2222
func _() {
23-
add 100, 200 //@signature_overload("100", "addInt(n1 int, n2 int) int", 0, 0)
24-
add 100, 200 //@signature_overload("200", "addInt(n1 int, n2 int) int", 0, 1)
25-
add 100, 200, 300 //@signature_overload("100", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 0)
26-
add 100, 200, 300 //@signature_overload(", 3", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 1)
27-
add 100, 200, 300 //@signature_overload(" 3", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 2)
28-
add 100, 200, 300 //@signature_overload(" //", "addFloat(n1 float64, n2 float64, n3 float64) float64", 1, 2)
23+
add 100, 200 //@signature_overload("100", "add(n1 int, n2 int) int", 0, 0)
24+
add 100, 200 //@signature_overload("200", "add(n1 int, n2 int) int", 0, 1)
25+
add 100, 200, 300 //@signature_overload("100", "add(n1 float64, n2 float64, n3 float64) float64", 1, 0)
26+
add 100, 200, 300 //@signature_overload(", 3", "add(n1 float64, n2 float64, n3 float64) float64", 1, 1)
27+
add 100, 200, 300 //@signature_overload(" 3", "add(n1 float64, n2 float64, n3 float64) float64", 1, 2)
28+
add 100, 200, 300 //@signature_overload(" //", "add(n1 float64, n2 float64, n3 float64) float64", 1, 2)
2929
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
func _() {
2-
Demo //@signature_overload(" //", "Demo__1(n int) int", 1, 0)
2+
Demo //@signature_overload(" //", "Demo()", 0, 0)
33
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
func _() {
2-
Demo 100,//@signature_overload("//", "Demo__2(n1 int, n2 int)", 2, 1)
2+
Demo 100,//@signature_overload("//", "Demo(n1 int, n2 int)", 2, 1)
33
}

gopls/internal/lsp/source/signature_help_gox.go

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"context"
99
"fmt"
1010
"go/types"
11+
"strings"
1112

1213
"github.com/goplus/gop/ast"
1314
"github.com/goplus/gop/token"
@@ -37,7 +38,7 @@ func GopSignatureHelp(ctx context.Context, snapshot Snapshot, fh FileHandle, pos
3738
}
3839
var offset = int(pos - start)
3940
npos := pos
40-
if len(pgf.File.Code) >= offset {
41+
if len(pgf.File.Code) > offset {
4142
if pgf.File.Code[offset] == '\n' {
4243
offset--
4344
npos--
@@ -174,24 +175,60 @@ FindCall:
174175
Parameters: paramInfo,
175176
}, nil
176177
}
178+
makeInfoEx := func(name string, obj types.Object, sig *types.Signature) (*protocol.SignatureInformation, string, error) {
179+
d, err := HoverDocForObject(ctx, snapshot, pkg.FileSet(), obj)
180+
if err != nil {
181+
return nil, "", err
182+
}
183+
s, err := NewSignature(ctx, snapshot, pkg, sig, d, qf, mq)
184+
if err != nil {
185+
return nil, "", err
186+
}
187+
paramInfo := make([]protocol.ParameterInformation, 0, len(s.params))
188+
for _, p := range s.params {
189+
paramInfo = append(paramInfo, protocol.ParameterInformation{Label: p})
190+
}
191+
return &protocol.SignatureInformation{
192+
Label: name + s.Format(),
193+
Documentation: stringToSigInfoDocumentation(s.doc, snapshot.View().Options()),
194+
Parameters: paramInfo,
195+
}, s.doc, nil
196+
}
177197

178198
if overloads {
179199
var activeSignature int
180200
var matchSignature []int
181201
infos := make([]protocol.SignatureInformation, len(objs))
202+
docs := make([]string, len(objs))
182203
for i, o := range objs {
183204
sig := o.Type().(*types.Signature)
184-
info, err := makeInfo(o.Name(), sig)
205+
info, doc, err := makeInfoEx(ident.Name, o, sig)
185206
if err != nil {
186207
return nil, 0, 0, nil
187208
}
188209
if o.Name() == obj.Name() {
189210
activeSignature = i
190211
}
191-
if sig.Variadic() || (sig.Params() != nil && sig.Params().Len() > activeParam) {
212+
if sig.Variadic() || (sig.Params() != nil && sig.Params().Len() > activeParam) || (sig.Params() == nil && activeParam == 0) {
192213
matchSignature = append(matchSignature, i)
193214
}
194215
infos[i] = *info
216+
docs[i] = doc
217+
}
218+
for i := 0; i < len(infos); i++ {
219+
var doc string
220+
for j, v := range infos {
221+
if i == j {
222+
doc += "```doc\n* " + v.Label + "\n```\n"
223+
} else {
224+
doc += "```doc\n " + v.Label + "\n```\n"
225+
}
226+
}
227+
if s := docs[i]; s != "" {
228+
doc += "---\n"
229+
doc += stringToDocumentation(s, snapshot.View().Options())
230+
}
231+
infos[i].Documentation = stringToMarkDown(doc)
195232
}
196233
return infos, checkBestSignature(activeSignature, matchSignature), activeParam, nil
197234
}
@@ -259,3 +296,22 @@ func checkBestSignature(active int, matches []int) int {
259296
}
260297
return matches[0]
261298
}
299+
300+
func stringToMarkDown(s string) *protocol.Or_SignatureInformation_documentation {
301+
k := protocol.Markdown
302+
return &protocol.Or_SignatureInformation_documentation{
303+
Value: protocol.MarkupContent{
304+
Kind: k,
305+
Value: s,
306+
},
307+
}
308+
}
309+
310+
func stringToDocumentation(v string, options *Options) string {
311+
if options.PreferredContentFormat == protocol.Markdown {
312+
v = CommentToMarkdown(v, options)
313+
v = strings.TrimSuffix(v, "\n") // TODO(pjw): change the golden files
314+
return v
315+
}
316+
return v
317+
}

0 commit comments

Comments
 (0)