Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/release-notes/rl-0.8.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@
- Use conform over custom autocmds for LSP format on save
- Move LSP keybinds and other related plugin integrations into an LspAttach
event.
- Allow multiple formatters in language modules.
- Fixed `prettier` in astro and svelte, and removed `prettierd` due to high
complexity that would be needed to support it.

[diniamo](https://github.com/diniamo):

Expand Down
48 changes: 48 additions & 0 deletions flake/pkgs/by-name/prettier-plugin-astro/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
stdenv,
fetchFromGitHub,
nodejs,
pnpm_9,
pins,
}: let
pin = pins.prettier-plugin-astro;
in
stdenv.mkDerivation (finalAttrs: {
pname = "prettier-plugin-astro";
version = pin.version or pin.revision;

src = fetchFromGitHub {
inherit (pin.repository) owner repo;
rev = finalAttrs.version;
sha256 = pin.hash;
};

pnpmDeps = pnpm_9.fetchDeps {
inherit (finalAttrs) pname src;
fetcherVersion = 2;
hash = "sha256-K7pIWLkIIbUKDIcysfEtcf/eVMX9ZgyFHdqcuycHCNE=";
};

nativeBuildInputs = [
nodejs
pnpm_9.configHook
];

buildPhase = ''
runHook preBuild

pnpm run build

runHook postBuild
'';

installPhase = ''
runHook preInstall

# mkdir -p $out/dist
cp -r dist/ $out
cp -r node_modules $out

runHook postInstall
'';
})
19 changes: 19 additions & 0 deletions flake/pkgs/by-name/prettier-plugin-svelte/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
buildNpmPackage,
fetchFromGitHub,
pins,
}: let
pin = pins.prettier-plugin-svelte;
in
buildNpmPackage (finalAttrs: {
pname = "prettier-plugin-svelte";
version = pin.version or pin.revision;

src = fetchFromGitHub {
inherit (pin.repository) owner repo;
rev = finalAttrs.version;
sha256 = pin.hash;
};

npmDepsHash = "sha256-D+gDdKiIG38jV+M/BqTKf0yYj1KXpbIodtQFdzocpn8=";
})
12 changes: 11 additions & 1 deletion lib/types/custom.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{lib}: let
inherit (builtins) warn toJSON;
inherit (lib.options) mergeEqualOption;
inherit (lib.lists) singleton;
inherit (lib.strings) isString stringLength match;
Expand Down Expand Up @@ -29,5 +30,14 @@ in {
check = v: isString v && (match "#?[0-9a-fA-F]{6}" v) != null;
};

singleOrListOf = t: coercedTo t singleton (listOf t);
# no compound types please
deprecatedSingleOrListOf = option: t:
coercedTo
t
(x:
warn ''
${option} no longer accepts non-list values, use [${toJSON x}] instead
''
(singleton x))
(listOf t);
}
2 changes: 1 addition & 1 deletion lib/types/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ in {
inherit (typesDag) dagOf;
inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType;
inherit (typesLanguage) diagnostics mkGrammarOption;
inherit (customTypes) char hexColor mergelessListOf singleOrListOf;
inherit (customTypes) char hexColor mergelessListOf deprecatedSingleOrListOf;
}
34 changes: 34 additions & 0 deletions modules/extra/deprecations.nix
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@
"Obsolete option `vim.languages.${lang}.lsp.server` used, use `vim.languages.${lang}.lsp.servers` instead."
(head x);
};

mkRemovedFormatPackage = lang: (mkRemovedOptionModule ["vim" "languages" lang "format" "package"] ''
`vim.languages.${lang}.format.package` is removed, please use `vim.formatter.conform-nvim.formatters.<formatter_name>.command` instead.
'');
in {
imports = concatLists [
[
Expand Down Expand Up @@ -259,8 +263,38 @@ in {

(mkRenamedLspServer "zig")
(mkRemovedLspPackage "zig")

(mkRemovedOptionModule ["vim" "language" "astro" "format"] ''
This option has been removed due to being broken for a long time.
'')
(mkRemovedOptionModule ["vim" "language" "svelte" "format"] ''
This option has been removed due to being broken for a long time.
'')
]

(map mkRemovedFormatPackage [
"bash"
"css"
"elixir"
"fsharp"
"go"
"hcl"
"html"
"json"
"lua"
"markdown"
"nim"
"nix"
"ocaml"
"python"
"qml"
"r"
"ruby"
"rust"
"sql"
"ts"
"typst"
])
# Migrated via batchRenameOptions. Further batch renames must be below this line.
renamedVimOpts
];
Expand Down
47 changes: 46 additions & 1 deletion modules/plugins/formatter/conform-nvim/conform-nvim.nix
Original file line number Diff line number Diff line change
@@ -1,13 +1,58 @@
{lib, ...}: let
inherit (lib.generators) mkLuaInline;
inherit (lib.options) mkOption mkEnableOption literalMD;
inherit (lib.types) attrs either nullOr;
inherit (lib.types) attrs either nullOr listOf submodule str;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) luaInline mkPluginSetupOption;

formattersType = submodule {
freeformType = attrs;
options = {
command = mkOption {
type = nullOr (either str luaInline);
default = null;
description = "The command to run.";
};

args = mkOption {
type = nullOr (either (listOf str) luaInline);
default = null;
description = ''
A list of strings, or a lua function that returns a list of strings.

Return a single string instead of a list to run the command in a
shell.
'';
};

prepend_args = mkOption {
type = nullOr (either (listOf str) luaInline);
default = null;
description = ''
When inherit = true, add additional arguments to the beginning of
args. Can also be a function, like args.
'';
};

append_args = mkOption {
type = nullOr (either (listOf str) luaInline);
default = null;
description = ''
When inherit = true, add additional arguments to the end of args.
Can also be a function, like args.
'';
};
};
};
in {
options.vim.formatter.conform-nvim = {
enable = mkEnableOption "lightweight yet powerful formatter plugin for Neovim [conform-nvim]";
setupOpts = mkPluginSetupOption "conform.nvim" {
formatters = mkOption {
type = formattersType;
default = {};
description = "Custom formatters and overrides for built-in formatters.";
};
formatters_by_ft = mkOption {
type = attrs;
default = {};
Expand Down
4 changes: 2 additions & 2 deletions modules/plugins/languages/asm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum;
inherit (lib.nvim.types) mkGrammarOption singleOrListOf;
inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.meta) getExe;
inherit (lib.nvim.attrsets) mapListToAttrs;

Expand All @@ -34,7 +34,7 @@ in {
lsp = {
enable = mkEnableOption "Assembly LSP support" // {default = config.vim.lsp.enable;};
servers = mkOption {
type = singleOrListOf (enum (attrNames servers));
type = deprecatedSingleOrListOf "vim.language.asm.lsp.servers" (enum (attrNames servers));
default = defaultServers;
description = "Assembly LSP server to use";
};
Expand Down
53 changes: 30 additions & 23 deletions modules/plugins/languages/astro.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
self,
config,
pkgs,
lib,
Expand All @@ -8,9 +9,9 @@
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.meta) getExe;
inherit (lib.types) enum package;
inherit (lib.types) enum coercedTo;
inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (lib.nvim.types) mkGrammarOption diagnostics singleOrListOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf;
inherit (lib.generators) mkLuaInline;

cfg = config.vim.languages.astro;
Expand Down Expand Up @@ -40,23 +41,21 @@
};
};

# TODO: specify packages
defaultFormat = "prettier";
formats = {
defaultFormat = ["prettier"];
formats = let
parser = "${self.packages.${pkgs.stdenv.system}.prettier-plugin-astro}/index.js";
in {
prettier = {
package = pkgs.prettier;
};

prettierd = {
package = pkgs.prettierd;
command = getExe pkgs.nodePackages.prettier;
options.ft_parsers.astro = "astro";
prepend_args = ["--plugin=${parser}"];
};

biome = {
package = pkgs.biome;
command = getExe pkgs.biome;
};
};

# TODO: specify packages
defaultDiagnosticsProvider = ["eslint_d"];
diagnosticsProviders = {
eslint_d = let
Expand All @@ -76,6 +75,15 @@
};
};
};

formatType =
deprecatedSingleOrListOf
"vim.languages.astro.format.type"
(coercedTo (enum ["prettierd"]) (_:
lib.warn
"vim.languages.astro.format.type: prettierd is deprecated, use prettier instead"
"prettier")
(enum (attrNames formats)));
in {
options.vim.languages.astro = {
enable = mkEnableOption "Astro language support";
Expand All @@ -89,7 +97,7 @@ in {
lsp = {
enable = mkEnableOption "Astro LSP support" // {default = config.vim.lsp.enable;};
servers = mkOption {
type = singleOrListOf (enum (attrNames servers));
type = deprecatedSingleOrListOf "vim.language.astro.lsp.servers" (enum (attrNames servers));
default = defaultServers;
description = "Astro LSP server to use";
};
Expand All @@ -99,16 +107,10 @@ in {
enable = mkEnableOption "Astro formatting" // {default = config.vim.languages.enableFormat;};

type = mkOption {
type = enum (attrNames formats);
type = formatType;
default = defaultFormat;
description = "Astro formatter to use";
};

package = mkOption {
type = package;
default = formats.${cfg.format.type}.package;
description = "Astro formatter package";
};
};

extraDiagnostics = {
Expand Down Expand Up @@ -140,9 +142,14 @@ in {
(mkIf cfg.format.enable {
vim.formatter.conform-nvim = {
enable = true;
setupOpts.formatters_by_ft.astro = [cfg.format.type];
setupOpts.formatters.${cfg.format.type} = {
command = getExe cfg.format.package;
setupOpts = {
formatters_by_ft.astro = cfg.format.type;
formatters =
mapListToAttrs (name: {
inherit name;
value = formats.${name};
})
cfg.format.type;
};
};
})
Expand Down
Loading
Loading