From cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0 Mon Sep 17 00:00:00 2001 From: Kujtim Hoxha Date: Thu, 3 Apr 2025 15:20:15 +0200 Subject: add initial lsp support --- internal/lsp/protocol.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 internal/lsp/protocol.go (limited to 'internal/lsp/protocol.go') diff --git a/internal/lsp/protocol.go b/internal/lsp/protocol.go new file mode 100644 index 000000000..e70e2824b --- /dev/null +++ b/internal/lsp/protocol.go @@ -0,0 +1,48 @@ +package lsp + +import ( + "encoding/json" +) + +// Message represents a JSON-RPC 2.0 message +type Message struct { + JSONRPC string `json:"jsonrpc"` + ID int32 `json:"id,omitempty"` + Method string `json:"method,omitempty"` + Params json.RawMessage `json:"params,omitempty"` + Result json.RawMessage `json:"result,omitempty"` + Error *ResponseError `json:"error,omitempty"` +} + +// ResponseError represents a JSON-RPC 2.0 error +type ResponseError struct { + Code int `json:"code"` + Message string `json:"message"` +} + +func NewRequest(id int32, method string, params any) (*Message, error) { + paramsJSON, err := json.Marshal(params) + if err != nil { + return nil, err + } + + return &Message{ + JSONRPC: "2.0", + ID: id, + Method: method, + Params: paramsJSON, + }, nil +} + +func NewNotification(method string, params any) (*Message, error) { + paramsJSON, err := json.Marshal(params) + if err != nil { + return nil, err + } + + return &Message{ + JSONRPC: "2.0", + Method: method, + Params: paramsJSON, + }, nil +} -- cgit v1.2.3