Skip to content

Commit 25c978a

Browse files
authored
fix(remappings): project autoremappings should respect config (#9466)
1 parent 2c9719e commit 25c978a

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

crates/config/src/providers/remappings.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use crate::{
2-
foundry_toml_dirs, remappings_from_env_var, remappings_from_newline, utils::get_dir_remapping,
3-
Config,
4-
};
1+
use crate::{foundry_toml_dirs, remappings_from_env_var, remappings_from_newline, Config};
52
use figment::{
63
value::{Dict, Map},
74
Error, Figment, Metadata, Profile, Provider,
@@ -39,7 +36,12 @@ impl Remappings {
3936
pub fn with_figment(mut self, figment: &Figment) -> Self {
4037
let mut add_project_remapping = |path: &str| {
4138
if let Ok(path) = figment.find_value(path) {
42-
if let Some(remapping) = path.into_string().and_then(get_dir_remapping) {
39+
if let Some(path) = path.into_string() {
40+
let remapping = Remapping {
41+
context: None,
42+
name: format!("{path}/"),
43+
path: format!("{path}/"),
44+
};
4345
self.project_paths.push(remapping);
4446
}
4547
}

crates/forge/tests/cli/config.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -856,3 +856,36 @@ contract MyScript is BaseScript {
856856
pretty_err(&lib_toml_file, fs::write(&lib_toml_file, lib_config.to_string_pretty().unwrap()));
857857
cmd.forge_fuse().args(["build"]).assert_success();
858858
});
859+
860+
// Tests that project remappings use config paths.
861+
// For `src=src/contracts` config, remapping should be `src/contracts/ = src/contracts/`.
862+
// For `src=src` config, remapping should be `src/ = src/`.
863+
// <https://github.com/foundry-rs/foundry/issues/9454>
864+
forgetest!(test_project_remappings, |prj, cmd| {
865+
foundry_test_utils::util::initialize(prj.root());
866+
let config = Config {
867+
src: "src/contracts".into(),
868+
remappings: vec![Remapping::from_str("contracts/=src/contracts/").unwrap().into()],
869+
..Default::default()
870+
};
871+
prj.write_config(config);
872+
873+
// Add Counter.sol in `src/contracts` project dir.
874+
let src_dir = &prj.root().join("src/contracts");
875+
pretty_err(src_dir, fs::create_dir_all(src_dir));
876+
pretty_err(
877+
src_dir.join("Counter.sol"),
878+
fs::write(src_dir.join("Counter.sol"), "contract Counter{}"),
879+
);
880+
prj.add_test(
881+
"CounterTest.sol",
882+
r#"
883+
import "contracts/Counter.sol";
884+
885+
contract CounterTest {
886+
}
887+
"#,
888+
)
889+
.unwrap();
890+
cmd.forge_fuse().args(["build"]).assert_success();
891+
});

0 commit comments

Comments
 (0)