Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/nameres/diagnostics.rs')
-rw-r--r--crates/hir-def/src/nameres/diagnostics.rs31
1 files changed, 27 insertions, 4 deletions
diff --git a/crates/hir-def/src/nameres/diagnostics.rs b/crates/hir-def/src/nameres/diagnostics.rs
index b024d7c677..18b424255c 100644
--- a/crates/hir-def/src/nameres/diagnostics.rs
+++ b/crates/hir-def/src/nameres/diagnostics.rs
@@ -4,7 +4,10 @@ use base_db::CrateId;
use cfg::{CfgExpr, CfgOptions};
use hir_expand::{attrs::AttrId, MacroCallKind};
use la_arena::Idx;
-use syntax::ast::{self, AnyHasAttrs};
+use syntax::{
+ ast::{self, AnyHasAttrs},
+ SyntaxError,
+};
use crate::{
item_tree::{self, ItemTreeId},
@@ -29,11 +32,15 @@ pub enum DefDiagnosticKind {
MacroError { ast: MacroCallKind, message: String },
+ MacroExpansionParseError { ast: MacroCallKind, errors: Box<[SyntaxError]> },
+
UnimplementedBuiltinMacro { ast: AstId<ast::Macro> },
InvalidDeriveTarget { ast: AstId<ast::Item>, id: usize },
MalformedDerive { ast: AstId<ast::Adt>, id: usize },
+
+ MacroDefError { ast: AstId<ast::Macro>, message: String },
}
#[derive(Debug, PartialEq, Eq)]
@@ -81,7 +88,8 @@ impl DefDiagnostic {
Self { in_module: container, kind: DefDiagnosticKind::UnconfiguredCode { ast, cfg, opts } }
}
- pub(super) fn unresolved_proc_macro(
+ // FIXME: Whats the difference between this and unresolved_macro_call
+ pub(crate) fn unresolved_proc_macro(
container: LocalModuleId,
ast: MacroCallKind,
krate: CrateId,
@@ -89,7 +97,7 @@ impl DefDiagnostic {
Self { in_module: container, kind: DefDiagnosticKind::UnresolvedProcMacro { ast, krate } }
}
- pub(super) fn macro_error(
+ pub(crate) fn macro_error(
container: LocalModuleId,
ast: MacroCallKind,
message: String,
@@ -97,7 +105,22 @@ impl DefDiagnostic {
Self { in_module: container, kind: DefDiagnosticKind::MacroError { ast, message } }
}
- pub(super) fn unresolved_macro_call(
+ pub(crate) fn macro_expansion_parse_error(
+ container: LocalModuleId,
+ ast: MacroCallKind,
+ errors: &[SyntaxError],
+ ) -> Self {
+ Self {
+ in_module: container,
+ kind: DefDiagnosticKind::MacroExpansionParseError {
+ ast,
+ errors: errors.to_vec().into_boxed_slice(),
+ },
+ }
+ }
+
+ // FIXME: Whats the difference between this and unresolved_proc_macro
+ pub(crate) fn unresolved_macro_call(
container: LocalModuleId,
ast: MacroCallKind,
path: ModPath,