Skip to content

Commit 2c949e7

Browse files
committed
Code that is easier to maintain
1 parent 51f03fa commit 2c949e7

File tree

11 files changed

+775
-38
lines changed

11 files changed

+775
-38
lines changed

src/commands/add.rs

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,54 @@ pub struct AddArgs {
2626
}
2727

2828
impl CommandHandler for AddArgs {
29-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
29+
fn get_runnable_cmd(
30+
&self,
31+
package_manager: &str,
32+
) -> Result<String, Box<dyn std::error::Error>> {
3033
let AddArgs {
3134
package,
3235
save,
3336
save_dev,
3437
save_optional,
3538
global,
3639
} = self;
37-
40+
let cmd;
3841
if *save {
39-
format!("{} add --save {}", package_manager, package)
42+
cmd = match package_manager {
43+
"npm" => format!("npm add --save {}", package),
44+
"yarn" => format!("yarn add --save {}", package),
45+
"pnpm" => format!("pnpm add --save {}", package),
46+
_ => return Err("package_manager is invalid".into()),
47+
};
4048
} else if *save_dev {
41-
format!("{} add --save-dev {}", package_manager, package)
49+
cmd = match package_manager {
50+
"npm" => format!("npm add --save-dev {}", package),
51+
"yarn" => format!("yarn add --save-dev {}", package),
52+
"pnpm" => format!("pnpm add --save-dev {}", package),
53+
_ => return Err("package_manager is invalid".into()),
54+
};
4255
} else if *save_optional {
43-
format!("{} add --save-optional {}", package_manager, package)
56+
cmd = match package_manager {
57+
"npm" => format!("npm add --save-optional {}", package),
58+
"yarn" => format!("yarn add --save-optional {}", package),
59+
"pnpm" => format!("pnpm add --save-optional {}", package),
60+
_ => return Err("package_manager is invalid".into()),
61+
};
4462
} else if *global {
45-
match package.as_str() {
63+
cmd = match package_manager {
64+
"npm" => format!("npm add --global {}", package),
4665
"yarn" => format!("yarn global add {}", package),
47-
_ => format!("{} add --global {}", package_manager, package),
48-
}
66+
"pnpm" => format!("pnpm add --global {}", package),
67+
_ => return Err("package_manager is invalid".into()),
68+
};
4969
} else {
50-
format!("{} add {}", package_manager, package)
70+
cmd = match package_manager {
71+
"npm" => format!("npm add {}", package),
72+
"yarn" => format!("yarn add {}", package),
73+
"pnpm" => format!("pnpm add {}", package),
74+
_ => return Err("package_manager is invalid".into()),
75+
};
5176
}
77+
Ok(cmd)
5278
}
5379
}

src/commands/clean_install.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,16 @@ use super::command_handler::CommandHandler;
66
pub struct CleanInstallArgs {}
77

88
impl CommandHandler for CleanInstallArgs {
9-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
10-
match package_manager.as_str() {
9+
fn get_runnable_cmd(
10+
&self,
11+
package_manager: &str,
12+
) -> Result<String, Box<dyn std::error::Error>> {
13+
let cmd = match package_manager {
1114
"npm" => format!("npm ci"),
12-
_ => format!("{} install --frozen-lockfile", package_manager),
13-
}
15+
"yarn" => format!("yarn install --frozen-lockfile"),
16+
"pnpm" => format!("pnpm install --frozen-lockfile"),
17+
_ => return Err("package_manager is invalid".into()),
18+
};
19+
Ok(cmd)
1420
}
1521
}

src/commands/command_handler.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::error::Error;
2+
13
pub trait CommandHandler {
2-
fn get_runnable_cmd(&self, package_manager: &String) -> String;
4+
fn get_runnable_cmd(&self, package_manager: &str) -> Result<String, Box<dyn Error>>;
35
}

src/commands/dlx.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,18 @@ pub struct DlxArgs {
1313
}
1414

1515
impl CommandHandler for DlxArgs {
16-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
16+
fn get_runnable_cmd(
17+
&self,
18+
package_manager: &str,
19+
) -> Result<String, Box<dyn std::error::Error>> {
1720
let DlxArgs { package, pass_on } = self;
18-
match package_manager.as_str() {
19-
"npm" => format!("npx {} {}", package, pass_on.join(" ")),
20-
_ => format!("{} dlx {} {}", package_manager, package, pass_on.join(" ")),
21-
}
21+
let pass_on_str = pass_on.join(" ");
22+
let cmd = match package_manager {
23+
"npm" => format!("npx {} {}", package, pass_on_str),
24+
"yarn" => format!("yarn dlx {} {}", package, pass_on_str),
25+
"pnpm" => format!("pnpm dlx {} {}", package, pass_on_str),
26+
_ => return Err("package_manager is invalid".into()),
27+
};
28+
Ok(cmd)
2229
}
2330
}

src/commands/install.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,16 @@ use super::command_handler::CommandHandler;
66
pub struct InstallArgs {}
77

88
impl CommandHandler for InstallArgs {
9-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
10-
format!("{} install", package_manager)
9+
fn get_runnable_cmd(
10+
&self,
11+
package_manager: &str,
12+
) -> Result<String, Box<dyn std::error::Error>> {
13+
let cmd = match package_manager {
14+
"npm" => format!("npm install"),
15+
"yarn" => format!("yarn install"),
16+
"pnpm" => format!("pnpm install"),
17+
_ => return Err("package_manager is invalid".into()),
18+
};
19+
Ok(cmd)
1120
}
1221
}

src/commands/run.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,18 @@ pub struct RunArgs {
1212
}
1313

1414
impl CommandHandler for RunArgs {
15-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
15+
fn get_runnable_cmd(
16+
&self,
17+
package_manager: &str,
18+
) -> Result<String, Box<dyn std::error::Error>> {
1619
let RunArgs { script, pass_on } = self;
17-
match package_manager.as_str() {
18-
"npm" => format!("npm run {} -- {}", script, pass_on.join(" ")),
19-
_ => format!("{} run {} {}", package_manager, script, pass_on.join(" ")),
20-
}
20+
let pass_on_str = pass_on.join(" ");
21+
let cmd = match package_manager {
22+
"npm" => format!("npm run {} -- {}", script, pass_on_str),
23+
"yarn" => format!("yarn run {} {}", script, pass_on_str),
24+
"pnpm" => format!("pnpm run {} {}", script, pass_on_str),
25+
_ => return Err("package_manager is invalid".into()),
26+
};
27+
Ok(cmd)
2128
}
2229
}

src/commands/set_cache.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ pub struct SetCacheArgs {
99
}
1010

1111
impl CommandHandler for SetCacheArgs {
12-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
12+
fn get_runnable_cmd(
13+
&self,
14+
package_manager: &str,
15+
) -> Result<String, Box<dyn std::error::Error>> {
1316
let SetCacheArgs { path } = self;
14-
match package_manager.as_str() {
17+
let cmd = match package_manager {
1518
"npm" => format!("npm config set cache {}", path),
1619
"yarn" => format!("yarn config set cache-folder {}", path),
1720
"pnpm" => format!("pnpm config set store-dir {}", path),
18-
_ => format!("npm config set cache {}", path),
19-
}
21+
_ => return Err("package_manager is invalid".into()),
22+
};
23+
Ok(cmd)
2024
}
2125
}

src/commands/un_install.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,27 @@ pub struct UnInstallArgs {
1414
}
1515

1616
impl CommandHandler for UnInstallArgs {
17-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
17+
fn get_runnable_cmd(
18+
&self,
19+
package_manager: &str,
20+
) -> Result<String, Box<dyn std::error::Error>> {
1821
let UnInstallArgs { package, global } = self;
22+
let cmd;
1923
if *global {
20-
match package_manager.as_str() {
24+
cmd = match package_manager {
2125
"npm" => format!("npm uninstall -g {}", package),
2226
"yarn" => format!("yarn global remove {}", package),
2327
"pnpm" => format!("pnpm remove -g {}", package),
24-
_ => format!("npm uninstall -g {}", package),
28+
_ => return Err("package_manager is invalid".into()),
2529
}
2630
} else {
27-
match package_manager.as_str() {
31+
cmd = match package_manager {
2832
"npm" => format!("npm uninstall {}", package),
29-
_ => format!("{} remove {}", package_manager, package),
33+
"yarn" => format!("yarn remove {}", package),
34+
"pnpm" => format!("pnpm remove {}", package),
35+
_ => return Err("package_manager is invalid".into()),
3036
}
3137
}
38+
Ok(cmd)
3239
}
3340
}

src/commands/upgrade.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use clap::Args;
2+
use std::error::Error;
23

34
use super::command_handler::CommandHandler;
45

@@ -10,7 +11,13 @@ pub struct UpgradeArgs {
1011
}
1112

1213
impl CommandHandler for UpgradeArgs {
13-
fn get_runnable_cmd(&self, package_manager: &String) -> String {
14-
format!("{} upgrade {}", package_manager, self.package)
14+
fn get_runnable_cmd(&self, package_manager: &str) -> Result<String, Box<dyn Error>> {
15+
let cmd = match package_manager {
16+
"pnpm" => format!("pnpm upgrade {}", self.package),
17+
"yarn" => format!("yarn upgrade {}", self.package),
18+
"npm" => format!("npm upgrade {}", self.package),
19+
_ => return Err("package_manager is invalid".into()),
20+
};
21+
Ok(cmd)
1522
}
1623
}

src/main.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ fn main() {
6565
Commands::Dlx(args) => args.get_runnable_cmd(package_manager),
6666
Commands::SetCache(args) => args.get_runnable_cmd(package_manager),
6767
};
68-
run_shell(shell)
68+
if let Ok(cmd) = shell {
69+
run_shell(cmd)
70+
}
6971
}
7072
}

0 commit comments

Comments
 (0)