use hir::map::Definitions;
use hir::map::definitions::DefPathData;
use hir::def_id::{DefIndex, DefId};
-use hir::def::{Def, CtorKind, PathResolution};
+use hir::def::{Def, PathResolution};
use session::Session;
-use lint;
use std::collections::BTreeMap;
use std::iter;
}
PatKind::Lit(ref e) => hir::PatKind::Lit(self.lower_expr(e)),
PatKind::TupleStruct(ref path, ref pats, ddpos) => {
- match self.resolver.get_resolution(p.id).map(|d| d.base_def) {
- Some(def @ Def::StructCtor(_, CtorKind::Const)) |
- Some(def @ Def::VariantCtor(_, CtorKind::Const)) => {
- // Temporarily lower `UnitVariant(..)` into `UnitVariant`
- // for backward compatibility.
- let msg = format!("expected tuple struct/variant, found {} `{}`",
- def.kind_name(), path);
- self.sess.add_lint(
- lint::builtin::MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT,
- p.id, p.span, msg
- );
- hir::PatKind::Path(None, self.lower_path(path))
- }
- _ => hir::PatKind::TupleStruct(self.lower_path(path),
+ hir::PatKind::TupleStruct(self.lower_path(path),
pats.iter().map(|x| self.lower_pat(x)).collect(), ddpos)
- }
}
PatKind::Path(ref opt_qself, ref path) => {
let opt_qself = opt_qself.as_ref().map(|qself| {
the struct or enum has `#[derive(PartialEq, Eq)]`"
}
-declare_lint! {
- pub MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT,
- Deny,
- "unit struct or enum variant erroneously allowed to match via path::ident(..)"
-}
-
declare_lint! {
pub RAW_POINTER_DERIVE,
Warn,
INVALID_TYPE_PARAM_DEFAULT,
ILLEGAL_FLOATING_POINT_CONSTANT_PATTERN,
ILLEGAL_STRUCT_OR_ENUM_CONSTANT_PATTERN,
- MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT,
CONST_ERR,
RAW_POINTER_DERIVE,
TRANSMUTE_FROM_FN_ITEM_TYPES,
id: LintId::of(SUPER_OR_SELF_IN_GLOBAL_PATH),
reference: "PR #32403 <https://github.com/rust-lang/rust/pull/32403>",
},
- FutureIncompatibleInfo {
- id: LintId::of(MATCH_OF_UNIT_VARIANT_VIA_PAREN_DOTDOT),
- reference: "RFC 218 <https://github.com/rust-lang/rfcs/blob/\
- master/text/0218-empty-struct-with-braces.md>",
- },
FutureIncompatibleInfo {
id: LintId::of(TRANSMUTE_FROM_FN_ITEM_TYPES),
reference: "issue #19925 <https://github.com/rust-lang/rust/issues/19925>",
self.record_def(pat.id, resolution);
}
- PatKind::TupleStruct(ref path, ref pats, ddpos) => {
+ PatKind::TupleStruct(ref path, ..) => {
self.resolve_pattern_path(pat.id, None, path, ValueNS, |def| {
match def {
Def::StructCtor(_, CtorKind::Fn) |
Def::VariantCtor(_, CtorKind::Fn) => true,
- // `UnitVariant(..)` is accepted for backward compatibility.
- Def::StructCtor(_, CtorKind::Const) |
- Def::VariantCtor(_, CtorKind::Const)
- if pats.is_empty() && ddpos.is_some() => true,
_ => false,
}
}, "tuple struct/variant");
+++ /dev/null
-// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// Can't use unit struct as enum pattern
-
-// aux-build:empty-struct.rs
-
-#![feature(relaxed_adts)]
-
-extern crate empty_struct;
-use empty_struct::*;
-
-struct Empty2;
-
-enum E {
- Empty4
-}
-
-// remove attribute after warning cycle and promoting warnings to errors
-fn main() {
- let e2 = Empty2;
- let e4 = E::Empty4;
- let xe2 = XEmpty2;
- let xe4 = XE::XEmpty4;
-
- match e2 {
- Empty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `Empty2`
- //~^ WARNING hard error
- }
- match xe2 {
- XEmpty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `XEmpty2`
- //~^ WARNING hard error
- }
-
- match e4 {
- E::Empty4(..) => () //~ ERROR expected tuple struct/variant, found unit variant `E::Empty4`
- //~^ WARNING hard error
- }
- match xe4 {
- XE::XEmpty4(..) => (),
- //~^ ERROR expected tuple struct/variant, found unit variant `XE::XEmpty4`
- //~| WARNING hard error
- _ => {},
- }
-}
+++ /dev/null
-// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// Can't use unit struct as enum pattern
-
-// aux-build:empty-struct.rs
-
-#![feature(relaxed_adts)]
-
-extern crate empty_struct;
-use empty_struct::*;
-
-struct Empty2;
-
-enum E {
- Empty4
-}
-
-fn main() {
- let e2 = Empty2;
- let e4 = E::Empty4;
- let xe2 = XEmpty2;
- let xe4 = XE::XEmpty4;
-
- match e2 {
- Empty2() => ()
- //~^ ERROR expected tuple struct/variant, found unit struct `Empty2`
- }
- match xe2 {
- XEmpty2() => ()
- //~^ ERROR expected tuple struct/variant, found unit struct `XEmpty2`
- }
-
- match e4 {
- E::Empty4() => ()
- //~^ ERROR expected tuple struct/variant, found unit variant `E::Empty4`
- }
- match xe4 {
- XE::XEmpty4() => (),
- //~^ ERROR expected tuple struct/variant, found unit variant `XE::XEmpty4`
- _ => {},
- }
-}
--- /dev/null
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Can't use unit struct as tuple struct pattern
+
+// aux-build:empty-struct.rs
+
+#![feature(relaxed_adts)]
+
+extern crate empty_struct;
+use empty_struct::*;
+
+struct Empty2;
+
+enum E {
+ Empty4
+}
+
+fn main() {
+ let e2 = Empty2;
+ let e4 = E::Empty4;
+ let xe2 = XEmpty2;
+ let xe4 = XE::XEmpty4;
+
+ match e2 {
+ Empty2() => () //~ ERROR expected tuple struct/variant, found unit struct `Empty2`
+ }
+ match xe2 {
+ XEmpty2() => () //~ ERROR expected tuple struct/variant, found unit struct `XEmpty2`
+ }
+ match e2 {
+ Empty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `Empty2`
+ }
+ match xe2 {
+ XEmpty2(..) => () //~ ERROR expected tuple struct/variant, found unit struct `XEmpty2`
+ }
+
+ match e4 {
+ E::Empty4() => () //~ ERROR expected tuple struct/variant, found unit variant `E::Empty4`
+ }
+ match xe4 {
+ XE::XEmpty4() => (),
+ //~^ ERROR expected tuple struct/variant, found unit variant `XE::XEmpty4`
+ _ => {},
+ }
+ match e4 {
+ E::Empty4(..) => () //~ ERROR expected tuple struct/variant, found unit variant `E::Empty4`
+ }
+ match xe4 {
+ XE::XEmpty4(..) => (),
+ //~^ ERROR expected tuple struct/variant, found unit variant `XE::XEmpty4`
+ _ => {},
+ }
+}
--- /dev/null
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+enum E {
+ A,
+ B,
+}
+
+fn main() {
+ match None {
+ None => {}
+ Some(E::A(..)) => {} //~ ERROR expected tuple struct/variant, found unit variant `E::A`
+ Some(E::B(..)) => {} //~ ERROR expected tuple struct/variant, found unit variant `E::B`
+ }
+}
+++ /dev/null
-// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-#![allow(match_of_unit_variant_via_paren_dotdot)]
-
-enum E {
- A,
- B,
-}
-
-fn main() {
- match None {
- None => {}
- Some(E::A(..)) => {}
- Some(E::B(..)) => {}
- }
-}