@@ -3,6 +3,7 @@ use rustc_attr::parse_version;
33use rustc_session:: { RustcVersion , Session } ;
44use rustc_span:: { Symbol , sym} ;
55use serde:: Deserialize ;
6+ use smallvec:: { SmallVec , smallvec} ;
67use std:: fmt;
78
89macro_rules! msrv_aliases {
@@ -67,7 +68,7 @@ msrv_aliases! {
6768/// Tracks the current MSRV from `clippy.toml`, `Cargo.toml` or set via `#[clippy::msrv]`
6869#[ derive( Debug , Clone ) ]
6970pub struct Msrv {
70- stack : Vec < RustcVersion > ,
71+ stack : SmallVec < [ RustcVersion ; 2 ] > ,
7172}
7273
7374impl fmt:: Display for Msrv {
@@ -87,14 +88,14 @@ impl<'de> Deserialize<'de> for Msrv {
8788 {
8889 let v = String :: deserialize ( deserializer) ?;
8990 parse_version ( Symbol :: intern ( & v) )
90- . map ( |v| Msrv { stack : vec ! [ v] } )
91+ . map ( |v| Msrv { stack : smallvec ! [ v] } )
9192 . ok_or_else ( || serde:: de:: Error :: custom ( "not a valid Rust version" ) )
9293 }
9394}
9495
9596impl Msrv {
9697 pub fn empty ( ) -> Msrv {
97- Msrv { stack : Vec :: new ( ) }
98+ Msrv { stack : SmallVec :: new ( ) }
9899 }
99100
100101 pub fn read_cargo ( & mut self , sess : & Session ) {
@@ -103,7 +104,7 @@ impl Msrv {
103104 . and_then ( |v| parse_version ( Symbol :: intern ( & v) ) ) ;
104105
105106 match ( self . current ( ) , cargo_msrv) {
106- ( None , Some ( cargo_msrv) ) => self . stack = vec ! [ cargo_msrv] ,
107+ ( None , Some ( cargo_msrv) ) => self . stack = smallvec ! [ cargo_msrv] ,
107108 ( Some ( clippy_msrv) , Some ( cargo_msrv) ) => {
108109 if clippy_msrv != cargo_msrv {
109110 sess. dcx ( ) . warn ( format ! (
0 commit comments