diff --git a/CHANGELOG.md b/CHANGELOG.md index 26615d1a..16a3e02c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - **aiken-lang**: fix compiler wrongly requiring MillerLoopResult to be 'serialisable' when manipulated as a top-level value. See #921. @KtorZ - **aiken-lang**: fix type-checker oversight regarding serialisation of generics. See #939. @KtorZ - **aiken-lang**: fix type-checker not raising error when comparing non-serialisable types. See #940. @KtorZ +- **aiken-project**: show a warning when ignoring modules in lib/validator because they have an invalid name. See #916. @KtorZ ### Changed @@ -39,6 +40,7 @@ - **aiken-lang**: altered internal representation of 2-tuples to distinguish them from pairs. @KtorZ @Microproofs - **aiken-lang**: some more code gen cleanup. @Microproofs - **aiken-lang**: new optimization for wrapped builtins found in the stdlib. @Microproofs +- **aiken-project**: slightly restyle warnings to be less noisy. @KtorZ ## v1.0.26-alpha - 2024-03-25 diff --git a/crates/aiken-project/src/error.rs b/crates/aiken-project/src/error.rs index 4235309b..715d888f 100644 --- a/crates/aiken-project/src/error.rs +++ b/crates/aiken-project/src/error.rs @@ -8,7 +8,10 @@ use aiken_lang::{ use miette::{ Diagnostic, EyreContext, LabeledSpan, MietteHandlerOpts, NamedSource, RgbColors, SourceCode, }; -use owo_colors::{OwoColorize, Stream::Stdout}; +use owo_colors::{ + OwoColorize, + Stream::{Stderr, Stdout}, +}; use std::{ fmt::{Debug, Display}, io, @@ -501,9 +504,9 @@ impl Diagnostic for Error { #[derive(thiserror::Error)] pub enum Warning { - #[error("You do not have any validators to build!")] + #[error("{}", "You do not have any validators to build!".if_supports_color(Stderr, |s| s.yellow()))] NoValidators, - #[error("While trying to make sense of your code...")] + #[error("{}", "While trying to make sense of your code...".if_supports_color(Stderr, |s| s.yellow()))] Type { path: PathBuf, src: String, @@ -511,15 +514,18 @@ pub enum Warning { #[source] warning: tipo::error::Warning, }, - #[error("{name} is already a dependency.")] + #[error("{}", format!("{name} is already a dependency.").if_supports_color(Stderr, |s| s.yellow()))] DependencyAlreadyExists { name: PackageName }, + #[error("{}", format!("Ignoring file with invalid module name at: {path:?}").if_supports_color(Stderr, |s| s.yellow()))] + InvalidModuleName { path: PathBuf }, } impl ExtraData for Warning { fn extra_data(&self) -> Option { match self { - Warning::NoValidators { .. } => None, - Warning::DependencyAlreadyExists { .. } => None, + Warning::NoValidators { .. } + | Warning::DependencyAlreadyExists { .. } + | Warning::InvalidModuleName { .. } => None, Warning::Type { warning, .. } => warning.extra_data(), } } @@ -528,17 +534,17 @@ impl ExtraData for Warning { impl GetSource for Warning { fn path(&self) -> Option { match self { - Warning::NoValidators => None, - Warning::Type { path, .. } => Some(path.clone()), - Warning::DependencyAlreadyExists { .. } => None, + Warning::InvalidModuleName { path } | Warning::Type { path, .. } => Some(path.clone()), + Warning::NoValidators | Warning::DependencyAlreadyExists { .. } => None, } } fn src(&self) -> Option { match self { - Warning::NoValidators => None, Warning::Type { src, .. } => Some(src.clone()), - Warning::DependencyAlreadyExists { .. } => None, + Warning::NoValidators + | Warning::InvalidModuleName { .. } + | Warning::DependencyAlreadyExists { .. } => None, } } } @@ -551,46 +557,32 @@ impl Diagnostic for Warning { fn source_code(&self) -> Option<&dyn SourceCode> { match self { Warning::Type { named, .. } => Some(named), - Warning::NoValidators => None, - Warning::DependencyAlreadyExists { .. } => None, + Warning::NoValidators + | Warning::InvalidModuleName { .. } + | Warning::DependencyAlreadyExists { .. } => None, } } fn labels(&self) -> Option + '_>> { match self { Warning::Type { warning, .. } => warning.labels(), - Warning::NoValidators => None, - Warning::DependencyAlreadyExists { .. } => None, + Warning::InvalidModuleName { .. } + | Warning::NoValidators + | Warning::DependencyAlreadyExists { .. } => None, } } fn code<'a>(&'a self) -> Option> { - fn boxed<'a>(s: Box) -> Box { - Box::new(format!( - " {} {}", - "Warning" - .if_supports_color(Stdout, |s| s.yellow()) - .if_supports_color(Stdout, |s| s.bold()), - format!("{s}").if_supports_color(Stdout, |s| s.yellow()) - )) - } - - match self { - Warning::Type { warning, .. } => Some(boxed(Box::new(format!( - "aiken::check{}", - warning.code().map(|s| format!("::{s}")).unwrap_or_default() - )))), - Warning::NoValidators => Some(boxed(Box::new("aiken::check"))), - Warning::DependencyAlreadyExists { .. } => { - Some(boxed(Box::new("aiken::packages::already_exists"))) - } - } + None } fn help<'a>(&'a self) -> Option> { match self { Warning::Type { warning, .. } => warning.help(), Warning::NoValidators => None, + Warning::InvalidModuleName { .. } => Some(Box::new( + "Module names are lowercase, (ascii) alpha-numeric and may contain dashes or underscores.", + )), Warning::DependencyAlreadyExists { .. } => Some(Box::new( "If you need to change the version, try 'aiken packages upgrade' instead.", )), diff --git a/crates/aiken-project/src/lib.rs b/crates/aiken-project/src/lib.rs index b165545f..064c5d11 100644 --- a/crates/aiken-project/src/lib.rs +++ b/crates/aiken-project/src/lib.rs @@ -855,19 +855,27 @@ where } fn aiken_files(&mut self, dir: &Path, kind: ModuleKind) -> Result<(), Error> { - let paths = walkdir::WalkDir::new(dir) + walkdir::WalkDir::new(dir) .follow_links(true) .into_iter() .filter_map(Result::ok) .filter(|e| e.file_type().is_file()) - .map(|d| d.into_path()) - .filter(move |d| is_aiken_path(d, dir)); + .try_for_each(|d| { + let path = d.into_path(); + let keep = is_aiken_path(&path, dir); + let ext = path.extension(); - for path in paths { - self.add_module(path, dir, kind)?; - } + if !keep && ext.unwrap_or_default() == "ak" { + self.warnings + .push(Warning::InvalidModuleName { path: path.clone() }); + } - Ok(()) + if keep { + self.add_module(path, dir, kind) + } else { + Ok(()) + } + }) } fn add_module(&mut self, path: PathBuf, dir: &Path, kind: ModuleKind) -> Result<(), Error> {