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

# Laravel LSP — Extensión de funciones de IDE con Language Server Protocol

> Implementación oficial de Language Server Protocol de Laravel. Proporciona a los editores autocompletado y hover conscientes del framework.

<Info>
  Este artículo es una investigación inicial de la versión v0.0.19, a fecha de junio de 2026. Todavía no está registrado en Packagist y no se puede instalar por composer.
</Info>

## ¿Qué es Laravel LSP?

**Laravel LSP** (Language Server Protocol) es la herramienta oficial que proporciona a los editores funciones de IDE conscientes del framework Laravel. El [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) es un protocolo estándar de comunicación entre el cliente LSP (el editor) y el servidor LSP (Laravel LSP), y con él se logra una experiencia de desarrollo unificada en múltiples editores.

Funciones que ofrece Laravel LSP:

* **Autocompletado**: autocompletado de rutas, vistas, claves de configuración, claves de traducción, componentes Livewire, etc.
* **Información de hover**: al pasar el cursor muestra descripción, documentación e información de contexto
* **Diagnóstico**: detección en tiempo real de problemas en el código
* **Enlaces de documento**: enlaces entre archivos y recursos
* **Quick fixes**: sugerencias de corrección automática para problemas comunes
* **Ir a definición**: saltar a la ubicación de definición del símbolo

## Por qué es necesario

El autocompletado PHP estándar del editor no comprende la capa de abstracción del framework Laravel. Por ejemplo:

* Al introducir el primer argumento de `Route::get()` con un patrón de URI, no hay autocompletado
* Al introducir el nombre de vista en `view('users.index')`, no se autocompletan los nombres reales de archivos de vista
* Las claves de archivos de configuración (`config('app.name')`) y las claves de traducción (`trans('messages.welcome')`) quedan fuera del autocompletado
* El autocompletado y la verificación dentro de plantillas Blade tampoco son soportados por el editor de serie

Laravel LSP entiende esos "contextos propios del framework" y ofrece autocompletado y diagnóstico precisos.

## Instalación

### Instalación global

Instala globalmente con Composer:

```bash theme={null}
composer global require laravel/lsp
```

Verifica que el directorio global bin de Composer esté en el `PATH`, y podrás arrancarlo con el siguiente comando:

```bash theme={null}
laravel-lsp
```

### Instalación desde el código fuente

Si vas a usar la versión de desarrollo, puedes clonar el repositorio y ejecutarlo:

```bash theme={null}
gh repo clone laravel/lsp
cd lsp
composer install
php server
```

Configura un alias de shell para poder usar el comando `laravel-lsp`:

```bash theme={null}
# Para Zsh
echo 'alias laravel-lsp="php /path/to/lsp/server"' >> ~/.zshrc
source ~/.zshrc

# Para Bash
echo 'alias laravel-lsp="php /path/to/lsp/server"' >> ~/.bashrc
source ~/.bashrc
```

## Guía de configuración por editor

Como Laravel LSP usa el protocolo LSP estándar, funciona en cualquier editor que soporte LSP. A continuación presentamos la configuración para los principales editores.

### Sublime Text

Instala el [paquete LSP](https://packagecontrol.io/packages/LSP), y luego añade la configuración del cliente en `Preferences: LSP Settings`:

```json theme={null}
{
    "clients": {
        "laravel-lsp": {
            "enabled": true,
            "command": ["laravel-lsp"],
            "selector": "embedding.php | text.html.blade"
        }
    }
}
```

### Neovim

En Neovim 0.11 o superior, puedes añadir una configuración LSP personalizada directamente:

```lua theme={null}
vim.lsp.config("laravel_lsp", {
    cmd = { "laravel-lsp" },
    filetypes = { "php", "blade" },
    root_markers = { "artisan", "composer.json", ".git" },
})

vim.lsp.enable("laravel_lsp")
```

Si usas `nvim-lspconfig`, regístralo así:

```lua theme={null}
local lspconfig = require("lspconfig")
local configs = require("lspconfig.configs")

if not configs.laravel_lsp then
    configs.laravel_lsp = {
        default_config = {
            cmd = { "laravel-lsp" },
            filetypes = { "php", "blade" },
            root_dir = lspconfig.util.root_pattern("artisan", "composer.json", ".git"),
        },
    }
end

lspconfig.laravel_lsp.setup({})
```

### Cursor

Como Cursor soporta extensiones de VS Code, si tienes instalada la extensión de Laravel, la compatibilidad es automática. Para desarrollo local, usa un cliente LSP compatible con VS Code y especifica el comando:

```sh theme={null}
laravel-lsp
```

### VS Code

VS Code también dispone de funciones de cliente LSP, por lo que se puede configurar mediante extensiones.

### OpenCode

En `opencode.json` habilita el soporte de LSP y configura Laravel LSP como servidor personalizado:

```json theme={null}
{
    "$schema": "https://opencode.ai/config.json",
    "lsp": {
        "laravel-lsp": {
            "command": ["laravel-lsp"],
            "extensions": [".php", ".blade.php"]
        }
    }
}
```

## Configuración con GitHub Copilot CLI

Si usas GitHub Copilot CLI, puedes configurarlo globalmente en `~/.copilot/lsp-config.json`. No hace falta configuración adicional en el editor:

```json theme={null}
{
  "lspServers": {
    "laravel-lsp": {
      "command": "laravel-lsp",
      "fileExtensions": {
        ".php": "php",
        ".blade.php": "blade"
      }
    }
  }
}
```

La configuración de servidor LSP del Copilot CLI también admite `initializationOptions`, con lo que puedes usar todas las opciones detalladas descritas a continuación.

## Opciones de configuración

El cliente LSP puede pasar a Laravel LSP configuración detallada mediante `initializationOptions`.

### Detección del entorno PHP

La opción `phpEnvironment` controla el comando PHP usado para indexar los datos del proyecto. Por defecto es `auto`, con detección automática:

| Valor   | Comportamiento del comando PHP                                     |
| ------- | ------------------------------------------------------------------ |
| `auto`  | Detecta en el orden Herd → Valet → Sail → Lando → DDEV → PHP local |
| `herd`  | Usa `herd which-php`                                               |
| `valet` | Usa `valet which-php`                                              |
| `sail`  | Con Sail en ejecución, usa `./vendor/bin/sail php`                 |
| `lando` | Usa `lando php`                                                    |
| `ddev`  | Usa `ddev php`                                                     |
| `local` | Usa directamente el binario PHP local                              |

Si la detección falla o se pasa un valor incorrecto, cae a `php`.

### Ejemplo de configuración básica

```json theme={null}
{
    "phpEnvironment": "auto",
    "phpCommand": ["php"],
    "definitionProvider": false
}
```

### Configuración por función

Cada función se puede activar/desactivar por separado. Los sufijos son `Completion`, `Diagnostics`, `Hover`, `Link`, etc.:

```json theme={null}
{
    "routeCompletion": true,
    "routeDiagnostics": true,
    "viewDiagnostics": false,
    "translationHover": true,
    "configLink": true,
    "envCompletion": true,
    "bladeComponentLink": true
}
```

## Lista de funciones ofrecidas

| Área de función      | Autocompletado | Hover | Diagnóstico | Enlace | Quick fix |
| -------------------- | -------------- | ----- | ----------- | ------ | --------- |
| Rutas                | ✓              | ✓     | ✓           | ✓      | -         |
| Vistas y Blade       | ✓              | ✓     | ✓           | ✓      | ✓         |
| Traducción           | ✓              | ✓     | -           | -      | -         |
| Configuración        | ✓              | ✓     | ✓           | ✓      | -         |
| Variables de entorno | ✓              | ✓     | ✓           | ✓      | ✓         |
| Assets y Mix         | ✓              | ✓     | ✓           | ✓      | -         |
| Middleware           | ✓              | ✓     | ✓           | ✓      | -         |
| Inertia              | ✓              | -     | ✓           | ✓      | -         |
| Livewire             | ✓              | ✓     | -           | ✓      | -         |
| Auth y Policies      | ✓              | ✓     | ✓           | ✓      | -         |
| Container Bindings   | ✓              | ✓     | ✓           | ✓      | -         |
| Validation           | ✓              | -     | -           | -      | -         |
| Controller Actions   | ✓              | -     | ✓           | ✓      | -         |
| Eloquent             | ✓              | -     | -           | -      | -         |

## Inicio rápido

1. **Instala** — `composer global require laravel/lsp`
2. **Configura el editor** — consulta la guía por editor de arriba
3. **Abre un proyecto Laravel** — el servidor indexa desde la raíz los datos del proyecto: rutas, vistas, traducciones, configuración, etc.
4. **Usa el autocompletado** — dentro de archivos PHP o plantillas Blade, el autocompletado consciente del framework funciona automáticamente

## Conclusión

Laravel LSP es una herramienta que mejora enormemente la experiencia de desarrollo. Comprende contextos propios del framework que las funciones estándar del editor no pueden manejar y ofrece autocompletado y diagnóstico más precisos y útiles.

**Requisitos:**

* PHP 8.2 o superior
* Composer
* Editor compatible con LSP (Sublime Text, Neovim, Cursor, VS Code, etc.)

**Referencias:**

* [Repositorio de GitHub de Laravel LSP](https://github.com/laravel/lsp)
* [Página oficial de Language Server Protocol](https://microsoft.github.io/language-server-protocol/)
* [Guía de configuración de servidores LSP en GitHub Copilot CLI](https://docs.github.com/en/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers)


## Related topics

- [Core — operaciones core de AT Protocol](/es/packages/laravel-bluesky/core.md)
- [Funciones auxiliares](/es/helpers.md)
- [Laravel Fortify y los starter kits](/es/advanced/fortify.md)
- [Presentación de Laravel Wayfinder](/es/blog/wayfinder-introduction.md)
- [Laravel y el desarrollo con IA](/es/ai.md)
