#![warn(clippy::read_zero_byte_vec)] #![allow(clippy::unused_io_amount)] use std::fs::File; use std::io; use std::io::prelude::*; extern crate futures; use futures::io::{AsyncRead, AsyncReadExt}; use tokio::io::{AsyncRead as TokioAsyncRead, AsyncReadExt as _, AsyncWrite as TokioAsyncWrite, AsyncWriteExt as _}; fn test() -> io::Result<()> { let cap = 1000; let mut f = File::open("foo.txt").unwrap(); // should lint let mut data = Vec::with_capacity(20); f.read_exact(&mut data).unwrap(); // should lint let mut data2 = Vec::with_capacity(cap); f.read_exact(&mut data2)?; // should lint let mut data3 = Vec::new(); f.read_exact(&mut data3)?; // should lint let mut data4 = vec![]; let _ = f.read(&mut data4)?; // should lint let _ = { let mut data5 = Vec::new(); f.read(&mut data5) }; // should lint let _ = { let mut data6: Vec = Default::default(); f.read(&mut data6) }; // should not lint let mut buf = [0u8; 100]; f.read(&mut buf)?; // should not lint let mut empty = vec![]; let mut data7 = vec![]; f.read(&mut empty); // should not lint f.read(&mut data7); // should not lint let mut data8 = Vec::new(); data8.resize(100, 0); f.read_exact(&mut data8)?; // should not lint let mut data9 = vec![1, 2, 3]; f.read_exact(&mut data9)?; Ok(()) } async fn test_futures(r: &mut R) { // should lint let mut data = Vec::new(); r.read(&mut data).await.unwrap(); // should lint let mut data2 = Vec::new(); r.read_exact(&mut data2).await.unwrap(); } async fn test_tokio(r: &mut R) { // should lint let mut data = Vec::new(); r.read(&mut data).await.unwrap(); // should lint let mut data2 = Vec::new(); r.read_exact(&mut data2).await.unwrap(); } fn main() {}