From dab683f24f00057006d55aed91a14b8ce731780f Mon Sep 17 00:00:00 2001 From: jan Date: Fri, 5 Aug 2022 10:27:27 +0200 Subject: [PATCH 1/2] implement show hover --- internal/lsp/general.go | 2 +- internal/lsp/hover.go | 31 +++++++++++++++++++++++++++++++ internal/lsp/server_gen.go | 4 ++-- 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 internal/lsp/hover.go diff --git a/internal/lsp/general.go b/internal/lsp/general.go index e2305709..f56a8e50 100644 --- a/internal/lsp/general.go +++ b/internal/lsp/general.go @@ -66,7 +66,7 @@ func (s *Server) initialize(ctx context.Context, params *protocol.ParamInitializ DocumentSymbolProvider: true, WorkspaceSymbolProvider: false, FoldingRangeProvider: false, - HoverProvider: false, + HoverProvider: true, DocumentHighlightProvider: false, DocumentLinkProvider: protocol.DocumentLinkOptions{}, ReferencesProvider: true, diff --git a/internal/lsp/hover.go b/internal/lsp/hover.go new file mode 100644 index 00000000..2211b54c --- /dev/null +++ b/internal/lsp/hover.go @@ -0,0 +1,31 @@ +package lsp + +import ( + "context" + "fmt" + "github.com/nokia/ntt/internal/log" + "github.com/nokia/ntt/internal/lsp/protocol" + "github.com/nokia/ntt/ttcn3" + "github.com/nokia/ntt/ttcn3/ast" +) + +func (s *Server) hover(ctx context.Context, params *protocol.HoverParams) (protocol.Hover, error) { + var ( + file = string(params.TextDocument.URI.SpanURI()) + line = int(params.Position.Line) + 1 + col = int(params.Position.Character) + 1 + ) + + tree := ttcn3.ParseFile(file) + x := tree.ExprAt(tree.Pos(line, col)) + if x == nil { + log.Debug(fmt.Sprintf("No expression at %s:%d:%d\n", file, line, col)) + } + + comment := ast.FirstToken(x).Comments() + + hoverContents := protocol.MarkupContent{Kind: "Plaintext", Value: comment} + hover := protocol.Hover{Contents: hoverContents} + + return hover, nil +} diff --git a/internal/lsp/server_gen.go b/internal/lsp/server_gen.go index c24b607f..dba0cf4f 100644 --- a/internal/lsp/server_gen.go +++ b/internal/lsp/server_gen.go @@ -104,8 +104,8 @@ func (s *Server) Formatting(context.Context, *protocol.DocumentFormattingParams) return nil, notImplemented("Formatting") } -func (s *Server) Hover(context.Context, *protocol.HoverParams) (*protocol.Hover, error) { - return nil, notImplemented("Hover") +func (s *Server) Hover(ctx context.Context, params *protocol.HoverParams) (*protocol.Hover, error) { + return s.hover(ctx, params), nil } func (s *Server) Implementation(context.Context, *protocol.ImplementationParams) (interface{}, error) { From 5a67cb97ea1159a055ef3b1b143596abe2b42627 Mon Sep 17 00:00:00 2001 From: jan Date: Fri, 5 Aug 2022 18:26:14 +0200 Subject: [PATCH 2/2] implement show hover --- internal/lsp/hover.go | 6 +++--- internal/lsp/server_gen.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/lsp/hover.go b/internal/lsp/hover.go index 2211b54c..ee4aad39 100644 --- a/internal/lsp/hover.go +++ b/internal/lsp/hover.go @@ -9,7 +9,7 @@ import ( "github.com/nokia/ntt/ttcn3/ast" ) -func (s *Server) hover(ctx context.Context, params *protocol.HoverParams) (protocol.Hover, error) { +func (s *Server) hover(ctx context.Context, params *protocol.HoverParams) (*protocol.Hover, error) { var ( file = string(params.TextDocument.URI.SpanURI()) line = int(params.Position.Line) + 1 @@ -24,8 +24,8 @@ func (s *Server) hover(ctx context.Context, params *protocol.HoverParams) (proto comment := ast.FirstToken(x).Comments() - hoverContents := protocol.MarkupContent{Kind: "Plaintext", Value: comment} - hover := protocol.Hover{Contents: hoverContents} + hoverContents := protocol.MarkupContent{Kind: "markdown", Value: comment} + hover := &protocol.Hover{Contents: hoverContents} return hover, nil } diff --git a/internal/lsp/server_gen.go b/internal/lsp/server_gen.go index dba0cf4f..86f321d3 100644 --- a/internal/lsp/server_gen.go +++ b/internal/lsp/server_gen.go @@ -105,7 +105,7 @@ func (s *Server) Formatting(context.Context, *protocol.DocumentFormattingParams) } func (s *Server) Hover(ctx context.Context, params *protocol.HoverParams) (*protocol.Hover, error) { - return s.hover(ctx, params), nil + return s.hover(ctx, params) } func (s *Server) Implementation(context.Context, *protocol.ImplementationParams) (interface{}, error) {