Laravel Language Server written in go.
About
|
Features
|
Install
|
Building
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.
List of done and planned features of the language server.
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.
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.
env('APP_NAME');
Env::get('APP_NAME');- Hover information shows actual value from
.envfile - Go to
.envfile and key location - Auto-complete for defined keys.
- Diagnostics for non defined keys.
- Code action to create missing key
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.
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
asset('main.css');- Auto-completion
- Go to asset file
- Diagnostics for non existent assets
<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
- Livewire support
- Inertia support
- Eloquent support
- Jump to test file from class.
Official binaries for Windows and Linux are provided on each github release
MacOS users have to use Install via go
NOTE: although MacOS is not officially supported, some users have had success building it.
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-lsThe program can be compiled and installed via go:
go install github.com/laravel-ls/laravel-ls/cmd/laravel-ls@latestAnd if you have added GOPATH to your shell's PATH. You should be able to just run the server with:
laravel-lsSee the official documentation of go install
To build the project you need golang version 1.22 or later, make and a c compiler.
The project officially supports building Windows and Linux binaries. But some users have had success on MacOS.
When the dependencies are met, running make will compile and produce the
binary build/laravel-ls.
require'lspconfig'.laravel_ls.setup{}or custom config
require'lspconfig'.laravel_ls.setup{
-- Server-specific settings. See `:help lspconfig-setup`
settings = {
cmd = { … },
},
}vim.lsp.enable('laravel_ls')or custom config
vim.lsp.config('laravel_ls', {
cmd = { … },
})All settings can be found here
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
})Henrik Hautakoski henrik@shufflingpixels.com