languages/php: init

This commit is contained in:
Yoni FIRROLONI 2023-10-08 14:34:55 +02:00
parent fc651e654f
commit 4161589b56
4 changed files with 107 additions and 0 deletions

View file

@ -16,6 +16,7 @@ Language specific support means there is a combination of language specific plug
* Dart: <<opt-vim.languages.dart.enable>> * Dart: <<opt-vim.languages.dart.enable>>
* Go: <<opt-vim.languages.go.enable>> * Go: <<opt-vim.languages.go.enable>>
* Lua: <<opt-vim.languages.lua.enable>> * Lua: <<opt-vim.languages.lua.enable>>
* PHP: <<opt-vim.languages.php.enable>>
Adding support for more languages, and improving support for existing ones are great places Adding support for more languages, and improving support for existing ones are great places
where you can contribute with a PR. where you can contribute with a PR.

View file

@ -5,6 +5,11 @@
[[sec-release-0.5-changelog]] [[sec-release-0.5-changelog]]
=== Changelog === Changelog
https://github.com/vagahbond[vagahbond]:
* Added phan language server for PHP.
* Added phpactor language server for PHP.
https://github.com/horriblename[horriblename]: https://github.com/horriblename[horriblename]:
* Added transparency support for tokyonight theme. * Added transparency support for tokyonight theme.

View file

@ -25,6 +25,7 @@ in {
./svelte.nix ./svelte.nix
./java.nix ./java.nix
./lua.nix ./lua.nix
./php.nix
]; ];
options.vim.languages = { options.vim.languages = {

100
modules/languages/php.nix Normal file
View file

@ -0,0 +1,100 @@
{
pkgs,
config,
lib,
...
}:
with lib;
with builtins; let
cfg = config.vim.languages.php;
defaultServer = "phpactor";
servers = {
phpactor = {
package = pkgs.phpactor;
lspConfig = ''
lspconfig.phpactor.setup{
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package
then nvim.lua.expToLua cfg.lsp.package
else ''
{
"${getExe cfg.lsp.package}",
"language-server"
},
''
}
}
'';
};
phan = {
package = pkgs.php81Packages.phan;
lspConfig = ''
lspconfig.phan.setup{
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package
then nvim.lua.expToLua cfg.lsp.package
else ''
{
"${getExe cfg.lsp.package}
"-m",
"json",
"--no-color",
"--no-progress-bar",
"-x",
"-u",
"-S",
"--language-server-on-stdin",
"--allow-polyfill-parser"
},
''
}
}
'';
};
};
in {
options.vim.languages.php = {
enable = mkEnableOption "PHP language support";
treesitter = {
enable = mkEnableOption "Enable PHP treesitter" // {default = config.vim.languages.enableTreesitter;};
package = nvim.types.mkGrammarOption pkgs "php";
};
lsp = {
enable = mkEnableOption "PHP LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption {
description = "PHP LSP server to use";
type = with types; enum (attrNames servers);
default = defaultServer;
};
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 = with types; either package (listOf str);
default = servers.${cfg.lsp.server}.package;
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig = {
enable = true;
sources.php-lsp = servers.${cfg.lsp.server}.lspConfig;
};
})
]);
}