From 52dcf3243e979bed92413108864a62bad7b83f15 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 14 Feb 2020 15:06:10 +0100 Subject: [PATCH 1/2] Minor --- xtask/src/install.rs | 50 +++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/xtask/src/install.rs b/xtask/src/install.rs index 99e1eddb162f..a279598b9744 100644 --- a/xtask/src/install.rs +++ b/xtask/src/install.rs @@ -2,7 +2,7 @@ use std::{env, path::PathBuf, str}; -use anyhow::{Context, Result}; +use anyhow::{bail, format_err, Context, Result}; use crate::cmd::{run, run_with_output, Cmd}; @@ -55,7 +55,7 @@ fn fix_path_for_mac() -> Result<()> { const ROOT_DIR: &str = ""; let home_dir = match env::var("HOME") { Ok(home) => home, - Err(e) => anyhow::bail!("Failed getting HOME from environment with error: {}.", e), + Err(e) => bail!("Failed getting HOME from environment with error: {}.", e), }; [ROOT_DIR, &home_dir] @@ -69,7 +69,7 @@ fn fix_path_for_mac() -> Result<()> { if !vscode_path.is_empty() { let vars = match env::var_os("PATH") { Some(path) => path, - None => anyhow::bail!("Could not get PATH variable from env."), + None => bail!("Could not get PATH variable from env."), }; let mut paths = env::split_paths(&vars).collect::>(); @@ -90,7 +90,7 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { .run(); if npm_version.is_err() { - eprintln!("\nERROR: `npm --version` failed, `npm` is required to build the VS Code plugin") + bail!("`npm --version` failed, `npm` is required to build the VS Code plugin") } Cmd { unix: r"npm install", windows: r"cmd.exe /c npm install", work_dir: "./editors/code" } @@ -102,20 +102,20 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { } .run()?; - let code_binary = ["code", "code-insiders", "codium", "code-oss"].iter().find(|bin| { - Cmd { - unix: &format!("{} --version", bin), - windows: &format!("cmd.exe /c {}.cmd --version", bin), - work_dir: "./editors/code", - } - .run() - .is_ok() - }); - - let code_binary = match code_binary { - Some(it) => it, - None => anyhow::bail!("Can't execute `code --version`. Perhaps it is not in $PATH?"), - }; + let code_binary = ["code", "code-insiders", "codium", "code-oss"] + .iter() + .find(|bin| { + Cmd { + unix: &format!("{} --version", bin), + windows: &format!("cmd.exe /c {}.cmd --version", bin), + work_dir: "./editors/code", + } + .run() + .is_ok() + }) + .ok_or_else(|| { + format_err!("Can't execute `code --version`. Perhaps it is not in $PATH?") + })?; Cmd { unix: &format!(r"{} --install-extension ./rust-analyzer-0.1.0.vsix --force", code_binary), @@ -135,24 +135,12 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { .run_with_output()?; if !installed_extensions.contains("rust-analyzer") { - anyhow::bail!( + bail!( "Could not install the Visual Studio Code extension. \ Please make sure you have at least NodeJS 10.x together with the latest version of VS Code installed and try again." ); } - if installed_extensions.contains("ra-lsp") { - Cmd { - unix: &format!(r"{} --uninstall-extension matklad.ra-lsp", code_binary), - windows: &format!( - r"cmd.exe /c {}.cmd --uninstall-extension matklad.ra-lsp", - code_binary - ), - work_dir: "./editors/code", - } - .run()?; - } - Ok(()) } From bd3a41cc33a25491c19468aaf24dbba4b467edaf Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 14 Feb 2020 15:29:19 +0100 Subject: [PATCH 2/2] Prevent auto-update of dev extension --- editors/code/package-lock.json | 2 +- editors/code/package.json | 3 ++- xtask/src/install.rs | 25 +++++++++++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 5c056463e080..a7a1829dd5cf 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json @@ -1,6 +1,6 @@ { "name": "rust-analyzer", - "version": "0.1.0", + "version": "0.2.0-dev", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/editors/code/package.json b/editors/code/package.json index f687eb8d4588..2b8e5aec5e3b 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -5,7 +5,8 @@ "preview": true, "private": true, "icon": "icon.png", - "version": "0.1.0", + "//": "The real version is in release.yaml, this one just needs to be bigger", + "version": "0.2.0-dev", "publisher": "matklad", "repository": { "url": "https://github.com/rust-analyzer/rust-analyzer.git", diff --git a/xtask/src/install.rs b/xtask/src/install.rs index a279598b9744..9bddc8d7f923 100644 --- a/xtask/src/install.rs +++ b/xtask/src/install.rs @@ -1,8 +1,9 @@ //! Installs rust-analyzer language server and/or editor plugin. -use std::{env, path::PathBuf, str}; +use std::{env, fs, path::PathBuf, str}; use anyhow::{bail, format_err, Context, Result}; +use walkdir::WalkDir; use crate::cmd::{run, run_with_output, Cmd}; @@ -95,6 +96,20 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { Cmd { unix: r"npm install", windows: r"cmd.exe /c npm install", work_dir: "./editors/code" } .run()?; + + let vsixes = || { + WalkDir::new("./editors/code") + .max_depth(1) + .into_iter() + .map(|it| it.unwrap()) + .map(|it| it.path().to_owned()) + .filter(|it| it.file_name().unwrap_or_default().to_string_lossy().ends_with(".vsix")) + }; + + for path in vsixes() { + fs::remove_file(path)? + } + Cmd { unix: r"npm run package --scripts-prepend-node-path", windows: r"cmd.exe /c npm run package", @@ -102,6 +117,8 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { } .run()?; + let extension = vsixes().next().unwrap().file_name().unwrap().to_string_lossy().to_string(); + let code_binary = ["code", "code-insiders", "codium", "code-oss"] .iter() .find(|bin| { @@ -118,10 +135,10 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { })?; Cmd { - unix: &format!(r"{} --install-extension ./rust-analyzer-0.1.0.vsix --force", code_binary), + unix: &format!(r"{} --install-extension ./{} --force", code_binary, extension), windows: &format!( - r"cmd.exe /c {}.cmd --install-extension ./rust-analyzer-0.1.0.vsix --force", - code_binary + r"cmd.exe /c {}.cmd --install-extension ./{} --force", + code_binary, extension ), work_dir: "./editors/code", }