From c5aee215146d4e778205b789bff4e7550550de9b Mon Sep 17 00:00:00 2001 From: imxyy_soope_ Date: Sat, 31 Jan 2026 18:06:53 +0800 Subject: [PATCH] fix: remove incorrect dynamic attr check --- nix-js/src/ir/utils.rs | 37 +++++++++---------------------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/nix-js/src/ir/utils.rs b/nix-js/src/ir/utils.rs index 08e0460..938e592 100644 --- a/nix-js/src/ir/utils.rs +++ b/nix-js/src/ir/utils.rs @@ -529,16 +529,21 @@ where binding_keys.push(alias_sym); } - let (required, optional) = params - .iter() - .partition_map(|Param { sym, sym_span, default, .. }| { + let (required, optional) = params.iter().partition_map( + |Param { + sym, + sym_span, + default, + .. + }| { use itertools::Either::*; if default.is_none() { Left((*sym, *sym_span)) } else { Right((*sym, *sym_span)) } - }); + }, + ); let slots: Vec<_> = ctx.reserve_slots(binding_keys.len()).collect(); let let_bindings: HashMap<_, _> = binding_keys @@ -790,9 +795,6 @@ fn finalize_pending_value( ) -> Result { match value { PendingValue::Expr(expr) => { - if !ALLOW_DYN { - check_no_dynamic_attrs(&expr, ctx)?; - } let id = Downgrade::downgrade(expr, ctx)?; Ok(ctx.maybe_thunk(id)) } @@ -830,24 +832,3 @@ fn finalize_pending_value( } } } - -/// Check that an expression doesn't contain dynamic attributes (for let bindings). -fn check_no_dynamic_attrs(expr: &ast::Expr, ctx: &impl DowngradeContext) -> Result<()> { - let ast::Expr::AttrSet(attrset) = expr else { - return Ok(()); - }; - for v in attrset.attrpath_values() { - v.attrpath().unwrap().attrs().try_for_each(|attr| { - if let ast::Attr::Dynamic(dyn_attr) = attr { - Err(Error::downgrade_error( - "dynamic attributes not allowed in let bindings".to_string(), - ctx.get_current_source(), - dyn_attr.syntax().text_range(), - )) - } else { - Ok(()) - } - })?; - } - Ok(()) -}