From 6b026b04207e06c77f91478f5ff48004ee05e91c Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Mon, 24 Dec 2018 22:31:37 +0200 Subject: [PATCH 1/4] Add the receiver to method completions Fixes #9 --- internal/suggest/candidate.go | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/internal/suggest/candidate.go b/internal/suggest/candidate.go index 7bfd64be..4e2c25c4 100644 --- a/internal/suggest/candidate.go +++ b/internal/suggest/candidate.go @@ -9,10 +9,11 @@ import ( ) type Candidate struct { - Class string `json:"class"` - PkgPath string `json:"package"` - Name string `json:"name"` - Type string `json:"type"` + Class string `json:"class"` + PkgPath string `json:"package"` + Name string `json:"name"` + Type string `json:"type"` + Receiver string `json:"receiver"` } func (c Candidate) Suggestion() string { @@ -129,11 +130,19 @@ func (b *candidateCollector) asCandidate(obj types.Object) Candidate { path = pkg.Path() } + receiver := "" + if sig, ok := typ.(*types.Signature); ok { + if receiverVar := sig.Recv(); receiverVar != nil { + receiver = types.TypeString(receiverVar.Type(), func(*types.Package) string { return "" }) + } + } + return Candidate{ - Class: objClass, - PkgPath: path, - Name: obj.Name(), - Type: typStr, + Class: objClass, + PkgPath: path, + Name: obj.Name(), + Type: typStr, + Receiver: receiver, } } From 430efc4512d6bdaa887ac5d0bba86092e506a454 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Tue, 25 Dec 2018 02:19:38 +0200 Subject: [PATCH 2/4] Add omitempty to Candidate.Receiver as it will often be empty --- internal/suggest/candidate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/suggest/candidate.go b/internal/suggest/candidate.go index 4e2c25c4..0202ad19 100644 --- a/internal/suggest/candidate.go +++ b/internal/suggest/candidate.go @@ -13,7 +13,7 @@ type Candidate struct { PkgPath string `json:"package"` Name string `json:"name"` Type string `json:"type"` - Receiver string `json:"receiver"` + Receiver string `json:"receiver,omitempty"` } func (c Candidate) Suggestion() string { From 6686fab8f3ca4e6f27550dac37f2c158eb1a5956 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Wed, 26 Dec 2018 19:56:07 +0200 Subject: [PATCH 3/4] Review fixes --- internal/suggest/candidate.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/suggest/candidate.go b/internal/suggest/candidate.go index 0202ad19..ec0d0f71 100644 --- a/internal/suggest/candidate.go +++ b/internal/suggest/candidate.go @@ -130,10 +130,12 @@ func (b *candidateCollector) asCandidate(obj types.Object) Candidate { path = pkg.Path() } - receiver := "" + var receiver string if sig, ok := typ.(*types.Signature); ok { - if receiverVar := sig.Recv(); receiverVar != nil { - receiver = types.TypeString(receiverVar.Type(), func(*types.Package) string { return "" }) + if sig.Recv() != nil { + receiver = types.TypeString(sig.Recv().Type(), func(*types.Package) string { + return "" + }) } } From af672b8a6dbef3e540c4fadd23f0246fa1a06449 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Wed, 26 Dec 2018 20:14:15 +0200 Subject: [PATCH 4/4] Review fix --- internal/suggest/candidate.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/internal/suggest/candidate.go b/internal/suggest/candidate.go index ec0d0f71..8f86a7e7 100644 --- a/internal/suggest/candidate.go +++ b/internal/suggest/candidate.go @@ -131,12 +131,10 @@ func (b *candidateCollector) asCandidate(obj types.Object) Candidate { } var receiver string - if sig, ok := typ.(*types.Signature); ok { - if sig.Recv() != nil { - receiver = types.TypeString(sig.Recv().Type(), func(*types.Package) string { - return "" - }) - } + if sig, ok := typ.(*types.Signature); ok && sig.Recv() != nil { + receiver = types.TypeString(sig.Recv().Type(), func(*types.Package) string { + return "" + }) } return Candidate{