From ca6d7bfe617aa49fdd9c996d2680a94e24207b86 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 23 Apr 2020 18:50:25 +0200 Subject: Cleanup proc_macro config In general, there should be no reason to call `.to_string_lossy`. If you want to display the path, use `.display()`. If you want to pass the path to an OS API (like std::process::Command) than use `PathBuf` or `OsString`. --- crates/rust-analyzer/src/config.rs | 6 ++++-- crates/rust-analyzer/src/world.rs | 2 +- crates/rust-analyzer/tests/heavy_tests/main.rs | 11 +++-------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index fa0b1e226..642c34574 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -7,6 +7,8 @@ //! configure the server itself, feature flags are passed into analysis, and //! tweak things like automatic insertion of `()` in completions. +use std::{ffi::OsString, path::PathBuf}; + use lsp_types::TextDocumentClientCapabilities; use ra_flycheck::FlycheckConfig; use ra_ide::{CompletionConfig, InlayHintsConfig}; @@ -20,7 +22,7 @@ pub struct Config { pub with_sysroot: bool, pub publish_diagnostics: bool, pub lru_capacity: Option, - pub proc_macro_srv: Option<(String, Vec)>, + pub proc_macro_srv: Option<(PathBuf, Vec)>, pub files: FilesConfig, pub notifications: NotificationsConfig, @@ -135,7 +137,7 @@ impl Config { match get(value, "/procMacro/enable") { Some(true) => { if let Ok(path) = std::env::current_exe() { - self.proc_macro_srv = Some((path.to_string_lossy().to_string(), vec!["proc-macro".to_string()])); + self.proc_macro_srv = Some((path, vec!["proc-macro".into()])); } } _ => self.proc_macro_srv = None, diff --git a/crates/rust-analyzer/src/world.rs b/crates/rust-analyzer/src/world.rs index 7c0bb42aa..34941931b 100644 --- a/crates/rust-analyzer/src/world.rs +++ b/crates/rust-analyzer/src/world.rs @@ -153,7 +153,7 @@ impl WorldState { Err(err) => { log::error!( "Failed to run ra_proc_macro_srv from path {}, error: {:?}", - path, + path.display(), err ); ProcMacroClient::dummy() diff --git a/crates/rust-analyzer/tests/heavy_tests/main.rs b/crates/rust-analyzer/tests/heavy_tests/main.rs index 1dd2676b6..b31533e5e 100644 --- a/crates/rust-analyzer/tests/heavy_tests/main.rs +++ b/crates/rust-analyzer/tests/heavy_tests/main.rs @@ -1,6 +1,6 @@ mod support; -use std::{collections::HashMap, time::Instant}; +use std::{collections::HashMap, path::PathBuf, time::Instant}; use lsp_types::{ CodeActionContext, DidOpenTextDocumentParams, DocumentFormattingParams, FormattingOptions, @@ -692,15 +692,10 @@ pub fn foo(_input: TokenStream) -> TokenStream { "###, ) .with_config(|config| { - // FIXME: Use env!("CARGO_BIN_EXE_ra-analyzer") instead after - // https://github.com/rust-lang/cargo/pull/7697 landed - let macro_srv_path = std::path::Path::new(std::env!("CARGO_MANIFEST_DIR")) - .join("../../target/debug/rust-analyzer") - .to_string_lossy() - .to_string(); + let macro_srv_path = PathBuf::from(env!("CARGO_BIN_EXE_rust-analyzer")); config.cargo.load_out_dirs_from_check = true; - config.proc_macro_srv = Some((macro_srv_path, vec!["proc-macro".to_string()])); + config.proc_macro_srv = Some((macro_srv_path, vec!["proc-macro".into()])); }) .root("foo") .root("bar") -- cgit v1.2.3