diff --git a/src/config.rs b/src/config.rs index c02fa845..7e560b7b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -112,6 +112,7 @@ pub enum Step { Vagrant, Vcpkg, Vim, + VSCode, WindowsAppStore, Wsl, Yadm, diff --git a/src/main.rs b/src/main.rs index a16b41ac..7a79f868 100644 --- a/src/main.rs +++ b/src/main.rs @@ -277,6 +277,7 @@ fn run() -> Result<()> { target_os = "netbsd", target_os = "dragonfly" )))] + runner.execute(Step::VSCode, "vscode", || generic::run_vscode(run_type))?; runner.execute(Step::Atom, "apm", || generic::run_apm(run_type))?; runner.execute(Step::Rustup, "rustup", || generic::run_rustup(&base_dirs, run_type))?; runner.execute(Step::Dotnet, ".NET", || generic::run_dotnet_upgrade(&ctx))?; diff --git a/src/steps/generic.rs b/src/steps/generic.rs index 8e1d9e7f..b5f6080f 100644 --- a/src/steps/generic.rs +++ b/src/steps/generic.rs @@ -79,6 +79,23 @@ pub fn run_sheldon(ctx: &ExecutionContext) -> Result<()> { ctx.run_type().execute(&sheldon).args(&["lock", "--update"]).check_run() } +pub fn run_vscode(run_type: RunType) -> Result<()> { + let vscode = utils::require("code")?; + + print_separator("Visual Studio Code"); + + let plugins = run_type.execute(&vscode).args(&["--list-extensions"]).check_output()?; + + for plugin in plugins.lines() { + run_type + .execute(&vscode) + .args(&["--force", "--install-extension", plugin]) + .check_run()?; + } + + Ok(()) +} + #[cfg(not(any( target_os = "freebsd", target_os = "openbsd",