Skip to content

Commit

Permalink
Introduce textDocument/signatureHelp LSP method
Browse files Browse the repository at this point in the history
  • Loading branch information
dbanck committed Sep 23, 2022
1 parent e7520b5 commit 682e224
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 0 deletions.
3 changes: 3 additions & 0 deletions internal/langserver/handlers/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,9 @@ func initializeResult(ctx context.Context) lsp.InitializeResult {
ChangeNotifications: "workspace/didChangeWorkspaceFolders",
},
},
SignatureHelpProvider: lsp.SignatureHelpOptions{
TriggerCharacters: []string{"(", ","},
},
},
}

Expand Down
11 changes: 11 additions & 0 deletions internal/langserver/handlers/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,17 @@ func (svc *service) Assigner() (jrpc2.Assigner, error) {

return handle(ctx, req, svc.TextDocumentFormatting)
},
"textDocument/signatureHelp": func(ctx context.Context, req *jrpc2.Request) (interface{}, error) {
err := session.CheckInitializationIsConfirmed()
if err != nil {
return nil, err
}

ctx = ilsp.WithClientCapabilities(ctx, cc)
ctx = ilsp.ContextWithClientName(ctx, &clientName)

return handle(ctx, req, svc.SignatureHelp)
},
"textDocument/semanticTokens/full": func(ctx context.Context, req *jrpc2.Request) (interface{}, error) {
err := session.CheckInitializationIsConfirmed()
if err != nil {
Expand Down
42 changes: 42 additions & 0 deletions internal/langserver/handlers/signature_help.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package handlers

import (
"context"

ilsp "github.com/hashicorp/terraform-ls/internal/lsp"
lsp "github.com/hashicorp/terraform-ls/internal/protocol"
)

func (svc *service) SignatureHelp(ctx context.Context, params lsp.SignatureHelpParams) (*lsp.SignatureHelp, error) {
_, err := ilsp.ClientCapabilities(ctx)
if err != nil {
return nil, err
}

dh := ilsp.HandleFromDocumentURI(params.TextDocument.URI)
doc, err := svc.stateStore.DocumentStore.GetDocument(dh)
if err != nil {
return nil, err
}

d, err := svc.decoderForDocument(ctx, doc)
if err != nil {
return nil, err
}

pos, err := ilsp.HCLPositionFromLspPosition(params.Position, doc)
if err != nil {
return nil, err
}

_, err = d.SignatureAtPos(doc.Filename, pos)
if err != nil {
return nil, err
}

return &lsp.SignatureHelp{
Signatures: []lsp.SignatureInformation{},
ActiveSignature: 0,
ActiveParameter: 0,
}, nil
}

0 comments on commit 682e224

Please sign in to comment.