fn visit_view_item(&mut self, i: &ast::ViewItem, _: ()) {
self.with_lint_attrs(i.attrs.as_slice(), |cx| {
check_attrs_usage(cx, i.attrs.as_slice());
+
+ cx.visit_ids(|v| v.visit_view_item(i, ()));
+
visit::walk_view_item(cx, i, ());
})
}
-// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
}
fn visit_view_item(&mut self, view_item: &ViewItem, env: ()) {
+ if !self.pass_through_items {
+ if self.visited_outermost {
+ return;
+ } else {
+ self.visited_outermost = true;
+ }
+ }
match view_item.node {
ViewItemExternCrate(_, _, node_id) => {
self.operation.visit_id(node_id)
}
}
}
- visit::walk_view_item(self, view_item, env)
+ visit::walk_view_item(self, view_item, env);
+ self.visited_outermost = false;
}
fn visit_foreign_item(&mut self, foreign_item: &ForeignItem, env: ()) {
--- /dev/null
+// Copyright 2014 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.
+
+#![deny(unused_imports)]
+
+// The aim of this test is to ensure that deny/allow/warn directives
+// are applied to individual "use" statements instead of silently
+// ignored.
+
+#[allow(dead_code)]
+mod a { pub static x: int = 3; pub static y: int = 4; }
+
+mod b {
+ use a::x; //~ ERROR: unused import
+ #[allow(unused_imports)]
+ use a::y; // no error here
+}
+
+#[allow(unused_imports)]
+mod c {
+ use a::x;
+ #[deny(unused_imports)]
+ use a::y; //~ ERROR: unused import
+}
+
+fn main() {}