diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 37ff06d5..cba24109 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -563,4 +563,8 @@ https://github.com/gorbit99/codewindow.nvim [Poseidon](https://github.com/poseidon-rises) +[PHPStan]: https://github.com/phpstan/phpstan + +- Add [PHPStan] as a formatter for `vim.languages.php`. + diff --git a/modules/plugins/languages/php.nix b/modules/plugins/languages/php.nix index 38249ee1..69335429 100644 --- a/modules/plugins/languages/php.nix +++ b/modules/plugins/languages/php.nix @@ -11,7 +11,7 @@ inherit (lib.modules) mkIf mkMerge; inherit (lib.types) enum int attrs listOf; inherit (lib.nvim.lua) toLuaObject; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.php; @@ -33,6 +33,14 @@ command = "${pkgs.php84Packages.php-cs-fixer}/bin/php-cs-fixer"; }; }; + + defaultDiagnosticsProvider = ["phpstan"]; + + diagnosticsProviders = { + phpstan = { + config.cmd = getExe pkgs.phpstan; + }; + }; in { options.vim.languages.php = { enable = mkEnableOption "PHP language support"; @@ -103,6 +111,21 @@ in { }; }; }; + + extraDiagnostics = { + enable = + mkEnableOption "extra PHP diagnostics" + // { + default = config.vim.languages.enableExtraDiagnostics; + defaultText = literalExpression "config.vim.languages.enableExtraDiagnostic"; + }; + + types = diagnostics { + langDesc = "PHP"; + inherit diagnosticsProviders; + inherit defaultDiagnosticsProvider; + }; + }; }; config = mkIf cfg.enable (mkMerge [ @@ -154,5 +177,15 @@ in { }; }; }) + + (mkIf cfg.extraDiagnostics.enable { + vim.diagnostics.nvim-lint = { + enable = true; + linters_by_ft.php = cfg.extraDiagnostics.types; + linters = + mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) + cfg.extraDiagnostics.types); + }; + }) ]); }