convert php module

This commit is contained in:
sjcobb 2025-07-08 15:26:45 +01:00
commit 36146ca31d

View file

@ -8,81 +8,60 @@
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.types) enum listOf;
inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (lib.generators) mkLuaInline;
cfg = config.vim.languages.php; cfg = config.vim.languages.php;
defaultServer = "phpactor"; defaultServers = ["phpactor"];
servers = { servers = {
phpactor = { phpactor = {
package = pkgs.phpactor; enable = true;
lspConfig = '' cmd = [(getExe pkgs.phpactor) "language-server"];
lspconfig.phpactor.setup{ filetypes = ["php"];
capabilities = capabilities, root_markers = [".git" "composer.json" ".phpactor.json" ".phpactor.yml"];
on_attach = default_on_attach, workspace_required = true;
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else ''
{
"${getExe cfg.lsp.package}",
"language-server"
},
''
}
}
'';
}; };
phan = { phan = {
package = pkgs.php81Packages.phan; enable = true;
lspConfig = '' cmd = [
lspconfig.phan.setup{ (getExe pkgs.php81Packages.phan)
capabilities = capabilities, "-m"
on_attach = default_on_attach, "json"
cmd = ${ "--no-color"
if isList cfg.lsp.package "--no-progress-bar"
then expToLua cfg.lsp.package "-x"
else '' "-u"
{ "-S"
"${getExe cfg.lsp.package}", "--language-server-on-stdin"
"-m", "--allow-polyfill-parser"
"json", ];
"--no-color", filetypes = ["php"];
"--no-progress-bar", root_dir =
"-x", mkLuaInline
"-u", /*
"-S", lua
"--language-server-on-stdin", */
"--allow-polyfill-parser" ''
}, function(bufnr, on_dir)
'' local fname = vim.api.nvim_buf_get_name(bufnr)
} local cwd = assert(vim.uv.cwd())
} local root = vim.fs.root(fname, { 'composer.json', '.git' })
'';
-- prefer cwd if root is a descendant
on_dir(root and vim.fs.relpath(cwd, root) and cwd)
end
'';
}; };
intelephense = { intelephense = {
package = pkgs.intelephense; enable = true;
lspConfig = '' cmd = [(getExe pkgs.intelephense) "--stdio"];
lspconfig.intelephense.setup{ filetypes = ["php"];
capabilities = capabilities, root_markers = ["composer.json" ".git"];
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else ''
{
"${getExe cfg.lsp.package}",
"--stdio"
},
''
}
}
'';
}; };
}; };
in { in {
@ -97,17 +76,10 @@ in {
lsp = { lsp = {
enable = mkEnableOption "PHP LSP support" // {default = config.vim.lsp.enable;}; enable = mkEnableOption "PHP LSP support" // {default = config.vim.lsp.enable;};
server = mkOption { servers = mkOption {
description = "PHP LSP server to use"; description = "PHP LSP server to use";
type = enum (attrNames servers); type = listOf (enum (attrNames servers));
default = defaultServer; default = defaultServers;
};
package = mkOption {
description = "PHP LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]'';
type = either package (listOf str);
default = servers.${cfg.lsp.server}.package;
}; };
}; };
}; };
@ -117,11 +89,14 @@ in {
vim.treesitter.enable = true; vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package]; vim.treesitter.grammars = [cfg.treesitter.package];
}) })
(mkIf cfg.lsp.enable { (mkIf cfg.lsp.enable {
vim.lsp.lspconfig = { vim.lsp.servers =
enable = true; mapListToAttrs (n: {
sources.php-lsp = servers.${cfg.lsp.server}.lspConfig; name = n;
}; value = servers.${n};
})
cfg.lsp.servers;
}) })
]); ]);
} }