internal/lsp: make snippets private fields
Change-Id: I35d883196c7c3b35e14b49c0f5c779a91e72ce42
Reviewed-on: https://go-review.googlesource.com/c/tools/+/177177
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
diff --git a/internal/lsp/completion.go b/internal/lsp/completion.go
index 2f54c68..bcc4e0e 100644
--- a/internal/lsp/completion.go
+++ b/internal/lsp/completion.go
@@ -65,11 +65,7 @@
}
insertText := candidate.InsertText
if insertTextFormat == protocol.SnippetTextFormat {
- if usePlaceholders && candidate.PlaceholderSnippet != nil {
- insertText = candidate.PlaceholderSnippet.String()
- } else if candidate.Snippet != nil {
- insertText = candidate.Snippet.String()
- }
+ insertText = candidate.Snippet(usePlaceholders)
}
item := protocol.CompletionItem{
Label: candidate.Label,
diff --git a/internal/lsp/source/completion.go b/internal/lsp/source/completion.go
index 1c309c5..2a132d5 100644
--- a/internal/lsp/source/completion.go
+++ b/internal/lsp/source/completion.go
@@ -44,7 +44,7 @@
//
// foo(${1:})
//
- Snippet *snippet.Builder
+ plainSnippet *snippet.Builder
// PlaceholderSnippet is the LSP snippet for the completion ite, containing
// placeholders. The LSP specification contains details about LSP snippets.
@@ -56,7 +56,21 @@
//
// foo(${1:a int}, ${2: b int}, ${3: c int})
//
- PlaceholderSnippet *snippet.Builder
+ placeholderSnippet *snippet.Builder
+}
+
+// Snippet is a convenience function that determines the snippet that should be
+// used for an item, depending on if the callee wants placeholders or not.
+func (i *CompletionItem) Snippet(usePlaceholders bool) string {
+ if usePlaceholders {
+ if i.placeholderSnippet != nil {
+ return i.placeholderSnippet.String()
+ }
+ }
+ if i.plainSnippet != nil {
+ return i.plainSnippet.String()
+ }
+ return i.InsertText
}
type CompletionItemKind int
diff --git a/internal/lsp/source/completion_format.go b/internal/lsp/source/completion_format.go
index ce6f2f9..6894254 100644
--- a/internal/lsp/source/completion_format.go
+++ b/internal/lsp/source/completion_format.go
@@ -81,8 +81,8 @@
Detail: detail,
Kind: kind,
Score: score,
- Snippet: plainSnippet,
- PlaceholderSnippet: placeholderSnippet,
+ plainSnippet: plainSnippet,
+ placeholderSnippet: placeholderSnippet,
}
}
@@ -126,7 +126,7 @@
params, _ := c.formatFieldList(decl.Type.Params)
results, writeResultParens := c.formatFieldList(decl.Type.Results)
item.Label, item.Detail = formatFunction(obj.Name(), params, results, writeResultParens)
- item.Snippet, item.PlaceholderSnippet = c.functionCallSnippets(obj.Name(), params)
+ item.plainSnippet, item.placeholderSnippet = c.functionCallSnippets(obj.Name(), params)
case *types.TypeName:
if types.IsInterface(obj.Type()) {
item.Kind = InterfaceCompletionItem
diff --git a/internal/lsp/source/source_test.go b/internal/lsp/source/source_test.go
index 7c3db45..7913b9c 100644
--- a/internal/lsp/source/source_test.go
+++ b/internal/lsp/source/source_test.go
@@ -173,32 +173,22 @@
}
wantCompletion := items[want.CompletionItem]
- var gotItem *source.CompletionItem
+ var got *source.CompletionItem
for _, item := range list {
if item.Label == wantCompletion.Label {
- gotItem = &item
+ got = &item
break
}
}
-
- if gotItem == nil {
+ if got == nil {
t.Fatalf("%s: couldn't find completion matching %q", src.URI(), wantCompletion.Label)
}
- var expected string
+ expected := want.PlainSnippet
if usePlaceholders {
expected = want.PlaceholderSnippet
- } else {
- expected = want.PlainSnippet
}
- insertText := gotItem.InsertText
- if usePlaceholders && gotItem.PlaceholderSnippet != nil {
- insertText = gotItem.PlaceholderSnippet.String()
- } else if gotItem.Snippet != nil {
- insertText = gotItem.Snippet.String()
- }
-
- if expected != insertText {
+ if insertText := got.Snippet(usePlaceholders); expected != insertText {
t.Errorf("%s: expected snippet %q, got %q", src, expected, insertText)
}
}