@@ -3,6 +3,7 @@ use rustc_attr::parse_version;
3
3
use rustc_session:: { RustcVersion , Session } ;
4
4
use rustc_span:: { Symbol , sym} ;
5
5
use serde:: Deserialize ;
6
+ use smallvec:: { SmallVec , smallvec} ;
6
7
use std:: fmt;
7
8
8
9
macro_rules! msrv_aliases {
@@ -67,7 +68,7 @@ msrv_aliases! {
67
68
/// Tracks the current MSRV from `clippy.toml`, `Cargo.toml` or set via `#[clippy::msrv]`
68
69
#[ derive( Debug , Clone ) ]
69
70
pub struct Msrv {
70
- stack : Vec < RustcVersion > ,
71
+ stack : SmallVec < [ RustcVersion ; 2 ] > ,
71
72
}
72
73
73
74
impl fmt:: Display for Msrv {
@@ -87,14 +88,14 @@ impl<'de> Deserialize<'de> for Msrv {
87
88
{
88
89
let v = String :: deserialize ( deserializer) ?;
89
90
parse_version ( Symbol :: intern ( & v) )
90
- . map ( |v| Msrv { stack : vec ! [ v] } )
91
+ . map ( |v| Msrv { stack : smallvec ! [ v] } )
91
92
. ok_or_else ( || serde:: de:: Error :: custom ( "not a valid Rust version" ) )
92
93
}
93
94
}
94
95
95
96
impl Msrv {
96
97
pub fn empty ( ) -> Msrv {
97
- Msrv { stack : Vec :: new ( ) }
98
+ Msrv { stack : SmallVec :: new ( ) }
98
99
}
99
100
100
101
pub fn read_cargo ( & mut self , sess : & Session ) {
@@ -103,7 +104,7 @@ impl Msrv {
103
104
. and_then ( |v| parse_version ( Symbol :: intern ( & v) ) ) ;
104
105
105
106
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] ,
107
108
( Some ( clippy_msrv) , Some ( cargo_msrv) ) => {
108
109
if clippy_msrv != cargo_msrv {
109
110
sess. dcx ( ) . warn ( format ! (
0 commit comments