nix-community.nixvim/plugins/lsp/conform-nvim.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

133 lines
3.9 KiB
Nix
Raw Normal View History

2023-11-03 20:18:24 +05:30
{
lib,
helpers,
config,
pkgs,
2023-11-03 20:18:24 +05:30
...
}:
with lib;
let
cfg = config.plugins.conform-nvim;
in
{
options.plugins.conform-nvim = helpers.neovim-plugin.extraOptionsOptions // {
2023-11-03 20:18:24 +05:30
enable = mkEnableOption "conform-nvim";
package = helpers.mkPluginPackageOption "conform-nvim" pkgs.vimPlugins.conform-nvim;
2023-11-03 20:18:24 +05:30
2024-06-11 16:53:12 +01:00
formattersByFt = helpers.defaultNullOpts.mkAttrsOf' {
type = types.anything;
# Unknown plugin default
description = ''
```nix
# Map of filetype to formatters
formattersByFt =
{
lua = [ "stylua" ];
# Conform will run multiple formatters sequentially
python = [ "isort" "black" ];
# Use a sub-list to run only the first available formatter
javascript = [ [ "prettierd" "prettier" ] ];
# Use the "*" filetype to run formatters on all filetypes.
"*" = [ "codespell" ];
# Use the "_" filetype to run formatters on filetypes that don't
# have other formatters configured.
"_" = [ "trim_whitespace" ];
};
```
'';
};
2023-11-03 20:18:24 +05:30
2024-06-11 16:53:12 +01:00
formatOnSave = helpers.defaultNullOpts.mkNullable' {
type =
with helpers.nixvimTypes;
either strLuaFn (submodule {
options = {
lspFallback = mkOption {
type = types.bool;
default = true;
description = "See :help conform.format for details.";
};
timeoutMs = mkOption {
type = types.int;
default = 500;
description = "See :help conform.format for details.";
};
2024-06-11 16:53:12 +01:00
};
});
# Unknown plugin default
description = ''
If this is set, Conform will run the formatter on save.
It will pass the table to conform.format().
This can also be a function that returns the table.
See :help conform.format for details.
'';
};
2023-11-03 20:18:24 +05:30
2024-06-11 16:53:12 +01:00
formatAfterSave = helpers.defaultNullOpts.mkNullable' {
type =
with helpers.nixvimTypes;
either strLuaFn (submodule {
options = {
lspFallback = mkOption {
type = types.bool;
default = true;
description = "See :help conform.format for details.";
};
2024-06-11 16:53:12 +01:00
};
});
# Unknown plugin default
description = ''
If this is set, Conform will run the formatter asynchronously after save.
It will pass the table to conform.format().
This can also be a function that returns the table.
'';
};
2023-11-03 20:18:24 +05:30
2023-11-30 15:50:24 +01:00
logLevel = helpers.defaultNullOpts.mkLogLevel "error" ''
Set the log level. Use `:ConformInfo` to see the location of the log file.
'';
2023-11-03 20:18:24 +05:30
notifyOnError = helpers.defaultNullOpts.mkBool true "Conform will notify you when a formatter errors";
2024-06-11 16:53:12 +01:00
formatters = helpers.defaultNullOpts.mkAttrsOf' {
type = types.anything;
# Unknown plugin default
description = "Custom formatters and changes to built-in formatters";
};
2023-11-03 20:18:24 +05:30
};
config =
let
setupOptions =
with cfg;
{
formatters_by_ft = formattersByFt;
format_on_save =
if builtins.isAttrs formatOnSave then
{
lsp_fallback = formatOnSave.lspFallback;
timeout_ms = formatOnSave.timeoutMs;
}
else
helpers.mkRaw formatOnSave;
format_after_save =
if builtins.isAttrs formatAfterSave then
{ lsp_fallback = formatOnSave.lspFallback; }
else
helpers.mkRaw formatAfterSave;
2023-11-30 15:50:24 +01:00
log_level = logLevel;
2023-11-03 20:18:24 +05:30
notify_on_error = notifyOnError;
inherit formatters;
}
// cfg.extraOptions;
in
mkIf cfg.enable {
extraPlugins = [ cfg.package ];
extraConfigLua = ''
require("conform").setup(${helpers.toLuaObject setupOptions})
'';
};
}