Awesome
coc-blade
Laravel Blade Templates extension for coc.nvim. Provides "formatter", "linter", "completion" and more...
<img width="760" alt="coc-blade-demo" src="https://user-images.githubusercontent.com/188642/135827583-09771a6d-2d14-48ee-bd9e-e1081ee3c8ad.gif">Features
- Format
- Lint
- Completion
- Blade Snippets Completion
- Blade Directive Completion
- Definition
- Jump to template file specified by
@extends
,@include
directive, etc. - Jump to "Blade Components" file.
- [Warning] Class-based Components are not supported.
- Jump to "Jetstream Components" file.
- Jump to template file specified by
- Code Action
- Add a blade comment to disable the formatting.
- Hover
Install
CocInstall:
:CocInstall coc-blade
vim-plug:
Plug 'yaegassy/coc-blade', {'do': 'yarn install --frozen-lockfile'}
Recommended coc extension:
(Optional) Additional installation of laravel blade related coc-extension
- @yaegassy/coc-laravel
- Various completions, definitions, references, hovers, diagnostics, codeActions, artisan and sail commands integration and more features for Laravel projects.
- @yaegassy/coc-intelephense
- intelephense (PHP language server) extension for coc.nvim. intelephense's various LSP features and this extension's additional features are available.
- coc-html
- html-related support will be added in blade
Note
Filetype related
The "filetype" must be blade
for this extension to work.
Install "blade" related plugin (e.g. jwalton512/vim-blade or sheerun/vim-polyglot or nvim-treesitter with tree-sitter-blade).
For more information on setup tree-sitter-blade
in nvim-treesitter
, please click here.
Usage Topics
formatter (blade-formatter)
Run:
:call CocAction('format')
:CocCommand bladeFormatter.run
If there is a "syntax error" in the blade template, the formatting will fail.
Configuration file: .bladeformatterrc.json or .bladeformatterrc:
To configure settings per project, put .bladeformatterrc.json
or .bladeformatterrc
to your project root will blade-formatter treat it as setting files.
Configuration file will like below:
{
"indentSize": 4,
"wrapAttributes": "auto",
"wrapLineLength": 120,
"endWithNewLine": true,
"useTabs": false,
"sortTailwindcssClasses": true
}
Ignoring Files: .bladeignore:
To ignore specific file, put .bladeignore
to your repository root will blade-formatter
treat it as ignored files.
resources/views/users/index.blade.php
resources/views/products/*
resources/views/books/**/*
Disabling format in file:
In coc-blade, there is a code action feature to add a blade comment to disable the formatting.
linter (using Stillat/blade-parser-typescript)
This feature is enabled by default. If you do not need the linter feature, set blade.bladeParserLint.enable
to false
snippets completion (laravel-blade-snippets-vscode)
You can auto-complete by typing b:
, lv:
, Blade::
, livewire::
.
It uses snippet files from onecentlin/laravel-blade-snippets-vscode to provide completion.
directive completion
You can auto-complete by typing @
.
Configuration options
blade.enable
: Enable coc-blade extension, default:true
blade.completion.enable
: Enable completion feature, default:true
blade.completion.enableDirective
: Enable directive completion, default:true
blade.completion.enableSnippets
: Enable snippets completion, default:true
blade.completion.excludeSnippets
: Exclude specific prefix in snippet completion, e.g.["b:extends", "lv:url", "Blade::component"]
, default:[]
blade.bladeFormatter.enable
: Enable/Disable the formatting feature byblade-formatter
, default:true
blade.bladeFormatter.optIndentSize
: Indent size, valid typeinteger
ornull
, default:null
,blade.bladeFormatter.optWrapLineLength
: The length of line wrap size, valid typeinteger
ornull
, default:null
blade.bladeFormatter.optWrapAttributes
: The way to wrap attributes, valid options["auto", "force", "force-aligned", "force-expand-multiline", "aligned-multiple", "preserve", "preserve-aligned"]
, valid typestring
ornull
, default:null
blade.bladeFormatter.optEndWithNewLine
: End output with newline, default:true
blade.bladeFormatter.optEndOfLine
: End of line character(s), valid options["LF", "CRLF"]
, valid typestring
ornull
, default:null
blade.bladeFormatter.optUseTabs
: Use tab as indentation character, default:false
blade.bladeFormatter.optSortTailwindcssClasses
: Sort Tailwindcss classes automatically. This option respectstailwind.config.js
and sort classes according to settings, valid typeboolean
ornull
, default:null
blade.bladeFormatter.optSortHtmlAttributes
: Sort HTML Attributes in the specified order, valid option["none", "alphabetical", "code-guide", "idiomatic", "vuejs", "custom"]
, default:"none"
blade.bladeFormatter.optCustomHtmlAttributesOrder
: Comma separated custom HTML attributes order. To enable this you must specify sort html attributes option ascustom
. You can use regex for attribute names, valid typestring
,string[]
ornull
default:null
blade.bladeFormatter.optNoMultipleEmptyLines
: Collapses multiple blank lines into a single blank line, default:false
blade.bladeFormatter.optNoPhpSyntaxCheck
: Disable PHP syntax check. Enabling this will suppress PHP syntax error reporting, default:false
blade.bladeFormatter.optNoSingleQuote
: Use double quotes instead of single quotes for php expression, default:false
blade.bladeFormatter.optWrapAttributesMinAttrs
: Minimum number of html tag attributes for force wrap attribute options. Wrap the first attribute only if 'force-expand-multiline' is specified in wrap attributes, valid typeinteger
ornull
, default:null
blade.bladeFormatter.optIndentInnerHtml
: Indent<head>
and<body>
tag sections in html, default:false
blade.bladeFormatter.optNoTrailingCommaPhp
: If set to true, no trailing commas are printed for php expression, default:false
blade.bladeFormatter.optExtraLiners
: Comma separated list of tags that should have an extra newline before them, default:[]
blade.bladeParserLint.enable
: Enable/Disable the linting feature usingstillat-blade-parser
, default:true
blade.bladeParserLint.debug
: Output the results of the parsing of stillat-blade-parser to the channel log, default:false
blade.bladeParserLint.optCustomIfs
: A list of custom if directives, default:[]
blade.bladeParserLint.optDirectives
: A list of directives that can be parsed, default:[]
blade.bladeParserLint.optIgnoreDirectives
: A list of directive names that should be ignored, default:[]
Commands
blade.showOutput
: Show blade output channelblade.bladeFormatter.run
: Run blade-formatterblade.showReferences
: Show BladeDirective (@...
) or BladeEcho ({{ ... }}
,{!! ... !!}
) location information for the current file
Code Actions
Example key mapping (Code Action related):
nmap <silent> ga <Plug>(coc-codeaction-line)
nmap <silent> gA <Plug>(coc-codeaction)
Actions:
Add "blade-formatter-disable-next-line" for this line
Add "blade-formatter-disable" for this line
Add "blade-formatter-enable" for this line
Add "blade-formatter-disable" for whole file
Thanks
- shufo/blade-formatter
- shufo/vscode-blade-formatter
- Stillat/blade-parser-typescript
- onecentlin/laravel-blade-snippets-vscode
License
MIT
This extension is built with create-coc-extension