diff --git a/src/cmd/new.rs b/src/cmd/new.rs index f294e3cf30f4466fc2607d13b4574365bdc5f5ca..5c23574b7ae43290e4e2587dc74add0707525851 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -27,8 +27,8 @@ pub(crate) fn execute

(name: &str, dir: Option

) -> Result> where P: AsRef, { - if name.contains('-') { - anyhow::bail!("Contract names cannot contain hyphens"); + if !name.chars().all(|c| c.is_alphanumeric() || c == '_') { + anyhow::bail!("Contract names can only contain alphanumeric characters and underscores"); } let out_dir = dir @@ -108,7 +108,20 @@ mod tests { assert!(result.is_err(), "Should fail"); assert_eq!( result.err().unwrap().to_string(), - "Contract names cannot contain hyphens" + "Contract names can only contain alphanumeric characters and underscores" + ); + Ok(()) + }) + } + + #[test] + fn rejects_name_with_period() { + with_tmp_dir(|path| { + let result = execute("../xxx", Some(path)); + assert!(result.is_err(), "Should fail"); + assert_eq!( + result.err().unwrap().to_string(), + "Contract names can only contain alphanumeric characters and underscores" ); Ok(()) })