Skip to content

Language Server Protocol

View as Markdown

Daytona provides Language Server Protocol (LSP) support through sandbox instances. This enables advanced language features like code completion, diagnostics, and more.

Daytona provides methods to create LSP servers. The path_to_project argument is relative to the current sandbox working directory when no leading / is used. The working directory is specified by WORKDIR when it is present in the Dockerfile, and otherwise falls back to the user’s home directory.

from daytona import Daytona, LspLanguageId
# Create Sandbox
daytona = Daytona()
sandbox = daytona.create()
# Create LSP server for Python
lsp_server = sandbox.create_lsp_server(
language_id=LspLanguageId.PYTHON,
path_to_project="workspace/project"
)

The supported languages for creating LSP servers with Daytona are defined by the LspLanguageId enum:

Enum ValueDescription
LspLanguageId.PYTHONPython language server
LspLanguageId.TYPESCRIPTTypeScript/JavaScript language server

Daytona provides methods to start LSP servers.

lsp = sandbox.create_lsp_server("typescript", "workspace/project")
lsp.start() # Initialize the server
# Now ready for LSP operations

Daytona provides methods to stop LSP servers.

# When done with LSP features
lsp.stop() # Clean up resources

Daytona provides methods to get code completions for a specific position in a file.

completions = lsp_server.completions(
path="workspace/project/main.py",
position={"line": 10, "character": 15}
)
print(f"Completions: {completions}")

Daytona provides methods to notify the LSP server when files are opened or closed. This enables features like diagnostics and completion tracking for the specified files.

Notifies the language server that a file has been opened for editing.

# Notify server that a file is open
lsp_server.did_open("workspace/project/main.py")

Notifies the language server that a file has been closed. This allows the server to clean up resources associated with that file.

# Notify server that a file is closed
lsp_server.did_close("workspace/project/main.py")

Daytona provides methods to retrieve symbols (functions, classes, variables, etc.) from a document.

symbols = lsp_server.document_symbols("workspace/project/main.py")
for symbol in symbols:
print(f"Symbol: {symbol.name}, Kind: {symbol.kind}")

Daytona provides methods to search for symbols across all files in the sandbox.

symbols = lsp_server.sandbox_symbols("MyClass")
for symbol in symbols:
print(f"Found: {symbol.name} at {symbol.location}")