tools: Index | Files

package fake

import ""

Package fake provides fake implementations of a text editor, LSP client plugin, and workspace for use in tests.

The Editor type provides a high level API for text editor operations (open/modify/save/close a buffer, jump to definition, etc.), and the Client type exposes an LSP client for the editor that can be connected to a language server. By default, the Editor and Client should be compliant with the LSP spec: their intended use is to verify server compliance with the spec in a variety of environment. Possible future enhancements of these types may allow them to misbehave in configurable ways, but that is not their primary use.

The Workspace type provides a facility for executing tests in a clean workspace and GOPATH.


Package Files

client.go doc.go edit.go editor.go workspace.go


var (
    ErrNoMatch       = errors.New("no match")
    ErrUnknownBuffer = errors.New("unknown buffer")

ErrNoMatch is returned if a regexp search fails.

type Client Uses

type Client struct {
    // contains filtered or unexported fields

Client is an adapter that converts a *Client into an LSP Client.

func (*Client) ApplyEdit Uses

func (c *Client) ApplyEdit(ctx context.Context, params *protocol.ApplyWorkspaceEditParams) (*protocol.ApplyWorkspaceEditResponse, error)

ApplyEdit applies edits sent from the server. Note that as of writing gopls doesn't use this feature, so it is untested.

func (*Client) Configuration Uses

func (c *Client) Configuration(context.Context, *protocol.ParamConfiguration) ([]interface{}, error)

func (*Client) Event Uses

func (c *Client) Event(ctx context.Context, event *interface{}) error

func (*Client) LogMessage Uses

func (c *Client) LogMessage(ctx context.Context, params *protocol.LogMessageParams) error

func (*Client) OnDiagnostics Uses

func (c *Client) OnDiagnostics(hook func(context.Context, *protocol.PublishDiagnosticsParams) error)

OnDiagnostics sets the hook to run when the editor receives diagnostics published from the language server.

func (*Client) OnLogMessage Uses

func (c *Client) OnLogMessage(hook func(context.Context, *protocol.LogMessageParams) error)

OnLogMessage sets the hook to run when the editor receives a log message.

func (*Client) Progress Uses

func (c *Client) Progress(context.Context, *protocol.ProgressParams) error

func (*Client) PublishDiagnostics Uses

func (c *Client) PublishDiagnostics(ctx context.Context, params *protocol.PublishDiagnosticsParams) error

func (*Client) RegisterCapability Uses

func (c *Client) RegisterCapability(context.Context, *protocol.RegistrationParams) error

func (*Client) ShowMessage Uses

func (c *Client) ShowMessage(ctx context.Context, params *protocol.ShowMessageParams) error

func (*Client) ShowMessageRequest Uses

func (c *Client) ShowMessageRequest(ctx context.Context, params *protocol.ShowMessageRequestParams) (*protocol.MessageActionItem, error)

func (*Client) UnregisterCapability Uses

func (c *Client) UnregisterCapability(context.Context, *protocol.UnregistrationParams) error

func (*Client) WorkDoneProgressCreate Uses

func (c *Client) WorkDoneProgressCreate(context.Context, *protocol.WorkDoneProgressCreateParams) error

func (*Client) WorkspaceFolders Uses

func (c *Client) WorkspaceFolders(context.Context) ([]protocol.WorkspaceFolder, error)

type Edit Uses

type Edit struct {
    Start, End Pos
    Text       string

Edit represents a single (contiguous) buffer edit.

func NewEdit Uses

func NewEdit(startLine, startColumn, endLine, endColumn int, text string) Edit

NewEdit creates an edit replacing all content between (startLine, startColumn) and (endLine, endColumn) with text.

type Editor Uses

type Editor struct {
    // contains filtered or unexported fields

Editor is a fake editor client. It keeps track of client state and can be used for writing LSP tests.

func NewConnectedEditor Uses

func NewConnectedEditor(ctx context.Context, ws *Workspace, conn *jsonrpc2.Conn) (*Editor, error)

NewConnectedEditor creates a new editor that dispatches the LSP across the provided jsonrpc2 connection.

The returned editor is initialized and ready to use.

func NewEditor Uses

func NewEditor(ws *Workspace) *Editor

NewEditor Creates a new Editor.

func (*Editor) BufferText Uses

func (e *Editor) BufferText(name string) string

BufferText returns the content of the buffer with the given name.

func (*Editor) BufferVersion Uses

func (e *Editor) BufferVersion(name string) int

BufferVersion returns the current version of the buffer corresponding to name (or 0 if it is not being edited).

func (*Editor) Client Uses

func (e *Editor) Client() *Client

Client returns the LSP client for this editor.

func (*Editor) CloseBuffer Uses

func (e *Editor) CloseBuffer(ctx context.Context, path string) error

CloseBuffer removes the current buffer (regardless of whether it is saved).

func (*Editor) CreateBuffer Uses

func (e *Editor) CreateBuffer(ctx context.Context, path, content string) error

CreateBuffer creates a new unsaved buffer corresponding to the workspace path, containing the given textual content.

func (*Editor) EditBuffer Uses

func (e *Editor) EditBuffer(ctx context.Context, path string, edits []Edit) error

EditBuffer applies the given test edits to the buffer identified by path.

func (*Editor) Exit Uses

func (e *Editor) Exit(ctx context.Context) error

Exit issues the 'exit' LSP notification.

func (*Editor) FormatBuffer Uses

func (e *Editor) FormatBuffer(ctx context.Context, path string) error

FormatBuffer gofmts a Go file.

func (*Editor) GoToDefinition Uses

func (e *Editor) GoToDefinition(ctx context.Context, path string, pos Pos) (string, Pos, error)

GoToDefinition jumps to the definition of the symbol at the given position in an open buffer.

func (*Editor) OpenFile Uses

func (e *Editor) OpenFile(ctx context.Context, path string) error

OpenFile creates a buffer for the given workspace-relative file.

func (*Editor) OrganizeImports Uses

func (e *Editor) OrganizeImports(ctx context.Context, path string) error

OrganizeImports requests and performs the source.organizeImports codeAction.

func (*Editor) RegexpReplace Uses

func (e *Editor) RegexpReplace(ctx context.Context, path, re, replace string) error

RegexpReplace edits the buffer corresponding to path by replacing the first instance of re, or its first subgroup, with the replace text. See RegexpSearch for more explanation of these two modes. It returns an error if re is invalid, has more than one subgroup, or doesn't match the buffer.

func (*Editor) RegexpSearch Uses

func (e *Editor) RegexpSearch(bufName, re string) (Pos, error)

RegexpSearch returns the position of the first match for re in the buffer bufName. For convenience, RegexpSearch supports the following two modes:

1. If re has no subgroups, return the position of the match for re itself.
2. If re has one subgroup, return the position of the first subgroup.

It returns an error re is invalid, has more than one subgroup, or doesn't match the buffer.

func (*Editor) SaveBuffer Uses

func (e *Editor) SaveBuffer(ctx context.Context, path string) error

SaveBuffer writes the content of the buffer specified by the given path to the filesystem.

func (*Editor) Shutdown Uses

func (e *Editor) Shutdown(ctx context.Context) error

Shutdown issues the 'shutdown' LSP notification.

type FileEvent Uses

type FileEvent struct {
    Path          string
    ProtocolEvent protocol.FileEvent

FileEvent wraps the protocol.FileEvent so that it can be associated with a workspace-relative path.

type Pos Uses

type Pos struct {
    Line, Column int

Pos represents a position in a text buffer. Both Line and Column are 0-indexed.

type Workspace Uses

type Workspace struct {
    // contains filtered or unexported fields

The Workspace type represents a temporary workspace to use for editing Go files in tests.

func NewWorkspace Uses

func NewWorkspace(name string, txt []byte) (_ *Workspace, err error)

NewWorkspace creates a named workspace populated by the txtar-encoded content given by txt. It creates temporary directories for the workspace content and for GOPATH.

func (*Workspace) AddWatcher Uses

func (w *Workspace) AddWatcher(watcher func(context.Context, []FileEvent))

AddWatcher registers the given func to be called on any file change.

func (*Workspace) Close Uses

func (w *Workspace) Close() error

Close removes all state associated with the workspace.

func (*Workspace) GOPATH Uses

func (w *Workspace) GOPATH() string

GOPATH returns the value that GOPATH should be set to for this workspace.

func (*Workspace) ReadFile Uses

func (w *Workspace) ReadFile(path string) (string, error)

ReadFile reads a text file specified by a workspace-relative path.

func (*Workspace) RegexpSearch Uses

func (w *Workspace) RegexpSearch(path string, re string) (Pos, error)

RegexpSearch searches the file

func (*Workspace) RemoveFile Uses

func (w *Workspace) RemoveFile(ctx context.Context, path string) error

RemoveFile removes a workspace-relative file path.

func (*Workspace) RootURI Uses

func (w *Workspace) RootURI() protocol.DocumentURI

RootURI returns the root URI for this workspace.

func (*Workspace) RunGoCommand Uses

func (w *Workspace) RunGoCommand(ctx context.Context, verb string, args ...string) error

RunGoCommand executes a go command in the workspace.

func (*Workspace) URI Uses

func (w *Workspace) URI(path string) protocol.DocumentURI

URI returns the URI to a the workspace-relative path.

func (*Workspace) URIToPath Uses

func (w *Workspace) URIToPath(uri protocol.DocumentURI) string

URIToPath converts a uri to a workspace-relative path (or an absolute path, if the uri is outside of the workspace).

func (*Workspace) WriteFile Uses

func (w *Workspace) WriteFile(ctx context.Context, path, content string) error

WriteFile writes text file content to a workspace-relative path.

Package fake imports 16 packages (graph) and is imported by 2 packages. Updated 2020-04-09. Refresh now. Tools for package owners.