From 1d90aaec555f65fda72925f0f80c7db1a62d78e8 Mon Sep 17 00:00:00 2001 From: Soliprem Date: Mon, 4 Nov 2024 08:50:56 +0100 Subject: [PATCH 1/2] r: added formatters --- modules/plugins/languages/r.nix | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/modules/plugins/languages/r.nix b/modules/plugins/languages/r.nix index 27d7c99..752ccdd 100644 --- a/modules/plugins/languages/r.nix +++ b/modules/plugins/languages/r.nix @@ -18,6 +18,51 @@ packages = with pkgs.rPackages; [languageserver]; }; + defaultFormat = "format_r"; + formats = { + prettier = { + package = pkgs.nodePackages.prettier; + nullConfig = '' + local prettier = null_ls.builtins.formatting.prettier.with({ + filetypes = { "r" }, + extra_args = { + "--plugin", "prettier-plugin-r", + "--parser", "r" + } + }) + table.insert(ls_sources, prettier) + ''; + }; + + styler = { + package = pkgs.rWrapper.override { + packages = with pkgs.rPackages; [styler]; + }; + nullConfig = '' + table.insert( + ls_sources, + null_ls.builtins.formatting.styler.with({ + command = "${cfg.format.package}/bin/R", + }) + ) + ''; + }; + + format_r = { + package = pkgs.rWrapper.override { + packages = with pkgs.rPackages; [formatR]; + }; + nullConfig = '' + table.insert( + ls_sources, + null_ls.builtins.formatting.format_r.with({ + command = "${cfg.format.package}/bin/R", + }) + ) + ''; + }; + }; + defaultServer = "r_language_server"; servers = { r_language_server = { @@ -62,6 +107,22 @@ in { default = servers.${cfg.lsp.server}.package; }; }; + + format = { + enable = mkEnableOption "R formatting" // {default = config.vim.languages.enableFormat;}; + + type = mkOption { + description = "R formatter to use"; + type = enum (attrNames formats); + default = defaultFormat; + }; + + package = mkOption { + description = "R formatter package"; + type = package; + default = formats.${cfg.format.type}.package; + }; + }; }; config = mkIf cfg.enable (mkMerge [ @@ -70,6 +131,11 @@ in { vim.treesitter.grammars = [cfg.treesitter.package]; }) + (mkIf cfg.format.enable { + vim.lsp.null-ls.enable = true; + vim.lsp.null-ls.sources.r-format = formats.${cfg.format.type}.nullConfig; + }) + (mkIf cfg.lsp.enable { vim.lsp.lspconfig.enable = true; vim.lsp.lspconfig.sources.r-lsp = servers.${cfg.lsp.server}.lspConfig; From 152acfce5ade0edb8fea3c8d6a6c20b7eb42b9ba Mon Sep 17 00:00:00 2001 From: Soliprem Date: Mon, 4 Nov 2024 08:52:26 +0100 Subject: [PATCH 2/2] changelog: added entry for r formatter --- docs/release-notes/rl-0.7.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 87df91e..273555e 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -285,6 +285,7 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to [Soliprem](https://github.com/Soliprem): - Add LSP and Treesitter support for R under `vim.languages.R`. + - Add formatter suppoort for R - Add Otter support under `vim.lsp.otter` and an assert to prevent conflict with ccc - Fixed typo in Otter's setupOpts