1
0
Fork 0
mirror of https://github.com/laravel-ls/protocol.git synced 2026-06-16 12:04:57 +02:00
No description
Find a file
2026-02-18 13:40:34 +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 README.md: fix indent in code example 2026-02-18 13:40:34 +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