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`.
This commit is contained in:
Aleksey Kladov 2020-04-23 18:50:25 +02:00
parent 278bf351e3
commit ca6d7bfe61
3 changed files with 8 additions and 11 deletions

View File

@ -7,6 +7,8 @@
//! configure the server itself, feature flags are passed into analysis, and //! configure the server itself, feature flags are passed into analysis, and
//! tweak things like automatic insertion of `()` in completions. //! tweak things like automatic insertion of `()` in completions.
use std::{ffi::OsString, path::PathBuf};
use lsp_types::TextDocumentClientCapabilities; use lsp_types::TextDocumentClientCapabilities;
use ra_flycheck::FlycheckConfig; use ra_flycheck::FlycheckConfig;
use ra_ide::{CompletionConfig, InlayHintsConfig}; use ra_ide::{CompletionConfig, InlayHintsConfig};
@ -20,7 +22,7 @@ pub struct Config {
pub with_sysroot: bool, pub with_sysroot: bool,
pub publish_diagnostics: bool, pub publish_diagnostics: bool,
pub lru_capacity: Option<usize>, pub lru_capacity: Option<usize>,
pub proc_macro_srv: Option<(String, Vec<String>)>, pub proc_macro_srv: Option<(PathBuf, Vec<OsString>)>,
pub files: FilesConfig, pub files: FilesConfig,
pub notifications: NotificationsConfig, pub notifications: NotificationsConfig,
@ -135,7 +137,7 @@ impl Config {
match get(value, "/procMacro/enable") { match get(value, "/procMacro/enable") {
Some(true) => { Some(true) => {
if let Ok(path) = std::env::current_exe() { 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, _ => self.proc_macro_srv = None,

View File

@ -153,7 +153,7 @@ impl WorldState {
Err(err) => { Err(err) => {
log::error!( log::error!(
"Failed to run ra_proc_macro_srv from path {}, error: {:?}", "Failed to run ra_proc_macro_srv from path {}, error: {:?}",
path, path.display(),
err err
); );
ProcMacroClient::dummy() ProcMacroClient::dummy()

View File

@ -1,6 +1,6 @@
mod support; mod support;
use std::{collections::HashMap, time::Instant}; use std::{collections::HashMap, path::PathBuf, time::Instant};
use lsp_types::{ use lsp_types::{
CodeActionContext, DidOpenTextDocumentParams, DocumentFormattingParams, FormattingOptions, CodeActionContext, DidOpenTextDocumentParams, DocumentFormattingParams, FormattingOptions,
@ -692,15 +692,10 @@ pub fn foo(_input: TokenStream) -> TokenStream {
"###, "###,
) )
.with_config(|config| { .with_config(|config| {
// FIXME: Use env!("CARGO_BIN_EXE_ra-analyzer") instead after let macro_srv_path = PathBuf::from(env!("CARGO_BIN_EXE_rust-analyzer"));
// 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();
config.cargo.load_out_dirs_from_check = true; 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("foo")
.root("bar") .root("bar")