Open
Description
How do you implement a language server using this repository?
I tried the following and it creates nilpointer exceptions because "Server" is empty
func NewLangServer(logger *zap.Logger) *LangServer {
server := new(LangServer)
return server
}
type LangServer struct {
protocol.Server
}
Initialized like this:
f, _ := os.Create("lsp-log.txt")
logr, _ := zap.NewDevelopment(zap.ErrorOutput(f))
srv := NewLangServer(logr)
conn, cl := protocol.NewServer(ctx,
srv,
jsonrpc2.NewStream(os.Stdin, os.Stdout),
logr,
jsonrpc2.WithLogger(logr))
if err := conn.Run(ctx); err != nil {
// ...
}
if err := cl.Run(ctx); err != nil {
// ...
}
produces
2019-06-22T14:57:45.363+0200 DEBUG jsonrpc2/jsonrpc2.go:346 deliver
panic: runtime error: invalid memory address or nil pointer dereference
which happens in server_json.go
func ServerHandler(ctx context.Context, server ServerInterface, logger *zap.Logger) jsonrpc2.Handler {
return func(ctx context.Context, conn *jsonrpc2.Conn, r *jsonrpc2.Request) {
dec := json.NewDecoder(bytes.NewReader(*r.Params))
switch r.Method {
case MethodInitialize:
var params InitializeParams
if err := dec.Decode(¶ms); err != nil {
ReplyError(ctx, err, conn, r, logger)
return
}
// error here: server....
resp, err := server.Initialize(ctx, ¶ms)
if err := conn.Reply(ctx, r, resp, err); err != nil {
logger.Error(MethodInitialize, zap.Error(err))
}
// .... more
}
}
}