Follow established ErrorEmitted pattern

This commit is contained in:
Brandon 2021-03-16 23:31:14 -07:00
parent 0103f5df8f
commit a79b5673e8
3 changed files with 14 additions and 17 deletions

View file

@ -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 });
} }
}; };

View file

@ -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)
} }
} }

View file

@ -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>(