internal/langserver/handlers/hover.go (41 lines of code) (raw):
package handlers
import (
"context"
lsctx "github.com/Azure/azapi-lsp/internal/context"
"github.com/Azure/azapi-lsp/internal/langserver/handlers/hover"
ilsp "github.com/Azure/azapi-lsp/internal/lsp"
lsp "github.com/Azure/azapi-lsp/internal/protocol"
)
func (svc *service) TextDocumentHover(ctx context.Context, params lsp.TextDocumentPositionParams) (*lsp.Hover, error) {
fs, err := lsctx.DocumentStorage(ctx)
if err != nil {
return nil, err
}
_, err = ilsp.ClientCapabilities(ctx)
if err != nil {
return nil, err
}
doc, err := fs.GetDocument(ilsp.FileHandlerFromDocumentURI(params.TextDocument.URI))
if err != nil {
return nil, err
}
fPos, err := ilsp.FilePositionFromDocumentPosition(params, doc)
if err != nil {
return nil, err
}
data, err := doc.Text()
if err != nil {
return nil, err
}
telemetrySender, err := lsctx.Telemetry(ctx)
if err != nil {
return nil, err
}
svc.logger.Printf("Looking for hover data at %q -> %#v", doc.Filename(), fPos.Position())
hoverData := hover.HoverAtPos(ctx, data, doc.Filename(), fPos.Position(), svc.logger, telemetrySender)
svc.logger.Printf("received hover data: %#v", hoverData)
if hoverData != nil {
telemetrySender.SendEvent(ctx, "textDocument/hover", nil)
}
return hoverData, nil
}