diff --git a/plugins/none-ls/prettier.nix b/plugins/none-ls/prettier.nix new file mode 100644 index 00000000..258a8488 --- /dev/null +++ b/plugins/none-ls/prettier.nix @@ -0,0 +1,51 @@ +{ + lib, + config, + ... +}: +with lib; let + cfg = config.plugins.none-ls.sources.formatting.prettier; + tsserver-cfg = config.plugins.lsp.servers.tsserver; +in { + options.plugins.none-ls.sources.formatting.prettier = { + disableTsServerFormatter = mkOption { + type = with types; nullOr bool; + description = '' + Disables the formatting capability of the `tsserver` language server if it is enabled. + ''; + default = null; + example = true; + }; + }; + + config = { + warnings = + optional + ( + (cfg.disableTsServerFormatter == null) + && tsserver-cfg.enable + ) + '' + You have enabled the `prettier` formatter in none-ls. + You have also enabled the `tsserver` language server which also brings a formatting feature. + + - To disable the formatter built-in the `tsserver` language server, set + `plugins.none-ls.sources.formatting.prettier.disableTsServerFormatter` to `true`. + - Else, to silence this warning, explicitly set the option to `false`. + ''; + + plugins.lsp.servers.tsserver = + mkIf + ( + cfg.enable + && tsserver-cfg.enable + && (isBool cfg.disableTsServerFormatter) + && cfg.disableTsServerFormatter + ) + { + onAttach.function = '' + client.server_capabilities.documentFormattingProvider = false + ''; + }; + }; +} diff --git a/plugins/none-ls/servers.nix b/plugins/none-ls/servers.nix index 46d10a48..80953df5 100644 --- a/plugins/none-ls/servers.nix +++ b/plugins/none-ls/servers.nix @@ -179,7 +179,11 @@ with lib; let serverData; dataFlattened = flatten serverDataFormatted; in { - imports = map helpers.mkServer dataFlattened; + imports = + (map helpers.mkServer dataFlattened) + ++ [ + ./prettier.nix + ]; config = let cfg = config.plugins.none-ls;