Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yaegassy/coc-blade

Laravel Blade Templates extension for coc.nvim. Provides "formatter", "linter", "completion" and more...
https://github.com/yaegassy/coc-blade

blade coc coc-extensions coc-nvim completion formatter laravel linter neovim php vim

Last synced: 19 days ago
JSON representation

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

Awesome Lists containing this project

README

        

# coc-blade

Laravel Blade Templates extension for [coc.nvim](https://github.com/neoclide/coc.nvim). Provides "formatter", "linter", "completion" and more...

coc-blade-demo

## Features

- Format
- by [blade-formatter](https://github.com/shufo/blade-formatter)
- Lint
- using [Stillat/blade-parser-typescript](https://github.com/Stillat/blade-parser-typescript)
- 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**:

```vim
:CocInstall coc-blade
```

**vim-plug**:

```vim
Plug 'yaegassy/coc-blade', {'do': 'yarn install --frozen-lockfile'}
```

**Recommended coc extension**:

## (Optional) Additional installation of laravel blade related coc-extension

- [@yaegassy/coc-laravel](https://github.com/yaegassy/coc-laravel)
- Various completions, definitions, references, hovers, diagnostics, codeActions, artisan and sail commands integration and more features for Laravel projects.
- [@yaegassy/coc-intelephense](https://github.com/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](https://github.com/neoclide/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](https://github.com/jwalton512/vim-blade) or [sheerun/vim-polyglot](https://github.com/sheerun/vim-polyglot) or [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter) with [tree-sitter-blade](https://github.com/EmranMR/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:

```json
{
"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.

```gitignore
resources/views/users/index.blade.php
resources/views/products/*
resources/views/books/**/*
```

**Disabling format in file**:

- See:

> 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`

- [DEMO](https://github.com/yaegassy/coc-blade/pull/13)

### 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](https://github.com/onecentlin/laravel-blade-snippets-vscode) to provide completion.

### directive completion

You can auto-complete by typing `@`.

- [DEMO](https://github.com/yaegassy/coc-blade/pull/10)

## 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 `` and `` 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)**:

```vim
nmap ga (coc-codeaction-line)
nmap gA (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](https://github.com/shufo/blade-formatter)
- [shufo/vscode-blade-formatter](https://github.com/shufo/vscode-blade-formatter)
- [Stillat/blade-parser-typescript](https://github.com/Stillat/blade-parser-typescript)
- [onecentlin/laravel-blade-snippets-vscode](https://github.com/onecentlin/laravel-blade-snippets-vscode)

## License

MIT

---

> This extension is built with [create-coc-extension](https://github.com/fannheyward/create-coc-extension)