1867: tweak installation process r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2019-09-18 11:24:53 +00:00 committed by GitHub
commit 9dd1dcf5ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 21 deletions

View File

@ -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

View File

@ -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)

View File

@ -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",
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();
if !code_in_path {
Err("Can't execute `code --version`. Perhaps it is not in $PATH?")?;
}
.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()?;