mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 06:41:48 +00:00
Follow established ErrorEmitted pattern
This commit is contained in:
parent
0103f5df8f
commit
a79b5673e8
3 changed files with 14 additions and 17 deletions
|
@ -121,11 +121,8 @@ impl Expander {
|
||||||
err.get_or_insert(e);
|
err.get_or_insert(e);
|
||||||
})?;
|
})?;
|
||||||
let call_id = match call_id {
|
let call_id = match call_id {
|
||||||
Some(it) => it,
|
Ok(it) => it,
|
||||||
None => {
|
Err(_) => {
|
||||||
if err.is_none() {
|
|
||||||
log::warn!("no error despite `as_call_id_with_errors` returning `None`");
|
|
||||||
}
|
|
||||||
return Ok(ExpandResult { value: None, err });
|
return Ok(ExpandResult { value: None, err });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -58,7 +58,7 @@ use std::{
|
||||||
use base_db::{impl_intern_key, salsa, CrateId};
|
use base_db::{impl_intern_key, salsa, CrateId};
|
||||||
use hir_expand::{
|
use hir_expand::{
|
||||||
ast_id_map::FileAstId,
|
ast_id_map::FileAstId,
|
||||||
eager::{expand_eager_macro, ErrorEmitted},
|
eager::{expand_eager_macro, ErrorEmitted, ErrorSink},
|
||||||
hygiene::Hygiene,
|
hygiene::Hygiene,
|
||||||
AstId, HirFileId, InFile, MacroCallId, MacroCallKind, MacroDefId, MacroDefKind,
|
AstId, HirFileId, InFile, MacroCallId, MacroCallKind, MacroDefId, MacroDefKind,
|
||||||
};
|
};
|
||||||
|
@ -583,7 +583,7 @@ pub trait AsMacroCall {
|
||||||
krate: CrateId,
|
krate: CrateId,
|
||||||
resolver: impl Fn(path::ModPath) -> Option<MacroDefId>,
|
resolver: impl Fn(path::ModPath) -> Option<MacroDefId>,
|
||||||
) -> Option<MacroCallId> {
|
) -> Option<MacroCallId> {
|
||||||
self.as_call_id_with_errors(db, krate, resolver, &mut |_| ()).ok()?
|
self.as_call_id_with_errors(db, krate, resolver, &mut |_| ()).ok()?.ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_call_id_with_errors(
|
fn as_call_id_with_errors(
|
||||||
|
@ -592,7 +592,7 @@ pub trait AsMacroCall {
|
||||||
krate: CrateId,
|
krate: CrateId,
|
||||||
resolver: impl Fn(path::ModPath) -> Option<MacroDefId>,
|
resolver: impl Fn(path::ModPath) -> Option<MacroDefId>,
|
||||||
error_sink: &mut dyn FnMut(mbe::ExpandError),
|
error_sink: &mut dyn FnMut(mbe::ExpandError),
|
||||||
) -> Result<Option<MacroCallId>, UnresolvedMacro>;
|
) -> Result<Result<MacroCallId, ErrorEmitted>, UnresolvedMacro>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsMacroCall for InFile<&ast::MacroCall> {
|
impl AsMacroCall for InFile<&ast::MacroCall> {
|
||||||
|
@ -601,18 +601,19 @@ impl AsMacroCall for InFile<&ast::MacroCall> {
|
||||||
db: &dyn db::DefDatabase,
|
db: &dyn db::DefDatabase,
|
||||||
krate: CrateId,
|
krate: CrateId,
|
||||||
resolver: impl Fn(path::ModPath) -> Option<MacroDefId>,
|
resolver: impl Fn(path::ModPath) -> Option<MacroDefId>,
|
||||||
error_sink: &mut dyn FnMut(mbe::ExpandError),
|
mut error_sink: &mut dyn FnMut(mbe::ExpandError),
|
||||||
) -> Result<Option<MacroCallId>, UnresolvedMacro> {
|
) -> Result<Result<MacroCallId, ErrorEmitted>, UnresolvedMacro> {
|
||||||
let ast_id = AstId::new(self.file_id, db.ast_id_map(self.file_id).ast_id(self.value));
|
let ast_id = AstId::new(self.file_id, db.ast_id_map(self.file_id).ast_id(self.value));
|
||||||
let h = Hygiene::new(db.upcast(), self.file_id);
|
let h = Hygiene::new(db.upcast(), self.file_id);
|
||||||
let path = self.value.path().and_then(|path| path::ModPath::from_src(path, &h));
|
let path = self.value.path().and_then(|path| path::ModPath::from_src(path, &h));
|
||||||
|
|
||||||
let path = match path {
|
let path = match error_sink
|
||||||
None => {
|
.option(path, || mbe::ExpandError::Other("malformed macro invocation".into()))
|
||||||
error_sink(mbe::ExpandError::Other("malformed macro invocation".into()));
|
{
|
||||||
return Ok(None);
|
Ok(path) => path,
|
||||||
|
Err(error) => {
|
||||||
|
return Ok(Err(error));
|
||||||
}
|
}
|
||||||
Some(path) => path,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
macro_call_as_call_id(
|
macro_call_as_call_id(
|
||||||
|
@ -622,7 +623,6 @@ impl AsMacroCall for InFile<&ast::MacroCall> {
|
||||||
resolver,
|
resolver,
|
||||||
error_sink,
|
error_sink,
|
||||||
)
|
)
|
||||||
.map(Result::ok)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ pub struct ErrorEmitted {
|
||||||
_private: (),
|
_private: (),
|
||||||
}
|
}
|
||||||
|
|
||||||
trait ErrorSink {
|
pub trait ErrorSink {
|
||||||
fn emit(&mut self, err: mbe::ExpandError);
|
fn emit(&mut self, err: mbe::ExpandError);
|
||||||
|
|
||||||
fn option<T>(
|
fn option<T>(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue