Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-expand/src/db.rs13
-rw-r--r--crates/hir/src/lib.rs8
-rw-r--r--crates/ide-diagnostics/src/tests.rs1
3 files changed, 14 insertions, 8 deletions
diff --git a/crates/hir-expand/src/db.rs b/crates/hir-expand/src/db.rs
index 895cf20224..2e5fa6131a 100644
--- a/crates/hir-expand/src/db.rs
+++ b/crates/hir-expand/src/db.rs
@@ -129,11 +129,10 @@ pub trait ExpandDatabase: SourceDatabase {
/// user wrote in the file that defines the proc-macro.
fn proc_macro_span(&self, fun: AstId<ast::Fn>) -> Span;
/// Firewall query that returns the errors from the `parse_macro_expansion` query.
- // FIXME: Option<Arc<...>>
fn parse_macro_expansion_error(
&self,
macro_call: MacroCallId,
- ) -> ExpandResult<Arc<[SyntaxError]>>;
+ ) -> Option<Arc<ExpandResult<Arc<[SyntaxError]>>>>;
}
/// This expands the given macro call, but with different arguments. This is
@@ -358,8 +357,14 @@ fn parse_macro_expansion(
fn parse_macro_expansion_error(
db: &dyn ExpandDatabase,
macro_call_id: MacroCallId,
-) -> ExpandResult<Arc<[SyntaxError]>> {
- db.parse_macro_expansion(MacroFileId { macro_call_id }).map(|it| it.0.errors().into())
+) -> Option<Arc<ExpandResult<Arc<[SyntaxError]>>>> {
+ let e: ExpandResult<Arc<[SyntaxError]>> =
+ db.parse_macro_expansion(MacroFileId { macro_call_id }).map(|it| Arc::from(it.0.errors()));
+ if e.value.is_empty() && e.err.is_none() {
+ None
+ } else {
+ Some(Arc::new(e))
+ }
}
pub(crate) fn parse_with_map(
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 6dd1801dae..079aa90600 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -831,13 +831,15 @@ fn macro_call_diagnostics(
macro_call_id: MacroCallId,
acc: &mut Vec<AnyDiagnostic>,
) {
- let ValueResult { value: parse_errors, err } = db.parse_macro_expansion_error(macro_call_id);
-
+ let Some(e) = db.parse_macro_expansion_error(macro_call_id) else {
+ return;
+ };
+ let ValueResult { value: parse_errors, err } = &*e;
if let Some(err) = err {
let loc = db.lookup_intern_macro_call(macro_call_id);
let (node, precise_location, macro_name, kind) = precise_macro_call_location(&loc.kind, db);
let diag = match err {
- hir_expand::ExpandError::UnresolvedProcMacro(krate) => {
+ &hir_expand::ExpandError::UnresolvedProcMacro(krate) => {
UnresolvedProcMacro { node, precise_location, macro_name, kind, krate }.into()
}
err => MacroError { node, precise_location, message: err.to_string() }.into(),
diff --git a/crates/ide-diagnostics/src/tests.rs b/crates/ide-diagnostics/src/tests.rs
index 8bf062fd61..cd5e95cc1e 100644
--- a/crates/ide-diagnostics/src/tests.rs
+++ b/crates/ide-diagnostics/src/tests.rs
@@ -246,7 +246,6 @@ pub(crate) fn check_diagnostics_with_config(config: DiagnosticsConfig, ra_fixtur
}
}
if expected != actual {
- dbg!(&actual);
let fneg = expected
.iter()
.filter(|x| !actual.contains(x))