1
0
Fork 0
mirror of https://github.com/laravel-ls/protocol.git synced 2026-06-16 03:54:56 +02:00
No description
Find a file
Henrik Hautakoski 3dcbf4fcbb Change CancelParams.Id's type to json.Number
Need to handle both integer and string according to spec.
2026-02-09 00:22:19 +01:00
base.go add more LanguageID constants 2026-02-02 19:11:13 +01:00
capabilities_client.go Initial commit 2025-11-01 10:20:54 +01:00
capabilities_server.go Initial commit 2025-11-01 10:20:54 +01:00
client.go Initial commit 2025-11-01 10:20:54 +01:00
completion.go Initial commit 2025-11-01 10:20:54 +01:00
diagnostics.go Initial commit 2025-11-01 10:20:54 +01:00
document.go Initial commit 2025-11-01 10:20:54 +01:00
document_change_operation.go Initial commit 2025-11-01 10:20:54 +01:00
document_code_action.go Initial commit 2025-11-01 10:20:54 +01:00
document_completion.go Initial commit 2025-11-01 10:20:54 +01:00
document_definition.go Initial commit 2025-11-01 10:20:54 +01:00
document_diagnostic.go Initial commit 2025-11-01 10:20:54 +01:00
document_hover.go Initial commit 2025-11-01 10:20:54 +01:00
document_sync.go Initial commit 2025-11-01 10:20:54 +01:00
go.mod Initial commit 2025-11-01 10:20:54 +01:00
go.sum Initial commit 2025-11-01 10:20:54 +01:00
LICENSE Adding LICENSE 2026-02-02 19:10:27 +01:00
lifecycle.go Change CancelParams.Id's type to json.Number 2026-02-09 00:22:19 +01:00
progress.go Initial commit 2025-11-01 10:20:54 +01:00
README.md Initial commit 2025-11-01 10:20:54 +01:00
rpc.go adding LSP rcp error codes 2026-02-02 19:11:35 +01:00
rpc_test.go adding LSP rcp error codes 2026-02-02 19:11:35 +01:00
server.go Initial commit 2025-11-01 10:20:54 +01:00
workspace.go Initial commit 2025-11-01 10:20:54 +01:00

Language Server Protocol for golang

Language Server Protocol implementation in Go.

Design notes

The package does not include JSON RPC handling as that is better left to other packages.

Example

Example code using github.com/sourcegraph/jsonrpc2


import (
    "fmt"
    "io"
    "context"
	"encoding/json"
	"github.com/sourcegraph/jsonrpc2"
)

func handler(ctx context.Context, conn *jsonrpc2.Conn, req *jsonrpc2.Request) (any, error) {

    switch req.Method {
    case protocol.MethodInitialize:
        var params protocol.InitializeParams
        if err := json.Unmarshal(*req.Params, &params); err != nil {
            return nil, err
        }
        // handle initialize
	case protocol.MethodTextDocumentDidChange:
		var params protocol.DidChangeTextDocumentParams
		if err := json.Unmarshal(*req.Params, &params); err != nil {
			return nil, err
		}
        // handle did change
	default:
		// Respond with a method not found error
		return nil, &jsonrpc2.Error{
			Code:    jsonrpc2.CodeMethodNotFound,
			Message: fmt.Sprintf("Method %s not found", req.Method),
		}
    }
    return nil, nil
}

func (s Server) Run(ctx context.Context, conn io.ReadWriteCloser) error {
	stream := jsonrpc2.NewBufferedStream(conn, jsonrpc2.VSCodeObjectCodec{})
	rpc := jsonrpc2.NewConn(ctx, stream, jsonrpc2.HandlerWithError(s.dispatch))

	select {
	case <-ctx.Done():
		return fmt.Errorf("context closed")
	case <-rpc.DisconnectNotify():
		return nil
	}
}

Author

Henrik Hautakoski henrik@shufflingpixels.com