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

130 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.extraOptionsOptions
// {
enable = mkEnableOption "conform-nvim";
package = helpers.mkPackageOption "conform-nvim" pkgs.vimPlugins.conform-nvim;
formattersByFt =
helpers.defaultNullOpts.mkNullable (types.attrsOf types.anything)
"see documentation"
''
```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" ];
};
```
'';
formatOnSave =
helpers.defaultNullOpts.mkNullable
(
with types;
either
str
(
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.";
};
};
}
)
)
2023-11-03 20:18:24 +05:30
"see documentation"
''
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.
'';
formatAfterSave =
helpers.defaultNullOpts.mkNullable (types.submodule {
options = {
lspFallback = mkOption {
type = types.bool;
default = true;
description = "See :help conform.format for details.";
};
};
})
"see documentation"
''
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-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";
formatters =
helpers.defaultNullOpts.mkNullable (types.attrsOf types.anything)
"see documentation"
"Custom formatters and changes to built-in formatters";
};
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;
2023-12-11 23:40:24 +01:00
format_after_save = helpers.ifNonNull' formatAfterSave {
lsp_fallback = formatAfterSave.lspFallback;
2023-11-03 20:18:24 +05:30
};
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})
'';
};
}