]> git.lizzy.rs Git - rust.git/commitdiff
return a PathBuf instead of String
authorCraig Disselkoen <craigdissel@gmail.com>
Wed, 6 May 2020 19:39:11 +0000 (12:39 -0700)
committerCraig Disselkoen <craigdissel@gmail.com>
Wed, 6 May 2020 19:39:11 +0000 (12:39 -0700)
crates/ra_env/src/lib.rs
crates/ra_project_model/src/sysroot.rs

index 8d6aa926894e75b19b6b966066e9aa307b64f98a..a1c4239be01ebfade593cd8a5b2fe7ab64546089 100644 (file)
@@ -4,15 +4,15 @@
 
 use anyhow::{Error, Result};
 use std::env;
-use std::path::Path;
+use std::path::{Path, PathBuf};
 use std::process::Command;
 
-/// Return a `String` to use for the given executable.
+/// Return a `PathBuf` to use for the given executable.
 ///
 /// E.g., `get_path_for_executable("cargo")` may return just `cargo` if that
 /// gives a valid Cargo executable; or it may return a full path to a valid
 /// Cargo.
-pub fn get_path_for_executable(executable_name: impl AsRef<str>) -> Result<String> {
+pub fn get_path_for_executable(executable_name: impl AsRef<str>) -> Result<PathBuf> {
     // The current implementation checks three places for an executable to use:
     // 1) Appropriate environment variable (erroring if this is set but not a usable executable)
     //      example: for cargo, this checks $CARGO environment variable; for rustc, $RUSTC; etc
@@ -25,7 +25,7 @@ pub fn get_path_for_executable(executable_name: impl AsRef<str>) -> Result<Strin
     let env_var = executable_name.to_ascii_uppercase();
     if let Ok(path) = env::var(&env_var) {
         if is_valid_executable(&path) {
-            Ok(path)
+            Ok(path.into())
         } else {
             Err(Error::msg(format!(
                 "`{}` environment variable points to something that's not a valid executable",
@@ -34,14 +34,14 @@ pub fn get_path_for_executable(executable_name: impl AsRef<str>) -> Result<Strin
         }
     } else {
         if is_valid_executable(executable_name) {
-            return Ok(executable_name.to_owned());
+            return Ok(executable_name.into());
         }
         if let Some(mut path) = dirs::home_dir() {
             path.push(".cargo");
             path.push("bin");
             path.push(executable_name);
             if is_valid_executable(&path) {
-                return Ok(path.into_os_string().into_string().expect("Invalid Unicode in path"));
+                return Ok(path);
             }
         }
         // This error message may also be caused by $PATH or $CARGO/$RUSTC/etc not being set correctly
index 516e0472dab8bd499c0691631b9aca6b41f11ae6..ed374f241ca01ff74a13f6780773bf8e76a96ba9 100644 (file)
@@ -89,9 +89,10 @@ fn create_command_text(program: &str, args: &[&str]) -> String {
     format!("{} {}", program, args.join(" "))
 }
 
-fn run_command_in_cargo_dir(cargo_toml: &Path, program: &str, args: &[&str]) -> Result<Output> {
+fn run_command_in_cargo_dir(cargo_toml: impl AsRef<Path>, program: impl AsRef<Path>, args: &[&str]) -> Result<Output> {
+    let program = program.as_ref().as_os_str().to_str().expect("Invalid Unicode in path");
     let output = Command::new(program)
-        .current_dir(cargo_toml.parent().unwrap())
+        .current_dir(cargo_toml.as_ref().parent().unwrap())
         .args(args)
         .output()
         .context(format!("{} failed", create_command_text(program, args)))?;