Skip to content

Commit d70c7fa

Browse files
authored
rewatch: don't add deps to modules that are in packages that are not a dependency (#7612)
1 parent 0533c8d commit d70c7fa

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

rewatch/src/build/deps.rs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ fn get_dep_modules(
1010
package_modules: &AHashSet<String>,
1111
valid_modules: &AHashSet<String>,
1212
package: &packages::Package,
13+
build_state: &BuildState,
1314
) -> AHashSet<String> {
1415
let mut deps = AHashSet::new();
1516
let ast_file = package.get_build_path().join(ast_file);
@@ -33,6 +34,24 @@ fn get_dep_modules(
3334
}
3435
}
3536

37+
// Get the list of allowed dependency packages for this package
38+
let allowed_dependencies: AHashSet<String> = package
39+
.config
40+
.bs_dependencies
41+
.as_ref()
42+
.unwrap_or(&vec![])
43+
.iter()
44+
.chain(
45+
package
46+
.config
47+
.bs_dev_dependencies
48+
.as_ref()
49+
.unwrap_or(&vec![])
50+
.iter(),
51+
)
52+
.cloned()
53+
.collect();
54+
3655
return deps
3756
.iter()
3857
.map(|dep| {
@@ -59,11 +78,28 @@ fn get_dep_modules(
5978
}
6079
})
6180
.filter(|dep| {
62-
valid_modules.contains(dep)
81+
// First check if the module exists
82+
let module_exists = valid_modules.contains(dep)
6383
&& match namespace.to_owned() {
6484
Some(namespace) => !dep.eq(&namespace),
6585
None => true,
86+
};
87+
88+
if !module_exists {
89+
return false;
90+
}
91+
92+
if let Some(dep_module) = build_state.modules.get(dep) {
93+
// If the module exists, check if it's in the same package (always allowed)
94+
if dep_module.package_name == package.name {
95+
return true;
6696
}
97+
98+
// If it's in a different package, check if that package is a declared dependency
99+
return allowed_dependencies.contains(&dep_module.package_name);
100+
}
101+
102+
true
67103
})
68104
.collect::<AHashSet<String>>();
69105
}
@@ -87,6 +123,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet<String>
87123
package.modules.as_ref().unwrap(),
88124
all_mod,
89125
&package,
126+
build_state,
90127
);
91128

92129
if let Some(interface) = &source_file.interface {
@@ -98,6 +135,7 @@ pub fn get_deps(build_state: &mut BuildState, deleted_modules: &AHashSet<String>
98135
package.modules.as_ref().unwrap(),
99136
all_mod,
100137
&package,
138+
build_state,
101139
))
102140
}
103141
match &package.namespace {

0 commit comments

Comments
 (0)