]> git.lizzy.rs Git - rust.git/commitdiff
Report obsolete trait lists on structs
authorBrian Anderson <banderson@mozilla.com>
Tue, 11 Sep 2012 01:00:03 +0000 (18:00 -0700)
committerBrian Anderson <banderson@mozilla.com>
Tue, 11 Sep 2012 01:12:35 +0000 (18:12 -0700)
src/libsyntax/parse/obsolete.rs
src/libsyntax/parse/parser.rs
src/test/compile-fail/class-method-missing.rs
src/test/compile-fail/obsolete-syntax.rs

index 3dadc90321cacfe4309b234bc73b168afc3674e8..9a2b6474b19e5e88ffc877835e9f76788752f7a2 100644 (file)
@@ -20,6 +20,7 @@ pub enum ObsoleteSyntax {
     ObsoleteStructCtor,
     ObsoleteWith,
     ObsoleteClassMethod,
+    ObsoleteClassTraits
 }
 
 impl ObsoleteSyntax : cmp::Eq {
@@ -76,6 +77,11 @@ fn obsolete(sp: span, kind: ObsoleteSyntax) {
                 "class method",
                 "methods should be defined inside impls"
             ),
+            ObsoleteClassTraits => (
+                "class traits",
+                "implemented traits are specified on the impl, as in \
+                 `impl foo : bar {`"
+            ),
         };
 
         self.report(sp, kind, kind_str, desc);
index aff662a3f3590bbf29b240ea7c838d462c0afbc4..49fa14c5b7dc2785752722d5ad274474a70e6422 100644 (file)
@@ -19,7 +19,7 @@
     ObsoleteReporter, ObsoleteSyntax,
     ObsoleteLowerCaseKindBounds, ObsoleteLet,
     ObsoleteFieldTerminator, ObsoleteStructCtor,
-    ObsoleteWith, ObsoleteClassMethod
+    ObsoleteWith, ObsoleteClassMethod, ObsoleteClassTraits
 };
 use ast::{_mod, add, alt_check, alt_exhaustive, arg, arm, attribute,
              bind_by_ref, bind_by_implicit_ref, bind_by_value, bind_by_move,
@@ -2648,8 +2648,10 @@ fn parse_item_class() -> item_info {
         let class_name = self.parse_value_ident();
         self.parse_region_param();
         let ty_params = self.parse_ty_params();
-        let traits : ~[@trait_ref] = if self.eat(token::COLON)
-            { self.parse_trait_ref_list(token::LBRACE) }
+        let traits : ~[@trait_ref] = if self.eat(token::COLON) {
+            self.obsolete(copy self.span, ObsoleteClassTraits);
+            self.parse_trait_ref_list(token::LBRACE)
+        }
         else { ~[] };
 
         let mut fields: ~[@struct_field];
index 955c3e8aa46b9aa344ec271de0affe126ba4ee02..642a26e6e9ef0299700c68964e5952b51b328a78 100644 (file)
@@ -3,10 +3,13 @@ trait animal {
   fn eat();
 }
 
-struct cat : animal {
+struct cat {
   meows: uint,
 }
 
+impl cat : animal {
+}
+
 fn cat(in_x : uint) -> cat {
     cat {
         meows: in_x
index 5f147e035f9762df797ea0a59b6f76fc310eedce..9a3939692f5646ed99783da5b1a489d803e1ca41 100644 (file)
@@ -27,6 +27,10 @@ fn foo() { }
     //~^ ERROR obsolete syntax: class method
 }
 
+struct q : r {
+    //~^ ERROR obsolete syntax: class traits
+}
+
 fn obsolete_with() {
     struct S {
         foo: (),