You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
298 lines
8.5 KiB
298 lines
8.5 KiB
-- ~/.config/nvim/lua/plugins/drupal.lua |
|
-- LazyVim plugin configuration for Drupal 10 frontend / theming development |
|
-- Covers: PHP, Twig, SCSS/CSS, JS/TS, HTML, YAML, JSON |
|
|
|
return { |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 1. TREESITTER — syntax highlighting for all Drupal-relevant file types |
|
-- ----------------------------------------------------------------------- |
|
{ |
|
"nvim-treesitter/nvim-treesitter", |
|
opts = function(_, opts) |
|
vim.list_extend(opts.ensure_installed, { |
|
"php", |
|
"twig", |
|
"html", |
|
"css", |
|
"scss", |
|
"javascript", |
|
"typescript", |
|
"json", |
|
"yaml", |
|
"bash", |
|
"lua", |
|
}) |
|
end, |
|
}, |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 2. LSP — language servers for PHP, CSS, HTML, JS, Emmet, YAML |
|
-- ----------------------------------------------------------------------- |
|
{ |
|
"neovim/nvim-lspconfig", |
|
opts = { |
|
servers = { |
|
|
|
-- PHP: best LSP for Drupal (hooks, classes, autocompletion) |
|
-- Install via Mason: :MasonInstall intelephense |
|
intelephense = { |
|
settings = { |
|
intelephense = { |
|
stubs = { |
|
-- Include common Drupal-related PHP extensions |
|
"apache", |
|
"bcmath", |
|
"bz2", |
|
"calendar", |
|
"com_dotnet", |
|
"Core", |
|
"ctype", |
|
"curl", |
|
"date", |
|
"dba", |
|
"dom", |
|
"enchant", |
|
"exif", |
|
"fileinfo", |
|
"filter", |
|
"fpm", |
|
"ftp", |
|
"gd", |
|
"hash", |
|
"iconv", |
|
"imap", |
|
"intl", |
|
"json", |
|
"ldap", |
|
"libxml", |
|
"mbstring", |
|
"mcrypt", |
|
"meta", |
|
"mhash", |
|
"mysql", |
|
"mysqli", |
|
"oci8", |
|
"odbc", |
|
"openssl", |
|
"pcntl", |
|
"pcre", |
|
"PDO", |
|
"pdo_ibm", |
|
"pdo_mysql", |
|
"pdo_pgsql", |
|
"pdo_sqlite", |
|
"pgsql", |
|
"Phar", |
|
"posix", |
|
"pspell", |
|
"readline", |
|
"recode", |
|
"Reflection", |
|
"regex", |
|
"session", |
|
"shmop", |
|
"SimpleXML", |
|
"snmp", |
|
"soap", |
|
"sockets", |
|
"sodium", |
|
"SPL", |
|
"sqlite3", |
|
"standard", |
|
"superglobals", |
|
"sysvmsg", |
|
"sysvsem", |
|
"sysvshm", |
|
"tidy", |
|
"tokenizer", |
|
"wddx", |
|
"xml", |
|
"xmlreader", |
|
"xmlrpc", |
|
"xmlwriter", |
|
"Zend OPcache", |
|
"zip", |
|
"zlib", |
|
}, |
|
environment = { |
|
phpVersion = "8.2", -- adjust to your Drupal 10 PHP version |
|
}, |
|
files = { |
|
maxSize = 5000000, |
|
}, |
|
}, |
|
}, |
|
-- Uncomment and add your licence key if you have Intelephense Premium |
|
-- init_options = { |
|
-- licenceKey = "YOUR_LICENCE_KEY_HERE", |
|
-- }, |
|
}, |
|
|
|
-- CSS & SCSS |
|
-- Install via Mason: :MasonInstall css-lsp |
|
cssls = {}, |
|
|
|
-- HTML (also helps in Twig files) |
|
-- Install via Mason: :MasonInstall html-lsp |
|
html = { |
|
filetypes = { "html", "twig", "htmldjango" }, |
|
}, |
|
|
|
-- Emmet: expand abbreviations in HTML/Twig/SCSS |
|
-- Install via Mason: :MasonInstall emmet-ls |
|
emmet_ls = { |
|
filetypes = { |
|
"html", |
|
"twig", |
|
"css", |
|
"scss", |
|
"javascript", |
|
"typescript", |
|
"php", |
|
}, |
|
init_options = { |
|
html = { |
|
options = { |
|
["bem.enabled"] = true, |
|
}, |
|
}, |
|
}, |
|
}, |
|
|
|
-- JavaScript / TypeScript |
|
-- Install via Mason: :MasonInstall typescript-language-server |
|
ts_ls = {}, |
|
|
|
-- YAML: Drupal config files (.yml) |
|
-- Install via Mason: :MasonInstall yaml-language-server |
|
yamlls = { |
|
settings = { |
|
yaml = { |
|
schemas = { |
|
-- Point at Drupal schema if you have it locally, or leave empty |
|
}, |
|
format = { enable = true }, |
|
validate = true, |
|
}, |
|
}, |
|
}, |
|
|
|
-- JSON |
|
-- Install via Mason: :MasonInstall json-lsp |
|
jsonls = {}, |
|
}, |
|
}, |
|
}, |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 3. MASON — ensure all servers & tools are auto-installed |
|
-- ----------------------------------------------------------------------- |
|
{ |
|
"williamboman/mason.nvim", |
|
opts = function(_, opts) |
|
vim.list_extend(opts.ensure_installed, { |
|
"intelephense", -- PHP |
|
"css-lsp", -- CSS/SCSS |
|
"html-lsp", -- HTML |
|
"emmet-ls", -- Emmet |
|
"typescript-language-server", -- JS/TS |
|
"yaml-language-server", -- YAML |
|
"json-lsp", -- JSON |
|
"prettier", -- Formatter: JS, CSS, SCSS, JSON, YAML, HTML |
|
"stylelint", -- Linter: CSS/SCSS |
|
"eslint-lsp", -- Linter: JS/TS |
|
"php-cs-fixer", -- Formatter: PHP (optional) |
|
}) |
|
end, |
|
}, |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 4. FORMATTING — Prettier for web files, php-cs-fixer for PHP |
|
-- ----------------------------------------------------------------------- |
|
{ |
|
"stevearc/conform.nvim", |
|
opts = { |
|
formatters_by_ft = { |
|
javascript = { "prettier" }, |
|
typescript = { "prettier" }, |
|
css = { "prettier" }, |
|
scss = { "prettier" }, |
|
html = { "prettier" }, |
|
json = { "prettier" }, |
|
yaml = { "prettier" }, |
|
twig = { "prettier" }, -- requires prettier-plugin-twig |
|
php = { "php_cs_fixer" }, |
|
}, |
|
}, |
|
}, |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 5. LINTING — ESLint for JS/TS, Stylelint for CSS/SCSS |
|
-- ----------------------------------------------------------------------- |
|
{ |
|
"mfussenegger/nvim-lint", |
|
opts = { |
|
linters_by_ft = { |
|
javascript = { "eslint" }, |
|
typescript = { "eslint" }, |
|
css = { "stylelint" }, |
|
scss = { "stylelint" }, |
|
}, |
|
}, |
|
}, |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 6. FILETYPE DETECTION — teach Neovim about Twig & Drupal file types |
|
-- ----------------------------------------------------------------------- |
|
{ |
|
"nvim-treesitter/nvim-treesitter", |
|
init = function() |
|
vim.filetype.add({ |
|
extension = { |
|
twig = "twig", |
|
theme = "php", -- Drupal .theme files are PHP |
|
inc = "php", -- .inc files are PHP |
|
module = "php", -- .module files are PHP |
|
install = "php", -- .install files are PHP |
|
}, |
|
filename = { |
|
[".eslintrc"] = "json", |
|
[".stylelintrc"] = "json", |
|
}, |
|
}) |
|
end, |
|
}, |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 7. TELESCOPE — fuzzy finding tuned for Drupal project structure |
|
-- ----------------------------------------------------------------------- |
|
{ |
|
"nvim-telescope/telescope.nvim", |
|
opts = { |
|
defaults = { |
|
-- Ignore common Drupal/Node dirs from search results |
|
file_ignore_patterns = { |
|
"node_modules/", |
|
"vendor/", |
|
".git/", |
|
"web/core/", -- ignore Drupal core, focus on custom |
|
"web/modules/contrib/", -- ignore contrib modules |
|
"web/themes/contrib/", -- ignore contrib themes |
|
"%.lock", |
|
}, |
|
}, |
|
}, |
|
}, |
|
|
|
-- ----------------------------------------------------------------------- |
|
-- 8. OPTIONAL: Colorscheme well-suited to web development |
|
-- (remove/swap if you already have a preference) |
|
-- ----------------------------------------------------------------------- |
|
-- { |
|
-- "LazyVim/LazyVim", |
|
-- opts = { |
|
-- colorscheme = "tokyonight-night", |
|
-- }, |
|
-- }, |
|
}
|
|
|