]> git.proxmox.com Git - rustc.git/blob - src/test/compile-fail/lint-unused-imports.rs
New upstream version 1.12.0+dfsg1
[rustc.git] / src / test / compile-fail / lint-unused-imports.rs
1 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 #![deny(unused_imports)]
12 #![allow(dead_code)]
13
14 use bar::c::cc as cal;
15
16 use std::mem::*; // shouldn't get errors for not using
17 // everything imported
18
19 // Should get errors for both 'Some' and 'None'
20 use std::option::Option::{Some, None}; //~ ERROR unused import
21 //~^ ERROR unused import
22
23 use test::A; //~ ERROR unused import
24 // Be sure that if we just bring some methods into scope that they're also
25 // counted as being used.
26 use test::B;
27 // But only when actually used: do not get confused by the method with the same name.
28 use test::B2; //~ ERROR unused import
29
30 // Make sure this import is warned about when at least one of its imported names
31 // is unused
32 use test2::{foo, bar}; //~ ERROR unused import
33
34 mod test2 {
35 pub fn foo() {}
36 pub fn bar() {}
37 }
38
39 mod test {
40 pub trait A { fn a(&self) {} }
41 pub trait B { fn b(&self) {} }
42 pub trait B2 { fn b(&self) {} }
43 pub struct C;
44 impl A for C {}
45 impl B for C {}
46 }
47
48 mod foo {
49 pub struct Point{pub x: isize, pub y: isize}
50 pub struct Square{pub p: Point, pub h: usize, pub w: usize}
51 }
52
53 mod bar {
54 // Don't ignore on 'pub use' because we're not sure if it's used or not
55 pub use std::cmp::PartialEq;
56 pub struct Square;
57
58 pub mod c {
59 use foo::Point;
60 use foo::Square; //~ ERROR unused import
61 pub fn cc(_p: Point) -> super::Square {
62 fn f() -> super::Square {
63 super::Square
64 }
65 f()
66 }
67 }
68
69 #[allow(unused_imports)]
70 mod foo {
71 use std::cmp::PartialEq;
72 }
73 }
74
75 fn g() {
76 use self::g; //~ ERROR unused import
77 fn f() {
78 self::g();
79 }
80 }
81
82 // c.f. issue #35135
83 #[allow(unused_variables)]
84 fn h() {
85 use test2::foo; //~ ERROR unused import
86 let foo = 0;
87 }
88
89 fn main() {
90 cal(foo::Point{x:3, y:9});
91 let mut a = 3;
92 let mut b = 4;
93 swap(&mut a, &mut b);
94 test::C.b();
95 let _a = foo();
96 }