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 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;