Files
zyedidia.micro/internal/lsp/requests.go
2020-08-12 16:03:23 -04:00

108 lines
2.3 KiB
Go

package lsp
import (
"encoding/json"
"github.com/sourcegraph/go-lsp"
)
type RPCCompletion struct {
RPCVersion string `json:"jsonrpc"`
ID int `json:"id"`
Result lsp.CompletionList `json:"result"`
}
func (s *Server) DidOpen(filename, language, text string, version int) {
doc := lsp.TextDocumentItem{
URI: lsp.DocumentURI("file://" + filename),
LanguageID: language,
Version: version,
Text: text,
}
params := lsp.DidOpenTextDocumentParams{
TextDocument: doc,
}
s.SendMessage("textDocument/didOpen", params)
}
func (s *Server) DidSave(filename string) {
doc := lsp.TextDocumentIdentifier{
URI: lsp.DocumentURI("file://" + filename),
}
params := lsp.DidSaveTextDocumentParams{
TextDocument: doc,
}
s.SendMessage("textDocument/didSave", params)
}
func (s *Server) DidChange(filename string, version int, changes []lsp.TextDocumentContentChangeEvent) {
doc := lsp.VersionedTextDocumentIdentifier{
TextDocumentIdentifier: lsp.TextDocumentIdentifier{
URI: lsp.DocumentURI("file://" + filename),
},
Version: version,
}
params := lsp.DidChangeTextDocumentParams{
TextDocument: doc,
ContentChanges: changes,
}
s.SendMessage("textDocument/didChange", params)
}
func (s *Server) DidClose(filename string) {
doc := lsp.TextDocumentIdentifier{
URI: lsp.DocumentURI("file://" + filename),
}
params := lsp.DidCloseTextDocumentParams{
TextDocument: doc,
}
s.SendMessage("textDocument/didClose", params)
}
func (s *Server) DocumentFormat() {
}
func (s *Server) DocumentRangeFormat() {
}
func (s *Server) Completion(filename string, pos lsp.Position) ([]lsp.CompletionItem, error) {
cc := lsp.CompletionContext{
TriggerKind: lsp.CTKInvoked,
}
docpos := lsp.TextDocumentPositionParams{
TextDocument: lsp.TextDocumentIdentifier{
URI: lsp.DocumentURI("file://" + filename),
},
Position: pos,
}
params := lsp.CompletionParams{
TextDocumentPositionParams: docpos,
Context: cc,
}
resp, err := s.SendMessageGetResponse("textDocument/completion", params)
if err != nil {
return nil, err
}
var r RPCCompletion
err = json.Unmarshal(resp, &r)
if err != nil {
return nil, err
}
return r.Result.Items, nil
}
func (s *Server) CompletionResolve() {
}