better error message for missing rgb/rgba args

This commit is contained in:
ConnorSkees 2020-03-22 23:28:19 -04:00
parent 0be8828bf0
commit 6aae433d21
4 changed files with 31 additions and 0 deletions

View File

@ -40,6 +40,10 @@ impl CallArgs {
self.0.len() self.0.len()
} }
pub fn is_empty(&self) -> bool {
self.0.len() == 0
}
pub fn remove(&mut self, s: &str) -> Option<Value> { pub fn remove(&mut self, s: &str) -> Option<Value> {
self.0.remove(s) self.0.remove(s)
} }

View File

@ -236,6 +236,10 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
"saturate".to_owned(), "saturate".to_owned(),
Box::new(|args, _| { Box::new(|args, _| {
max_args!(args, 2); max_args!(args, 2);
if args.len() == 1 {
return Ok(Value::Ident(format!("saturate({})", arg!(args, 0, "amount")), QuoteKind::None));
}
let amount = match arg!(args, 1, "amount") { let amount = match arg!(args, 1, "amount") {
Value::Dimension(n, u) => bound!("amount", n, u, 0, 100) / Number::from(100), Value::Dimension(n, u) => bound!("amount", n, u, 0, 100) / Number::from(100),
v => return Err(format!("$amount: {} is not a number.", v).into()), v => return Err(format!("$amount: {} is not a number.", v).into()),

View File

@ -11,6 +11,10 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
f.insert( f.insert(
"rgb".to_owned(), "rgb".to_owned(),
Box::new(|args, _| { Box::new(|args, _| {
if args.is_empty() {
return Err("Missing argument $channels.".into());
}
if args.len() == 1 { if args.len() == 1 {
let mut channels = match arg!(args, 0, "channels") { let mut channels = match arg!(args, 0, "channels") {
Value::List(v, _) => v, Value::List(v, _) => v,
@ -129,6 +133,10 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
f.insert( f.insert(
"rgba".to_owned(), "rgba".to_owned(),
Box::new(|args, _| { Box::new(|args, _| {
if args.is_empty() {
return Err("Missing argument $channels.".into());
}
if args.len() == 1 { if args.len() == 1 {
let mut channels = match arg!(args, 0, "channels") { let mut channels = match arg!(args, 0, "channels") {
Value::List(v, _) => v, Value::List(v, _) => v,

View File

@ -126,6 +126,16 @@ test!(
"a {\n color: rgba(7.1%, 20.4%, 33.9%);\n}\n", "a {\n color: rgba(7.1%, 20.4%, 33.9%);\n}\n",
"a {\n color: #123456;\n}\n" "a {\n color: #123456;\n}\n"
); );
error!(
rgb_no_args,
"a {\n color: rgb();\n}\n",
"Error: Missing argument $channels."
);
error!(
rgba_no_args,
"a {\n color: rgba();\n}\n",
"Error: Missing argument $channels."
);
test!( test!(
hsl_basic, hsl_basic,
"a {\n color: hsl(193, 67%, 99);\n}\n", "a {\n color: hsl(193, 67%, 99);\n}\n",
@ -340,6 +350,11 @@ test!(
"a {\n color: saturate($color: hsl(25, 100%, 80%), $amount: 30%);\n}\n", "a {\n color: saturate($color: hsl(25, 100%, 80%), $amount: 30%);\n}\n",
"a {\n color: #ffc499;\n}\n" "a {\n color: #ffc499;\n}\n"
); );
test!(
saturate_one_arg,
"a {\n color: saturate($amount: 50%);\n}\n",
"a {\n color: saturate(50%);\n}\n"
);
test!( test!(
saturate_basic, saturate_basic,
"a {\n color: saturate(hsl(120, 30%, 90%), 20%);\n}\n", "a {\n color: saturate(hsl(120, 30%, 90%), 20%);\n}\n",