@changangus/coc-laravel
v0.8.2
Published
Laravel extension for coc.nvim
Downloads
362
Maintainers
Readme
coc-laravel
Laravel extension for coc.nvim.
Note: This is a fork of @yaegassy/coc-laravel with bug fixes and additional features.
What's Changed
Bug Fixes
- Fixed PHP 8.5 deprecation warnings breaking the extension: PHP 8.5 outputs deprecation notices (e.g.,
Deprecated: Constant PDO::MYSQL_ATTR_SSL_CA...) to stdout, which corrupted artisan tinker output used for config/path resolution. This causedENAMETOOLONGerrors when the extension tried to use the polluted output as file paths. All artisan command output is now sanitized by stripping PHP warning/notice lines before processing.
New Features
- Config go-to-definition: Jump from
config('app.name')toconfig/app.phpat the exact key, with nested key support. Works in both PHP and Blade files. - Translation go-to-definition: Jump from
__('messages.welcome'),trans(), or@lang()to the corresponding entry in your lang files. Works in both PHP and Blade files. - Route go-to-definition: Jump from
route('users.index')to both the route definition inroutes/*.php(where->name()is called) and the controller action method. Works in both PHP and Blade files. - Event/listener navigation: Jump from
event(new OrderShipped(...))orOrderShipped::dispatch()to the event class and all registered listener classes (parsed fromEventServiceProvider). - Controller action completion: In route definitions like
Route::get('/users', [UserController::class, '']), get completion for the controller's public methods. - Eloquent relationship completion: Model field completion now also includes relationships parsed from
@property-readannotations in_ide_helper_models.php. - Policy method completion: Complete policy method names in
@can(),authorize(),Gate::allows(), and similar constructs. Policies are discovered fromapp/Policies/andAuthServiceProvider.
Package Updates
- Updated all dependencies to latest versions
- Fixed esbuild config for compatibility with esbuild v0.27+
- Pinned
stillat-blade-parserto v1.2.0 (v2 is not yet compatible)
Install
CocInstall:
:CocInstall @changangus/coc-laravelvim-plug:
Plug 'changangus/coc-laravel', {'do': 'npm install --legacy-peer-deps && npm run build'}Features
Note:
This coc-extension executes artisan commands in the background for some features. Therefore, you must be able to run PHP in your environment.
This coc-extension will provide various completion features and more features for Laravel projects.
- Completions
- Component completion | DEMO
- Livewire completion (Also compatible with Livewire
v3!) - PHP completion in PHP-related region of Blade file
- [NOTE]: To use this feature, please execute the
laravel.stubs.downloadcommand. - PHP Function completion | DEMO
- PHP Class completion | DEMO
- PHP Static Class completion (Static class members and constants, e.g.
DateTime::|) | DEMO - PHP Object Member completion (e.g.
$obj->|) | DEMO - PHP Variable completion | DEMO
- PHP Constant completion | DESCRIPTION
- PHP Keyword completion | DESCRIPTION
- [NOTE]: To use this feature, please execute the
- Directive completion | DEMO
- Config completion | DEMO
- Env completion | DEMO
- Validation completion | DEMO
- Route completion | DEMO
- View completion | DEMO
- Middleware completion | DEMO
- Guard completion | DEMO
- Translation completion | DEMO
- Method directive parameter completion | DEMO
- View reference variable completion | DEMO
- Eloquent model field completion | DEMO
- Completion feature using
_ide_helper_models.phpfile generated by laravel-ide-helper - Now also includes relationship completion from
@property-readannotations
- Completion feature using
- Controller action completion (NEW)
- Complete controller method names in route definitions, e.g.
Route::get('/users', [UserController::class, '|'])
- Complete controller method names in route definitions, e.g.
- Policy method completion (NEW)
- Complete policy method names in
@can(),authorize(),Gate::allows(), etc. - Discovers policies from
app/Policies/andAuthServiceProvider
- Complete policy method names in
- Misc
- Definitions
- View definition | DEMO
- [PHP -> Blade] Definition jump to the Blade template specified by the view() function.
- Blade View definition | DEMO
- [Blade -> Blade] Jump to the Blade template specified by the
@extendsand@includedirectives.
- [Blade -> Blade] Jump to the Blade template specified by the
- Component definition | DEMO
- [Blade -> PHP or Blade] Jump to the component file. Both class components and anonymous components are supported.
- Livewire tag definition | DEMO
- [Blade -> PHP or Blade] Jump to the livewire file. Both livewire class and blade template are supported.
- Livewire directive definition | DEMO
- [Blade -> PHP or Blade] Jump to the livewire file. Both livewire class and blade template are supported.
- Config definition (NEW)
- [PHP/Blade -> PHP] Jump from
config('app.name')to the config file at the exact key.
- [PHP/Blade -> PHP] Jump from
- Translation definition (NEW)
- [PHP/Blade -> PHP] Jump from
__('messages.welcome'),trans(), or@lang()to the lang file entry.
- [PHP/Blade -> PHP] Jump from
- Route definition (NEW)
- [PHP/Blade -> PHP] Jump from
route('name')to the route definition and controller action.
- [PHP/Blade -> PHP] Jump from
- Event/listener definition (NEW)
- [PHP -> PHP] Jump from
event()orEvent::dispatch()to event class and listener files.
- [PHP -> PHP] Jump from
- View definition | DEMO
- References
laravel.view.findAllReferencescommand | DEMO- [Blade -> PHP] Show references to PHP files that use the current blade
file. Referenced directories are
routes,app/Http/Controllers,app/View/Components,app/Http/Livewireandapp/Livewire.
- [Blade -> PHP] Show references to PHP files that use the current blade
file. Referenced directories are
- View reference | DEMO
- [PHP -> Blade] Reference to a PHP file that uses the same template in the view function.
- Hovers
- ComponentTag Hover | DEMO
- Diagnostics
- CodeActions
- Artisan and Sail commands integration
laravel.artisan.runcommand feature.laravel.sailArtisan.runcommand feature.
[RECOMMENDED] Additional installation of "watchman"
coc-laravel uses the workspace/didChangeWatchedFiles notification to monitor files in the project.
In coc.nvim, it is recommended to install watchman in order to utilize this feature.
If you have difficulty installing watchman, you can use coc-laravel without watchman, but you may not be able to immediately use IntelliSense with the newly added files.
In this case, please manually enter the following command.
:CocCommand laravel.project.restart
or
:CocRestart
workspaceFolders
Depending on the project like mono repo or how Vim/Neovim is started, workspaceFolders may not be recognized correctly.
To make coc.nvim recognize workspaceFolders correctly, you can set b:coc_root_patterns in .vimrc/init.vim
Example:
au FileType php,blade let b:coc_root_patterns = ['.git', '.env', 'composer.json', 'artisan']For more information, check this coc.nvim's wiki.
Configuration options
laravel.enable: Enable coc-laravel extension, default:truelaravel.environment.phpPath: Path to PHP, you can use a custom version of PHP. If there is no setting,phpof the execution environment will be used, default:""laravel.project.excludeVendors: List of target vendor directories to exclude during project analysis, e.g.["fakerphp", "phpunit"], default:[]laravel.project.startupMessageEnable: Enable project startup messages, default:truelaravel.stubs.customVersion: Specify the version of stubs to download with thelaravel.stubs.downloadcommand. If not set, thestubsVersiondefined inpackage.jsonwill be used, default:""laravel.stubs.useStubs: List of stubs to be used, default:["Core", "date", "standard"]laravel.completion.enable: Enable all completion feature, default:truelaravel.completion.directiveEnable: Enable directive completion, default:truelaravel.completion.directiveList: List of directive used in directive completion, default: Omitted due to the large number of settings, See configuration in package.jsonlaravel.completion.configEnable: Enable config completion, default:truelaravel.completion.envEnable: Enable env completion, default: truelaravel.completion.validationEnable: Enable validation completion.laravel.completion.routeEnable: Enable route completion, default:truelaravel.completion.viewEnable: Enable view completion, default:truelaravel.completion.middlewareEnable: Enable middleware completion, default:truelaravel.completion.guardEnable: Enable guard completion, default:truelaravel.completion.translationEnable: Enable translation completion, default:truelaravel.completion.componentEnable: Enable component completion, default:truelaravel.completion.phpFunctionEnable: Enable php function completion, default:truelaravel.completion.phpFunction.stubsEnable: Enable stubs in phpFunction completion, default:truelaravel.completion.phpFunction.vendorEnable: Enable vendor in phpFunction completion, default:truelaravel.completion.phpClassEnable: Enable php class completion, default:truelaravel.completion.phpClass.stubsEnable: Enable stubs in phpClass completion, default:truelaravel.completion.phpClass.vendorEnable: Enable vendor in phpClass completion, default:truelaravel.completion.phpConstantEnable: Enable php constant completion, default:truelaravel.completion.phpConstant.stubsEnable: Enable stubs in phpConstant completion, default:truelaravel.completion.phpConstant.vendorEnable: Enable vendor in phpConstant completion, default:truelaravel.completion.phpStaticClassEnable: Enable php static class completion, default:truelaravel.completion.phpObjectMemberEnable: Enable php object member completion, default:truelaravel.completion.phpVariableEnable: Enable php variable completion, default:truelaravel.completion.phpKeywordEnable: Enable php keyword completion, default:truelaravel.completion.eloquentModelFieldEnable: Enable eloquent model field completion, default:truelaravel.completion.controllerActionEnable: Enable controller action method completion in route definitions, default:truelaravel.completion.policyMethodEnable: Enable policy method completion, default:truelaravel.completion.viewReferenceVariableEnable: Enable view reference variable completion, default:truelaravel.completion.methodParameterEnable: Enable method parameter completion, default:truelaravel.completion.livewireEnable: Enable livewire completion, default:truelaravel.livewire.wireClickAttributes: List of click related action to be added towire:xxxx, default:["click", "click.prefetch"]laravel.livewire.wireModelAttributes: List of model related action to be added towire:xxxx, default:["model", "model.debounce.100ms", "model.lazy", "model.defer"]laravel.livewire.wireEventAttributes: List of browser events to be added towire:xxxx. No need forwire:modelorwire:click. default: Omitted due to the large number of settings, See configuration in package.jsonlaravel.definition.enable: Enable definition, defaulttruelaravel.definition.configEnable: Enable go-to-definition for config() calls, default:truelaravel.definition.translationEnable: Enable go-to-definition for __(), trans(), and @lang() calls, default:truelaravel.definition.routeEnable: Enable go-to-definition for route() calls, default:truelaravel.definition.eventEnable: Enable go-to-definition for event dispatch to event class and listeners, default:truelaravel.reference.enable: Enable reference, defaulttruelaravel.hover.enable: Enable hover, defaulttruelaravel.diagnostic.enable: Enable diagnostic, default:truelaravel.codeAction.enable: Enable code action, default:truelaravel.artisan.withoutArgumentsCommandList: List of commands to quickly executelaravel.artisan.runorlaravel.sailArtisan.runwithout prompting for arguments or options, e.g.["route:list", "clear-compiled"], default:[]laravel.artisan.enableSplitRight: Use vertical belowright for artisan terminal window, default:false
Commands
laravel.project.restart: Run project restartlaravel.project.stats: (Develop) Show project statslaravel.project.finder: (Develop) Run project finderlaravel.stubs.download: Download stubslaravel.stubs.version: Show the version of stubslaravel.artisan.run: Run artisan commandlaravel.sailArtisan.run: Run sail artisan commandlaravel.view.findAllReferences: Find view file referenceslaravel.showOutput: Show laravel output channel
CodeActions
Example key mapping (Code Action related):
nmap <silent> ga <Plug>(coc-codeaction-line)
nmap <silent> <leader>ac <Plug>(coc-codeaction-cursor)Actions:
Create blade componentFix method directive parameter
Recommended coc-extensions for php
Based on
This project is based on @yaegassy/coc-laravel by yaegassy. Thank you for the excellent foundation.
Inspired Projects
- amir9480/vscode-laravel-extra-intellisense | (VSCode extension)
- Laravel Idea | (PhpStorm plugin)
- haringsrob/laravel-dev-tools
- and More...
Thanks
- glayzzle/php-parser
- Stillat/blade-parser-typescript
- JetBrains/phpstorm-stubs
- microsoft/vscode-html-languageservice
License
MIT
This extension is built with create-coc-extension
