diff --git a/src/value/parse.rs b/src/value/parse.rs index d3d58ad..d8b066f 100644 --- a/src/value/parse.rs +++ b/src/value/parse.rs @@ -229,17 +229,17 @@ fn eat_op>( span: left.span.merge(right.span), }); } else { - space_separated.push(Spanned { - node: Value::UnaryOp(op.node, Box::new(right.node)), - span: right.span, - }); + space_separated.push(right.map_node(|n| Value::UnaryOp(op.node, Box::new(n)))); } } else { let right = single_value(iter, scope, super_selector, op.span)?; - space_separated.push(Spanned { - node: Value::UnaryOp(op.node, Box::new(right.node)), - span: right.span, - }); + if right.node == Value::Null { + space_separated.push( + right.map_node(|_| Value::Ident("-null".to_string(), QuoteKind::None)), + ); + return Ok(()); + } + space_separated.push(right.map_node(|n| Value::UnaryOp(op.node, Box::new(n)))); } } Op::And | Op::Or => { diff --git a/tests/unary.rs b/tests/unary.rs index bbdb4c6..d7bb646 100644 --- a/tests/unary.rs +++ b/tests/unary.rs @@ -50,3 +50,9 @@ test!( "$a: 1;\n\na {\n color: -$a;\n}\n", "a {\n color: -1;\n}\n" ); +test!( + unary_neg_null_paren, + "a {\n color: -(null);\n}\n", + "a {\n color: -;\n}\n" +); +test!(negative_null_as_ident, "a {\n color: -null;\n}\n");