Use SmallVec to slightly shrink ModPath size

This commit is contained in:
Jonas Schievink 2022-07-06 19:49:05 +02:00
parent 00194ade76
commit d2fd137252
3 changed files with 6 additions and 3 deletions

1
Cargo.lock generated
View File

@ -532,6 +532,7 @@ dependencies = [
"mbe",
"profile",
"rustc-hash",
"smallvec",
"stdx",
"syntax",
"tracing",

View File

@ -19,6 +19,7 @@ itertools = "0.10.3"
hashbrown = { version = "0.12.1", features = [
"inline-more",
], default-features = false }
smallvec = { version = "1.9.0", features = ["const_new"] }
stdx = { path = "../stdx", version = "0.0.0" }
base-db = { path = "../base-db", version = "0.0.0" }

View File

@ -12,12 +12,13 @@
};
use base_db::CrateId;
use either::Either;
use smallvec::SmallVec;
use syntax::{ast, AstNode};
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ModPath {
pub kind: PathKind,
segments: Vec<Name>,
segments: SmallVec<[Name; 1]>,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
@ -41,13 +42,13 @@ pub fn from_src(db: &dyn AstDatabase, path: ast::Path, hygiene: &Hygiene) -> Opt
}
pub fn from_segments(kind: PathKind, segments: impl IntoIterator<Item = Name>) -> ModPath {
let segments = segments.into_iter().collect::<Vec<_>>();
let segments = segments.into_iter().collect();
ModPath { kind, segments }
}
/// Creates a `ModPath` from a `PathKind`, with no extra path segments.
pub const fn from_kind(kind: PathKind) -> ModPath {
ModPath { kind, segments: Vec::new() }
ModPath { kind, segments: SmallVec::new_const() }
}
pub fn segments(&self) -> &[Name] {