use std::collections::BTreeSet;
use std::mem::replace;
+use rustc_error_codes::*;
+
mod diagnostics;
type Res = def::Res<NodeId>;
match item.kind {
ItemKind::TyAlias(_, ref generics) |
- ItemKind::OpaqueTy(_, ref generics) |
- ItemKind::Fn(_, _, ref generics, _) => {
+ ItemKind::Fn(_, ref generics, _) => {
self.with_generic_param_rib(generics, ItemRibKind(HasGenericParams::Yes),
|this| visit::walk_item(this, item));
}
this.visit_ty(ty);
}
- ImplItemKind::OpaqueTy(ref bounds) => {
- // If this is a trait impl, ensure the type
- // exists in trait
- this.check_trait_item(impl_item.ident,
- TypeNS,
- impl_item.span,
- |n, s| TypeNotMemberOfTrait(n, s));
-
- for bound in bounds {
- this.visit_param_bound(bound);
- }
- }
ImplItemKind::Macro(_) =>
panic!("unexpanded macro in resolve!"),
}
if is_expected(partial_res.base_res()) || partial_res.base_res() == Res::Err {
partial_res
} else {
- // Add a temporary hack to smooth the transition to new struct ctor
- // visibility rules. See #38932 for more details.
- let mut res = None;
- if let Res::Def(DefKind::Struct, def_id) = partial_res.base_res() {
- if let Some((ctor_res, ctor_vis))
- = self.r.struct_constructors.get(&def_id).cloned() {
- if is_expected(ctor_res) &&
- self.r.is_accessible_from(ctor_vis, self.parent_scope.module) {
- let lint = lint::builtin::LEGACY_CONSTRUCTOR_VISIBILITY;
- self.r.lint_buffer.buffer_lint(lint, id, span,
- "private struct constructors are not usable through \
- re-exports in outer modules",
- );
- res = Some(PartialRes::new(ctor_res));
- }
- }
- }
-
- res.unwrap_or_else(|| report_errors(self, Some(partial_res.base_res())))
+ report_errors(self, Some(partial_res.base_res()))
}
}
Some(partial_res) if source.defer_to_typeck() => {
fn with_resolved_label(&mut self, label: Option<Label>, id: NodeId, f: impl FnOnce(&mut Self)) {
if let Some(label) = label {
- self.diagnostic_metadata.unused_labels.insert(id, label.ident.span);
+ if label.ident.as_str().as_bytes()[1] != b'_' {
+ self.diagnostic_metadata.unused_labels.insert(id, label.ident.span);
+ }
self.with_label_rib(NormalRibKind, |this| {
let ident = label.ident.modern_and_legacy();
this.label_ribs.last_mut().unwrap().bindings.insert(ident, id);