From 1e16ac031542b629d7997816592742dbf9f911f6 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 18 Sep 2019 14:24:20 +0300 Subject: tweak installation process --- README.md | 8 ++++++-- crates/ra_tools/src/lib.rs | 10 +++++----- crates/ra_tools/src/main.rs | 35 +++++++++++++++++++++-------------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 50918ee5e..e249c6486 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,10 @@ useful IDE experience and some people use it as a daily driver. To build rust-analyzer, you need: * latest stable rust for language server itself -* latest stable npm and VS Code for VS Code extension (`code` should be in path) +* latest stable npm and VS Code for VS Code extension -For setup for other editors, see [./docs/user](./docs/user). +To quickly install rust-analyzer with VS Code extension with standard setup +(`code` and `cargo` in `$PATH`, etc), use this: ``` # clone the repo @@ -37,6 +38,9 @@ $ cargo install-ra # alternatively, install only the server. Binary name is `ra_lsp_server`. $ cargo install-ra --server ``` + +For non-standard setup of VS Code and other editors, see [./docs/user](./docs/user). + ## Documentation If you want to **contribute** to rust-analyzer or just curious about how things work diff --git a/crates/ra_tools/src/lib.rs b/crates/ra_tools/src/lib.rs index d47660369..9ba23caaa 100644 --- a/crates/ra_tools/src/lib.rs +++ b/crates/ra_tools/src/lib.rs @@ -79,13 +79,13 @@ pub fn project_root() -> PathBuf { Path::new(&env!("CARGO_MANIFEST_DIR")).ancestors().nth(2).unwrap().to_path_buf() } -pub struct Cmd { - pub unix: &'static str, - pub windows: &'static str, - pub work_dir: &'static str, +pub struct Cmd<'a> { + pub unix: &'a str, + pub windows: &'a str, + pub work_dir: &'a str, } -impl Cmd { +impl Cmd<'_> { pub fn run(self) -> Result<()> { if cfg!(windows) { run(self.windows, self.work_dir) diff --git a/crates/ra_tools/src/main.rs b/crates/ra_tools/src/main.rs index f96f1875f..65d211b44 100644 --- a/crates/ra_tools/src/main.rs +++ b/crates/ra_tools/src/main.rs @@ -167,27 +167,34 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { } .run()?; - let code_in_path = Cmd { - unix: r"code --version", - windows: r"cmd.exe /c code.cmd --version", - work_dir: "./editors/code", - } - .run() - .is_ok(); - if !code_in_path { - Err("Can't execute `code --version`. Perhaps it is not in $PATH?")?; - } + let code_binary = ["code", "code-insiders"].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 => Err("Can't execute `code --version`. Perhaps it is not in $PATH?")?, + }; Cmd { - unix: r"code --install-extension ./ra-lsp-0.0.1.vsix --force", - windows: r"cmd.exe /c code.cmd --install-extension ./ra-lsp-0.0.1.vsix --force", + unix: &format!(r"{} --install-extension ./ra-lsp-0.0.1.vsix --force", code_binary), + windows: &format!( + r"cmd.exe /c {}.cmd --install-extension ./ra-lsp-0.0.1.vsix --force", + code_binary + ), work_dir: "./editors/code", } .run()?; let output = Cmd { - unix: r"code --list-extensions", - windows: r"cmd.exe /c code.cmd --list-extensions", + unix: &format!(r"{} --list-extensions", code_binary), + windows: &format!(r"cmd.exe /c {}.cmd --list-extensions", code_binary), work_dir: ".", } .run_with_output()?; -- cgit v1.2.3