From ba909dbcea7940ba64f790355fb33838015541e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Sat, 3 Apr 2021 16:28:25 +0200 Subject: [PATCH] Add hover --- adapter/lsp/server.go | 42 +++++++++++++++++++++++++++++++++++++++++- go.sum | 2 ++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/adapter/lsp/server.go b/adapter/lsp/server.go index 245b4396..e25e6f6e 100644 --- a/adapter/lsp/server.go +++ b/adapter/lsp/server.go @@ -2,6 +2,7 @@ package lsp import ( "fmt" + "io/ioutil" "net/url" "path/filepath" "strings" @@ -186,7 +187,46 @@ func NewServer(opts ServerOpts) *Server { } handler.TextDocumentHover = func(context *glsp.Context, params *protocol.HoverParams) (*protocol.Hover, error) { - return nil, nil + doc, ok := server.documents[params.TextDocument.URI] + if !ok { + return nil, nil + } + + zk, err := server.container.Zk() + if err != nil { + return nil, err + } + + db, _, err := server.container.Database(false) + if err != nil { + return nil, err + } + + var target string + err = db.WithTransaction(func(tx sqlite.Transaction) error { + finder := sqlite.NewNoteDAO(tx, server.container.Logger) + link, err := doc.DocumentLinkAt(params.Position) + if link == nil || err != nil { + return err + } + target, err = server.targetForHref(link.Href, zk.Path, finder) + return err + }) + if err != nil || target == "" || strutil.IsURL(target) { + return nil, err + } + target = strings.TrimPrefix(target, "file://") + contents, err := ioutil.ReadFile(target) + if err != nil { + return nil, err + } + + return &protocol.Hover{ + Contents: protocol.MarkupContent{ + Kind: protocol.MarkupKindMarkdown, + Value: string(contents), + }, + }, nil } handler.TextDocumentDocumentLink = func(context *glsp.Context, params *protocol.DocumentLinkParams) ([]protocol.DocumentLink, error) { diff --git a/go.sum b/go.sum index 3376ef03..63d55967 100644 --- a/go.sum +++ b/go.sum @@ -510,6 +510,8 @@ github.com/tj/assert v0.0.0-20190920132354-ee03d75cd160 h1:NSWpaDaurcAJY7PkL8Xt0 github.com/tj/assert v0.0.0-20190920132354-ee03d75cd160/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= github.com/tj/go-naturaldate v1.3.0 h1:OgJIPkR/Jk4bFMBLbxZ8w+QUxwjqSvzd9x+yXocY4RI= github.com/tj/go-naturaldate v1.3.0/go.mod h1:rpUbjivDKiS1BlfMGc2qUKNZ/yxgthOfmytQs8d8hKk= +github.com/tliron/glsp v0.0.0-20210308190902-c7ec7df19257 h1:EIMeclnZjLgYIUs06pWOo+wIuOji9Q4Qz0MaU3va198= +github.com/tliron/glsp v0.0.0-20210308190902-c7ec7df19257/go.mod h1:ouzTGvQteTU4hdsG+32vIx0if7E9CzMa64d7tYJJ91g= github.com/tliron/kutil v0.1.22 h1:VnwZ6YlTao2ISmm9wdv8CnVy5BjROBPpG65qIRc1LtE= github.com/tliron/kutil v0.1.22/go.mod h1:HkG4xQS2/BHI8EO9WfdOwnlUil7NhY/wmiV7U1uwEYw= github.com/tliron/yamlkeys v1.3.5/go.mod h1:8kJ1A/1s3p/I3MQUAbtv72dPEyQGoh0ZkQp0UAkABBo=