Skip to content

Laravel Blade Templates extension for coc.nvim. Provides "formatter", "linter", "completion" and more...

License

Notifications You must be signed in to change notification settings

yaegassy/coc-blade

Repository files navigation

coc-blade

Laravel Blade Templates extension for coc.nvim. Provides "formatter", "linter", "completion" and more...

coc-blade-demo

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.
  • 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 by blade-formatter, default: true
  • blade.bladeFormatter.optIndentSize: Indent size, valid type integer or null, default: null,
  • blade.bladeFormatter.optWrapLineLength: The length of line wrap size, valid type integer or null, 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 type string or null, default: null
  • blade.bladeFormatter.optEndWithNewLine: End output with newline, default: true
  • blade.bladeFormatter.optEndOfLine: End of line character(s), valid options ["LF", "CRLF"], valid type string or null, default: null
  • blade.bladeFormatter.optUseTabs: Use tab as indentation character, default: false
  • blade.bladeFormatter.optSortTailwindcssClasses: Sort Tailwindcss classes automatically. This option respects tailwind.config.js and sort classes according to settings, valid type boolean or null, 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 as custom. You can use regex for attribute names, valid type string, string[] or null 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 type integer or null, 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 using stillat-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 channel
  • blade.bladeFormatter.run: Run blade-formatter
  • blade.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

License

MIT


This extension is built with create-coc-extension