Skip to content

Commit 61ddcf0

Browse files
authored
Merge pull request rust-lang#19688 from ChayimFriedman2/less-unused
internal: More `shrink_to_fit()` and upgrade dashmap and hashbrown
2 parents 40a3f84 + 31523ae commit 61ddcf0

File tree

14 files changed

+164
-173
lines changed

14 files changed

+164
-173
lines changed

src/tools/rust-analyzer/Cargo.lock

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ name = "base-db"
7979
version = "0.0.0"
8080
dependencies = [
8181
"cfg",
82-
"dashmap 5.5.3",
82+
"dashmap",
8383
"intern",
8484
"la-arena 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
8585
"query-group-macro",
@@ -323,19 +323,6 @@ dependencies = [
323323
"windows-sys 0.59.0",
324324
]
325325

326-
[[package]]
327-
name = "dashmap"
328-
version = "5.5.3"
329-
source = "registry+https://github.com/rust-lang/crates.io-index"
330-
checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
331-
dependencies = [
332-
"cfg-if",
333-
"hashbrown 0.14.5",
334-
"lock_api",
335-
"once_cell",
336-
"parking_lot_core",
337-
]
338-
339326
[[package]]
340327
name = "dashmap"
341328
version = "6.1.0"
@@ -1051,7 +1038,7 @@ dependencies = [
10511038
name = "intern"
10521039
version = "0.0.0"
10531040
dependencies = [
1054-
"dashmap 5.5.3",
1041+
"dashmap",
10551042
"hashbrown 0.14.5",
10561043
"rustc-hash 2.1.1",
10571044
"triomphe",
@@ -2045,7 +2032,7 @@ checksum = "1be22155f8d9732518b2db2bf379fe6f0b2375e76b08b7c8fe6c1b887d548c24"
20452032
dependencies = [
20462033
"boxcar",
20472034
"crossbeam-queue",
2048-
"dashmap 6.1.0",
2035+
"dashmap",
20492036
"hashbrown 0.15.2",
20502037
"hashlink",
20512038
"indexmap",

src/tools/rust-analyzer/Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,10 @@ triomphe = { version = "0.1.14", default-features = false, features = ["std"] }
158158
url = "2.5.4"
159159
xshell = "0.2.7"
160160

161-
162161
# We need to freeze the version of the crate, as the raw-api feature is considered unstable
163-
dashmap = { version = "=5.5.3", features = ["raw-api"] }
162+
dashmap = { version = "=6.1.0", features = ["raw-api", "inline"] }
164163
# We need to freeze the version of the crate, as it needs to match with dashmap
165-
hashbrown = { version = "=0.14.5", features = [
164+
hashbrown = { version = "0.14.0", features = [
166165
"inline-more",
167166
], default-features = false }
168167

src/tools/rust-analyzer/crates/base-db/src/input.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,15 +422,19 @@ impl CrateGraphBuilder {
422422
edition: Edition,
423423
display_name: Option<CrateDisplayName>,
424424
version: Option<String>,
425-
cfg_options: CfgOptions,
426-
potential_cfg_options: Option<CfgOptions>,
425+
mut cfg_options: CfgOptions,
426+
mut potential_cfg_options: Option<CfgOptions>,
427427
mut env: Env,
428428
origin: CrateOrigin,
429429
is_proc_macro: bool,
430430
proc_macro_cwd: Arc<AbsPathBuf>,
431431
ws_data: Arc<CrateWorkspaceData>,
432432
) -> CrateBuilderId {
433433
env.entries.shrink_to_fit();
434+
cfg_options.shrink_to_fit();
435+
if let Some(potential_cfg_options) = &mut potential_cfg_options {
436+
potential_cfg_options.shrink_to_fit();
437+
}
434438
self.arena.alloc(CrateBuilder {
435439
basic: CrateData {
436440
root_file_id,

src/tools/rust-analyzer/crates/cfg/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,11 @@ impl CfgOptions {
110110
enabled.sort_unstable();
111111
HashableCfgOptions { _enabled: enabled }
112112
}
113+
114+
#[inline]
115+
pub fn shrink_to_fit(&mut self) {
116+
self.enabled.shrink_to_fit();
117+
}
113118
}
114119

115120
impl Extend<CfgAtom> for CfgOptions {

src/tools/rust-analyzer/crates/hir-def/src/item_tree.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,10 @@ impl ItemTree {
223223
}
224224

225225
fn shrink_to_fit(&mut self) {
226-
if let Some(data) = &mut self.data {
226+
let ItemTree { top_level, attrs, data } = self;
227+
top_level.shrink_to_fit();
228+
attrs.shrink_to_fit();
229+
if let Some(data) = data {
227230
let ItemTreeData {
228231
uses,
229232
extern_crates,

src/tools/rust-analyzer/crates/hir-ty/src/infer.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ pub struct InferenceResult {
493493
/// ```
494494
/// the first `rest` has implicit `ref` binding mode, but the second `rest` binding mode is `move`.
495495
pub binding_modes: ArenaMap<PatId, BindingMode>,
496-
pub expr_adjustments: FxHashMap<ExprId, Vec<Adjustment>>,
496+
pub expr_adjustments: FxHashMap<ExprId, Box<[Adjustment]>>,
497497
pub(crate) closure_info: FxHashMap<ClosureId, (Vec<CapturedItem>, FnTrait)>,
498498
// FIXME: remove this field
499499
pub mutated_bindings_in_closure: FxHashSet<BindingId>,
@@ -785,8 +785,8 @@ impl<'a> InferenceContext<'a> {
785785
// Comment from rustc:
786786
// Even though coercion casts provide type hints, we check casts after fallback for
787787
// backwards compatibility. This makes fallback a stronger type hint than a cast coercion.
788-
let mut apply_adjustments = |expr, adj| {
789-
expr_adjustments.insert(expr, adj);
788+
let mut apply_adjustments = |expr, adj: Vec<_>| {
789+
expr_adjustments.insert(expr, adj.into_boxed_slice());
790790
};
791791
let mut set_coercion_cast = |expr| {
792792
coercion_casts.insert(expr);
@@ -808,22 +808,27 @@ impl<'a> InferenceContext<'a> {
808808
*ty = table.resolve_completely(ty.clone());
809809
*has_errors = *has_errors || ty.contains_unknown();
810810
}
811+
type_of_expr.shrink_to_fit();
811812
for ty in type_of_pat.values_mut() {
812813
*ty = table.resolve_completely(ty.clone());
813814
*has_errors = *has_errors || ty.contains_unknown();
814815
}
816+
type_of_pat.shrink_to_fit();
815817
for ty in type_of_binding.values_mut() {
816818
*ty = table.resolve_completely(ty.clone());
817819
*has_errors = *has_errors || ty.contains_unknown();
818820
}
821+
type_of_binding.shrink_to_fit();
819822
for ty in type_of_rpit.values_mut() {
820823
*ty = table.resolve_completely(ty.clone());
821824
*has_errors = *has_errors || ty.contains_unknown();
822825
}
826+
type_of_rpit.shrink_to_fit();
823827
for ty in type_of_for_iterator.values_mut() {
824828
*ty = table.resolve_completely(ty.clone());
825829
*has_errors = *has_errors || ty.contains_unknown();
826830
}
831+
type_of_for_iterator.shrink_to_fit();
827832

828833
*has_errors |= !type_mismatches.is_empty();
829834

@@ -838,6 +843,7 @@ impl<'a> InferenceContext<'a> {
838843
)
839844
.is_ok()
840845
});
846+
type_mismatches.shrink_to_fit();
841847
diagnostics.retain_mut(|diagnostic| {
842848
use InferenceDiagnostic::*;
843849
match diagnostic {
@@ -866,24 +872,29 @@ impl<'a> InferenceContext<'a> {
866872
}
867873
true
868874
});
875+
diagnostics.shrink_to_fit();
869876
for (_, subst) in method_resolutions.values_mut() {
870877
*subst = table.resolve_completely(subst.clone());
871878
*has_errors =
872879
*has_errors || subst.type_parameters(Interner).any(|ty| ty.contains_unknown());
873880
}
881+
method_resolutions.shrink_to_fit();
874882
for (_, subst) in assoc_resolutions.values_mut() {
875883
*subst = table.resolve_completely(subst.clone());
876884
*has_errors =
877885
*has_errors || subst.type_parameters(Interner).any(|ty| ty.contains_unknown());
878886
}
887+
assoc_resolutions.shrink_to_fit();
879888
for adjustment in expr_adjustments.values_mut().flatten() {
880889
adjustment.target = table.resolve_completely(adjustment.target.clone());
881890
*has_errors = *has_errors || adjustment.target.contains_unknown();
882891
}
892+
expr_adjustments.shrink_to_fit();
883893
for adjustment in pat_adjustments.values_mut().flatten() {
884894
*adjustment = table.resolve_completely(adjustment.clone());
885895
*has_errors = *has_errors || adjustment.contains_unknown();
886896
}
897+
pat_adjustments.shrink_to_fit();
887898
result.tuple_field_access_types = tuple_field_accesses_rev
888899
.into_iter()
889900
.enumerate()
@@ -893,6 +904,7 @@ impl<'a> InferenceContext<'a> {
893904
*has_errors || subst.type_parameters(Interner).any(|ty| ty.contains_unknown());
894905
})
895906
.collect();
907+
result.tuple_field_access_types.shrink_to_fit();
896908

897909
result.diagnostics = diagnostics;
898910

@@ -1261,7 +1273,7 @@ impl<'a> InferenceContext<'a> {
12611273
self.result.type_of_expr.insert(expr, ty);
12621274
}
12631275

1264-
fn write_expr_adj(&mut self, expr: ExprId, adjustments: Vec<Adjustment>) {
1276+
fn write_expr_adj(&mut self, expr: ExprId, adjustments: Box<[Adjustment]>) {
12651277
if adjustments.is_empty() {
12661278
return;
12671279
}

src/tools/rust-analyzer/crates/hir-ty/src/infer/closure.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -869,8 +869,8 @@ impl CapturedItemWithoutTy {
869869
impl InferenceContext<'_> {
870870
fn place_of_expr(&mut self, tgt_expr: ExprId) -> Option<HirPlace> {
871871
let r = self.place_of_expr_without_adjust(tgt_expr)?;
872-
let default = vec![];
873-
let adjustments = self.result.expr_adjustments.get(&tgt_expr).unwrap_or(&default);
872+
let adjustments =
873+
self.result.expr_adjustments.get(&tgt_expr).map(|it| &**it).unwrap_or_default();
874874
apply_adjusts_to_place(&mut self.current_capture_span_stack, r, adjustments)
875875
}
876876

@@ -1701,7 +1701,7 @@ impl InferenceContext<'_> {
17011701
for (derefed_callee, callee_ty, params, expr) in exprs {
17021702
if let &Expr::Call { callee, .. } = &self.body[expr] {
17031703
let mut adjustments =
1704-
self.result.expr_adjustments.remove(&callee).unwrap_or_default();
1704+
self.result.expr_adjustments.remove(&callee).unwrap_or_default().into_vec();
17051705
self.write_fn_trait_method_resolution(
17061706
kind,
17071707
&derefed_callee,
@@ -1710,7 +1710,7 @@ impl InferenceContext<'_> {
17101710
&params,
17111711
expr,
17121712
);
1713-
self.result.expr_adjustments.insert(callee, adjustments);
1713+
self.result.expr_adjustments.insert(callee, adjustments.into_boxed_slice());
17141714
}
17151715
}
17161716
}

src/tools/rust-analyzer/crates/hir-ty/src/infer/coerce.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,11 @@ impl CoerceMany {
148148
if let (Ok(result1), Ok(result2)) = (result1, result2) {
149149
ctx.table.register_infer_ok(InferOk { value: (), goals: result1.goals });
150150
for &e in &self.expressions {
151-
ctx.write_expr_adj(e, result1.value.0.clone());
151+
ctx.write_expr_adj(e, result1.value.0.clone().into_boxed_slice());
152152
}
153153
ctx.table.register_infer_ok(InferOk { value: (), goals: result2.goals });
154154
if let Some(expr) = expr {
155-
ctx.write_expr_adj(expr, result2.value.0);
155+
ctx.write_expr_adj(expr, result2.value.0.into_boxed_slice());
156156
self.expressions.push(expr);
157157
}
158158
return self.final_ty = Some(target_ty);
@@ -182,7 +182,7 @@ impl CoerceMany {
182182
{
183183
self.final_ty = Some(res);
184184
for &e in &self.expressions {
185-
ctx.write_expr_adj(e, adjustments.clone());
185+
ctx.write_expr_adj(e, adjustments.clone().into_boxed_slice());
186186
}
187187
} else {
188188
match cause {
@@ -263,7 +263,7 @@ impl InferenceContext<'_> {
263263
) -> Result<Ty, TypeError> {
264264
let (adjustments, ty) = self.coerce_inner(from_ty, to_ty, coerce_never)?;
265265
if let Some(expr) = expr {
266-
self.write_expr_adj(expr, adjustments);
266+
self.write_expr_adj(expr, adjustments.into_boxed_slice());
267267
}
268268
Ok(ty)
269269
}

src/tools/rust-analyzer/crates/hir-ty/src/infer/expr.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ impl InferenceContext<'_> {
812812
self_ty.clone(),
813813
self.table.new_lifetime_var(),
814814
));
815-
self.write_expr_adj(*base, adj);
815+
self.write_expr_adj(*base, adj.into_boxed_slice());
816816
if let Some(func) = self
817817
.db
818818
.trait_items(index_trait)
@@ -1356,10 +1356,10 @@ impl InferenceContext<'_> {
13561356
if let TyKind::Ref(mtbl, lt, _) = p_left.kind(Interner) {
13571357
self.write_expr_adj(
13581358
lhs,
1359-
vec![Adjustment {
1359+
Box::new([Adjustment {
13601360
kind: Adjust::Borrow(AutoBorrow::Ref(lt.clone(), *mtbl)),
13611361
target: p_left.clone(),
1362-
}],
1362+
}]),
13631363
);
13641364
}
13651365
}
@@ -1368,10 +1368,10 @@ impl InferenceContext<'_> {
13681368
if let TyKind::Ref(mtbl, lt, _) = p_right.kind(Interner) {
13691369
self.write_expr_adj(
13701370
rhs,
1371-
vec![Adjustment {
1371+
Box::new([Adjustment {
13721372
kind: Adjust::Borrow(AutoBorrow::Ref(lt.clone(), *mtbl)),
13731373
target: p_right.clone(),
1374-
}],
1374+
}]),
13751375
);
13761376
}
13771377
}
@@ -1627,7 +1627,7 @@ impl InferenceContext<'_> {
16271627

16281628
match self.lookup_field(&receiver_ty, name) {
16291629
Some((ty, field_id, adjustments, is_public)) => {
1630-
self.write_expr_adj(receiver, adjustments);
1630+
self.write_expr_adj(receiver, adjustments.into_boxed_slice());
16311631
self.result.field_resolutions.insert(tgt_expr, field_id);
16321632
if !is_public {
16331633
if let Either::Left(field) = field_id {
@@ -1662,7 +1662,7 @@ impl InferenceContext<'_> {
16621662
Some((adjust, func, _)) => {
16631663
let (ty, adjustments) = adjust.apply(&mut self.table, receiver_ty);
16641664
let substs = self.substs_for_method_call(tgt_expr, func.into(), None);
1665-
self.write_expr_adj(receiver, adjustments);
1665+
self.write_expr_adj(receiver, adjustments.into_boxed_slice());
16661666
self.write_method_resolution(tgt_expr, func, substs.clone());
16671667

16681668
self.check_method_call(
@@ -1725,7 +1725,7 @@ impl InferenceContext<'_> {
17251725
tgt_expr,
17261726
);
17271727
}
1728-
self.write_expr_adj(callee, adjustments);
1728+
self.write_expr_adj(callee, adjustments.into_boxed_slice());
17291729
(params, ret_ty)
17301730
}
17311731
None => {
@@ -1809,7 +1809,7 @@ impl InferenceContext<'_> {
18091809
}
18101810

18111811
let (ty, adjustments) = adjust.apply(&mut self.table, receiver_ty);
1812-
self.write_expr_adj(receiver, adjustments);
1812+
self.write_expr_adj(receiver, adjustments.into_boxed_slice());
18131813

18141814
let substs = self.substs_for_method_call(tgt_expr, func.into(), generic_args);
18151815
self.write_method_resolution(tgt_expr, func, substs.clone());
@@ -1828,7 +1828,7 @@ impl InferenceContext<'_> {
18281828
let field_with_same_name_exists = match self.lookup_field(&receiver_ty, method_name)
18291829
{
18301830
Some((ty, field_id, adjustments, _public)) => {
1831-
self.write_expr_adj(receiver, adjustments);
1831+
self.write_expr_adj(receiver, adjustments.into_boxed_slice());
18321832
self.result.field_resolutions.insert(tgt_expr, field_id);
18331833
Some(ty)
18341834
}

src/tools/rust-analyzer/crates/hir-ty/src/interner.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl_internable!(
4343
InternedWrapper<ConstData>,
4444
InternedWrapper<ConstScalar>,
4545
InternedWrapper<Vec<CanonicalVarKind>>,
46-
InternedWrapper<Vec<ProgramClause>>,
46+
InternedWrapper<Box<[ProgramClause]>>,
4747
InternedWrapper<Vec<QuantifiedWhereClause>>,
4848
InternedWrapper<SmallVec<[Variance; 16]>>,
4949
);
@@ -60,7 +60,7 @@ impl chalk_ir::interner::Interner for Interner {
6060
type InternedGoal = Arc<GoalData>;
6161
type InternedGoals = Vec<Goal>;
6262
type InternedSubstitution = Interned<InternedWrapper<SmallVec<[GenericArg; 2]>>>;
63-
type InternedProgramClauses = Interned<InternedWrapper<Vec<ProgramClause>>>;
63+
type InternedProgramClauses = Interned<InternedWrapper<Box<[ProgramClause]>>>;
6464
type InternedProgramClause = ProgramClauseData;
6565
type InternedQuantifiedWhereClauses = Interned<InternedWrapper<Vec<QuantifiedWhereClause>>>;
6666
type InternedVariableKinds = Interned<InternedWrapper<Vec<VariableKind>>>;

0 commit comments

Comments
 (0)