Skip to content

laravel-ls/protocol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 [email protected]

About

LSP Protocol

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages