Format, and keep formatted

This commit is contained in:
John Ericson 2025-12-05 16:51:15 -05:00
parent 7a187fda7a
commit cfda626614
7 changed files with 94 additions and 41 deletions

View file

@ -90,7 +90,7 @@
}; };
}; };
herculesCI = herculesCI =
{ config, ... }: { ... }:
{ {
ciSystems = [ "x86_64-linux" ]; ciSystems = [ "x86_64-linux" ];
}; };

23
flake.lock generated
View file

@ -344,7 +344,8 @@
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"nix": "nix", "nix": "nix",
"nix-cargo-integration": "nix-cargo-integration", "nix-cargo-integration": "nix-cargo-integration",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs",
"treefmt-nix": "treefmt-nix"
} }
}, },
"rust-overlay": { "rust-overlay": {
@ -411,6 +412,26 @@
"repo": "treefmt-nix", "repo": "treefmt-nix",
"type": "github" "type": "github"
} }
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762938485,
"narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View file

@ -8,14 +8,15 @@
nix-cargo-integration.url = "github:yusdacra/nix-cargo-integration"; nix-cargo-integration.url = "github:yusdacra/nix-cargo-integration";
nix-cargo-integration.inputs.nixpkgs.follows = "nixpkgs"; nix-cargo-integration.inputs.nixpkgs.follows = "nixpkgs";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
treefmt-nix.url = "github:numtide/treefmt-nix";
treefmt-nix.inputs.nixpkgs.follows = "nixpkgs";
}; };
outputs = outputs =
inputs@{ self, flake-parts, ... }: inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } ( flake-parts.lib.mkFlake { inherit inputs; } (
toplevel@{ toplevel@{
lib, lib,
withSystem,
... ...
}: }:
let let
@ -24,9 +25,7 @@
*/ */
flake-parts-modules.basic = flake-parts-modules.basic =
{ {
config,
flake-parts-lib, flake-parts-lib,
withSystem,
... ...
}: }:
{ {
@ -114,7 +113,7 @@
*/ */
flake-parts-modules.tested = flake-parts-modules.tested =
# Consumer toplevel # Consumer toplevel
{ options, config, ... }: { config, ... }:
{ {
_file = ./flake.nix; _file = ./flake.nix;
imports = [ flake-parts-modules.basic ]; imports = [ flake-parts-modules.basic ];
@ -165,6 +164,7 @@
inputs.nix-cargo-integration.flakeModule inputs.nix-cargo-integration.flakeModule
inputs.flake-parts.flakeModules.partitions inputs.flake-parts.flakeModules.partitions
inputs.flake-parts.flakeModules.modules inputs.flake-parts.flakeModules.modules
inputs.treefmt-nix.flakeModule
# dogfood # dogfood
flake-parts-modules.tested flake-parts-modules.tested
./nci.nix ./nci.nix
@ -177,14 +177,24 @@
]; ];
perSystem = perSystem =
{ {
config,
self',
inputs', inputs',
pkgs,
... ...
}: }:
{ {
packages.nix = inputs'.nix.packages.nix; packages.nix = inputs'.nix.packages.nix;
treefmt = {
# Used to find the project root
projectRootFile = "flake.lock";
programs.rustfmt = {
enable = true;
edition = "2021";
};
programs.nixfmt.enable = true;
programs.deadnix.enable = true;
#programs.clang-format.enable = true;
};
}; };
partitionedAttrs.devShells = "dev"; partitionedAttrs.devShells = "dev";

View file

@ -1,9 +1,7 @@
{ {
perSystem = perSystem =
{ {
lib,
config, config,
pkgs,
... ...
}: }:
{ {

View file

@ -138,7 +138,9 @@ use nix_bindings_bindgen_raw as raw;
use nix_bindings_store::path::StorePath; use nix_bindings_store::path::StorePath;
use nix_bindings_store::store::{Store, StoreWeak}; use nix_bindings_store::store::{Store, StoreWeak};
use nix_bindings_util::context::Context; use nix_bindings_util::context::Context;
use nix_bindings_util::string_return::{callback_get_result_string, callback_get_result_string_data}; use nix_bindings_util::string_return::{
callback_get_result_string, callback_get_result_string_data,
};
use nix_bindings_util::{check_call, check_call_opt_key, result_string_init}; use nix_bindings_util::{check_call, check_call_opt_key, result_string_init};
use std::ffi::{c_char, CString}; use std::ffi::{c_char, CString};
use std::iter::FromIterator; use std::iter::FromIterator;
@ -1217,7 +1219,8 @@ pub fn test_init() {
// which causes an error. So we set a custom build dir here. // which causes an error. So we set a custom build dir here.
// Only available on linux // Only available on linux
if cfg!(target_os = "linux") { if cfg!(target_os = "linux") {
nix_bindings_util::settings::set("sandbox-build-dir", "/custom-build-dir-for-test").unwrap(); nix_bindings_util::settings::set("sandbox-build-dir", "/custom-build-dir-for-test")
.unwrap();
} }
std::env::set_var("_NIX_TEST_NO_SANDBOX", "1"); std::env::set_var("_NIX_TEST_NO_SANDBOX", "1");
@ -1784,9 +1787,7 @@ mod tests {
gc_registering_current_thread(|| { gc_registering_current_thread(|| {
let store = Store::open(None, HashMap::new()).unwrap(); let store = Store::open(None, HashMap::new()).unwrap();
let mut es = EvalState::new(store, []).unwrap(); let mut es = EvalState::new(store, []).unwrap();
let v = es let v = es.eval_from_string("[ ]", "<test>").unwrap();
.eval_from_string("[ ]", "<test>")
.unwrap();
es.force(&v).unwrap(); es.force(&v).unwrap();
let t = es.value_type_unforced(&v); let t = es.value_type_unforced(&v);
assert!(t == Some(ValueType::List)); assert!(t == Some(ValueType::List));

View file

@ -45,7 +45,10 @@ impl FlakeSettings {
pub trait EvalStateBuilderExt { pub trait EvalStateBuilderExt {
/// Configures the eval state to provide flakes features such as `builtins.getFlake`. /// Configures the eval state to provide flakes features such as `builtins.getFlake`.
fn flakes(self, settings: &FlakeSettings) -> Result<nix_bindings_expr::eval_state::EvalStateBuilder>; fn flakes(
self,
settings: &FlakeSettings,
) -> Result<nix_bindings_expr::eval_state::EvalStateBuilder>;
} }
impl EvalStateBuilderExt for nix_bindings_expr::eval_state::EvalStateBuilder { impl EvalStateBuilderExt for nix_bindings_expr::eval_state::EvalStateBuilder {
/// Configures the eval state to provide flakes features such as `builtins.getFlake`. /// Configures the eval state to provide flakes features such as `builtins.getFlake`.

View file

@ -2,11 +2,13 @@ use anyhow::{bail, Error, Result};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use nix_bindings_bindgen_raw as raw; use nix_bindings_bindgen_raw as raw;
use nix_bindings_util::context::Context; use nix_bindings_util::context::Context;
use nix_bindings_util::string_return::{callback_get_result_string, callback_get_result_string_data}; use nix_bindings_util::string_return::{
callback_get_result_string, callback_get_result_string_data,
};
use nix_bindings_util::{check_call, result_string_init}; use nix_bindings_util::{check_call, result_string_init};
use std::collections::HashMap;
#[cfg(nix_at_least = "2.33")] #[cfg(nix_at_least = "2.33")]
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::collections::HashMap;
use std::ffi::{c_char, CString}; use std::ffi::{c_char, CString};
use std::ptr::null_mut; use std::ptr::null_mut;
use std::ptr::NonNull; use std::ptr::NonNull;
@ -309,8 +311,8 @@ impl Store {
self.inner.ptr(), self.inner.ptr(),
drv.inner.as_ptr() drv.inner.as_ptr()
))?; ))?;
let path = NonNull::new(path) let path =
.ok_or_else(|| Error::msg("add_derivation returned null"))?; NonNull::new(path).ok_or_else(|| Error::msg("add_derivation returned null"))?;
Ok(StorePath::new_raw(path)) Ok(StorePath::new_raw(path))
} }
} }
@ -333,7 +335,8 @@ impl Store {
#[doc(alias = "nix_store_realise")] #[doc(alias = "nix_store_realise")]
pub fn realise(&mut self, path: &StorePath) -> Result<BTreeMap<String, StorePath>> { pub fn realise(&mut self, path: &StorePath) -> Result<BTreeMap<String, StorePath>> {
let mut outputs = BTreeMap::new(); let mut outputs = BTreeMap::new();
let userdata = &mut outputs as *mut BTreeMap<String, StorePath> as *mut std::os::raw::c_void; let userdata =
&mut outputs as *mut BTreeMap<String, StorePath> as *mut std::os::raw::c_void;
unsafe extern "C" fn callback( unsafe extern "C" fn callback(
userdata: *mut std::os::raw::c_void, userdata: *mut std::os::raw::c_void,
@ -428,8 +431,8 @@ impl Clone for Store {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::collections::HashMap;
use ctor::ctor; use ctor::ctor;
use std::collections::HashMap;
use super::*; use super::*;
@ -446,7 +449,8 @@ mod tests {
// Set custom build dir for sandbox // Set custom build dir for sandbox
if cfg!(target_os = "linux") { if cfg!(target_os = "linux") {
nix_bindings_util::settings::set("sandbox-build-dir", "/custom-build-dir-for-test").ok(); nix_bindings_util::settings::set("sandbox-build-dir", "/custom-build-dir-for-test")
.ok();
} }
std::env::set_var("_NIX_TEST_NO_SANDBOX", "1"); std::env::set_var("_NIX_TEST_NO_SANDBOX", "1");
@ -658,9 +662,8 @@ mod tests {
#[cfg(nix_at_least = "2.33")] #[cfg(nix_at_least = "2.33")]
fn create_multi_output_derivation_json() -> String { fn create_multi_output_derivation_json() -> String {
let system = current_system().unwrap_or_else(|_| { let system = current_system()
format!("{}-{}", std::env::consts::ARCH, std::env::consts::OS) .unwrap_or_else(|_| format!("{}-{}", std::env::consts::ARCH, std::env::consts::OS));
});
format!( format!(
r#"{{ r#"{{
@ -716,7 +719,9 @@ mod tests {
// Verify outputs are complete (BTreeMap guarantees ordering) // Verify outputs are complete (BTreeMap guarantees ordering)
let output_names: Vec<&String> = outputs.keys().collect(); let output_names: Vec<&String> = outputs.keys().collect();
let expected_order = vec!["outa", "outb", "outc", "outd", "oute", "outf", "outg", "outh", "outi", "outj"]; let expected_order = vec![
"outa", "outb", "outc", "outd", "oute", "outf", "outg", "outh", "outi", "outj",
];
assert_eq!(output_names, expected_order); assert_eq!(output_names, expected_order);
drop(store); drop(store);
@ -779,9 +784,8 @@ mod tests {
fn realise_builder_fails() { fn realise_builder_fails() {
let (mut store, temp_dir) = create_temp_store(); let (mut store, temp_dir) = create_temp_store();
let system = current_system().unwrap_or_else(|_| { let system = current_system()
format!("{}-{}", std::env::consts::ARCH, std::env::consts::OS) .unwrap_or_else(|_| format!("{}-{}", std::env::consts::ARCH, std::env::consts::OS));
});
// Create a derivation where the builder exits with error // Create a derivation where the builder exits with error
let drv_json = format!( let drv_json = format!(
@ -833,9 +837,8 @@ mod tests {
fn realise_builder_no_output() { fn realise_builder_no_output() {
let (mut store, temp_dir) = create_temp_store(); let (mut store, temp_dir) = create_temp_store();
let system = current_system().unwrap_or_else(|_| { let system = current_system()
format!("{}-{}", std::env::consts::ARCH, std::env::consts::OS) .unwrap_or_else(|_| format!("{}-{}", std::env::consts::ARCH, std::env::consts::OS));
});
// Create a derivation where the builder succeeds but produces no output // Create a derivation where the builder succeeds but produces no output
let drv_json = format!( let drv_json = format!(
@ -899,11 +902,17 @@ mod tests {
let closure = store.get_fs_closure(&drv_path, false, true, false).unwrap(); let closure = store.get_fs_closure(&drv_path, false, true, false).unwrap();
// The closure should contain at least the derivation and its output // The closure should contain at least the derivation and its output
assert!(closure.len() >= 2, "Closure should contain at least drv and output"); assert!(
closure.len() >= 2,
"Closure should contain at least drv and output"
);
// Verify the output path is in the closure // Verify the output path is in the closure
let out_in_closure = closure.iter().any(|p| p.name().unwrap() == out_path_name); let out_in_closure = closure.iter().any(|p| p.name().unwrap() == out_path_name);
assert!(out_in_closure, "Output path should be in closure when include_outputs=true"); assert!(
out_in_closure,
"Output path should be in closure when include_outputs=true"
);
drop(store); drop(store);
drop(temp_dir); drop(temp_dir);
@ -923,11 +932,16 @@ mod tests {
let out_path_name = out_path.name().unwrap(); let out_path_name = out_path.name().unwrap();
// Get closure with include_outputs=false // Get closure with include_outputs=false
let closure = store.get_fs_closure(&drv_path, false, false, false).unwrap(); let closure = store
.get_fs_closure(&drv_path, false, false, false)
.unwrap();
// Verify the output path is NOT in the closure // Verify the output path is NOT in the closure
let out_in_closure = closure.iter().any(|p| p.name().unwrap() == out_path_name); let out_in_closure = closure.iter().any(|p| p.name().unwrap() == out_path_name);
assert!(!out_in_closure, "Output path should not be in closure when include_outputs=false"); assert!(
!out_in_closure,
"Output path should not be in closure when include_outputs=false"
);
drop(store); drop(store);
drop(temp_dir); drop(temp_dir);
@ -951,7 +965,10 @@ mod tests {
// Verify the output path is NOT in the closure when direction is flipped // Verify the output path is NOT in the closure when direction is flipped
let out_in_closure = closure.iter().any(|p| p.name().unwrap() == out_path_name); let out_in_closure = closure.iter().any(|p| p.name().unwrap() == out_path_name);
assert!(!out_in_closure, "Output path should not be in closure when flip_direction=true"); assert!(
!out_in_closure,
"Output path should not be in closure when flip_direction=true"
);
drop(store); drop(store);
drop(temp_dir); drop(temp_dir);
@ -975,7 +992,10 @@ mod tests {
// Verify the derivation path is in the closure // Verify the derivation path is in the closure
let drv_in_closure = closure.iter().any(|p| p.name().unwrap() == drv_path_name); let drv_in_closure = closure.iter().any(|p| p.name().unwrap() == drv_path_name);
assert!(drv_in_closure, "Derivation should be in closure when include_derivers=true"); assert!(
drv_in_closure,
"Derivation should be in closure when include_derivers=true"
);
drop(store); drop(store);
drop(temp_dir); drop(temp_dir);