Fix 'aiken new', now require project name in specific format.
This commit is contained in:
parent
796ac28044
commit
a3591cc7dc
|
@ -4,7 +4,7 @@ use thiserror::Error;
|
||||||
|
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
#[error("{} is not a valid project name. {}", name, reason.to_string())]
|
#[error("'{}' is not a valid project name: {}", name, reason.to_string())]
|
||||||
InvalidProjectName {
|
InvalidProjectName {
|
||||||
name: String,
|
name: String,
|
||||||
reason: InvalidProjectNameReason,
|
reason: InvalidProjectNameReason,
|
||||||
|
@ -21,15 +21,16 @@ pub enum InvalidProjectNameReason {
|
||||||
impl fmt::Display for InvalidProjectNameReason {
|
impl fmt::Display for InvalidProjectNameReason {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
InvalidProjectNameReason::AikenPrefix => write!(f, "It is a reserved word in Aiken."),
|
InvalidProjectNameReason::AikenPrefix => write!(f, "it's a reserved word in Aiken."),
|
||||||
InvalidProjectNameReason::AikenReservedModule => {
|
InvalidProjectNameReason::AikenReservedModule => {
|
||||||
write!(f, "It is a reserved module name in Aiken.")
|
write!(f, "it's a reserved module name in Aiken.")
|
||||||
}
|
}
|
||||||
InvalidProjectNameReason::Format => write!(
|
InvalidProjectNameReason::Format => write!(
|
||||||
f,
|
f,
|
||||||
"It does not have the correct format. Project names \
|
"it is malformed.\n\nProjects must be named as:\n\n\t\
|
||||||
must start with a lowercase letter and may only contain lowercase letters, \
|
{{repository}}/{{project}}\n\nEach part must start with a lowercase letter \
|
||||||
numbers and underscores."
|
and may only contain lowercase letters, numbers, hyphens or underscores.\
|
||||||
|
\nFor example,\n\n\taiken-lang/stdlib"
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ pub struct Creator {
|
||||||
|
|
||||||
impl Creator {
|
impl Creator {
|
||||||
fn new(args: Args, project_name: String) -> Self {
|
fn new(args: Args, project_name: String) -> Self {
|
||||||
let root = args.name;
|
let root = PathBuf::from(args.name.file_name().unwrap());
|
||||||
let lib = root.join("lib");
|
let lib = root.join("lib");
|
||||||
let validators = root.join("validators");
|
let validators = root.join("validators");
|
||||||
let project_name = project_name;
|
let project_name = project_name;
|
||||||
|
@ -124,9 +124,7 @@ Find more on the [Aiken's user manual](https://aiken-lang.org).
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
licences = ["Apache-2.0"]
|
licences = ["Apache-2.0"]
|
||||||
description = "Aiken contracts for project '{name}'"
|
description = "Aiken contracts for project '{name}'"
|
||||||
|
dependencies = []
|
||||||
[dependencies]
|
|
||||||
|
|
||||||
"#,
|
"#,
|
||||||
name = self.project_name,
|
name = self.project_name,
|
||||||
},
|
},
|
||||||
|
@ -136,7 +134,6 @@ Find more on the [Aiken's user manual](https://aiken-lang.org).
|
||||||
|
|
||||||
fn write(path: PathBuf, contents: &str) -> miette::Result<()> {
|
fn write(path: PathBuf, contents: &str) -> miette::Result<()> {
|
||||||
let mut f = fs::File::create(path).into_diagnostic()?;
|
let mut f = fs::File::create(path).into_diagnostic()?;
|
||||||
|
|
||||||
f.write_all(contents.as_bytes()).into_diagnostic()?;
|
f.write_all(contents.as_bytes()).into_diagnostic()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -152,8 +149,8 @@ fn validate_name(name: &str) -> Result<(), Error> {
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
reason: InvalidProjectNameReason::AikenReservedModule,
|
reason: InvalidProjectNameReason::AikenReservedModule,
|
||||||
})
|
})
|
||||||
} else if !regex::Regex::new("^[a-z][a-z0-9_]*$")
|
} else if !regex::Regex::new("^[a-z0-9_-]+/[a-z0-9_-]+$")
|
||||||
.expect("new name regex could not be compiled")
|
.expect("regex could not be compiled")
|
||||||
.is_match(name)
|
.is_match(name)
|
||||||
{
|
{
|
||||||
Err(Error::InvalidProjectName {
|
Err(Error::InvalidProjectName {
|
||||||
|
|
Loading…
Reference in New Issue