diff --git a/ethers-providers/src/provider.rs b/ethers-providers/src/provider.rs index 62c9d7c9..4709e89f 100644 --- a/ethers-providers/src/provider.rs +++ b/ethers-providers/src/provider.rs @@ -1638,6 +1638,7 @@ mod tests { } #[tokio::test] + #[ignore] async fn mainnet_resolve_avatar() { let provider = crate::MAINNET.provider(); diff --git a/ethers-solc/src/config.rs b/ethers-solc/src/config.rs index 0311c286..ed1bfbba 100644 --- a/ethers-solc/src/config.rs +++ b/ethers-solc/src/config.rs @@ -29,6 +29,8 @@ pub struct ProjectPathsConfig { pub sources: PathBuf, /// Where to find tests pub tests: PathBuf, + /// Where to find scripts + pub scripts: PathBuf, /// Where to look for libraries pub libraries: Vec, /// The compiler remappings @@ -67,6 +69,7 @@ impl ProjectPathsConfig { artifacts: self.artifacts.clone(), sources: self.sources.clone(), tests: self.tests.clone(), + scripts: self.scripts.clone(), libraries: self.libraries.iter().cloned().collect(), } } @@ -88,6 +91,7 @@ impl ProjectPathsConfig { .map_err(|err| SolcIoError::new(err, &self.artifacts))?; fs::create_dir_all(&self.sources).map_err(|err| SolcIoError::new(err, &self.sources))?; fs::create_dir_all(&self.tests).map_err(|err| SolcIoError::new(err, &self.tests))?; + fs::create_dir_all(&self.scripts).map_err(|err| SolcIoError::new(err, &self.scripts))?; for lib in &self.libraries { fs::create_dir_all(lib).map_err(|err| SolcIoError::new(err, lib))?; } @@ -106,15 +110,22 @@ impl ProjectPathsConfig { Ok(Source::read_all_from(&self.tests)?) } + /// Returns all sources found under the project's configured `script` path + pub fn read_scripts(&self) -> Result { + tracing::trace!("reading all scripts from \"{}\"", self.scripts.display()); + Ok(Source::read_all_from(&self.scripts)?) + } + /// Returns the combined set solidity file paths for `Self::sources` and `Self::tests` pub fn input_files(&self) -> Vec { utils::source_files(&self.sources) .into_iter() .chain(utils::source_files(&self.tests)) + .chain(utils::source_files(&self.scripts)) .collect() } - /// Returns the combined set of `Self::read_sources` + `Self::read_tests` + /// Returns the combined set of `Self::read_sources` + `Self::read_tests` + `Self::read_scripts` pub fn read_input_files(&self) -> Result { Ok(Source::read_all_files(self.input_files())?) } @@ -359,6 +370,7 @@ impl fmt::Display for ProjectPathsConfig { writeln!(f, "contracts: {}", self.sources.display())?; writeln!(f, "artifacts: {}", self.artifacts.display())?; writeln!(f, "tests: {}", self.tests.display())?; + writeln!(f, "scripts: {}", self.scripts.display())?; writeln!(f, "libs:")?; for lib in &self.libraries { writeln!(f, " {}", lib.display())?; @@ -377,6 +389,7 @@ pub struct ProjectPaths { pub artifacts: PathBuf, pub sources: PathBuf, pub tests: PathBuf, + pub scripts: PathBuf, pub libraries: BTreeSet, } @@ -387,6 +400,7 @@ impl ProjectPaths { self.artifacts = root.join(&self.artifacts); self.sources = root.join(&self.sources); self.tests = root.join(&self.tests); + self.scripts = root.join(&self.scripts); let libraries = std::mem::take(&mut self.libraries); self.libraries.extend(libraries.into_iter().map(|p| root.join(p))); self @@ -405,6 +419,9 @@ impl ProjectPaths { if let Ok(prefix) = self.tests.strip_prefix(base) { self.tests = prefix.to_path_buf(); } + if let Ok(prefix) = self.scripts.strip_prefix(base) { + self.scripts = prefix.to_path_buf(); + } let libraries = std::mem::take(&mut self.libraries); self.libraries.extend( libraries @@ -420,7 +437,8 @@ impl Default for ProjectPaths { Self { artifacts: "out".into(), sources: "src".into(), - tests: "tests".into(), + tests: "test".into(), + scripts: "script".into(), libraries: Default::default(), } } @@ -463,6 +481,7 @@ pub struct ProjectPathsConfigBuilder { artifacts: Option, sources: Option, tests: Option, + scripts: Option, libraries: Option>, remappings: Option>, } @@ -493,6 +512,11 @@ impl ProjectPathsConfigBuilder { self } + pub fn scripts(mut self, scripts: impl Into) -> Self { + self.scripts = Some(utils::canonicalized(scripts)); + self + } + /// Specifically disallow additional libraries pub fn no_libs(mut self) -> Self { self.libraries = Some(Vec::new()); @@ -538,7 +562,8 @@ impl ProjectPathsConfigBuilder { .artifacts .unwrap_or_else(|| ProjectPathsConfig::find_artifacts_dir(&root)), sources: self.sources.unwrap_or_else(|| ProjectPathsConfig::find_source_dir(&root)), - tests: self.tests.unwrap_or_else(|| root.join("tests")), + tests: self.tests.unwrap_or_else(|| root.join("test")), + scripts: self.scripts.unwrap_or_else(|| root.join("script")), remappings: self .remappings .unwrap_or_else(|| libraries.iter().flat_map(Remapping::find_many).collect()),