Laravel-ls
Laravel Language Server written in go.
About
|
Features
|
Install
|
Building
About
Laravel-ls is a tool that enhances your text editor or IDE with
powerful features specifically designed for Laravel projects.
By implementing the Language Server Protocol (LSP),
Laravel-ls seamlessly integrates with any LSP-compatible editor, bringing advanced capabilities
such as intelligent auto-completion, navigation to definitions, real-time diagnostics, and more.
Although still in its early development stages, Laravel-ls aims to provide a
streamlined and efficient development experience tailored to the Laravel framework.
Features
List of done and planned features of the language server.
Views
view('home')
Route::view('/user/profile', 'user.profile')
- Hover information shows view template path.
- Go to definition opens the template
- Auto-complete existing template names
- Auto-complete for existing arguments present in the template
- Diagnostics for template files that do not exists
- Code action to create view file that do not exists.
Routes
route('dashboard');
redirect()->route('dashboard');
URL::route('dashboard');
- Hover information shows route definition
- Go to definition
- Auto-complete existing route names
- Auto-complete route arguments
- Diagnostics for routes that do not exists
- Code action to create a new route if route do not exists.
Environment
env('APP_NAME');
Env::get('APP_NAME');
- Hover information shows actual value from
.env
file
- Go to
.env
file and key location
- Auto-complete for defined keys.
- Diagnostics for non defined keys.
- Code action to create missing key
Config
config('app.name')
config()->string('app.name')
config()->getMany(['app.name'])
Config::get('app.name')
Config::getMany(['app.name'])
- Hover information shows actual value.
- Auto-complete for defined config keys
- Go to config file and value location from key
- Diagnostics for non defined config keys.
Application bindings
app('db.connection')
app()->make('db.connection')
app()->bound('db.connection')
app()->isShared('db.connection')
app()->make('db.connection')
app()->bound('db.connection')
app()->isShared('db.connection')
- Hover information shows value.
- Auto-complete for defined bindings
- Go to location where binding is defined
- Diagnostics for non defined bindings
Assets
asset('main.css');
- Auto-completion
- Go to asset file
- Diagnostics for non existent assets
Blade components
<x-component.name />
<x-component name="dynamic-component" />
- Hover information show path to the component
- Auto-complete existing components
- Auto-complete arguments defined in the component
- Diagnostics for components that do not exists.
- Code action to create missing components
Other features on the horizon
- Livewire support
- Inertia support
- Eloquent support
- Jump to test file from class.
Install
Download via github
Official binaries for linux are provided on each github release
Just download the program and make sure its located somewhere in your $PATH
Example command to download:
sudo wget -O /usr/local/bin/laravel-ls https://github.com/laravel-ls/laravel-ls/releases/download/<VERSION>/laravel-ls-<VERSION>-linux-amd64 & \
sudo chmod 755 /usr/local/bin/laravel-ls
Download via go
The program can be installed via go:
go install github.com/laravel-ls/laravel-ls/cmd/laravel-ls@latest
And if you have added GOPATH to your shell's PATH
. You should be able to just run the server with:
laravel-ls
See the official documentation of go install
Build
To build the project you need golang version 1.22
or later, make
and a c compiler.
When the dependencies are met, running make
will compile and produce the
binary build/laravel-ls
.
Neovim
nvim-lspconfig
nvim < 0.11
require'lspconfig'.laravel_ls.setup{}
or custom config
require'lspconfig'.laravel_ls.setup{
-- Server-specific settings. See `:help lspconfig-setup`
settings = {
cmd = { … },
},
}
nvim => 0.11
vim.lsp.enable('laravel_ls')
or custom config
vim.lsp.config('laravel_ls', {
cmd = { … },
})
All settings can be found here
native
The LSP server can be started like any other server via vim.lsp.start
and an auto-command.
Just change the path to the correct directory on your filesystem
vim.api.nvim_create_autocmd("FileType", {
pattern = { "php", "blade" },
callback = function ()
vim.lsp.start({
name = "laravel-ls",
-- if laravel ls is in your $PATH
cmd = { 'laravel-ls' },
-- Absolute path
-- cmd = { '/path/to/laravel-ls/build/laravel-ls' },
-- if you want to recompile everytime
-- the language server is started.
-- cmd = { '/path/to/laravel-ls/start.sh' },
root_dir = vim.fn.getcwd(),
})
end
})
Author
Henrik Hautakoski henrik@shufflingpixels.com