Skip to content

lint: add lint for use of a ~[T]. #12861

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 14, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/compiletest/compiletest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#[allow(non_camel_case_types)];
#[deny(warnings)];
#[allow(deprecated_owned_vector)];

extern crate test;
extern crate getopts;
Expand Down
1 change: 1 addition & 0 deletions src/libarena/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#[license = "MIT/ASL2"];
#[allow(missing_doc)];
#[feature(managed_boxes)];
#[allow(deprecated_owned_vector)];

extern crate collections;

Expand Down
1 change: 1 addition & 0 deletions src/libcollections/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
// NOTE remove the following two attributes after the next snapshot.
#[allow(unrecognized_lint)];
#[allow(default_type_param_usage)];
#[allow(deprecated_owned_vector)];

extern crate rand;

Expand Down
1 change: 1 addition & 0 deletions src/libextra/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ Rust extras are part of the standard Rust distribution.

#[feature(macro_rules, globs, managed_boxes, asm, default_type_params)];

#[allow(deprecated_owned_vector)];
#[deny(non_camel_case_types)];
#[deny(missing_doc)];

Expand Down
1 change: 1 addition & 0 deletions src/libflate/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ pub fn inflate_bytes_zlib(bytes: &[u8]) -> CVec<u8> {

#[cfg(test)]
mod tests {
#[allow(deprecated_owned_vector)];
extern crate rand;

use super::{inflate_bytes, deflate_bytes};
Expand Down
1 change: 1 addition & 0 deletions src/libgetopts/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
#[crate_type = "dylib"];
#[license = "MIT/ASL2"];
#[allow(missing_doc)];
#[allow(deprecated_owned_vector)];

#[feature(globs)];

Expand Down
1 change: 1 addition & 0 deletions src/libglob/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#[crate_type = "rlib"];
#[crate_type = "dylib"];
#[license = "MIT/ASL2"];
#[allow(deprecated_owned_vector)];

use std::cell::Cell;
use std::{cmp, os, path};
Expand Down
1 change: 1 addition & 0 deletions src/libgreen/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@
// NB this does *not* include globs, please keep it that way.
#[feature(macro_rules)];
#[allow(visible_private_types)];
#[allow(deprecated_owned_vector)];

extern crate rand;

Expand Down
1 change: 1 addition & 0 deletions src/libnative/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
html_root_url = "http://static.rust-lang.org/doc/master")];
#[deny(unused_result, unused_must_use)];
#[allow(non_camel_case_types)];
#[allow(deprecated_owned_vector)];

// NB this crate explicitly does *not* allow glob imports, please seriously
// consider whether they're needed before adding that feature here (the
Expand Down
1 change: 1 addition & 0 deletions src/libnum/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#[crate_type = "rlib"];
#[crate_type = "dylib"];
#[license = "MIT/ASL2"];
#[allow(deprecated_owned_vector)];

extern crate rand;

Expand Down
1 change: 1 addition & 0 deletions src/librand/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ println!("{:?}", tuple_ptr)
html_root_url = "http://static.rust-lang.org/doc/master")];

#[feature(macro_rules, managed_boxes)];
#[allow(deprecated_owned_vector)];

use std::cast;
use std::kinds::marker;
Expand Down
1 change: 1 addition & 0 deletions src/librustc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ This API is completely unstable and subject to change.
html_root_url = "http://static.rust-lang.org/doc/master")];

#[allow(deprecated)];
#[allow(deprecated_owned_vector)];
#[feature(macro_rules, globs, struct_variant, managed_boxes)];
#[feature(quote, default_type_params)];

Expand Down
23 changes: 22 additions & 1 deletion src/librustc/middle/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ pub enum Lint {
UnusedMustUse,
UnusedResult,

DeprecatedOwnedVector,

Warnings,
}

Expand Down Expand Up @@ -397,7 +399,14 @@ static lint_table: &'static [(&'static str, LintSpec)] = &[
lint: UnusedResult,
desc: "unused result of an expression in a statement",
default: allow,
})
}),

("deprecated_owned_vector",
LintSpec {
lint: DeprecatedOwnedVector,
desc: "use of a `~[T]` vector",
default: warn
}),
];

/*
Expand Down Expand Up @@ -1107,6 +1116,17 @@ fn check_unused_result(cx: &Context, s: &ast::Stmt) {
}
}

fn check_deprecated_owned_vector(cx: &Context, e: &ast::Expr) {
let t = ty::expr_ty(cx.tcx, e);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couldn't this be expressed with just:

match e.node {
    ast::ExprVstore(_, ast::ExprVstoreUniq) => {...}
    _ => {}
}

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Matching on the AST itself doesn't handle using functions like with_capacity, from_elem or .collect(). This actually checks the type of such expressions.

(See the test case... which I just added ;P )

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah right, that makes sense! Thanks 👍

match ty::get(t).sty {
ty::ty_vec(_, ty::vstore_uniq) => {
cx.span_lint(DeprecatedOwnedVector, e.span,
"use of deprecated `~[]` vector; replaced by `std::vec_ng::Vec`")
}
_ => {}
}
}

fn check_item_non_camel_case_types(cx: &Context, it: &ast::Item) {
fn is_camel_case(ident: ast::Ident) -> bool {
let ident = token::get_ident(ident);
Expand Down Expand Up @@ -1634,6 +1654,7 @@ impl<'a> Visitor<()> for Context<'a> {

check_type_limits(self, e);
check_unused_casts(self, e);
check_deprecated_owned_vector(self, e);

visit::walk_expr(self, e, ());
}
Expand Down
1 change: 1 addition & 0 deletions src/librustdoc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#[crate_type = "dylib"];
#[crate_type = "rlib"];

#[allow(deprecated_owned_vector)];
#[feature(globs, struct_variant, managed_boxes, macro_rules)];

extern crate syntax;
Expand Down
3 changes: 3 additions & 0 deletions src/librustdoc/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,9 @@ fn maketest(s: &str, cratename: &str, loose_feature_gating: bool) -> ~str {
let mut prog = ~r"
#[deny(warnings)];
#[allow(unused_variable, dead_assignment, unused_mut, attribute_usage, dead_code)];

// FIXME: remove when ~[] disappears from tests.
#[allow(deprecated_owned_vector)];
";

if loose_feature_gating {
Expand Down
1 change: 1 addition & 0 deletions src/librustuv/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ via `close` and `delete` methods.
#[feature(macro_rules)];
#[deny(unused_result, unused_must_use)];
#[allow(visible_private_types)];
#[allow(deprecated_owned_vector)];

#[cfg(test)] extern crate green;

Expand Down
2 changes: 2 additions & 0 deletions src/libsemver/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
#[crate_type = "dylib"];
#[license = "MIT/ASL2"];

#[allow(deprecated_owned_vector)];

use std::char;
use std::cmp;
use std::fmt;
Expand Down
1 change: 1 addition & 0 deletions src/libserialize/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Core encoding and decoding interfaces.
// NOTE remove the following two attributes after the next snapshot.
#[allow(unrecognized_lint)];
#[allow(default_type_param_usage)];
#[allow(deprecated_owned_vector)];

// test harness access
#[cfg(test)]
Expand Down
1 change: 1 addition & 0 deletions src/libstd/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
#[deny(non_camel_case_types)];
#[deny(missing_doc)];
#[allow(unknown_features)];
#[allow(deprecated_owned_vector)];

// When testing libstd, bring in libuv as the I/O backend so tests can print
// things and all of the std::io tests have an I/O interface to run on top
Expand Down
6 changes: 4 additions & 2 deletions src/libstd/vec_ng.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// Migrate documentation over from `std::vec` when it is removed.
#[doc(hidden)];
// Migrate documentation over from `std::vec` progressively. (This is
// shown in docs so that people have something to refer too, even if
// the page is rather empty.)
#[allow(missing_doc)];

use cast::{forget, transmute};
use clone::Clone;
Expand Down
2 changes: 2 additions & 0 deletions src/libsync/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#[crate_type = "dylib"];
#[license = "MIT/ASL2"];

#[allow(deprecated_owned_vector)];

pub use arc::{Arc, MutexArc, RWArc, RWWriteMode, RWReadMode, ArcCondvar, CowArc};
pub use sync::{Mutex, RWLock, Condvar, Semaphore, RWLockWriteMode,
RWLockReadMode, Barrier, one, mutex};
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ This API is completely unstable and subject to change.

#[allow(deprecated)];
#[deny(non_camel_case_types)];
#[allow(deprecated_owned_vector)];

extern crate serialize;
extern crate term;
Expand Down
1 change: 1 addition & 0 deletions src/libterm/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#[feature(macro_rules)];
#[deny(non_camel_case_types)];
#[allow(missing_doc)];
#[allow(deprecated_owned_vector)];

extern crate collections;

Expand Down
1 change: 1 addition & 0 deletions src/libtest/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#[crate_type = "dylib"];

#[feature(asm)];
#[allow(deprecated_owned_vector)];

extern crate collections;
extern crate extra;
Expand Down
1 change: 1 addition & 0 deletions src/libtime/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#[license = "MIT/ASL2"];

#[allow(missing_doc)];
#[allow(deprecated_owned_vector)];

extern crate serialize;

Expand Down
2 changes: 2 additions & 0 deletions src/libuuid/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ Examples of string representations:
#[crate_type = "dylib"];
#[license = "MIT/ASL2"];

#[allow(deprecated_owned_vector)];

#[feature(default_type_params)];

// NOTE remove the following two attributes after the next snapshot.
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/issue-2150.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#[deny(unreachable_code)];
#[allow(unused_variable)];
#[allow(dead_code)];
#[allow(deprecated_owned_vector)];

fn fail_len(v: ~[int]) -> uint {
let mut i = 3;
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/issue-8727.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[allow(deprecated_owned_vector)];

// Verify the compiler fails with an error on infinite function
// recursions.
Expand Down
17 changes: 17 additions & 0 deletions src/test/compile-fail/lint-deprecated-owned-vector.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// 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(deprecated_owned_vector)];

fn main() {
~[1]; //~ ERROR use of deprecated `~[]`
//~^ ERROR use of deprecated `~[]`
std::vec::with_capacity::<int>(10); //~ ERROR use of deprecated `~[]`
}
1 change: 1 addition & 0 deletions src/test/compile-fail/lint-heap-memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#[feature(managed_boxes)];
#[forbid(heap_memory)];
#[allow(dead_code)];
#[allow(deprecated_owned_vector)];

struct Foo {
x: @int //~ ERROR type uses managed
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/lint-unused-imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#[feature(globs)];
#[deny(unused_imports)];
#[allow(dead_code)];
#[allow(deprecated_owned_vector)];

use cal = bar::c::cc;

Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/lint-unused-mut-variables.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#[allow(dead_assignment)];
#[allow(unused_variable)];
#[allow(dead_code)];
#[allow(deprecated_owned_vector)];
#[deny(unused_mut)];

fn main() {
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/lint-unused-unsafe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#[allow(dead_code)];
#[deny(unused_unsafe)];
#[allow(deprecated_owned_vector)];

mod foo {
extern {
Expand Down
1 change: 1 addition & 0 deletions src/test/run-pass/ifmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#[feature(macro_rules)];
#[deny(warnings)];
#[allow(unused_must_use)];
#[allow(deprecated_owned_vector)];

use std::fmt;
use std::io::MemWriter;
Expand Down