diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 74ffe3a7..6c9d7218 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -332,6 +332,8 @@ - Moved extra diagnostic modules under `diagnostics.presets.` this will allow for more flexibility in the future for nvf. +- Added {option}`vim.diagnostics.presets.cpplint.enable`. + - Added {option}`vim.treesitter.queries` to support adding custom queries. - Added injections for `query = '' ... ''` as `query` and `mkLualine '' ... ''`, diff --git a/modules/plugins/diagnostics/presets/cpplint.nix b/modules/plugins/diagnostics/presets/cpplint.nix new file mode 100644 index 00000000..153a53b7 --- /dev/null +++ b/modules/plugins/diagnostics/presets/cpplint.nix @@ -0,0 +1,20 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf; + inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption; + + cfg = config.vim.diagnostics.presets.cpplint; +in { + options.vim.diagnostics.presets.cpplint = { + enable = mkDiagnosticsPresetEnableOption "cpplint" "cpplint"; + }; + + config = mkIf cfg.enable { + vim.diagnostics.nvim-lint.linters.cpplint.cmd = getExe pkgs.cpplint; + }; +} diff --git a/modules/plugins/diagnostics/presets/default.nix b/modules/plugins/diagnostics/presets/default.nix index a53d5800..e350f4b2 100644 --- a/modules/plugins/diagnostics/presets/default.nix +++ b/modules/plugins/diagnostics/presets/default.nix @@ -2,6 +2,7 @@ imports = [ ./biomejs.nix ./checkmake.nix + ./cpplint.nix ./deadnix.nix ./djlint.nix ./dotenv-linter.nix diff --git a/modules/plugins/languages/clang.nix b/modules/plugins/languages/clang.nix index 7e30b1f6..927de422 100644 --- a/modules/plugins/languages/clang.nix +++ b/modules/plugins/languages/clang.nix @@ -96,6 +96,9 @@ }; clang-format.command = getExe' pkgs.clang-tools "clang-format"; }; + + defaultDiagnosticsProvider = ["cpplint"]; + diagnosticsProviders = ["cpplint"]; in { options.vim.languages.clang = { enable = mkEnableOption "C/C++ language support"; @@ -168,6 +171,21 @@ in { description = "C formatter to use"; }; }; + + extraDiagnostics = { + enable = + mkEnableOption "extra C/C++ diagnostics" + // { + default = config.vim.languages.enableExtraDiagnostics; + defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; + }; + + types = mkOption { + type = listOf (enum diagnosticsProviders); + default = defaultDiagnosticsProvider; + description = "extra C/C++ diagnostics providers"; + }; + }; }; config = mkIf cfg.enable (mkMerge [ @@ -211,5 +229,18 @@ in { }; }; }) + + (mkIf cfg.extraDiagnostics.enable { + vim.diagnostics = { + presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;}); + nvim-lint = { + enable = true; + linters_by_ft = { + c = cfg.extraDiagnostics.types; + cpp = cfg.extraDiagnostics.types; + }; + }; + }; + }) ]); }