From cec92407f412b3c8e01d17eab84101a2b858e59e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 30 Jun 2020 22:12:27 +0200 Subject: Don't crash on empty out_dirs with older cargos closes #5125 --- crates/ra_project_model/src/cargo_workspace.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'crates') diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs index 3b124020d..47a1d393d 100644 --- a/crates/ra_project_model/src/cargo_workspace.rs +++ b/crates/ra_project_model/src/cargo_workspace.rs @@ -1,6 +1,11 @@ //! FIXME: write short doc here -use std::{ffi::OsStr, ops, path::Path, process::Command}; +use std::{ + ffi::OsStr, + ops, + path::{Path, PathBuf}, + process::Command, +}; use anyhow::{Context, Result}; use cargo_metadata::{BuildScript, CargoOpt, Message, MetadataCommand, PackageId}; @@ -308,9 +313,13 @@ pub fn load_extern_resources( if let Ok(message) = message { match message { Message::BuildScriptExecuted(BuildScript { package_id, out_dir, cfgs, .. }) => { - let out_dir = AbsPathBuf::assert(out_dir); - res.out_dirs.insert(package_id.clone(), out_dir); - res.cfgs.insert(package_id, cfgs); + // cargo_metadata crate returns default (empty) path for + // older cargos, which is not absolute, so work around that. + if out_dir != PathBuf::default() { + let out_dir = AbsPathBuf::assert(out_dir); + res.out_dirs.insert(package_id.clone(), out_dir); + res.cfgs.insert(package_id, cfgs); + } } Message::CompilerArtifact(message) => { if message.target.kind.contains(&"proc-macro".to_string()) { -- cgit v1.2.3