diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/tools/src/main.rs | 74 |
1 files changed, 24 insertions, 50 deletions
diff --git a/crates/tools/src/main.rs b/crates/tools/src/main.rs index 6583b700c..0c3339685 100644 --- a/crates/tools/src/main.rs +++ b/crates/tools/src/main.rs | |||
@@ -5,6 +5,7 @@ use tools::{ | |||
5 | generate, gen_tests, install_format_hook, run, run_with_output, run_rustfmt, | 5 | generate, gen_tests, install_format_hook, run, run_with_output, run_rustfmt, |
6 | Overwrite, Result, run_fuzzer, | 6 | Overwrite, Result, run_fuzzer, |
7 | }; | 7 | }; |
8 | use std::{path::{PathBuf}, env}; | ||
8 | 9 | ||
9 | fn main() -> Result<()> { | 10 | fn main() -> Result<()> { |
10 | let matches = App::new("tasks") | 11 | let matches = App::new("tasks") |
@@ -18,7 +19,9 @@ fn main() -> Result<()> { | |||
18 | .get_matches(); | 19 | .get_matches(); |
19 | match matches.subcommand_name().expect("Subcommand must be specified") { | 20 | match matches.subcommand_name().expect("Subcommand must be specified") { |
20 | "install-code" => { | 21 | "install-code" => { |
21 | setup_environment()?; | 22 | if cfg!(target_os = "macos") { |
23 | fix_path_for_mac()?; | ||
24 | } | ||
22 | install_code_extension()?; | 25 | install_code_extension()?; |
23 | } | 26 | } |
24 | "gen-tests" => gen_tests(Overwrite)?, | 27 | "gen-tests" => gen_tests(Overwrite)?, |
@@ -31,14 +34,6 @@ fn main() -> Result<()> { | |||
31 | Ok(()) | 34 | Ok(()) |
32 | } | 35 | } |
33 | 36 | ||
34 | fn setup_environment() -> Result<()> { | ||
35 | if cfg!(target_os = "macos") { | ||
36 | vscode_path_helpers::append_vscode_path()?; | ||
37 | } | ||
38 | |||
39 | Ok(()) | ||
40 | } | ||
41 | |||
42 | fn install_code_extension() -> Result<()> { | 37 | fn install_code_extension() -> Result<()> { |
43 | run("cargo install --path crates/ra_lsp_server --force", ".")?; | 38 | run("cargo install --path crates/ra_lsp_server --force", ".")?; |
44 | if cfg!(windows) { | 39 | if cfg!(windows) { |
@@ -75,28 +70,8 @@ fn verify_installed_extensions() -> Result<()> { | |||
75 | Ok(()) | 70 | Ok(()) |
76 | } | 71 | } |
77 | 72 | ||
78 | #[cfg(target_os = "macos")] | 73 | fn fix_path_for_mac() -> Result<()> { |
79 | mod vscode_path_helpers { | 74 | let mut vscode_path: Vec<PathBuf> = { |
80 | use super::Result; | ||
81 | use std::{path::{PathBuf}, env}; | ||
82 | use failure::bail; | ||
83 | |||
84 | pub(crate) fn append_vscode_path() -> Result<()> { | ||
85 | let vars = match env::var_os("PATH") { | ||
86 | Some(path) => path, | ||
87 | None => bail!("Could not get PATH variable from env."), | ||
88 | }; | ||
89 | |||
90 | let vscode_path = get_vscode_path()?; | ||
91 | let mut paths = env::split_paths(&vars).collect::<Vec<_>>(); | ||
92 | paths.push(vscode_path); | ||
93 | let new_paths = env::join_paths(paths)?; | ||
94 | env::set_var("PATH", &new_paths); | ||
95 | |||
96 | Ok(()) | ||
97 | } | ||
98 | |||
99 | fn get_vscode_path() -> Result<PathBuf> { | ||
100 | const COMMON_APP_PATH: &str = | 75 | const COMMON_APP_PATH: &str = |
101 | r"/Applications/Visual Studio Code.app/Contents/Resources/app/bin"; | 76 | r"/Applications/Visual Studio Code.app/Contents/Resources/app/bin"; |
102 | const ROOT_DIR: &str = ""; | 77 | const ROOT_DIR: &str = ""; |
@@ -105,26 +80,25 @@ mod vscode_path_helpers { | |||
105 | Err(e) => bail!("Failed getting HOME from environment with error: {}.", e), | 80 | Err(e) => bail!("Failed getting HOME from environment with error: {}.", e), |
106 | }; | 81 | }; |
107 | 82 | ||
108 | for dir in [ROOT_DIR, &home_dir].iter() { | 83 | [ROOT_DIR, &home_dir] |
109 | let path = String::from(dir.clone()) + COMMON_APP_PATH; | 84 | .iter() |
110 | let path = PathBuf::from(path); | 85 | .map(|dir| String::from(dir.clone()) + COMMON_APP_PATH) |
111 | if path.exists() { | 86 | .map(PathBuf::from) |
112 | return Ok(path); | 87 | .filter(|path| path.exists()) |
113 | } | 88 | .collect() |
114 | } | 89 | }; |
115 | 90 | ||
116 | bail!( | 91 | if !vscode_path.is_empty() { |
117 | "Could not find Visual Studio Code application. Please make sure you \ | 92 | let vars = match env::var_os("PATH") { |
118 | have Visual Studio Code installed and try again or install extension \ | 93 | Some(path) => path, |
119 | manually." | 94 | None => bail!("Could not get PATH variable from env."), |
120 | ) | 95 | }; |
121 | } | ||
122 | } | ||
123 | 96 | ||
124 | #[cfg(not(target_os = "macos"))] | 97 | let mut paths = env::split_paths(&vars).collect::<Vec<_>>(); |
125 | mod vscode_path_helpers { | 98 | paths.append(&mut vscode_path); |
126 | use super::Result; | 99 | let new_paths = env::join_paths(paths)?; |
127 | pub(crate) fn append_vscode_path() -> Result<()> { | 100 | env::set_var("PATH", &new_paths); |
128 | Ok(()) | ||
129 | } | 101 | } |
102 | |||
103 | Ok(()) | ||
130 | } | 104 | } |