go/internal/lsp/helper
Peter Weinberger 2dc275501c internal/lsp/protocol: update LSP definitions and stubs
There are some (presumably provisional) new RPCs, PrepareTypeHierarchy,
SuperTYpes, and Subtypes. ServerCapabilities has a corresponding field
TypeHierarchyProvider, and the client has TypeHierarchy which is
a TypeHierarchyClientCapabilities

The name of the return type of ApplyEdit has been changed from
ApplyWorkspaceResponse to ApplyWorkspaceResult.
(its content has not changed, just the name)

srver_gen.go and its generator helper/helper.go needed a small change
to avoid using _ as an argument.

Change-Id: I8fc828e69659e0333af686ec1dd138b0c09c1c62
Reviewed-on: https://go-review.googlesource.com/c/tools/+/353169
Run-TryBot: Peter Weinberger <pjw@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Peter Weinberger <pjw@google.com>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2021-10-05 16:44:45 +00:00
..
README.md internal/lsp: fix typo 2020-01-31 14:37:46 +00:00
helper.go internal/lsp/protocol: update LSP definitions and stubs 2021-10-05 16:44:45 +00:00

README.md

Generate server_gen.go

helper generates boilerplate code for server.go by processing the generated code in protocol/tsserver.go.

First, build helper in this directory (go build .).

In directory lsp, executing go generate server.go generates the stylized file server_gen.go that contains stubs for type Server.

It decides what stubs are needed and their signatures by looking at the Server interface (-t flag). These all look somewhat like Resolve(context.Context, *CompletionItem) (*CompletionItem, error).

It then parses the lsp directory (-u flag) to see if there is a corresponding implementation function (which in this case would be named resolve). If so it discovers the parameter names needed, and generates (in server_gen.go) code like

func (s *Server) resolve(ctx context.Context, params *protocol.CompletionItem) (*protocol.CompletionItem, error) {
    return s.resolve(ctx, params)
}

If resolve is not defined (and it is not), then the body of the generated function is

    return nil, notImplemented("resolve")

So to add a capability currently not implemented, just define it somewhere in lsp. In this case, just define func (s *Server) resolve(...) and re-generate server_gen.go.