Swap Msrv from Vec to SmallVec

This commit is contained in:
GnomedDev 2024-10-27 14:11:20 +00:00
parent 31f6679e78
commit d0b15f157c
2 changed files with 6 additions and 4 deletions

View File

@ -20,6 +20,7 @@
extern crate rustc_errors; extern crate rustc_errors;
extern crate rustc_session; extern crate rustc_session;
extern crate rustc_span; extern crate rustc_span;
extern crate smallvec;
mod conf; mod conf;
mod metadata; mod metadata;

View File

@ -3,6 +3,7 @@
use rustc_session::{RustcVersion, Session}; use rustc_session::{RustcVersion, Session};
use rustc_span::{Symbol, sym}; use rustc_span::{Symbol, sym};
use serde::Deserialize; use serde::Deserialize;
use smallvec::{SmallVec, smallvec};
use std::fmt; use std::fmt;
macro_rules! msrv_aliases { macro_rules! msrv_aliases {
@ -67,7 +68,7 @@ macro_rules! msrv_aliases {
/// Tracks the current MSRV from `clippy.toml`, `Cargo.toml` or set via `#[clippy::msrv]` /// Tracks the current MSRV from `clippy.toml`, `Cargo.toml` or set via `#[clippy::msrv]`
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct Msrv { pub struct Msrv {
stack: Vec<RustcVersion>, stack: SmallVec<[RustcVersion; 2]>,
} }
impl fmt::Display for Msrv { impl fmt::Display for Msrv {
@ -87,14 +88,14 @@ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
{ {
let v = String::deserialize(deserializer)?; let v = String::deserialize(deserializer)?;
parse_version(Symbol::intern(&v)) parse_version(Symbol::intern(&v))
.map(|v| Msrv { stack: vec![v] }) .map(|v| Msrv { stack: smallvec![v] })
.ok_or_else(|| serde::de::Error::custom("not a valid Rust version")) .ok_or_else(|| serde::de::Error::custom("not a valid Rust version"))
} }
} }
impl Msrv { impl Msrv {
pub fn empty() -> Msrv { pub fn empty() -> Msrv {
Msrv { stack: Vec::new() } Msrv { stack: SmallVec::new() }
} }
pub fn read_cargo(&mut self, sess: &Session) { pub fn read_cargo(&mut self, sess: &Session) {
@ -103,7 +104,7 @@ pub fn read_cargo(&mut self, sess: &Session) {
.and_then(|v| parse_version(Symbol::intern(&v))); .and_then(|v| parse_version(Symbol::intern(&v)));
match (self.current(), cargo_msrv) { match (self.current(), cargo_msrv) {
(None, Some(cargo_msrv)) => self.stack = vec![cargo_msrv], (None, Some(cargo_msrv)) => self.stack = smallvec![cargo_msrv],
(Some(clippy_msrv), Some(cargo_msrv)) => { (Some(clippy_msrv), Some(cargo_msrv)) => {
if clippy_msrv != cargo_msrv { if clippy_msrv != cargo_msrv {
sess.dcx().warn(format!( sess.dcx().warn(format!(