mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 23:25:03 +00:00
Replace once_cell with std's recently stabilized OnceCell/Lock and LazyCell/Lock
This doesn't get rid of the once_cell dependency, unfortunately, since we have dependencies that use it, but it's a nice to do cleanup. And when our deps will eventually get rid of once_cell we will get rid of it for free.
This commit is contained in:
parent
0daeb5c0b0
commit
955e609867
19 changed files with 49 additions and 54 deletions
|
@ -12,7 +12,6 @@ use hir_expand::{
|
|||
};
|
||||
use intern::Interned;
|
||||
use la_arena::{Arena, RawIdx};
|
||||
use once_cell::unsync::Lazy;
|
||||
use stdx::impl_from;
|
||||
use syntax::ast::{self, HasGenericParams, HasName, HasTypeBounds};
|
||||
use triomphe::Arc;
|
||||
|
@ -394,11 +393,16 @@ impl GenericParams {
|
|||
|
||||
// Don't create an `Expander` if not needed since this
|
||||
// could cause a reparse after the `ItemTree` has been created due to the spanmap.
|
||||
let mut expander = Lazy::new(|| {
|
||||
(module.def_map(db), Expander::new(db, loc.id.file_id(), module))
|
||||
});
|
||||
let mut expander = None;
|
||||
for param in func_data.params.iter() {
|
||||
generic_params.fill_implicit_impl_trait_args(db, &mut expander, param);
|
||||
generic_params.fill_implicit_impl_trait_args(
|
||||
db,
|
||||
&mut expander,
|
||||
&mut || {
|
||||
(module.def_map(db), Expander::new(db, loc.id.file_id(), module))
|
||||
},
|
||||
param,
|
||||
);
|
||||
}
|
||||
Interned::new(generic_params.finish())
|
||||
}
|
||||
|
@ -597,7 +601,9 @@ impl GenericParamsCollector {
|
|||
fn fill_implicit_impl_trait_args(
|
||||
&mut self,
|
||||
db: &dyn DefDatabase,
|
||||
exp: &mut Lazy<(Arc<DefMap>, Expander), impl FnOnce() -> (Arc<DefMap>, Expander)>,
|
||||
// FIXME: Change this back to `LazyCell` if https://github.com/rust-lang/libs-team/issues/429 is accepted.
|
||||
exp: &mut Option<(Arc<DefMap>, Expander)>,
|
||||
exp_fill: &mut dyn FnMut() -> (Arc<DefMap>, Expander),
|
||||
type_ref: &TypeRef,
|
||||
) {
|
||||
type_ref.walk(&mut |type_ref| {
|
||||
|
@ -617,7 +623,7 @@ impl GenericParamsCollector {
|
|||
}
|
||||
if let TypeRef::Macro(mc) = type_ref {
|
||||
let macro_call = mc.to_node(db.upcast());
|
||||
let (def_map, expander) = &mut **exp;
|
||||
let (def_map, expander) = exp.get_or_insert_with(&mut *exp_fill);
|
||||
|
||||
let module = expander.module.local_id;
|
||||
let resolver = |path: &_| {
|
||||
|
@ -637,8 +643,8 @@ impl GenericParamsCollector {
|
|||
{
|
||||
let ctx = expander.ctx(db);
|
||||
let type_ref = TypeRef::from_ast(&ctx, expanded.tree());
|
||||
self.fill_implicit_impl_trait_args(db, &mut *exp, &type_ref);
|
||||
exp.1.exit(mark);
|
||||
self.fill_implicit_impl_trait_args(db, &mut *exp, exp_fill, &type_ref);
|
||||
exp.get_or_insert_with(&mut *exp_fill).1.exit(mark);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
//! Describes items defined or visible (ie, imported) in a certain scope.
|
||||
//! This is shared between modules and blocks.
|
||||
|
||||
use std::sync::LazyLock;
|
||||
|
||||
use base_db::CrateId;
|
||||
use hir_expand::{attrs::AttrId, db::ExpandDatabase, name::Name, AstId, MacroCallId};
|
||||
use indexmap::map::Entry;
|
||||
use itertools::Itertools;
|
||||
use la_arena::Idx;
|
||||
use once_cell::sync::Lazy;
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
use stdx::format_to;
|
||||
|
@ -129,7 +130,7 @@ struct DeriveMacroInvocation {
|
|||
derive_call_ids: SmallVec<[Option<MacroCallId>; 1]>,
|
||||
}
|
||||
|
||||
pub(crate) static BUILTIN_SCOPE: Lazy<FxIndexMap<Name, PerNs>> = Lazy::new(|| {
|
||||
pub(crate) static BUILTIN_SCOPE: LazyLock<FxIndexMap<Name, PerNs>> = LazyLock::new(|| {
|
||||
BuiltinType::all_builtin_types()
|
||||
.iter()
|
||||
.map(|(name, ty)| (name.clone(), PerNs::types((*ty).into(), Visibility::Public, None)))
|
||||
|
|
|
@ -40,6 +40,7 @@ use std::{
|
|||
fmt::{self, Debug},
|
||||
hash::{Hash, Hasher},
|
||||
ops::{Index, Range},
|
||||
sync::OnceLock,
|
||||
};
|
||||
|
||||
use ast::{AstNode, StructKind};
|
||||
|
@ -48,7 +49,6 @@ use either::Either;
|
|||
use hir_expand::{attrs::RawAttrs, name::Name, ExpandTo, HirFileId, InFile};
|
||||
use intern::{Interned, Symbol};
|
||||
use la_arena::{Arena, Idx, RawIdx};
|
||||
use once_cell::sync::OnceCell;
|
||||
use rustc_hash::FxHashMap;
|
||||
use smallvec::SmallVec;
|
||||
use span::{AstIdNode, FileAstId, SyntaxContextId};
|
||||
|
@ -101,7 +101,7 @@ pub struct ItemTree {
|
|||
impl ItemTree {
|
||||
pub(crate) fn file_item_tree_query(db: &dyn DefDatabase, file_id: HirFileId) -> Arc<ItemTree> {
|
||||
let _p = tracing::info_span!("file_item_tree_query", ?file_id).entered();
|
||||
static EMPTY: OnceCell<Arc<ItemTree>> = OnceCell::new();
|
||||
static EMPTY: OnceLock<Arc<ItemTree>> = OnceLock::new();
|
||||
|
||||
let syntax = db.parse_or_expand(file_id);
|
||||
|
||||
|
@ -152,7 +152,7 @@ impl ItemTree {
|
|||
|
||||
pub(crate) fn block_item_tree_query(db: &dyn DefDatabase, block: BlockId) -> Arc<ItemTree> {
|
||||
let _p = tracing::info_span!("block_item_tree_query", ?block).entered();
|
||||
static EMPTY: OnceCell<Arc<ItemTree>> = OnceCell::new();
|
||||
static EMPTY: OnceLock<Arc<ItemTree>> = OnceLock::new();
|
||||
|
||||
let loc = block.lookup(db);
|
||||
let block = loc.ast_id.to_node(db.upcast());
|
||||
|
@ -626,9 +626,9 @@ impl Index<RawVisibilityId> for ItemTree {
|
|||
type Output = RawVisibility;
|
||||
fn index(&self, index: RawVisibilityId) -> &Self::Output {
|
||||
static VIS_PUB: RawVisibility = RawVisibility::Public;
|
||||
static VIS_PRIV_IMPLICIT: OnceCell<RawVisibility> = OnceCell::new();
|
||||
static VIS_PRIV_EXPLICIT: OnceCell<RawVisibility> = OnceCell::new();
|
||||
static VIS_PUB_CRATE: OnceCell<RawVisibility> = OnceCell::new();
|
||||
static VIS_PRIV_IMPLICIT: OnceLock<RawVisibility> = OnceLock::new();
|
||||
static VIS_PRIV_EXPLICIT: OnceLock<RawVisibility> = OnceLock::new();
|
||||
static VIS_PUB_CRATE: OnceLock<RawVisibility> = OnceLock::new();
|
||||
|
||||
match index {
|
||||
RawVisibilityId::PRIV_IMPLICIT => VIS_PRIV_IMPLICIT.get_or_init(|| {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue