internal/lsp/source: offer smart "append()" completions

Assigning a slice to the appendage of itself is common and tedious
enough to warrant a special case completion candidate. We now offer
smarter "append()" candidates:

    var foo []int
    foo = app<> // offer "append(foo, <>)"
    fo<> // offer "foo = append(foo, <>)"

The latter is only offered if the best completion candidate is a
slice. It is inserted as the second-best candidate because it seems
impossible to avoid annoying false positives if it is ranked first.

I added a new debug option to disable literal completions. This was to
clean up some test logic that was disabling snippets for all tests
just to defeat literal completions. My tests were failing mysteriously
due to having snippets disabled, and it was hard to figure out why.

Change-Id: I3e8313e00a1409840cb99d5d71c593435a7aeb71
Run-TryBot: Muir Manders <>
TryBot-Result: Gobot Gobot <>
Reviewed-by: Rebecca Stambler <>
8 files changed
tree: 52ead02217b0a52de192ae8deebc66bf8fb1e802
  1. .gitattributes
  2. .gitignore
  9. benchmark/
  10. blog/
  11. cmd/
  12. codereview.cfg
  13. container/
  14. cover/
  15. go.mod
  16. go.sum
  17. go/
  18. godoc/
  19. gopls/
  20. imports/
  21. internal/
  22. playground/
  23. present/
  24. refactor/
  25. txtar/

Go Tools

This subrepository holds the source for various packages and tools that support the Go programming language.

Some of the tools, godoc and vet for example, are included in binary Go distributions.

Others, including the Go guru and the test coverage tool, can be fetched with go get.

Packages include a type-checker for Go and an implementation of the Static Single Assignment form (SSA) representation for Go programs.


The easiest way to install is to run go get -u You can also manually git clone the repository to $GOPATH/src/

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see

The main issue tracker for the tools repository is located at Prefix your issue with “x/tools/(your subdir):” in the subject line, so it is easy to find.