2024-07-05 14:26:26 +02:00
|
|
|
{
|
|
|
|
lib,
|
|
|
|
vimPlugins,
|
|
|
|
writeText,
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
tools = lib.trivial.importJSON "${vimPlugins.efmls-configs-nvim.src}/doc/supported-list.json";
|
|
|
|
languages = lib.attrNames tools;
|
|
|
|
|
|
|
|
toLangTools' = lang: kind: lib.map (lib.getAttr "name") (tools.${lang}.${kind} or [ ]);
|
|
|
|
|
|
|
|
miscLinters = toLangTools' "misc" "linters";
|
|
|
|
miscFormatters = toLangTools' "misc" "formatters";
|
|
|
|
|
|
|
|
sources =
|
2025-06-23 23:08:59 -05:00
|
|
|
let
|
|
|
|
# Group languages by lowercase name and merge their tools
|
|
|
|
groupedLanguages = builtins.groupBy (lang: lib.toLower lang) languages;
|
|
|
|
mergedLanguages = lib.mapAttrs (
|
|
|
|
lowerLang: langList:
|
2024-07-05 14:26:26 +02:00
|
|
|
let
|
2025-06-23 23:08:59 -05:00
|
|
|
# Use the first language as the canonical name but prefer lowercase if available
|
|
|
|
canonicalLang = if lib.elem lowerLang langList then lowerLang else lib.head langList;
|
|
|
|
# Merge all tools from all case variations
|
|
|
|
allLinters = lib.unique (lib.concatMap (lang: toLangTools' lang "linters") langList);
|
|
|
|
allFormatters = lib.unique (lib.concatMap (lang: toLangTools' lang "formatters") langList);
|
2024-07-05 14:26:26 +02:00
|
|
|
in
|
|
|
|
{
|
2025-06-23 23:08:59 -05:00
|
|
|
name = canonicalLang;
|
2024-07-05 14:26:26 +02:00
|
|
|
value = {
|
|
|
|
linter = {
|
2025-06-23 23:08:59 -05:00
|
|
|
lang = canonicalLang;
|
|
|
|
possible = allLinters ++ miscLinters;
|
2024-07-05 14:26:26 +02:00
|
|
|
};
|
|
|
|
formatter = {
|
2025-06-23 23:08:59 -05:00
|
|
|
lang = canonicalLang;
|
|
|
|
possible = allFormatters ++ miscFormatters;
|
2024-07-05 14:26:26 +02:00
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
2025-06-23 23:08:59 -05:00
|
|
|
) groupedLanguages;
|
|
|
|
in
|
|
|
|
(lib.listToAttrs (lib.attrValues mergedLanguages))
|
2024-07-05 14:26:26 +02:00
|
|
|
// {
|
|
|
|
all = {
|
|
|
|
linter = {
|
|
|
|
lang = "all languages";
|
|
|
|
possible = miscLinters;
|
|
|
|
};
|
|
|
|
formatter = {
|
|
|
|
lang = "all languages";
|
|
|
|
possible = miscFormatters;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
in
|
|
|
|
writeText "efmls-configs-sources.nix" (
|
|
|
|
"# WARNING: DO NOT EDIT\n"
|
|
|
|
+ "# This file is generated with packages.<system>.efmls-configs-sources, which is run automatically by CI\n"
|
|
|
|
+ (lib.generators.toPretty { } sources)
|
|
|
|
)
|