Request Context #
Context passed to request handlers
- vfs : VfsActor.VfsRef
VFS reference for document access
- outputChannel : Transport.OutputChannel
Output channel for sending messages
- pendingResponses : Server.Receiver.PendingResponses
Pending responses for server-initiated requests
- userStateRef : IO.Ref UserState
Mutable user state reference
- capabilities : Protocol.Capabilities.ServerCapabilities
Server capabilities
- serverInfo : Protocol.Messages.ServerInfo
Server info
- progressManager : Server.Progress.ProgressManager
Progress manager for work done progress
- cancelToken : IO.CancelToken
Cancellation token for this request
Instances For
Check if request was cancelled
Equations
- ctx.isCancelled = liftM ctx.cancelToken.isSet
Instances For
Get user state
Equations
- ctx.getUserState = ST.Ref.get ctx.userStateRef
Instances For
Set user state
Equations
- ctx.setUserState state = ST.Ref.set ctx.userStateRef state
Instances For
Modify user state
Equations
- ctx.modifyUserState f = ST.Ref.modify ctx.userStateRef f
Instances For
Get a document snapshot
Equations
- ctx.getDocument uri = ctx.vfs.getSnapshot uri
Instances For
Get document content
Equations
- ctx.getDocumentContent uri = ctx.vfs.getContent uri
Instances For
Get a line from a document
Equations
- ctx.getDocumentLine uri line = ctx.vfs.getLine uri line
Instances For
Get word at position
Instances For
Send a notification to the client
Equations
- ctx.sendNotification method params = ctx.outputChannel.send (Lapis.Protocol.JsonRpc.Message.notification { method := method, params := some params })
Instances For
Send a request to the client
Equations
- ctx.sendRequest method params = do let promise ← liftM IO.Promise.new let requestId ← ctx.pendingResponses.register promise ctx.outputChannel.sendRequest requestId method params pure promise
Instances For
Publish diagnostics
Equations
- ctx.publishDiagnostics params = ctx.sendNotification "textDocument/publishDiagnostics" (Lean.toJson params)
Instances For
Log a message
Equations
- ctx.logMessage type message = ctx.sendNotification "window/logMessage" (Lean.Json.mkObj [("type", Lean.Json.num (Lean.JsonNumber.fromNat type)), ("message", Lean.Json.str message)])
Instances For
Log info
Equations
- ctx.logInfo message = ctx.logMessage 3 message
Instances For
Log warning
Equations
- ctx.logWarning message = ctx.logMessage 2 message
Instances For
Log error
Equations
- ctx.logError message = ctx.logMessage 1 message
Instances For
Show a message to the user
Equations
- ctx.showMessage type message = ctx.sendNotification "window/showMessage" (Lean.Json.mkObj [("type", Lean.Json.num (Lean.JsonNumber.fromNat type)), ("message", Lean.Json.str message)])
Instances For
Show info message
Equations
- ctx.showInfo message = ctx.showMessage 3 message
Instances For
Show warning message
Equations
- ctx.showWarning message = ctx.showMessage 2 message
Instances For
Show error message
Equations
- ctx.showError message = ctx.showMessage 1 message
Instances For
Run an action with progress reporting
Equations
- One or more equations did not get rendered due to their size.
Instances For
Handler Types #
Result of handling a request
- ok (result : Lean.Json) : HandlerResult
- error (code : Int) (message : String) : HandlerResult
Instances For
A request handler in the actor model
Equations
Instances For
A notification handler in the actor model
Equations
- Lapis.Concurrent.LspActor.NotificationHandler UserState = (Lapis.Concurrent.LspActor.RequestContext UserState → Lean.Json → IO Unit)
Instances For
LSP Messages #
Messages for the LSP actor
- request
{UserState : Type}
(msg : Protocol.JsonRpc.RequestMessage)
: LspMsg UserState
Handle an incoming request
- notification
{UserState : Type}
(msg : Protocol.JsonRpc.NotificationMessage)
: LspMsg UserState
Handle an incoming notification (non-document)
- cancelRequest
{UserState : Type}
(id : Protocol.JsonRpc.RequestId)
: LspMsg UserState
Cancel a pending request
- response
{UserState : Type}
(id : Protocol.JsonRpc.RequestId)
(result : Lean.Json)
: LspMsg UserState
Handle a response from the client
- errorResponse
{UserState : Type}
(id : Protocol.JsonRpc.RequestId)
(error : String)
: LspMsg UserState
Handle an error response from the client
- shutdown
{UserState : Type}
: LspMsg UserState
Shutdown the actor
Instances For
LSP Actor State #
LSP Actor configuration
- name : String
Server name
Server version
- capabilities : Protocol.Capabilities.ServerCapabilities
Server capabilities
- requestHandlers : Std.HashMap String (RequestHandler UserState)
Request handlers by method
- notificationHandlers : Std.HashMap String (NotificationHandler UserState)
Notification handlers by method
- maxConcurrentRequests : Nat
Maximum concurrent requests
- initializeHook : Option (RequestContext UserState → Protocol.Messages.InitializeParams → IO Unit)
Hook called on initialize
Instances For
LSP Actor Reference #
Send a request to be handled
Equations
- lsp.handleRequest msg = lsp.ref.send (Lapis.Concurrent.LspActor.LspMsg.request msg)
Instances For
Send a notification to be handled
Equations
- lsp.handleNotification msg = lsp.ref.send (Lapis.Concurrent.LspActor.LspMsg.notification msg)
Instances For
Cancel a request
Equations
- lsp.cancelRequest id = lsp.ref.send (Lapis.Concurrent.LspActor.LspMsg.cancelRequest id)
Instances For
Handle a response from client
Equations
- lsp.handleResponse id result = lsp.ref.send (Lapis.Concurrent.LspActor.LspMsg.response id result)
Instances For
Handle an error response from client
Equations
- lsp.handleErrorResponse id error = lsp.ref.send (Lapis.Concurrent.LspActor.LspMsg.errorResponse id error)
Instances For
LSP Actor Context #
Runtime context for the LSP actor
- config : LspConfig UserState
- vfs : VfsActor.VfsRef
- outputChannel : Transport.OutputChannel
- pendingResponses : Server.Receiver.PendingResponses
- userStateRef : IO.Ref UserState
- progressManager : Server.Progress.ProgressManager
Progress manager for work done progress
- pendingRequestsRef : IO.Ref (Std.HashMap String PendingRequest)
Shared ref for pending requests (for async cleanup)
Instances For
LSP Actor Implementation #
Spawn LSP Actor #
Spawn the LSP actor
Equations
- One or more equations did not get rendered due to their size.
Instances For
Config Builder #
Create a new LSP config
Equations
- Lapis.Concurrent.LspActor.LspConfig.new name = { name := name }
Instances For
Set capabilities
Equations
- One or more equations did not get rendered due to their size.
Instances For
Add a request handler
Equations
- One or more equations did not get rendered due to their size.
Instances For
Add a request handler that can return null
Equations
- One or more equations did not get rendered due to their size.
Instances For
Add a notification handler
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.