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
# 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
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)
}
.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()?;