Show default backlog when invoked with no arguments
change qxuktukotxwmuqmurxynknyyoyuxnyzm
commit 0db1f67fffdc64fc85a88b396c8c265c29456be6
author Alpha Chen <alpha@kejadlen.dev>
date
parent msmyprsk
diff --git a/src/bin/ranger/main.rs b/src/bin/ranger/main.rs
index 0a39733..e1744b2 100644
--- a/src/bin/ranger/main.rs
+++ b/src/bin/ranger/main.rs
@@ -16,7 +16,7 @@ struct Cli {
     db: Option<PathBuf>,
 
     #[command(subcommand)]
-    command: Commands,
+    command: Option<Commands>,
 }
 
 #[derive(Subcommand)]
@@ -62,15 +62,31 @@ async fn main() -> color_eyre::Result<()> {
     let pool = ranger::db::connect(&db_path).await?;
 
     match cli.command {
-        Commands::Backlog { command } => {
+        Some(Commands::Backlog { command }) => {
             commands::backlog::run(&pool, command, cli.json).await?;
         }
-        Commands::Task { command } => {
+        Some(Commands::Task { command }) => {
             commands::task::run(&pool, command, cli.json).await?;
         }
-        Commands::Comment { command } => {
+        Some(Commands::Comment { command }) => {
             commands::comment::run(&pool, command, cli.json).await?;
         }
+        None => {
+            // No subcommand: show the default backlog
+            let backlog_name = std::env::var("RANGER_DEFAULT_BACKLOG").ok();
+            match backlog_name {
+                Some(name) => {
+                    let show_cmd =
+                        commands::backlog::BacklogCommands::Show { name };
+                    commands::backlog::run(&pool, show_cmd, cli.json).await?;
+                }
+                None => {
+                    // No default backlog set — list all backlogs
+                    let list_cmd = commands::backlog::BacklogCommands::List;
+                    commands::backlog::run(&pool, list_cmd, cli.json).await?;
+                }
+            }
+        }
     }
 
     Ok(())
diff --git a/tests/cli.rs b/tests/cli.rs
index 37cc970..0c8eddd 100644
--- a/tests/cli.rs
+++ b/tests/cli.rs
@@ -250,4 +250,27 @@ fn full_workflow() {
         .unwrap();
     let tasks: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
     assert_eq!(tasks.as_array().unwrap().len(), 3);
+
+    // No-args with RANGER_DEFAULT_BACKLOG shows the default backlog
+    let output = ranger(db_path).output().unwrap();
+    assert!(output.status.success());
+    let stdout = String::from_utf8(output.stdout).unwrap();
+    assert!(stdout.contains("Ranger"));
+    // Should show task state sections
+    assert!(stdout.contains("[in_progress]") || stdout.contains("[queued]") || stdout.contains("[icebox]"));
+
+    // No-args with JSON flag
+    let output = ranger(db_path).args(["--json"]).output().unwrap();
+    assert!(output.status.success());
+    let detail: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
+    assert_eq!(detail["backlog"]["name"], "Ranger");
+
+    // No-args without RANGER_DEFAULT_BACKLOG lists all backlogs
+    let mut cmd = Command::from(cargo_bin_cmd!("ranger"));
+    cmd.env("RANGER_DB", db_path);
+    cmd.env_remove("RANGER_DEFAULT_BACKLOG");
+    let output = cmd.output().unwrap();
+    assert!(output.status.success());
+    let stdout = String::from_utf8(output.stdout).unwrap();
+    assert!(stdout.contains("Ranger"));
 }