From cd7618b017e76d4a24a0aa16fe49fd7036553ace Mon Sep 17 00:00:00 2001 From: nojaf Date: Wed, 9 Jul 2025 17:38:39 +0200 Subject: [PATCH 01/13] Don't panic when dev files are not found during clean. --- rewatch/src/build.rs | 12 +++++++---- rewatch/src/build/clean.rs | 3 ++- rewatch/src/build/packages.rs | 40 +++++++++++++++++++---------------- rewatch/src/lock.rs | 5 ++++- rewatch/src/watcher.rs | 2 +- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/rewatch/src/build.rs b/rewatch/src/build.rs index dc844a8092..1f073a4330 100644 --- a/rewatch/src/build.rs +++ b/rewatch/src/build.rs @@ -8,7 +8,10 @@ pub mod packages; pub mod parse; pub mod read_compile_state; +use self::compile::compiler_args; +use self::parse::parser_args; use crate::build::compile::{mark_modules_with_deleted_deps_dirty, mark_modules_with_expired_deps_dirty}; +use crate::build::packages::DevDeps; use crate::helpers::emojis::*; use crate::helpers::{self, get_workspace_root}; use crate::sourcedirs; @@ -26,9 +29,6 @@ use std::path::{Path, PathBuf}; use std::process::Stdio; use std::time::{Duration, Instant}; -use self::compile::compiler_args; -use self::parse::parser_args; - fn is_dirty(module: &Module) -> bool { match module.source_type { SourceType::SourceFile(SourceFile { @@ -154,7 +154,11 @@ pub fn initialize_build( &project_root, &workspace_root, show_progress, - build_dev_deps, + if build_dev_deps { + DevDeps::Build + } else { + DevDeps::DontBuild + }, )?; let timing_package_tree_elapsed = timing_package_tree.elapsed(); diff --git a/rewatch/src/build/clean.rs b/rewatch/src/build/clean.rs index 8a09bef035..255a77bd4d 100644 --- a/rewatch/src/build/clean.rs +++ b/rewatch/src/build/clean.rs @@ -1,5 +1,6 @@ use super::build_types::*; use super::packages; +use crate::build::packages::DevDeps; use crate::helpers; use crate::helpers::emojis::*; use ahash::AHashSet; @@ -346,7 +347,7 @@ pub fn clean( show_progress, // Build the package tree with dev dependencies. // They should always be cleaned if they are there. - true, + DevDeps::Clean, )?; let root_config_name = packages::read_package_name(&project_root)?; let bsc_path = match bsc_path { diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index 064383c3b7..d96c4947f9 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -426,9 +426,9 @@ fn make_package(config: config::Config, package_path: &Path, is_pinned_dep: bool } }; - let package_name = read_package_name(package_path).expect("Could not read package name"); + // let package_name = read_package_name(package_path).expect("Could not read package name"); Package { - name: package_name, + name: config.name.clone(), config: config.to_owned(), source_folders, source_files: None, @@ -490,7 +490,7 @@ pub fn get_source_files( package_dir: &Path, filter: &Option, source: &config::PackageSource, - build_dev_deps: bool, + dev_deps: DevDeps, ) -> AHashMap { let mut map: AHashMap = AHashMap::new(); @@ -504,17 +504,22 @@ pub fn get_source_files( }; let path_dir = Path::new(&source.dir); - match (build_dev_deps, type_) { - (false, Some(type_)) if type_ == "dev" => (), + let is_clean = match dev_deps { + DevDeps::Clean => true, + _ => false, + }; + match (dev_deps, type_) { + (DevDeps::DontBuild, Some(type_)) if type_ == "dev" => (), _ => match read_folders(filter, package_dir, path_dir, recurse) { Ok(files) => map.extend(files), - Err(_e) => log::error!( + Err(_e) if !is_clean => log::error!( "Could not read folder: {:?}. Specified in dependency: {}, located {:?}...", path_dir.to_path_buf().into_os_string(), package_name, package_dir ), + Err(_) => {} }, }; @@ -526,22 +531,14 @@ pub fn get_source_files( fn extend_with_children( filter: &Option, mut build: AHashMap, - build_dev_deps: bool, + dev_deps: DevDeps, ) -> AHashMap { for (_key, package) in build.iter_mut() { let mut map: AHashMap = AHashMap::new(); package .source_folders .par_iter() - .map(|source| { - get_source_files( - &package.name, - Path::new(&package.path), - filter, - source, - build_dev_deps, - ) - }) + .map(|source| get_source_files(&package.name, Path::new(&package.path), filter, source, dev_deps)) .collect::>>() .into_iter() .for_each(|source| map.extend(source)); @@ -571,6 +568,13 @@ fn extend_with_children( build } +#[derive(Clone, Copy)] +pub enum DevDeps { + Build, + DontBuild, + Clean, +} + /// Make turns a folder, that should contain a config, into a tree of Packages. /// It does so in two steps: /// 1. Get all the packages parsed, and take all the source folders from the config @@ -583,13 +587,13 @@ pub fn make( root_folder: &Path, workspace_root: &Option, show_progress: bool, - build_dev_deps: bool, + dev_deps: DevDeps, ) -> Result> { let map = read_packages(root_folder, workspace_root, show_progress)?; /* Once we have the deduplicated packages, we can add the source files for each - to minimize * the IO */ - let result = extend_with_children(filter, map, build_dev_deps); + let result = extend_with_children(filter, map, dev_deps); Ok(result) } diff --git a/rewatch/src/lock.rs b/rewatch/src/lock.rs index c0c3061abd..d81e54c1c4 100644 --- a/rewatch/src/lock.rs +++ b/rewatch/src/lock.rs @@ -21,7 +21,10 @@ pub enum Error { impl std::fmt::Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { let msg = match self { - Error::Locked(pid) => format!("A ReScript build is already running. The process ID (PID) is {}", pid), + Error::Locked(pid) => format!( + "A ReScript build is already running. The process ID (PID) is {}", + pid + ), Error::ParsingLockfile(e) => format!( "Could not parse lockfile: \n {} \n (try removing it and running the command again)", e diff --git a/rewatch/src/watcher.rs b/rewatch/src/watcher.rs index cee448ba9c..bb22a9545c 100644 --- a/rewatch/src/watcher.rs +++ b/rewatch/src/watcher.rs @@ -5,12 +5,12 @@ use crate::cmd; use crate::helpers; use crate::helpers::StrippedVerbatimPath; use crate::helpers::emojis::*; +use crate::lock::LOCKFILE; use crate::queue::FifoQueue; use crate::queue::*; use futures_timer::Delay; use notify::event::ModifyKind; use notify::{Config, Error, Event, EventKind, RecommendedWatcher, RecursiveMode, Watcher}; -use crate::lock::LOCKFILE; use std::path::{Path, PathBuf}; use std::sync::Arc; use std::sync::Mutex; From 91e12dad11a83b2a78fb3b0cea78e6d65810698a Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 10 Jul 2025 14:43:00 +0200 Subject: [PATCH 02/13] Add test project --- rewatch/testrepo/bsconfig.json | 6 ++++-- .../packages/package-name-mismatch/package.json | 9 +++++++++ .../packages/package-name-mismatch/rescript.json | 12 ++++++++++++ .../package-name-mismatch/src/NameMismatch.res | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 rewatch/testrepo/packages/package-name-mismatch/package.json create mode 100644 rewatch/testrepo/packages/package-name-mismatch/rescript.json create mode 100644 rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res diff --git a/rewatch/testrepo/bsconfig.json b/rewatch/testrepo/bsconfig.json index 95e49a9f45..99af932034 100644 --- a/rewatch/testrepo/bsconfig.json +++ b/rewatch/testrepo/bsconfig.json @@ -21,7 +21,8 @@ "@testrepo/new-namespace", "@testrepo/namespace-casing", "@testrepo/with-dev-deps", - "@testrepo/compiled-by-legacy" + "@testrepo/compiled-by-legacy", + "@testrepo/package-name-mismatch" ], "bs-dependencies": [ "@testrepo/main", @@ -30,7 +31,8 @@ "@testrepo/new-namespace", "@testrepo/namespace-casing", "@testrepo/with-dev-deps", - "@testrepo/compiled-by-legacy" + "@testrepo/compiled-by-legacy", + "@testrepo/package-name-mismatch" ], "reason": { "react-jsx": 3 diff --git a/rewatch/testrepo/packages/package-name-mismatch/package.json b/rewatch/testrepo/packages/package-name-mismatch/package.json new file mode 100644 index 0000000000..e586de4b8e --- /dev/null +++ b/rewatch/testrepo/packages/package-name-mismatch/package.json @@ -0,0 +1,9 @@ +{ + "name": "xyz", + "version": "0.0.1", + "keywords": [ + "rescript" + ], + "author": "", + "license": "MIT" +} diff --git a/rewatch/testrepo/packages/package-name-mismatch/rescript.json b/rewatch/testrepo/packages/package-name-mismatch/rescript.json new file mode 100644 index 0000000000..482d9a5345 --- /dev/null +++ b/rewatch/testrepo/packages/package-name-mismatch/rescript.json @@ -0,0 +1,12 @@ +{ + "name": "@testrepo/package-name-mismatch", + "sources": { + "dir": "src", + "subdirs": true + }, + "package-specs": { + "module": "es6", + "in-source": true + }, + "suffix": ".bs.js" +} diff --git a/rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res b/rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res new file mode 100644 index 0000000000..91c2f698d3 --- /dev/null +++ b/rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res @@ -0,0 +1 @@ +Console.log("hi") \ No newline at end of file From 0bbe2f4478d1cd2a33084804deddee75e3f9de01 Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 10 Jul 2025 14:57:53 +0200 Subject: [PATCH 03/13] Clean up --- rewatch/src/build/packages.rs | 1 - .../testrepo/packages/package-name-mismatch/rescript.json | 7 +------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index d96c4947f9..92617bffae 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -426,7 +426,6 @@ fn make_package(config: config::Config, package_path: &Path, is_pinned_dep: bool } }; - // let package_name = read_package_name(package_path).expect("Could not read package name"); Package { name: config.name.clone(), config: config.to_owned(), diff --git a/rewatch/testrepo/packages/package-name-mismatch/rescript.json b/rewatch/testrepo/packages/package-name-mismatch/rescript.json index 482d9a5345..a3ed3b60a5 100644 --- a/rewatch/testrepo/packages/package-name-mismatch/rescript.json +++ b/rewatch/testrepo/packages/package-name-mismatch/rescript.json @@ -3,10 +3,5 @@ "sources": { "dir": "src", "subdirs": true - }, - "package-specs": { - "module": "es6", - "in-source": true - }, - "suffix": ".bs.js" + } } From d12f37c8be620dfc2687e1d0a9ab4085b73e0041 Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 10 Jul 2025 15:10:03 +0200 Subject: [PATCH 04/13] Test clean of nonexisting dev files --- rewatch/testrepo/bsconfig.json | 4 ++-- rewatch/testrepo/package.json | 3 ++- .../package.json | 2 +- .../testrepo/packages/nonexisting-dev-files/rescript.json | 8 ++++++++ .../testrepo/packages/package-name-mismatch/rescript.json | 7 ------- .../packages/package-name-mismatch/src/NameMismatch.res | 1 - rewatch/testrepo/yarn.lock | 6 ++++++ 7 files changed, 19 insertions(+), 12 deletions(-) rename rewatch/testrepo/packages/{package-name-mismatch => nonexisting-dev-files}/package.json (68%) create mode 100644 rewatch/testrepo/packages/nonexisting-dev-files/rescript.json delete mode 100644 rewatch/testrepo/packages/package-name-mismatch/rescript.json delete mode 100644 rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res diff --git a/rewatch/testrepo/bsconfig.json b/rewatch/testrepo/bsconfig.json index 99af932034..831ed7314d 100644 --- a/rewatch/testrepo/bsconfig.json +++ b/rewatch/testrepo/bsconfig.json @@ -22,7 +22,7 @@ "@testrepo/namespace-casing", "@testrepo/with-dev-deps", "@testrepo/compiled-by-legacy", - "@testrepo/package-name-mismatch" + "@testrepo/nonexisting-dev-files" ], "bs-dependencies": [ "@testrepo/main", @@ -32,7 +32,7 @@ "@testrepo/namespace-casing", "@testrepo/with-dev-deps", "@testrepo/compiled-by-legacy", - "@testrepo/package-name-mismatch" + "@testrepo/nonexisting-dev-files" ], "reason": { "react-jsx": 3 diff --git a/rewatch/testrepo/package.json b/rewatch/testrepo/package.json index 638c31f638..a170d39c59 100644 --- a/rewatch/testrepo/package.json +++ b/rewatch/testrepo/package.json @@ -9,7 +9,8 @@ "packages/new-namespace", "packages/namespace-casing", "packages/with-dev-deps", - "packages/compiled-by-legacy" + "packages/compiled-by-legacy", + "packages/nonexisting-dev-files" ] }, "dependencies": { diff --git a/rewatch/testrepo/packages/package-name-mismatch/package.json b/rewatch/testrepo/packages/nonexisting-dev-files/package.json similarity index 68% rename from rewatch/testrepo/packages/package-name-mismatch/package.json rename to rewatch/testrepo/packages/nonexisting-dev-files/package.json index e586de4b8e..7af67a1eea 100644 --- a/rewatch/testrepo/packages/package-name-mismatch/package.json +++ b/rewatch/testrepo/packages/nonexisting-dev-files/package.json @@ -1,5 +1,5 @@ { - "name": "xyz", + "name": "@testrepo/nonexisting-dev-files", "version": "0.0.1", "keywords": [ "rescript" diff --git a/rewatch/testrepo/packages/nonexisting-dev-files/rescript.json b/rewatch/testrepo/packages/nonexisting-dev-files/rescript.json new file mode 100644 index 0000000000..7c5cf72052 --- /dev/null +++ b/rewatch/testrepo/packages/nonexisting-dev-files/rescript.json @@ -0,0 +1,8 @@ +{ + "name": "@testrepo/nonexisting-dev-files", + "sources": { + "dir": "dev", + "subdirs": true, + "dev": true + } +} diff --git a/rewatch/testrepo/packages/package-name-mismatch/rescript.json b/rewatch/testrepo/packages/package-name-mismatch/rescript.json deleted file mode 100644 index a3ed3b60a5..0000000000 --- a/rewatch/testrepo/packages/package-name-mismatch/rescript.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "@testrepo/package-name-mismatch", - "sources": { - "dir": "src", - "subdirs": true - } -} diff --git a/rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res b/rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res deleted file mode 100644 index 91c2f698d3..0000000000 --- a/rewatch/testrepo/packages/package-name-mismatch/src/NameMismatch.res +++ /dev/null @@ -1 +0,0 @@ -Console.log("hi") \ No newline at end of file diff --git a/rewatch/testrepo/yarn.lock b/rewatch/testrepo/yarn.lock index 5c323e6f29..fa0f31c40a 100644 --- a/rewatch/testrepo/yarn.lock +++ b/rewatch/testrepo/yarn.lock @@ -81,6 +81,12 @@ __metadata: languageName: unknown linkType: soft +"@testrepo/nonexisting-dev-files@workspace:packages/nonexisting-dev-files": + version: 0.0.0-use.local + resolution: "@testrepo/nonexisting-dev-files@workspace:packages/nonexisting-dev-files" + languageName: unknown + linkType: soft + "@testrepo/with-dev-deps@workspace:packages/with-dev-deps": version: 0.0.0-use.local resolution: "@testrepo/with-dev-deps@workspace:packages/with-dev-deps" From 76199c023e957a78f85813521b926e503d27f4b7 Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 10 Jul 2025 15:10:18 +0200 Subject: [PATCH 05/13] Revert usage of rescript json name --- rewatch/src/build/packages.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index 92617bffae..66c9a998b4 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -426,8 +426,9 @@ fn make_package(config: config::Config, package_path: &Path, is_pinned_dep: bool } }; + let package_name = read_package_name(package_path).expect("Could not read package name"); Package { - name: config.name.clone(), + name: package_name, config: config.to_owned(), source_folders, source_files: None, From 2a729f4289c6c3551f48b7fdaa59c1f86d19c4bb Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 10 Jul 2025 15:14:18 +0200 Subject: [PATCH 06/13] type dev --- rewatch/testrepo/packages/nonexisting-dev-files/rescript.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rewatch/testrepo/packages/nonexisting-dev-files/rescript.json b/rewatch/testrepo/packages/nonexisting-dev-files/rescript.json index 7c5cf72052..7eb6700ad8 100644 --- a/rewatch/testrepo/packages/nonexisting-dev-files/rescript.json +++ b/rewatch/testrepo/packages/nonexisting-dev-files/rescript.json @@ -3,6 +3,6 @@ "sources": { "dir": "dev", "subdirs": true, - "dev": true + "type": "dev" } } From a9248d63b36ce76cf8ab8100aaa5a1f1b084f646 Mon Sep 17 00:00:00 2001 From: nojaf Date: Fri, 11 Jul 2025 09:48:24 +0200 Subject: [PATCH 07/13] Add changelog entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de6f499274..d1f96389ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ - Add experimental command to `rescript-tools` for formatting all ReScript code blocks in markdown. Either in a markdown file directly, or inside of docstrings in ReScript code. https://github.com/rescript-lang/rescript/pull/7598 +#### :bug: Bug fix + +- Don't panic when dev files are not present during clean. https://github.com/rescript-lang/rescript/pull/7622 + # 12.0.0-alpha.15 #### :boom: Breaking Change From 5ade21bc61393375ecbc296632f0d40e642d9b28 Mon Sep 17 00:00:00 2001 From: nojaf Date: Mon, 14 Jul 2025 13:25:27 +0200 Subject: [PATCH 08/13] Don't read folder is dev source does not exists during clean. --- rewatch/src/build/packages.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index 6cbf04a06d..5bee257f39 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -515,22 +515,18 @@ pub fn get_source_files( }; let path_dir = Path::new(&source.dir); - let is_clean = match dev_deps { - DevDeps::Clean => true, - _ => false, - }; match (dev_deps, type_) { (DevDeps::DontBuild, Some(type_)) if type_ == "dev" => (), + (DevDeps::Clean, Some(type_)) if type_ == "dev" && !package_dir.join(path_dir).exists() => (), _ => match read_folders(filter, package_dir, path_dir, recurse) { Ok(files) => map.extend(files), - Err(_e) if !is_clean => log::error!( + Err(_e) => log::error!( "Could not read folder: {:?}. Specified in dependency: {}, located {:?}...", path_dir.to_path_buf().into_os_string(), package_name, package_dir ), - Err(_) => {} }, }; From 3ec4278303ff6d9dcd92beb1d76fff11486e531a Mon Sep 17 00:00:00 2001 From: nojaf Date: Mon, 14 Jul 2025 13:42:03 +0200 Subject: [PATCH 09/13] Clean up changelog --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d637022554..1736d00786 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,6 @@ - Remove obsolete option `-bs-unsafe-empty-array`. https://github.com/rescript-lang/rescript/pull/7635 - Clean up `config.ml`. https://github.com/rescript-lang/rescript/pull/7636 - Rewatch: simplify getting bsc path. https://github.com/rescript-lang/rescript/pull/7634 -- Remove uncurried handling from rewatch. https://github.com/rescript-lang/rescript/pull/7625 #### :rocket: New Feature @@ -46,6 +45,10 @@ - Add a warning if the name in package.json does not match the name in rescript.json. https://github.com/rescript-lang/rescript/pull/7604 +#### :house: Internal + +- Remove uncurried handling from rewatch. https://github.com/rescript-lang/rescript/pull/7625 + # 12.0.0-alpha.15 #### :boom: Breaking Change From cf1b90cc3da5a73e92f9c637e0045d936217b983 Mon Sep 17 00:00:00 2001 From: nojaf Date: Tue, 15 Jul 2025 08:48:28 +0200 Subject: [PATCH 10/13] Revert changes --- rewatch/src/build.rs | 12 ++++-------- rewatch/src/build/clean.rs | 3 +-- rewatch/src/build/packages.rs | 30 +++++++++++++++--------------- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/rewatch/src/build.rs b/rewatch/src/build.rs index 8526f91611..4545e3f0f3 100644 --- a/rewatch/src/build.rs +++ b/rewatch/src/build.rs @@ -8,10 +8,7 @@ pub mod packages; pub mod parse; pub mod read_compile_state; -use self::compile::compiler_args; -use self::parse::parser_args; use crate::build::compile::{mark_modules_with_deleted_deps_dirty, mark_modules_with_expired_deps_dirty}; -use crate::build::packages::DevDeps; use crate::helpers::emojis::*; use crate::helpers::{self, get_workspace_root}; use crate::sourcedirs; @@ -29,6 +26,9 @@ use std::path::{Path, PathBuf}; use std::process::Stdio; use std::time::{Duration, Instant}; +use self::compile::compiler_args; +use self::parse::parser_args; + fn is_dirty(module: &Module) -> bool { match module.source_type { SourceType::SourceFile(SourceFile { @@ -133,11 +133,7 @@ pub fn initialize_build( &project_root, &workspace_root, show_progress, - if build_dev_deps { - DevDeps::Build - } else { - DevDeps::DontBuild - }, + build_dev_deps, )?; let timing_package_tree_elapsed = timing_package_tree.elapsed(); diff --git a/rewatch/src/build/clean.rs b/rewatch/src/build/clean.rs index 1d1512788c..da1543b2f9 100644 --- a/rewatch/src/build/clean.rs +++ b/rewatch/src/build/clean.rs @@ -1,6 +1,5 @@ use super::build_types::*; use super::packages; -use crate::build::packages::DevDeps; use crate::helpers; use crate::helpers::emojis::*; use ahash::AHashSet; @@ -342,7 +341,7 @@ pub fn clean(path: &Path, show_progress: bool, snapshot_output: bool) -> Result< show_progress, // Build the package tree with dev dependencies. // They should always be cleaned if they are there. - DevDeps::Clean, + true, )?; let root_config_name = packages::read_package_name(&project_root)?; let bsc_path = helpers::get_bsc(); diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index 42d726406a..c5bc613f76 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -501,7 +501,7 @@ pub fn get_source_files( package_dir: &Path, filter: &Option, source: &config::PackageSource, - dev_deps: DevDeps, + build_dev_deps: bool, ) -> AHashMap { let mut map: AHashMap = AHashMap::new(); @@ -515,9 +515,8 @@ pub fn get_source_files( }; let path_dir = Path::new(&source.dir); - match (dev_deps, type_) { - (DevDeps::DontBuild, Some(type_)) if type_ == "dev" => (), - (DevDeps::Clean, Some(type_)) if type_ == "dev" && !package_dir.join(path_dir).exists() => (), + match (build_dev_deps, type_) { + (false, Some(type_)) if type_ == "dev" => (), _ => match read_folders(filter, package_dir, path_dir, recurse) { Ok(files) => map.extend(files), @@ -538,14 +537,22 @@ pub fn get_source_files( fn extend_with_children( filter: &Option, mut build: AHashMap, - dev_deps: DevDeps, + build_dev_deps: bool, ) -> AHashMap { for (_key, package) in build.iter_mut() { let mut map: AHashMap = AHashMap::new(); package .source_folders .par_iter() - .map(|source| get_source_files(&package.name, Path::new(&package.path), filter, source, dev_deps)) + .map(|source| { + get_source_files( + &package.name, + Path::new(&package.path), + filter, + source, + build_dev_deps, + ) + }) .collect::>>() .into_iter() .for_each(|source| map.extend(source)); @@ -575,13 +582,6 @@ fn extend_with_children( build } -#[derive(Clone, Copy)] -pub enum DevDeps { - Build, - DontBuild, - Clean, -} - /// Make turns a folder, that should contain a config, into a tree of Packages. /// It does so in two steps: /// 1. Get all the packages parsed, and take all the source folders from the config @@ -594,13 +594,13 @@ pub fn make( root_folder: &Path, workspace_root: &Option, show_progress: bool, - dev_deps: DevDeps, + build_dev_deps: bool, ) -> Result> { let map = read_packages(root_folder, workspace_root, show_progress)?; /* Once we have the deduplicated packages, we can add the source files for each - to minimize * the IO */ - let result = extend_with_children(filter, map, dev_deps); + let result = extend_with_children(filter, map, build_dev_deps); Ok(result) } From 66e25c9dc290b37d4cf326f2f8e4772a7ac7917a Mon Sep 17 00:00:00 2001 From: nojaf Date: Tue, 15 Jul 2025 08:52:03 +0200 Subject: [PATCH 11/13] Revert cli changes --- rewatch/src/build/clean.rs | 6 ++---- rewatch/src/cli.rs | 3 +++ rewatch/src/main.rs | 8 +++++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/rewatch/src/build/clean.rs b/rewatch/src/build/clean.rs index da1543b2f9..4cd52a4759 100644 --- a/rewatch/src/build/clean.rs +++ b/rewatch/src/build/clean.rs @@ -331,7 +331,7 @@ pub fn cleanup_after_build(build_state: &BuildState) { }); } -pub fn clean(path: &Path, show_progress: bool, snapshot_output: bool) -> Result<()> { +pub fn clean(path: &Path, show_progress: bool, snapshot_output: bool, build_dev_deps: bool) -> Result<()> { let project_root = helpers::get_abs_path(path); let workspace_root = helpers::get_workspace_root(&project_root); let packages = packages::make( @@ -339,9 +339,7 @@ pub fn clean(path: &Path, show_progress: bool, snapshot_output: bool) -> Result< &project_root, &workspace_root, show_progress, - // Build the package tree with dev dependencies. - // They should always be cleaned if they are there. - true, + build_dev_deps, )?; let root_config_name = packages::read_package_name(&project_root)?; let bsc_path = helpers::get_bsc(); diff --git a/rewatch/src/cli.rs b/rewatch/src/cli.rs index 6053d8cca2..5f593009df 100644 --- a/rewatch/src/cli.rs +++ b/rewatch/src/cli.rs @@ -143,6 +143,9 @@ pub enum Command { #[command(flatten)] snapshot_output: SnapshotOutputArg, + + #[command(flatten)] + dev: DevArg, }, /// Alias to `legacy format`. #[command(disable_help_flag = true)] diff --git a/rewatch/src/main.rs b/rewatch/src/main.rs index fb3f6c3516..a81c3e1bb6 100644 --- a/rewatch/src/main.rs +++ b/rewatch/src/main.rs @@ -79,10 +79,16 @@ fn main() -> Result<()> { cli::Command::Clean { folder, snapshot_output, + dev, } => { let _lock = get_lock(&folder); - build::clean::clean(Path::new(&folder as &str), show_progress, *snapshot_output) + build::clean::clean( + Path::new(&folder as &str), + show_progress, + *snapshot_output, + dev.dev, + ) } cli::Command::Legacy { legacy_args } => { let code = build::pass_through_legacy(legacy_args); From 8f034855e929ae0679c4947ee9d34f8a41a84a73 Mon Sep 17 00:00:00 2001 From: nojaf Date: Tue, 15 Jul 2025 08:52:53 +0200 Subject: [PATCH 12/13] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1736d00786..b24b5783f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,7 +32,7 @@ #### :bug: Bug fix - Fix `typeof` parens on functions. https://github.com/rescript-lang/rescript/pull/7643 -- Don't panic when dev files are not present during clean. https://github.com/rescript-lang/rescript/pull/7622 +- Add --dev flag to clean command. https://github.com/rescript-lang/rescript/pull/7622 # 12.0.0-beta.1 From 272d9d4a8594edfbde0073349058fb51f3393fef Mon Sep 17 00:00:00 2001 From: nojaf Date: Tue, 15 Jul 2025 09:08:21 +0200 Subject: [PATCH 13/13] Add --dev in tests --- rewatch/tests/compile.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rewatch/tests/compile.sh b/rewatch/tests/compile.sh index 334993cfc5..15f1bf09c3 100755 --- a/rewatch/tests/compile.sh +++ b/rewatch/tests/compile.sh @@ -82,7 +82,7 @@ rewatch build --snapshot-output &> ../tests/snapshots/dependency-cycle.txt git checkout -- packages/new-namespace/src/NS_alias.res # it should compile dev dependencies with the --dev flag -rewatch clean &> /dev/null +rewatch clean --dev &> /dev/null rewatch build --dev &> /dev/null; if [ $? -ne 0 ]; then @@ -100,7 +100,7 @@ else exit 1 fi -error_output=$(rewatch clean 2>&1 >/dev/null) +error_output=$(rewatch clean --dev 2>&1 >/dev/null) file_count=$(find ./packages/with-dev-deps -name *.mjs | wc -l) if [ "$file_count" -eq 0 ]; then