> ## Documentation Index
> Fetch the complete documentation index at: https://klyx.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Language Server

> Integrate language servers for LSP support

Extensions can register Language Server Protocol (LSP) servers to provide code intelligence features for specific file types.

## LanguageServerRegistry

Register LSP language servers for specific file patterns. Registration uses Kotlin context receivers.

```kotlin theme={null}
private val languageServers: LanguageServerRegistry by plugin()

// Inside a KlyxPlugin method:
val registration: LanguageServerRegistration = languageServers.register("py", pyrightProvider)
```

### Registering a language server

```kotlin theme={null}
languageServers.register(
    pattern = "py",                              // File extension (e.g. "kt", "java")
    provider = pyrightProvider                   // The LanguageServerProvider
)
```

### LanguageServerProvider

A fun interface that creates language server instances:

```kotlin theme={null}
fun interface LanguageServerProvider {
    suspend fun startServer(client: LanguageClient): LanguageServer
}
```

The `LanguageClient` and `LanguageServer` types are from the LSP server module (`com.klyx.lsp.server`), not from the klyx-api module.

### LanguageServerRegistration

| Method         | Description                                   |
| -------------- | --------------------------------------------- |
| `unregister()` | Removes the language server from the registry |

### LanguageServerRegistry methods

| Method                        | Description                                                                   |
| ----------------------------- | ----------------------------------------------------------------------------- |
| `register(pattern, provider)` | Register a language server for a file pattern (requires `KlyxPlugin` context) |
| `unregister(id)`              | Unregister a language server by ID                                            |
| `getProviders(file)`          | List all providers matching a file's extension                                |

### RegisteredProvider

```kotlin theme={null}
data class RegisteredProvider(
    val id: String,
    val provider: LanguageServerProvider
)
```

## Language info utilities

The `LanguageInfo` class and its extension properties help identify languages from files:

```kotlin theme={null}
// Get language ID for a file
val languageId: String = file.languageId

// Get language name for a file
val languageName: String = file.languageName

// Top-level functions
val id: String = languageInfoForFile(file)
val name: String = languageNameForFile(file)
val id: String = languageIdForFile(file)
```

## Example

Register an LSP provider for Python files:

```kotlin theme={null}
class PythonLspProvider : LanguageServerProvider {
    override suspend fun startServer(client: LanguageClient): LanguageServer {
        // Start and return a LanguageServer instance
    }
}

override suspend fun onLoad() {
    languageServers.register("py", PythonLspProvider())
}

override suspend fun onUnload() {
    languageServers.unregister("py")
}
```
