Repository: denoland/deno
Pull request: feat: Rename --unstable-hmr to --watch-hmr

This commit stabilizes HMR functionality and renames
`--unstable-hmr` to `--watch-hmr`. The `--unstable-hmr`
flag is still working, but hidden from the help output.
It will be removed in Deno 2.

Once https://github.com/denoland/deno/pull/24958 lands
we should improve grouping of `--watch` and `--watch-hmr`
flags.

Changed files:
filename: cli/args/flags.rs
patch: @@ -3604,8 +3604,10 @@ fn seed_arg() -> Arg {
 
 fn hmr_arg(takes_files: bool) -> Arg {
   let arg = Arg::new("hmr")
-    .long("unstable-hmr")
-    .help("UNSTABLE: Watch for file changes and hot replace modules")
+    .long("watch-hmr")
+    // NOTE(bartlomieju): compatibility with Deno pre-1.46
+    .alias("unstable-hmr")
+    .help("Watch for file changes and hot replace modules")
     .conflicts_with("watch");
 
   if takes_files {
@@ -5249,6 +5251,31 @@ mod tests {
       }
     );
 
+    let r = flags_from_vec(svec![
+      "deno",
+      "run",
+      "--watch-hmr",
+      "--no-clear-screen",
+      "script.ts"
+    ]);
+    let flags = r.unwrap();
+    assert_eq!(
+      flags,
+      Flags {
+        subcommand: DenoSubcommand::Run(RunFlags {
+          script: "script.ts".to_string(),
+          watch: Some(WatchFlagsWithPaths {
+            hmr: true,
+            paths: vec![],
+            no_clear_screen: true,
+            exclude: vec![],
+          }),
+        }),
+        code_cache_enabled: true,
+        ..Flags::default()
+      }
+    );
+
     let r = flags_from_vec(svec![
       "deno",
       "run",
@@ -5277,7 +5304,7 @@ mod tests {
     let r = flags_from_vec(svec![
       "deno",
       "run",
-      "--unstable-hmr=foo.txt",
+      "--watch-hmr=foo.txt",
       "--no-clear-screen",
       "script.ts"
     ]);

filename: cli/tools/run/hmr.rs
patch: @@ -117,7 +117,7 @@ impl crate::worker::HmrRunner for HmrRunner {
 
           // If after filtering there are no paths it means it's either a file
           // we can't HMR or an external file that was passed explicitly to
-          // `--unstable-hmr=<file>` path.
+          // `--watch-hmr=<file>` path.
           if filtered_paths.is_empty() {
             let _ = self.watcher_communicator.force_restart();
             continue;

filename: tests/integration/watcher_tests.rs
patch: @@ -1675,7 +1675,7 @@ console.log("Listening...")
   let mut child = util::deno_cmd()
     .current_dir(t.path())
     .arg("run")
-    .arg("--unstable-hmr")
+    .arg("--watch-hmr")
     .arg("--allow-net")
     .arg("-L")
     .arg("debug")
@@ -1748,7 +1748,7 @@ export function foo() {
   let mut child = util::deno_cmd()
     .current_dir(t.path())
     .arg("run")
-    .arg("--unstable-hmr")
+    .arg("--watch-hmr")
     .arg("-L")
     .arg("debug")
     .arg(&file_to_watch)
@@ -1806,7 +1806,7 @@ export function foo() {
   let mut child = util::deno_cmd()
     .current_dir(t.path())
     .arg("run")
-    .arg("--unstable-hmr")
+    .arg("--watch-hmr")
     .arg("-L")
     .arg("debug")
     .arg(&file_to_watch)
@@ -1871,7 +1871,7 @@ export function foo() {
   let mut child = util::deno_cmd()
     .current_dir(t.path())
     .arg("run")
-    .arg("--unstable-hmr")
+    .arg("--watch-hmr")
     .arg("-L")
     .arg("debug")
     .arg(&file_to_watch)