mirror of
https://github.com/NixOS/nix.git
synced 2024-11-25 00:02:25 +00:00
feat(fmt): use nixfmt-rfc-style
This commit is contained in:
parent
09199a40cd
commit
58304c1e1c
@ -74,7 +74,7 @@ struct InstallableFlake : InstallableValue
|
|||||||
* have their own Nixpkgs input, or other installables.
|
* have their own Nixpkgs input, or other installables.
|
||||||
*
|
*
|
||||||
* It is a layer violation for Nix to know about Nixpkgs; currently just
|
* It is a layer violation for Nix to know about Nixpkgs; currently just
|
||||||
* `nix develop` does. Be wary of using this /
|
* `nix develop` and `nix fmt` does. Be wary of using this /
|
||||||
* `InstallableFlake::nixpkgsFlakeRef` more places.
|
* `InstallableFlake::nixpkgsFlakeRef` more places.
|
||||||
*/
|
*/
|
||||||
static inline FlakeRef defaultNixpkgsFlakeRef()
|
static inline FlakeRef defaultNixpkgsFlakeRef()
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "command.hh"
|
#include "command.hh"
|
||||||
#include "installable-value.hh"
|
#include "installable-value.hh"
|
||||||
|
#include "installable-flake.hh"
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
#include "run.hh"
|
#include "run.hh"
|
||||||
|
|
||||||
@ -33,11 +34,89 @@ struct CmdFmt : SourceExprCommand {
|
|||||||
auto evalState = getEvalState();
|
auto evalState = getEvalState();
|
||||||
auto evalStore = getEvalStore();
|
auto evalStore = getEvalStore();
|
||||||
|
|
||||||
|
Path nixfmt = "nixfmt";
|
||||||
|
FlakeRef nixpkgs = defaultNixpkgsFlakeRef();
|
||||||
|
nixpkgs = nixpkgs.resolve(evalStore);
|
||||||
|
auto nixpkgsLockFlags = lockFlags;
|
||||||
auto installable_ = parseInstallable(store, ".");
|
auto installable_ = parseInstallable(store, ".");
|
||||||
auto & installable = InstallableValue::require(*installable_);
|
|
||||||
auto app = installable.toApp(*evalState).resolve(evalStore, store);
|
|
||||||
|
|
||||||
Strings programArgs{app.program};
|
// Check for "formatters.SYSTEM", too slow on Nixpkgs until lazy-trees
|
||||||
|
/*
|
||||||
|
try {
|
||||||
|
if (auto * i = dynamic_cast<const InstallableFlake *>(&*installable_)) {
|
||||||
|
auto & installable = InstallableFlake::require(*installable_);
|
||||||
|
auto app = installable.toApp(*evalState).resolve(evalStore, store);
|
||||||
|
nixfmt = app.program;
|
||||||
|
}
|
||||||
|
} catch (Error &) {
|
||||||
|
// ignoreException();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Check for nixpkgs input, too slow on Nixpkgs until lazy-trees
|
||||||
|
/*
|
||||||
|
if (nixfmt == "nixfmt") {
|
||||||
|
try {
|
||||||
|
nixpkgsLockFlags.inputOverrides = {};
|
||||||
|
nixpkgsLockFlags.inputUpdates = {};
|
||||||
|
|
||||||
|
// Hard code the nixpkgs revision from <nixpkgs>/ci/pinned-nixpgs.json
|
||||||
|
if (auto * i = dynamic_cast<const InstallableFlake *>(&*installable_))
|
||||||
|
nixpkgs = i->nixpkgsFlakeRef();
|
||||||
|
} catch (Error &) {
|
||||||
|
// ignoreException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Check for <nixpkgs>/ci/pinned-nixpkgs.json and resolve it
|
||||||
|
if (nixfmt == "nixfmt") {
|
||||||
|
try {
|
||||||
|
auto res = nixpkgs.fetchTree(store);
|
||||||
|
auto s = store->printStorePath(res.first) + "/ci/pinned-nixpkgs.json";
|
||||||
|
if (pathExists(s)) {
|
||||||
|
nlohmann::json pinned_json = nlohmann::json::parse(readFile(s));
|
||||||
|
auto pinned_rev = getString(pinned_json["rev"]);
|
||||||
|
nixpkgs = FlakeRef::fromAttrs(fetchSettings, {{"type","indirect"}, {"id", "nixpkgs"},{"rev", pinned_rev}});
|
||||||
|
nixpkgs = nixpkgs.resolve(evalStore);
|
||||||
|
}
|
||||||
|
} catch (Error &) {
|
||||||
|
// ignoreException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check for nixfmt, otherwise use PATH
|
||||||
|
if (nixfmt == "nixfmt") {
|
||||||
|
try {
|
||||||
|
auto nixfmtInstallable = make_ref<InstallableFlake>(
|
||||||
|
this,
|
||||||
|
evalState,
|
||||||
|
std::move(nixpkgs),
|
||||||
|
"nixfmt-rfc-style",
|
||||||
|
ExtendedOutputsSpec::Default(),
|
||||||
|
Strings{},
|
||||||
|
Strings{"legacyPackages." + settings.thisSystem.get() + "."},
|
||||||
|
nixpkgsLockFlags);
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
for (auto & path : Installable::toStorePathSet(getEvalStore(), store, Realise::Outputs, OperateOn::Output, {nixfmtInstallable})) {
|
||||||
|
auto s = store->printStorePath(path) + "/bin/nixfmt";
|
||||||
|
if (pathExists(s)) {
|
||||||
|
nixfmt = s;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
throw Error("package 'nixpkgs#nixfmt-rfc-style' does not provide a 'bin/nixfmt'");
|
||||||
|
|
||||||
|
} catch (Error &) {
|
||||||
|
ignoreException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Strings programArgs{nixfmt};
|
||||||
|
|
||||||
// Propagate arguments from the CLI
|
// Propagate arguments from the CLI
|
||||||
if (args.empty()) {
|
if (args.empty()) {
|
||||||
@ -54,7 +133,7 @@ struct CmdFmt : SourceExprCommand {
|
|||||||
// we are about to exec out of this process without running C++ destructors.
|
// we are about to exec out of this process without running C++ destructors.
|
||||||
evalState->evalCaches.clear();
|
evalState->evalCaches.clear();
|
||||||
|
|
||||||
execProgramInStore(store, UseLookupPath::DontUse, app.program, programArgs);
|
execProgramInStore(store, UseLookupPath::DontUse, nixfmt, programArgs);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,48 +2,24 @@ R""(
|
|||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
With [nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt):
|
With [nixfmt](https://github.com/NixOS/nixfmt):
|
||||||
|
|
||||||
```nix
|
|
||||||
# flake.nix
|
|
||||||
{
|
|
||||||
outputs = { nixpkgs, self }: {
|
|
||||||
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- Format the current flake: `$ nix fmt`
|
- Format the current flake: `$ nix fmt`
|
||||||
|
|
||||||
- Format a specific folder or file: `$ nix fmt ./folder ./file.nix`
|
- Format a specific folder or file: `$ nix fmt ./folder ./file.nix`
|
||||||
|
|
||||||
With [nixfmt](https://github.com/serokell/nixfmt):
|
|
||||||
|
|
||||||
```nix
|
|
||||||
# flake.nix
|
|
||||||
{
|
|
||||||
outputs = { nixpkgs, self }: {
|
|
||||||
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- Format specific files: `$ nix fmt ./file1.nix ./file2.nix`
|
- Format specific files: `$ nix fmt ./file1.nix ./file2.nix`
|
||||||
|
|
||||||
With [Alejandra](https://github.com/kamadorueda/alejandra):
|
## **disabled** Overriding the formatter used
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# flake.nix
|
# flake.nix
|
||||||
{
|
{
|
||||||
outputs = { nixpkgs, self }: {
|
outputs = { nixpkgs, self }: {
|
||||||
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
|
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
- Format the current flake: `$ nix fmt`
|
|
||||||
|
|
||||||
- Format a specific folder or file: `$ nix fmt ./folder ./file.nix`
|
|
||||||
|
|
||||||
# Description
|
# Description
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user