提交 5a4e0b14 编写于 作者: J Jeffrey Seyfried

Remove use of `ast_map.span_if_local()` and improve diagnostics

上级 60c8f7db
......@@ -141,7 +141,7 @@ enum ResolutionError<'a> {
/// error E0413: declaration shadows an enum variant or unit-like struct in scope
DeclarationShadowsEnumVariantOrUnitLikeStruct(Name),
/// error E0414: only irrefutable patterns allowed here
OnlyIrrefutablePatternsAllowedHere(DefId, Name),
OnlyIrrefutablePatternsAllowedHere(Name),
/// error E0415: identifier is bound more than once in this parameter list
IdentifierBoundMoreThanOnceInParameterList(&'a str),
/// error E0416: identifier is bound more than once in the same pattern
......@@ -323,7 +323,7 @@ fn resolve_struct_error<'b, 'a: 'b, 'tcx: 'a>(resolver: &'b Resolver<'a, 'tcx>,
or unit-like struct in scope",
name)
}
ResolutionError::OnlyIrrefutablePatternsAllowedHere(did, name) => {
ResolutionError::OnlyIrrefutablePatternsAllowedHere(name) => {
let mut err = struct_span_err!(resolver.session,
span,
E0414,
......@@ -331,14 +331,10 @@ fn resolve_struct_error<'b, 'a: 'b, 'tcx: 'a>(resolver: &'b Resolver<'a, 'tcx>,
err.span_note(span,
"there already is a constant in scope sharing the same \
name as this pattern");
if let Some(sp) = resolver.ast_map.span_if_local(did) {
err.span_note(sp, "constant defined here");
}
if let Some(binding) = resolver.current_module
.resolve_name_in_lexical_scope(name, ValueNS) {
if binding.is_import() {
err.span_note(binding.span, "constant imported here");
}
let participle = if binding.is_import() { "imported" } else { "defined" };
err.span_note(binding.span, &format!("constant {} here", participle));
}
err
}
......@@ -2248,12 +2244,11 @@ fn resolve_pattern(&mut self,
depth: 0,
});
}
FoundConst(def, name) => {
FoundConst(_, name) => {
resolve_error(
self,
pattern.span,
ResolutionError::OnlyIrrefutablePatternsAllowedHere(def.def_id(),
name)
ResolutionError::OnlyIrrefutablePatternsAllowedHere(name)
);
self.record_def(pattern.id, err_path_resolution());
}
......
......@@ -9,8 +9,8 @@
// except according to those terms.
mod foo {
pub const b: u8 = 2; //~ NOTE constant defined here
pub const d: u8 = 2; //~ NOTE constant defined here
pub const b: u8 = 2;
pub const d: u8 = 2;
}
use foo::b as c; //~ NOTE constant imported here
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册