Merge pull request #1204 from Manishearth/rustup
Rustup to *rustc 1.13.0-nightly (eac41469d 2016-08-30)* and bump to 0.0.87
This commit is contained in:
commit
7684a2ed65
@ -1,7 +1,8 @@
|
||||
# Change Log
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 0.0.87 — ??
|
||||
## 0.0.87 — 2016-08-31
|
||||
* Rustup to *rustc 1.13.0-nightly (eac41469d 2016-08-30)*
|
||||
* New lints: [`builtin_type_shadow`]
|
||||
* Fix FP in [`zero_prefixed_literal`] and `0b`/`Oo`
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "clippy"
|
||||
version = "0.0.86"
|
||||
version = "0.0.87"
|
||||
authors = [
|
||||
"Manish Goregaokar <manishsmail@gmail.com>",
|
||||
"Andre Bogus <bogusandre@gmail.com>",
|
||||
@ -25,7 +25,7 @@ test = false
|
||||
|
||||
[dependencies]
|
||||
# begin automatic update
|
||||
clippy_lints = { version = "0.0.86", path = "clippy_lints" }
|
||||
clippy_lints = { version = "0.0.87", path = "clippy_lints" }
|
||||
# end automatic update
|
||||
|
||||
[dev-dependencies]
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "clippy_lints"
|
||||
# begin automatic update
|
||||
version = "0.0.86"
|
||||
version = "0.0.87"
|
||||
# end automatic update
|
||||
authors = [
|
||||
"Manish Goregaokar <manishsmail@gmail.com>",
|
||||
|
@ -4,7 +4,7 @@ use reexport::*;
|
||||
use rustc::lint::*;
|
||||
use rustc::hir::*;
|
||||
use semver::Version;
|
||||
use syntax::ast::{Attribute, Lit, LitKind, MetaItemKind};
|
||||
use syntax::ast::{Attribute, Lit, LitKind, MetaItemKind, NestedMetaItem, NestedMetaItemKind};
|
||||
use syntax::codemap::Span;
|
||||
use utils::{in_macro, match_path, span_lint, span_lint_and_then, snippet_opt};
|
||||
use utils::paths;
|
||||
@ -89,11 +89,13 @@ impl LateLintPass for AttrPass {
|
||||
return;
|
||||
}
|
||||
for item in items {
|
||||
if let MetaItemKind::NameValue(ref name, ref lit) = item.node {
|
||||
if name == &"since" {
|
||||
check_semver(cx, item.span, lit);
|
||||
}
|
||||
}
|
||||
if_let_chain! {[
|
||||
let NestedMetaItemKind::MetaItem(ref mi) = item.node,
|
||||
let MetaItemKind::NameValue(ref name, ref lit) = mi.node,
|
||||
name == &"since",
|
||||
], {
|
||||
check_semver(cx, item.span, lit);
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -111,11 +113,9 @@ impl LateLintPass for AttrPass {
|
||||
"allow" | "warn" | "deny" | "forbid" => {
|
||||
// whitelist `unused_imports`
|
||||
for lint in lint_list {
|
||||
if let MetaItemKind::Word(ref word) = lint.node {
|
||||
if word == "unused_imports" {
|
||||
if let ItemUse(_) = item.node {
|
||||
return;
|
||||
}
|
||||
if is_word(lint, "unused_imports") {
|
||||
if let ItemUse(_) = item.node {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -214,10 +214,7 @@ fn check_attrs(cx: &LateContext, span: Span, name: &Name, attrs: &[Attribute]) {
|
||||
if values.len() != 1 || inline != &"inline" {
|
||||
continue;
|
||||
}
|
||||
if let MetaItemKind::Word(ref always) = values[0].node {
|
||||
if always != &"always" {
|
||||
continue;
|
||||
}
|
||||
if is_word(&values[0], "always") {
|
||||
span_lint(cx,
|
||||
INLINE_ALWAYS,
|
||||
attr.span,
|
||||
@ -239,3 +236,13 @@ fn check_semver(cx: &LateContext, span: Span, lit: &Lit) {
|
||||
span,
|
||||
"the since field must contain a semver-compliant version");
|
||||
}
|
||||
|
||||
fn is_word(nmi: &NestedMetaItem, expected: &str) -> bool {
|
||||
if let NestedMetaItemKind::MetaItem(ref mi) = nmi.node {
|
||||
if let MetaItemKind::Word(ref word) = mi.node {
|
||||
return word == expected;
|
||||
}
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
@ -140,8 +140,10 @@ fn check_copy_clone<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, item: &Item, trait_ref
|
||||
return; // ty is not Copy
|
||||
}
|
||||
|
||||
// Some types are not Clone by default but could be cloned `by hand` if necessary
|
||||
match ty.sty {
|
||||
//FIXME:unions: TypeVariants::TyUnion(..) => return,
|
||||
|
||||
// Some types are not Clone by default but could be cloned “by hand” if necessary
|
||||
TypeVariants::TyEnum(def, substs) |
|
||||
TypeVariants::TyStruct(def, substs) => {
|
||||
for variant in &def.variants {
|
||||
|
@ -209,7 +209,8 @@ fn has_is_empty(cx: &LateContext, expr: &Expr) -> bool {
|
||||
}
|
||||
ty::TyProjection(_) => ty.ty_to_def_id().map_or(false, |id| has_is_empty_impl(cx, &id)),
|
||||
ty::TyEnum(id, _) |
|
||||
ty::TyStruct(id, _) => has_is_empty_impl(cx, &id.did),
|
||||
ty::TyStruct(id, _) /*FIXME:unions: |
|
||||
ty::TyUnion(id, _)*/ => has_is_empty_impl(cx, &id.did),
|
||||
ty::TyArray(..) | ty::TyStr => true,
|
||||
_ => false,
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ use rustc::hir;
|
||||
use rustc::lint::*;
|
||||
use rustc::ty;
|
||||
use syntax::ast;
|
||||
use syntax::attr::{self, AttrMetaMethods};
|
||||
use syntax::attr;
|
||||
use syntax::codemap::Span;
|
||||
use utils::in_macro;
|
||||
|
||||
@ -99,7 +99,7 @@ impl LateLintPass for MissingDoc {
|
||||
let doc_hidden = self.doc_hidden() || attrs.iter().any(|attr| {
|
||||
attr.check_name("doc") && match attr.meta_item_list() {
|
||||
None => false,
|
||||
Some(l) => attr::contains_name(&l[..], "hidden"),
|
||||
Some(l) => attr::list_contains_name(&l[..], "hidden"),
|
||||
}
|
||||
});
|
||||
self.doc_hidden_stack.push(doc_hidden);
|
||||
@ -123,6 +123,7 @@ impl LateLintPass for MissingDoc {
|
||||
hir::ItemStruct(..) => "a struct",
|
||||
hir::ItemTrait(..) => "a trait",
|
||||
hir::ItemTy(..) => "a type alias",
|
||||
//FIXME:unions: hir::ItemUnion(..) => "a union",
|
||||
hir::ItemDefaultImpl(..) |
|
||||
hir::ItemExternCrate(..) |
|
||||
hir::ItemForeignMod(..) |
|
||||
|
@ -51,8 +51,8 @@ impl LateLintPass for UnsafeNameRemoval {
|
||||
ViewPath_::ViewPathList(_, ref path_list_items) => {
|
||||
for path_list_item in path_list_items.iter() {
|
||||
let plid = path_list_item.node;
|
||||
if let (Some(name), Some(rename)) = (plid.name(), plid.rename()) {
|
||||
unsafe_to_safe_check(name, rename, cx, &item.span);
|
||||
if let Some(rename) = plid.rename {
|
||||
unsafe_to_safe_check(plid.name, rename, cx, &item.span);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
use std::{fmt, fs, io};
|
||||
use std::io::Read;
|
||||
use syntax::{ast, codemap, ptr};
|
||||
use syntax::{ast, codemap};
|
||||
use syntax::parse::token;
|
||||
use toml;
|
||||
|
||||
/// Get the configuration file from arguments.
|
||||
pub fn file(args: &[ptr::P<ast::MetaItem>]) -> Result<Option<token::InternedString>, (&'static str, codemap::Span)> {
|
||||
for arg in args {
|
||||
pub fn file(args: &[codemap::Spanned<ast::NestedMetaItemKind>]) -> Result<Option<token::InternedString>, (&'static str, codemap::Span)> {
|
||||
for arg in args.iter().filter_map(|a| a.meta_item()) {
|
||||
match arg.node {
|
||||
ast::MetaItemKind::Word(ref name) |
|
||||
ast::MetaItemKind::List(ref name, _) => {
|
||||
|
@ -1,9 +1,10 @@
|
||||
#![feature(plugin)]
|
||||
#![plugin(clippy)]
|
||||
|
||||
//FIXME:unions: #![feature(untagged_unions)]
|
||||
|
||||
#![deny(warnings)]
|
||||
#![allow(dead_code)]
|
||||
#![allow(unused_variables)] // Temporary fix for rustc false positive. To be removed.
|
||||
|
||||
use std::hash::{Hash, Hasher};
|
||||
|
||||
@ -46,6 +47,22 @@ impl Clone for Qux {
|
||||
fn clone(&self) -> Self { Qux }
|
||||
}
|
||||
|
||||
/* FIXME:unions
|
||||
// looks like unions don't support deriving Clone for now
|
||||
#[derive(Copy)]
|
||||
union Union {
|
||||
a: u8,
|
||||
}
|
||||
|
||||
impl Clone for Union {
|
||||
fn clone(&self) -> Self {
|
||||
Union {
|
||||
a: 42,
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// See #666
|
||||
#[derive(Copy)]
|
||||
struct Lt<'a> {
|
||||
|
@ -4,6 +4,7 @@
|
||||
#![deny(no_effect, unnecessary_operation)]
|
||||
#![allow(dead_code)]
|
||||
#![allow(path_statements)]
|
||||
//FIXME:unions #![feature(untagged_unions)]
|
||||
|
||||
struct Unit;
|
||||
struct Tuple(i32);
|
||||
@ -15,6 +16,13 @@ enum Enum {
|
||||
Struct { field: i32 },
|
||||
}
|
||||
|
||||
/*FIXME:unions:
|
||||
union Union {
|
||||
a: u8,
|
||||
b: f64,
|
||||
}
|
||||
*/
|
||||
|
||||
fn get_number() -> i32 { 0 }
|
||||
fn get_struct() -> Struct { Struct { field: 0 } }
|
||||
|
||||
@ -30,6 +38,7 @@ fn main() {
|
||||
Tuple(0); //~ERROR statement with no effect
|
||||
Struct { field: 0 }; //~ERROR statement with no effect
|
||||
Struct { ..s }; //~ERROR statement with no effect
|
||||
//FIXME:unions: Union { a: 0 }; // /**FIXME*~***/ ERROR statement with no effect
|
||||
Enum::Tuple(0); //~ERROR statement with no effect
|
||||
Enum::Struct { field: 0 }; //~ERROR statement with no effect
|
||||
5 + 6; //~ERROR statement with no effect
|
||||
|
Loading…
x
Reference in New Issue
Block a user