1
0
mirror of https://github.com/golang/go synced 2024-10-01 12:28:37 -06:00
go/internal/lsp/source
Muir Manders 7baacfbe02 internal/lsp: support function literal completions
Now we will offer function literal completions when we know the
expected type is a function. For example:

sort.Slice(someSlice, <>)

will offer the completion "func(...) {}" which if selected will
insert:

func(i, j int) bool {<>}

I opted to use an abbreviated label "func(...) {}" because function
signatures can be quite long/verbose with all the type names in there.

The only interesting challenge is how to handle signatures that don't
name the parameters. For example,

func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {

does not name the "ResponseWriter" and "Request" parameters. I went
with a minimal effort approach where we try abbreviating the type
names, so the literal completion item for "handler" would look like:

func(<rw> ResponseWriter, <r> *Request) {<>}

where <> denote placeholders. The user can tab through quickly if they
like the abbreviations, otherwise they can rename them.

For unnamed types or if the abbreviation would duplicate a previous
abbreviation, we fall back to "_" as the parameter name. The user will
have to rename the parameter before they can use it.

One side effect of this is that we cannot support function literal
completions with unnamed parameters unless the user has enabled
snippet placeholders.

Change-Id: Ic0ec81e85cd8de79bff73314e80e722f10f8c84c
Reviewed-on: https://go-review.googlesource.com/c/tools/+/193699
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2019-09-18 23:49:17 +00:00
..
analysis.go go/analysis: handle common nil pointers 2019-08-24 21:01:00 +00:00
completion_format.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
completion_literal.go internal/lsp: support function literal completions 2019-09-18 23:49:17 +00:00
completion_snippet.go internal/lsp: simplify snippet config/generation 2019-09-10 04:45:52 +00:00
completion.go internal/lsp: support function literal completions 2019-09-18 23:49:17 +00:00
deep_completion.go internal/lsp: tighten up completion budget check 2019-09-17 02:32:08 +00:00
diagnostics_test.go internal/span: change URI.Filename so it just returns the filename 2019-06-10 21:39:43 +00:00
diagnostics.go internal/lsp/source: add sortslice analyzer 2019-09-18 16:24:38 +00:00
enums.go internal/lsp: switch to using protocol positions for document symbols 2019-09-06 18:11:17 +00:00
errors.go internal/lsp: show errors when the user is in the wrong directory 2019-09-17 21:41:55 +00:00
folding_range.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
format.go internal/lsp: show errors when the user is in the wrong directory 2019-09-17 21:41:55 +00:00
highlight.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
hover.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
identifier.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
imports_test.go internal/lsp: abstract the diff library so it can be substituted 2019-08-20 03:37:07 +00:00
imports.go internal/lsp: abstract the diff library so it can be substituted 2019-08-20 03:37:07 +00:00
options.go internal/lsp: tighten up completion budget check 2019-09-17 02:32:08 +00:00
references.go internal/lsp: remove helpers for getting packages 2019-09-17 16:23:42 +00:00
rename_check.go internal/lsp: use memoize package to cache source.Packages 2019-08-13 21:41:43 +00:00
rename.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
signature_help.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
source_test.go internal/lsp: support function literal completions 2019-09-18 23:49:17 +00:00
suggested_fix.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
symbols.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00
util.go internal/lsp: add literal completion candidates 2019-09-18 17:13:17 +00:00
view.go internal/lsp: distinguish parse errors from actual errors 2019-09-17 21:21:32 +00:00