blob: 6e2a0bff803ef267777ff69227435844d2968d27 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"context"
"log"
"os"
"github.com/sourcegraph/jsonrpc2"
"fidl-lsp/analysis"
"fidl-lsp/langserver"
)
type stdrwc struct{}
func (stdrwc) Read(p []byte) (int, error) {
return os.Stdin.Read(p)
}
func (stdrwc) Write(p []byte) (int, error) {
return os.Stdout.Write(p)
}
func (stdrwc) Close() error {
if err := os.Stdin.Close(); err != nil {
return err
}
return os.Stdout.Close()
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
trace := log.New(os.Stderr, "[LSP] ", log.Lshortfile)
logOpt := jsonrpc2.LogMessages(trace)
fidlProject, err := analysis.GetFidlProject()
if err != nil {
trace.Fatalf("Failed to parse fidl_project.json: %s\n", err)
}
handler := langserver.NewLangHandler(langserver.NewDefaultConfig(), trace, fidlProject)
server := langserver.LspServer{handler}
// Setup a new Conn over stdio
trace.Println("setting up a new connection")
conn := jsonrpc2.NewConn(
ctx,
jsonrpc2.NewBufferedStream(stdrwc{}, jsonrpc2.VSCodeObjectCodec{}),
server,
logOpt,
)
defer conn.Close()
<-conn.DisconnectNotify()
}