Laravel lsp
The Laravel/Blade lsp provides:
Blade:
- Diagnostics on missing components + action to create it.
- Autocomplete for components and their arguments.
- Hover shows the path to the view.
- Goto definition on components to jump to the view or component class.
- Blade directive autocomplete for non default directives. (For default directives there are many snippet extensions available)
Livewire:
- Autocomplete for livewire components and their arguments.
- Goto definition to the livewire class (not yet the view).
- Hover shows the path to the view.
- Diagnostics on missing components + action to create it.
Other (plans):
- Suggestions for config()
- view() suggestions, and goto definition for view() calls.
Demo
Status
This LSP is still to be considered unstable. If you find issues, you are welcome to provide a issue/pull request with a reproducable example.
Issues without clear steps to reproduce may be closed without answer.
As it is experimental, there is no guarantee whatsoever that this will work. Please always ensure your code is under version control.
Thing may be slow.
Installation
Requirements
PHP 8.0, older versions will NOT work. (not even trying). LARAVEL 8.0, older versions will NOT work.
This LSP is based on php in your runtime. I have not tested this with docker so for now assume it will not work from outside.
Your application needs to be bootable. This LSP will run commands in your codebase to get all the information it needs. (Much like running laravel-ide-helper).
Vscode
Install Name: laravel-blade syntax
Download the extension from the vscode extensions.
(Neo)vim
Download the compiled version from the releases then use it to setup the lsp:
This depends on your setup, below are instruction for using it with nvim-lspconfig
local lspconfig = require'lspconfig'
local configs = require 'lspconfig.configs'
-- Configure it
configs.blade = {
default_config = {
-- Path to the executable: laravel-dev-generators
cmd = { "laravel-dev-generators", "lsp" },
filetypes = {'blade'};
root_dir = function(fname)
return lspconfig.util.find_git_ancestor(fname)
end;
settings = {};
};
}
-- Set it up
lspconfig.blade.setup{
-- Capabilities is specific to my setup.
capabilities = capabilities
}
Building from source
This LSP is based on the great work in phpactor/language-server
As it is php it actually does not need building, but we can still do this by makeing a phar so it is easier to distribute.
To build the phar you run:
./laravel-dev-tools app:build
Building the vscode extension
To build the vscode extension we have to build the phar and copy it to the extension's directory:
./laravel-dev-tools app:build --build-version=1 && cp builds/laravel-dev-tools extensions/vscode/laravel-dev-tools
Then in the extensions/vscode
directory we do:
Install npm modules: npm install
Then make the package: npm run package
(for me: publish using vsce publish
)
Licence notes
This project is based on Laravel Zero
It uses phpactor/language-server for the LSP layer.
Other packages used are:
Todo's
- Auto copy the readme/Licence to the extension folder when building.