errors: only eagerly translate subdiagnostics
Subdiagnostics don't need to be lazily translated, they can always be eagerly translated. Eager translation is slightly more complex as we need to have a `DiagCtxt` available to perform the translation, which involves slightly more threading of that context. This slight increase in complexity should enable later simplifications - like passing `DiagCtxt` into `AddToDiagnostic` and moving Fluent messages into the diagnostic structs rather than having them in separate files (working on that was what led to this change). Signed-off-by: David Wood <david@davidtw.co>
This commit is contained in:
parent
bb89df6903
commit
b80fc5d4e8
43 changed files with 532 additions and 388 deletions
|
@ -403,9 +403,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
}
|
||||
|
||||
if let Some(suggestion) = suggestion {
|
||||
err.subdiagnostic(ChangeImportBindingSuggestion { span: binding_span, suggestion });
|
||||
err.subdiagnostic(
|
||||
self.dcx(),
|
||||
ChangeImportBindingSuggestion { span: binding_span, suggestion },
|
||||
);
|
||||
} else {
|
||||
err.subdiagnostic(ChangeImportBinding { span: binding_span });
|
||||
err.subdiagnostic(self.dcx(), ChangeImportBinding { span: binding_span });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1430,17 +1433,17 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
);
|
||||
|
||||
if macro_kind == MacroKind::Bang && ident.name == sym::macro_rules {
|
||||
err.subdiagnostic(MaybeMissingMacroRulesName { span: ident.span });
|
||||
err.subdiagnostic(self.dcx(), MaybeMissingMacroRulesName { span: ident.span });
|
||||
return;
|
||||
}
|
||||
|
||||
if macro_kind == MacroKind::Derive && (ident.name == sym::Send || ident.name == sym::Sync) {
|
||||
err.subdiagnostic(ExplicitUnsafeTraits { span: ident.span, ident });
|
||||
err.subdiagnostic(self.dcx(), ExplicitUnsafeTraits { span: ident.span, ident });
|
||||
return;
|
||||
}
|
||||
|
||||
if self.macro_names.contains(&ident.normalize_to_macros_2_0()) {
|
||||
err.subdiagnostic(AddedMacroUse);
|
||||
err.subdiagnostic(self.dcx(), AddedMacroUse);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1450,10 +1453,13 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||
let span = self.def_span(def_id);
|
||||
let source_map = self.tcx.sess.source_map();
|
||||
let head_span = source_map.guess_head_span(span);
|
||||
err.subdiagnostic(ConsiderAddingADerive {
|
||||
span: head_span.shrink_to_lo(),
|
||||
suggestion: "#[derive(Default)]\n".to_string(),
|
||||
});
|
||||
err.subdiagnostic(
|
||||
self.dcx(),
|
||||
ConsiderAddingADerive {
|
||||
span: head_span.shrink_to_lo(),
|
||||
suggestion: "#[derive(Default)]\n".to_string(),
|
||||
},
|
||||
);
|
||||
}
|
||||
for ns in [Namespace::MacroNS, Namespace::TypeNS, Namespace::ValueNS] {
|
||||
if let Ok(binding) = self.early_resolve_ident_in_lexical_scope(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue