From cf1046e1e1ce2f47d01125369c31699981019c4a Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Tue, 5 Jul 2022 17:54:42 +0200 Subject: [PATCH] fix(solc): use path slash for remapping display on windows (#1454) --- ethers-solc/src/remappings.rs | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/ethers-solc/src/remappings.rs b/ethers-solc/src/remappings.rs index e512fc7d..b63f564c 100644 --- a/ethers-solc/src/remappings.rs +++ b/ethers-solc/src/remappings.rs @@ -3,7 +3,6 @@ use serde::{Deserialize, Serialize}; use std::{ collections::{hash_map::Entry, HashMap}, fmt, - fmt::Write, path::{Path, PathBuf}, str::FromStr, }; @@ -110,11 +109,23 @@ impl<'de> Deserialize<'de> for Remapping { // Remappings are printed as `prefix=target` impl fmt::Display for Remapping { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}={}", self.name, self.path)?; - if !self.path.ends_with('/') { - f.write_char('/')?; + let mut s = { + #[cfg(target_os = "windows")] + { + // ensure we have `/` slashes on windows + use path_slash::PathExt; + format!("{}={}", self.name, std::path::Path::new(&self.path).to_slash_lossy()) + } + #[cfg(not(target_os = "windows"))] + { + format!("{}={}", self.name, self.path) + } + }; + + if !s.ends_with('/') { + s.push('/'); } - Ok(()) + f.write_str(&s) } } @@ -251,7 +262,19 @@ impl RelativeRemapping { // Remappings are printed as `prefix=target` impl fmt::Display for RelativeRemapping { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let mut s = format!("{}={}", self.name, self.path.original().display()); + let mut s = { + #[cfg(target_os = "windows")] + { + // ensure we have `/` slashes on windows + use path_slash::PathExt; + format!("{}={}", self.name, self.path.original().to_slash_lossy()) + } + #[cfg(not(target_os = "windows"))] + { + format!("{}={}", self.name, self.path.original().display()) + } + }; + if !s.ends_with('/') { s.push('/'); }