Blade in Neovim
Blade ist Laravels hauseigene Template-Sprache. Sie wird von Neovim nicht ohne Weiteres unterstützt. Besonders frustrierend: Wenn man die entsprechenden Dateien öffnet, bleibt Syntax-Highlighting ausgeschaltet. Nicht nur für Blade selbst - auch für PHP und HTML.
Die Arbeit ohne farbliche Hervorhebungen ist heutzeutage unzumutbar, deshalb wollen wir zunächst das Syntax-Highlighting zum Laufen bringen. Im Anschluss daran wird (gewissermaßen als Bonus) gezeigt, wie sich Blade-Code mithilfe von conform.nvim formatieren lässt.
Ich folge hier zwei Anleitungen, die sich im Grunde leicht finden lassen, aber bei denen man vielleicht leicht etwas übersieht. Für die Tree-sitter-Grammatik ein GitHub-Issue und für die Autoformatierung @jogarcias Anleitung.
Tree-sitter für Blade
Viele Features von Neovim stützen sich auf Parsing durch Tree-sitter. Blade ist leider nicht Teil der Sprachen, die sich einfach durch TSInstall X
installieren lassen. @EmranMR hat jedoch eine Grammatik geschrieben, die wir Tree-sitter manuell hinzufügen können. Dazu müssen wir mehrere Dinge tun.
- Zunächst müssen wir der Tree-sitter-Konfiguration die Grammatik hinzufügen. Vermutlich haben die meisten Nutzer bereits eine
require'nvim-treesitter.configs'.setup{...}
-Konfiguration; neue Grammatiken werden mitrequire "nvim-treesitter.parsers".get_parser_configs()
hinzugefügt.
require'nvim-treesitter.configs'.setup{...}
local parser_config = require "nvim-treesitter.parsers".get_parser_configs()
parser_config.blade = {
install_info = {
url = "https://github.com/EmranMR/tree-sitter-blade",
files = {"src/parser.c"},
branch = "main",
},
filetype = "blade"
}
-- Set the *.blade.php file to be filetype of blade
vim.filetype.add({
pattern = {
[".*%.blade%.php"] = "blade",
},
})
Nun muss die Grammatik noch installiert werden:
TSInstall blade
- Um Syntax-Highlighting zu ermöglichen, muss
~/.config/nvim/after/queries/blade/highlights.scm
mit folgendem Inhalt erstellt werden:
(directive) @function
(directive_start) @function
(directive_end) @function
(comment) @comment
((parameter) @include (#set! "priority" 110))
((php_only) @include (#set! "priority" 110))
((bracket_start) @function (#set! "priority" 120))
((bracket_end) @function (#set! "priority" 120))
(keyword) @function
- Durch Tree-sitters Language Injection-Feature wird festgelegt, dass auch der PHP-Code in den gleichen Dateien berücksichtigt wird. Ansonsten würden nur Blades eigenen Symbole und Directives eingefärbt. Dazu wird
~/.config/nvim/after/queries/blade/injections.scm
mit folgendem Inhalt erstellt:1
((text) @injection.content
(#not-has-ancestor? @injection.content "envoy")
(#set! injection.combined)
(#set! injection.language php))
Code-Formatting
Blade-formatter dient der automatischen Formatierung. Um es (global) zu installieren, kann NPM genutzt werden:
sudo npm install -g blade-formatter
Um das Tool für die Formatierung anzuwenden, wird es der Conform-Konfiguration hinzugefügt:
require("conform").setup({
formatters_by_ft = {
blade = { "blade-formatter" }, -- run `sudo npm install -g blade-formatter`
},
})
-
In der entsprechenden Datei auf GitHub finden sich weitere Injections. Diese könnten in einigen Fällen notwendig sein. ↩