package lsp import ( "context" "io" "go.lsp.dev/jsonrpc2" "go.lsp.dev/protocol" "go.lsp.dev/uri" "olexsmir.xyz/clerk/internal/linter" "olexsmir.xyz/clerk/journal/printer" "olexsmir.xyz/clerk/journal/semantic" ) type Server struct { sema *semantic.Context linter *linter.Linter version string server *server } func NewServer(version string) *Server { return &Server{ // sema: sema, // linter: linter, server: &server{ version: version, printerCfg: printer.DefaultConfig, docs: make(map[uri.URI]docState), }, } } func (s *Server) Run(ctx context.Context, stdin io.ReadCloser, stdout io.WriteCloser) error { stream := jsonrpc2.NewStream(readWriterCloser{ Reader: stdin, Writer: stdout, Closer: stdin, }) _, conn, client := protocol.NewServer(ctx, s.server, stream) defer conn.Close() s.server.client = client <-conn.Done() return conn.Err() } type readWriterCloser struct { io.Reader io.Writer io.Closer }