Skip to content

Nightly sync 20160701 #1064

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

Closed
wants to merge 6 commits into from
Closed
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
2 changes: 1 addition & 1 deletion clippy_lints/src/booleans.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ impl<'a, 'tcx, 'v> Hir2Qmm<'a, 'tcx, 'v> {
Expr {
id: DUMMY_NODE_ID,
span: DUMMY_SP,
attrs: None,
attrs: vec![].into(),
node: ExprBinary(dummy_spanned(op), lhs.clone(), rhs.clone()),
}
};
Expand Down
15 changes: 5 additions & 10 deletions clippy_lints/src/collapsible_if.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ fn check_if(cx: &EarlyContext, expr: &ast::Expr) {
fn check_collapsible_maybe_if_let(cx: &EarlyContext, else_: &ast::Expr) {
if_let_chain! {[
let ast::ExprKind::Block(ref block) = else_.node,
block.stmts.is_empty(),
let Some(ref else_) = block.expr,
block.stmts.len() == 1,
let Some(ref last_stmt) = block.stmts.last(),
let ast::StmtKind::Expr(ref else_) = last_stmt.node,
], {
match else_.node {
ast::ExprKind::If(..) | ast::ExprKind::IfLet(..) => {
Expand Down Expand Up @@ -129,18 +130,12 @@ fn check_to_string(cx: &EarlyContext, e: &ast::Expr) -> Cow<'static, str> {
}

fn single_stmt_of_block(block: &ast::Block) -> Option<&ast::Expr> {
if block.stmts.len() == 1 && block.expr.is_none() {
if let ast::StmtKind::Expr(ref expr, _) = block.stmts[0].node {
if block.stmts.len() == 1 {
if let ast::StmtKind::Expr(ref expr) = block.stmts[0].node {
single_stmt_of_expr(expr)
} else {
None
}
} else if block.stmts.is_empty() {
if let Some(ref p) = block.expr {
Some(p)
} else {
None
}
} else {
None
}
Expand Down
12 changes: 2 additions & 10 deletions clippy_lints/src/formatting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,21 +59,13 @@ impl EarlyLintPass for Formatting {
fn check_block(&mut self, cx: &EarlyContext, block: &ast::Block) {
for w in block.stmts.windows(2) {
match (&w[0].node, &w[1].node) {
(&ast::StmtKind::Expr(ref first, _), &ast::StmtKind::Expr(ref second, _)) |
(&ast::StmtKind::Expr(ref first, _), &ast::StmtKind::Semi(ref second, _)) => {
(&ast::StmtKind::Expr(ref first), &ast::StmtKind::Expr(ref second)) |
(&ast::StmtKind::Expr(ref first), &ast::StmtKind::Semi(ref second)) => {
check_consecutive_ifs(cx, first, second);
}
_ => (),
}
}

if let Some(ref expr) = block.expr {
if let Some(ref stmt) = block.stmts.iter().last() {
if let ast::StmtKind::Expr(ref first, _) = stmt.node {
check_consecutive_ifs(cx, first, expr);
}
}
}
}

fn check_expr(&mut self, cx: &EarlyContext, expr: &ast::Expr) {
Expand Down
23 changes: 11 additions & 12 deletions clippy_lints/src/items_after_statements.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,24 +46,23 @@ impl EarlyLintPass for ItemsAfterStatements {
}
let mut stmts = item.stmts.iter().map(|stmt| &stmt.node);
// skip initial items
while let Some(&StmtKind::Decl(ref decl, _)) = stmts.next() {
if let DeclKind::Local(_) = decl.node {
while let Some(decl) = stmts.next() {
if let StmtKind::Item(_) = *decl {
} else {
break;
}
}
// lint on all further items
for stmt in stmts {
if let StmtKind::Decl(ref decl, _) = *stmt {
if let DeclKind::Item(ref it) = decl.node {
if in_macro(cx, it.span) {
return;
}
cx.struct_span_lint(ITEMS_AFTER_STATEMENTS,
it.span,
"adding items after statements is confusing, since items exist from the \
start of the scope")
.emit();
if let StmtKind::Item(ref it) = *stmt {
if in_macro(cx, it.span) {
return;
}
cx.struct_span_lint(ITEMS_AFTER_STATEMENTS,
it.span,
"adding items after statements is confusing, since items exist from the \
start of the scope")
.emit();
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion clippy_lints/src/methods.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ declare_lint! {
/// |`is_` |`&self` or none |
/// |`to_` |`&self` |
///
/// **Why is this bad?** Consistency breeds readability. If you follow the conventions, your users won't be surprised that they e.g. need to supply a mutable reference to a `as_..` function.
/// **Why is this bad?** Consistency breeds readability. If you follow the conventions, your users won't be surprised that they, e.g., need to supply a mutable reference to a `as_..` function.
///
/// **Known problems:** None
///
Expand Down
5 changes: 2 additions & 3 deletions clippy_lints/src/misc_early.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,12 +171,11 @@ impl EarlyLintPass for MiscEarly {
fn check_block(&mut self, cx: &EarlyContext, block: &Block) {
for w in block.stmts.windows(2) {
if_let_chain! {[
let StmtKind::Decl(ref first, _) = w[0].node,
let DeclKind::Local(ref local) = first.node,
let StmtKind::Local(ref local) = w[0].node,
let Option::Some(ref t) = local.init,
let ExprKind::Closure(_,_,_,_) = t.node,
let PatKind::Ident(_,sp_ident,_) = local.pat.node,
let StmtKind::Semi(ref second,_) = w[1].node,
let StmtKind::Semi(ref second) = w[1].node,
let ExprKind::Assign(_,ref call) = second.node,
let ExprKind::Call(ref closure,_) = call.node,
let ExprKind::Path(_,ref path) = closure.node
Expand Down
14 changes: 7 additions & 7 deletions clippy_lints/src/non_expressive_names.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ const WHITELIST: &'static [&'static [&'static str]] = &[

struct SimilarNamesNameVisitor<'a, 'b: 'a, 'c: 'b>(&'a mut SimilarNamesLocalVisitor<'b, 'c>);

impl<'v, 'a, 'b, 'c> Visitor<'v> for SimilarNamesNameVisitor<'a, 'b, 'c> {
fn visit_pat(&mut self, pat: &'v Pat) {
impl<'v, 'a, 'b, 'c> Visitor for SimilarNamesNameVisitor<'a, 'b, 'c> {
fn visit_pat(&mut self, pat: &Pat) {
match pat.node {
PatKind::Ident(_, id, _) => self.check_name(id.span, id.node.name),
PatKind::Struct(_, ref fields, _) => {
Expand Down Expand Up @@ -226,25 +226,25 @@ impl<'a, 'b> SimilarNamesLocalVisitor<'a, 'b> {
}
}

impl<'v, 'a, 'b> Visitor<'v> for SimilarNamesLocalVisitor<'a, 'b> {
fn visit_local(&mut self, local: &'v Local) {
impl<'v, 'a, 'b> Visitor for SimilarNamesLocalVisitor<'a, 'b> {
fn visit_local(&mut self, local: &Local) {
if let Some(ref init) = local.init {
self.apply(|this| walk_expr(this, &**init));
}
// add the pattern after the expression because the bindings aren't available yet in the init expression
SimilarNamesNameVisitor(self).visit_pat(&*local.pat);
}
fn visit_block(&mut self, blk: &'v Block) {
fn visit_block(&mut self, blk: &Block) {
self.apply(|this| walk_block(this, blk));
}
fn visit_arm(&mut self, arm: &'v Arm) {
fn visit_arm(&mut self, arm: &Arm) {
self.apply(|this| {
// just go through the first pattern, as either all patterns bind the same bindings or rustc would have errored much earlier
SimilarNamesNameVisitor(this).visit_pat(&arm.pats[0]);
this.apply(|this| walk_expr(this, &arm.body));
});
}
fn visit_item(&mut self, _: &'v Item) {
fn visit_item(&mut self, _: &Item) {
// do not recurse into inner items
}
}
Expand Down
16 changes: 8 additions & 8 deletions clippy_lints/src/returns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ pub struct ReturnPass;
impl ReturnPass {
// Check the final stmt or expr in a block for unnecessary return.
fn check_block_return(&mut self, cx: &EarlyContext, block: &Block) {
if let Some(ref expr) = block.expr {
self.check_final_expr(cx, expr);
} else if let Some(stmt) = block.stmts.last() {
if let StmtKind::Semi(ref expr, _) = stmt.node {
if let Some(stmt) = block.stmts.last() {
if let StmtKind::Expr(ref expr) = stmt.node {
self.check_final_expr(cx, expr);
} else if let StmtKind::Semi(ref expr) = stmt.node {
if let ExprKind::Ret(Some(ref inner)) = expr.node {
self.emit_return_lint(cx, (stmt.span, inner.span));
}
Expand Down Expand Up @@ -90,10 +90,10 @@ impl ReturnPass {
fn check_let_return(&mut self, cx: &EarlyContext, block: &Block) {
// we need both a let-binding stmt and an expr
if_let_chain! {[
let Some(stmt) = block.stmts.last(),
let Some(ref retexpr) = block.expr,
let StmtKind::Decl(ref decl, _) = stmt.node,
let DeclKind::Local(ref local) = decl.node,
let Some((stmt, rest)) = block.stmts.split_last(),
let Some(ntl_stmt) = rest.last(),
let StmtKind::Expr(ref retexpr) = stmt.node,
let StmtKind::Local(ref local) = ntl_stmt.node,
let Some(ref initexpr) = local.init,
let PatKind::Ident(_, Spanned { node: id, .. }, _) = local.pat.node,
let ExprKind::Path(_, ref path) = retexpr.node,
Expand Down
2 changes: 1 addition & 1 deletion mini-macro/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ extern crate rustc;
extern crate rustc_plugin;

use syntax::codemap::Span;
use syntax::ast::TokenTree;
use syntax::tokenstream::TokenTree;
use syntax::ext::base::{ExtCtxt, MacResult, MacEager};
use syntax::ext::build::AstBuilder; // trait for expr_usize
use rustc_plugin::Registry;
Expand Down
6 changes: 3 additions & 3 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
extern crate rustc_driver;
extern crate getopts;
extern crate rustc;
extern crate rustc_errors as errors;
extern crate syntax;
extern crate rustc_plugin;
extern crate clippy_lints;

use rustc_driver::{driver, CompilerCalls, RustcDefaultCalls, Compilation};
use rustc::session::{config, Session};
use rustc::session::config::{Input, ErrorOutputType};
use syntax::diagnostics;
use std::path::PathBuf;
use std::process::Command;

Expand All @@ -36,7 +36,7 @@ impl<'a> CompilerCalls<'a> for ClippyCompilerCalls {
fn early_callback(&mut self,
matches: &getopts::Matches,
sopts: &config::Options,
descriptions: &diagnostics::registry::Registry,
descriptions: &errors::registry::Registry,
output: ErrorOutputType)
-> Compilation {
self.0.early_callback(matches, sopts, descriptions, output)
Expand All @@ -46,7 +46,7 @@ impl<'a> CompilerCalls<'a> for ClippyCompilerCalls {
sopts: &config::Options,
odir: &Option<PathBuf>,
ofile: &Option<PathBuf>,
descriptions: &diagnostics::registry::Registry)
descriptions: &errors::registry::Registry)
-> Option<(Input, Option<PathBuf>)> {
self.0.no_input(matches, sopts, odir, ofile, descriptions)
}
Expand Down
2 changes: 1 addition & 1 deletion tests/consts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ fn expr(n: Expr_) -> Expr {
id: 1,
node: n,
span: COMMAND_LINE_SP,
attrs: None,
attrs: vec![].into(),
}
}

Expand Down