mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-27 07:03:45 +00:00
Improve diagnostic when including nonexistent file
This commit is contained in:
parent
9d691530d5
commit
5f80364ede
@ -137,7 +137,7 @@ fn f() {
|
||||
include!(invalid);
|
||||
//^^^^^^^^^^^^^^^^^ could not convert tokens
|
||||
include!("does not exist");
|
||||
//^^^^^^^^^^^^^^^^^^^^^^^^^^ could not convert tokens
|
||||
//^^^^^^^^^^^^^^^^^^^^^^^^^^ failed to load file `does not exist`
|
||||
|
||||
env!(invalid);
|
||||
//^^^^^^^^^^^^^ could not convert tokens
|
||||
|
@ -196,7 +196,7 @@ fn builtin_macro_fails_expansion() {
|
||||
macro_rules! include { () => {} }
|
||||
|
||||
include!("doesntexist");
|
||||
//^^^^^^^^^^^^^^^^^^^^^^^^ could not convert tokens
|
||||
//^^^^^^^^^^^^^^^^^^^^^^^^ failed to load file `doesntexist`
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
@ -333,17 +333,19 @@ fn concat_expand(
|
||||
fn relative_file(
|
||||
db: &dyn AstDatabase,
|
||||
call_id: MacroCallId,
|
||||
path: &str,
|
||||
path_str: &str,
|
||||
allow_recursion: bool,
|
||||
) -> Option<FileId> {
|
||||
) -> Result<FileId, mbe::ExpandError> {
|
||||
let call_site = call_id.as_file().original_file(db);
|
||||
let path = AnchoredPath { anchor: call_site, path };
|
||||
let res = db.resolve_path(path)?;
|
||||
let path = AnchoredPath { anchor: call_site, path: path_str };
|
||||
let res = db
|
||||
.resolve_path(path)
|
||||
.ok_or_else(|| mbe::ExpandError::Other(format!("failed to load file `{}`", path_str)))?;
|
||||
// Prevent include itself
|
||||
if res == call_site && !allow_recursion {
|
||||
None
|
||||
Err(mbe::ExpandError::Other(format!("recursive inclusion of `{}`", path_str)))
|
||||
} else {
|
||||
Some(res)
|
||||
Ok(res)
|
||||
}
|
||||
}
|
||||
|
||||
@ -364,8 +366,7 @@ fn include_expand(
|
||||
) -> ExpandResult<Option<(tt::Subtree, FragmentKind)>> {
|
||||
let res = (|| {
|
||||
let path = parse_string(tt)?;
|
||||
let file_id = relative_file(db, arg_id.into(), &path, false)
|
||||
.ok_or_else(|| mbe::ExpandError::ConversionError)?;
|
||||
let file_id = relative_file(db, arg_id.into(), &path, false)?;
|
||||
|
||||
Ok(parse_to_token_tree(&db.file_text(file_id))
|
||||
.ok_or_else(|| mbe::ExpandError::ConversionError)?
|
||||
@ -417,8 +418,8 @@ fn include_str_expand(
|
||||
// Ideally, we'd be able to offer a precise expansion if the user asks for macro
|
||||
// expansion.
|
||||
let file_id = match relative_file(db, arg_id.into(), &path, true) {
|
||||
Some(file_id) => file_id,
|
||||
None => {
|
||||
Ok(file_id) => file_id,
|
||||
Err(_) => {
|
||||
return ExpandResult::ok(Some((quote!(""), FragmentKind::Expr)));
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user