Skip to content

Commit

Permalink
Merge pull request #150 from Vagahbond/features/php
Browse files Browse the repository at this point in the history
languages/php: init
  • Loading branch information
NotAShelf authored Oct 10, 2023
2 parents fc651e6 + 0614dbf commit b273d50
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/manual/languages.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Language specific support means there is a combination of language specific plug
* Dart: <<opt-vim.languages.dart.enable>>
* Go: <<opt-vim.languages.go.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
where you can contribute with a PR.
Expand Down
5 changes: 5 additions & 0 deletions docs/release-notes/rl-0.5.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
[[sec-release-0.5-changelog]]
=== Changelog

https://github.com/vagahbond[vagahbond]:
* Added phan language server for PHP.

* Added phpactor language server for PHP.

https://github.com/horriblename[horriblename]:

* Added transparency support for tokyonight theme.
Expand Down
1 change: 1 addition & 0 deletions modules/languages/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ in {
./svelte.nix
./java.nix
./lua.nix
./php.nix
];

options.vim.languages = {
Expand Down
100 changes: 100 additions & 0 deletions modules/languages/php.nix
Original file line number Diff line number Diff line change
@@ -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;
};
})
]);
}

0 comments on commit b273d50

Please sign in to comment.