diff --git a/Cargo.lock b/Cargo.lock index ae99b966ea..c715e5e0bb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,10 +36,6 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" -[[package]] -name = "arena" -version = "0.0.0" - [[package]] name = "arrayvec" version = "0.5.2" @@ -547,7 +543,6 @@ name = "hir_def" version = "0.0.0" dependencies = [ "anymap", - "arena", "base_db", "cfg", "drop_bomb", @@ -557,6 +552,7 @@ dependencies = [ "hir_expand", "indexmap", "itertools 0.10.0", + "la-arena 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log", "mbe", "once_cell", @@ -573,9 +569,9 @@ dependencies = [ name = "hir_expand" version = "0.0.0" dependencies = [ - "arena", "base_db", "either", + "la-arena 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log", "mbe", "parser", @@ -590,7 +586,6 @@ dependencies = [ name = "hir_ty" version = "0.0.0" dependencies = [ - "arena", "arrayvec", "base_db", "chalk-ir", @@ -601,6 +596,7 @@ dependencies = [ "hir_def", "hir_expand", "itertools 0.10.0", + "la-arena 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log", "once_cell", "profile", @@ -771,6 +767,16 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "la-arena" +version = "0.1.0" + +[[package]] +name = "la-arena" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0385ab3b926cc05c78275d7ac6799c21fb964ada0a45cdaeaf1415d6a3dda39" + [[package]] name = "lazy_static" version = "1.4.0" @@ -1196,8 +1202,8 @@ version = "0.0.0" name = "profile" version = "0.0.0" dependencies = [ - "arena", "cfg-if 1.0.0", + "la-arena 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc", "once_cell", "perf-event", @@ -1208,11 +1214,11 @@ name = "project_model" version = "0.0.0" dependencies = [ "anyhow", - "arena", "base_db", "cargo_metadata", "cfg", "itertools 0.10.0", + "la-arena 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log", "paths", "proc_macro_api", diff --git a/Cargo.toml b/Cargo.toml index 59d36fbc1d..ff0d9e1ce1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = [ "crates/*", "xtask/" ] +members = [ "xtask/", "lib/*", "crates/*" ] [profile.dev] # Disabling debug info speeds up builds a bunch, diff --git a/crates/hir_def/Cargo.toml b/crates/hir_def/Cargo.toml index 7ef966cd22..5d21283f7d 100644 --- a/crates/hir_def/Cargo.toml +++ b/crates/hir_def/Cargo.toml @@ -20,9 +20,9 @@ fst = { version = "0.4", default-features = false } itertools = "0.10.0" indexmap = "1.4.0" smallvec = "1.4.0" +la-arena = "0.1.0" stdx = { path = "../stdx", version = "0.0.0" } -arena = { path = "../arena", version = "0.0.0" } base_db = { path = "../base_db", version = "0.0.0" } syntax = { path = "../syntax", version = "0.0.0" } profile = { path = "../profile", version = "0.0.0" } diff --git a/crates/hir_def/src/adt.rs b/crates/hir_def/src/adt.rs index 236d6f1b7c..237c3d3f99 100644 --- a/crates/hir_def/src/adt.rs +++ b/crates/hir_def/src/adt.rs @@ -2,13 +2,13 @@ use std::sync::Arc; -use arena::{map::ArenaMap, Arena}; use base_db::CrateId; use either::Either; use hir_expand::{ name::{AsName, Name}, InFile, }; +use la_arena::{map::ArenaMap, Arena}; use syntax::ast::{self, NameOwner, VisibilityOwner}; use tt::{Delimiter, DelimiterKind, Leaf, Subtree, TokenTree}; diff --git a/crates/hir_def/src/attr.rs b/crates/hir_def/src/attr.rs index 9e6426b314..5a86823c26 100644 --- a/crates/hir_def/src/attr.rs +++ b/crates/hir_def/src/attr.rs @@ -2,12 +2,12 @@ use std::{ops, sync::Arc}; -use arena::map::ArenaMap; use base_db::CrateId; use cfg::{CfgExpr, CfgOptions}; use either::Either; use hir_expand::{hygiene::Hygiene, name::AsName, AstId, InFile}; use itertools::Itertools; +use la_arena::map::ArenaMap; use mbe::ast_to_token_tree; use syntax::{ ast::{self, AstNode, AttrsOwner}, diff --git a/crates/hir_def/src/body.rs b/crates/hir_def/src/body.rs index d07004b9d7..43ee572779 100644 --- a/crates/hir_def/src/body.rs +++ b/crates/hir_def/src/body.rs @@ -8,7 +8,6 @@ pub mod scope; use std::{mem, ops::Index, sync::Arc}; -use arena::{map::ArenaMap, Arena}; use base_db::CrateId; use cfg::CfgOptions; use drop_bomb::DropBomb; @@ -17,6 +16,7 @@ use hir_expand::{ ast_id_map::AstIdMap, diagnostics::DiagnosticSink, hygiene::Hygiene, AstId, ExpandResult, HirFileId, InFile, MacroDefId, }; +use la_arena::{map::ArenaMap, Arena}; use rustc_hash::FxHashMap; use syntax::{ast, AstNode, AstPtr}; use test_utils::mark; diff --git a/crates/hir_def/src/body/lower.rs b/crates/hir_def/src/body/lower.rs index 3dc33f248f..27575c5371 100644 --- a/crates/hir_def/src/body/lower.rs +++ b/crates/hir_def/src/body/lower.rs @@ -3,13 +3,13 @@ use std::{any::type_name, sync::Arc}; -use arena::Arena; use either::Either; use hir_expand::{ hygiene::Hygiene, name::{name, AsName, Name}, ExpandError, HirFileId, MacroDefId, MacroDefKind, }; +use la_arena::Arena; use rustc_hash::FxHashMap; use syntax::{ ast::{ diff --git a/crates/hir_def/src/body/scope.rs b/crates/hir_def/src/body/scope.rs index 065785da7f..49f1427b45 100644 --- a/crates/hir_def/src/body/scope.rs +++ b/crates/hir_def/src/body/scope.rs @@ -1,8 +1,8 @@ //! Name resolution for expressions. use std::sync::Arc; -use arena::{Arena, Idx}; use hir_expand::name::Name; +use la_arena::{Arena, Idx}; use rustc_hash::FxHashMap; use crate::{ diff --git a/crates/hir_def/src/db.rs b/crates/hir_def/src/db.rs index d3bf5b34cf..0506a72744 100644 --- a/crates/hir_def/src/db.rs +++ b/crates/hir_def/src/db.rs @@ -1,9 +1,9 @@ //! Defines database & queries for name resolution. use std::sync::Arc; -use arena::map::ArenaMap; use base_db::{salsa, CrateId, SourceDatabase, Upcast}; use hir_expand::{db::AstDatabase, HirFileId}; +use la_arena::map::ArenaMap; use syntax::SmolStr; use crate::{ diff --git a/crates/hir_def/src/expr.rs b/crates/hir_def/src/expr.rs index 76f5721e58..af01d32dcb 100644 --- a/crates/hir_def/src/expr.rs +++ b/crates/hir_def/src/expr.rs @@ -12,8 +12,8 @@ //! //! See also a neighboring `body` module. -use arena::{Idx, RawId}; use hir_expand::name::Name; +use la_arena::{Idx, RawId}; use syntax::ast::RangeOp; use crate::{ diff --git a/crates/hir_def/src/generics.rs b/crates/hir_def/src/generics.rs index 9b5b886c2b..75eab791a2 100644 --- a/crates/hir_def/src/generics.rs +++ b/crates/hir_def/src/generics.rs @@ -4,13 +4,13 @@ //! in rustc. use std::sync::Arc; -use arena::{map::ArenaMap, Arena}; use base_db::FileId; use either::Either; use hir_expand::{ name::{name, AsName, Name}, InFile, }; +use la_arena::{map::ArenaMap, Arena}; use syntax::ast::{self, GenericParamsOwner, NameOwner, TypeBoundsOwner}; use crate::{ diff --git a/crates/hir_def/src/item_tree.rs b/crates/hir_def/src/item_tree.rs index b6f5107313..91e42aa0da 100644 --- a/crates/hir_def/src/item_tree.rs +++ b/crates/hir_def/src/item_tree.rs @@ -11,7 +11,6 @@ use std::{ sync::Arc, }; -use arena::{Arena, Idx, RawId}; use ast::{AstNode, NameOwner, StructKind}; use base_db::CrateId; use either::Either; @@ -21,6 +20,7 @@ use hir_expand::{ name::{name, AsName, Name}, HirFileId, InFile, }; +use la_arena::{Arena, Idx, RawId}; use rustc_hash::FxHashMap; use smallvec::SmallVec; use syntax::{ast, match_ast}; diff --git a/crates/hir_def/src/lib.rs b/crates/hir_def/src/lib.rs index 211cb2fafc..08ed920c60 100644 --- a/crates/hir_def/src/lib.rs +++ b/crates/hir_def/src/lib.rs @@ -52,12 +52,12 @@ mod test_db; use std::hash::{Hash, Hasher}; -use arena::Idx; use base_db::{impl_intern_key, salsa, CrateId}; use hir_expand::{ ast_id_map::FileAstId, eager::expand_eager_macro, hygiene::Hygiene, AstId, HirFileId, InFile, MacroCallId, MacroCallKind, MacroDefId, MacroDefKind, }; +use la_arena::Idx; use syntax::ast; use crate::builtin_type::BuiltinType; diff --git a/crates/hir_def/src/nameres.rs b/crates/hir_def/src/nameres.rs index 5682e122db..50acc3f54f 100644 --- a/crates/hir_def/src/nameres.rs +++ b/crates/hir_def/src/nameres.rs @@ -56,9 +56,9 @@ mod tests; use std::sync::Arc; -use arena::Arena; use base_db::{CrateId, Edition, FileId}; use hir_expand::{diagnostics::DiagnosticSink, name::Name, InFile}; +use la_arena::Arena; use rustc_hash::FxHashMap; use stdx::format_to; use syntax::ast; diff --git a/crates/hir_def/src/nameres/collector.rs b/crates/hir_def/src/nameres/collector.rs index f027fd48d3..0cd61698ce 100644 --- a/crates/hir_def/src/nameres/collector.rs +++ b/crates/hir_def/src/nameres/collector.rs @@ -1469,8 +1469,8 @@ impl ModCollector<'_, '_> { #[cfg(test)] mod tests { use crate::{db::DefDatabase, test_db::TestDB}; - use arena::Arena; use base_db::{fixture::WithFixture, SourceDatabase}; + use la_arena::Arena; use super::*; diff --git a/crates/hir_def/src/src.rs b/crates/hir_def/src/src.rs index f67244b464..eb29265d9e 100644 --- a/crates/hir_def/src/src.rs +++ b/crates/hir_def/src/src.rs @@ -1,7 +1,7 @@ //! Utilities for mapping between hir IDs and the surface syntax. -use arena::map::ArenaMap; use hir_expand::InFile; +use la_arena::map::ArenaMap; use crate::{db::DefDatabase, item_tree::ItemTreeNode, AssocItemLoc, ItemLoc}; diff --git a/crates/hir_def/src/trace.rs b/crates/hir_def/src/trace.rs index fd64e70188..0a9beae8ef 100644 --- a/crates/hir_def/src/trace.rs +++ b/crates/hir_def/src/trace.rs @@ -9,7 +9,7 @@ //! absolute offsets. The `Trace` structure (inspired, at least in name, by //! Kotlin's `BindingTrace`) allows use the same code to compute both //! projections. -use arena::{map::ArenaMap, Arena, Idx, RawId}; +use la_arena::{map::ArenaMap, Arena, Idx, RawId}; pub(crate) struct Trace { arena: Option>, diff --git a/crates/hir_expand/Cargo.toml b/crates/hir_expand/Cargo.toml index 9fad2ab946..b535a3d4f7 100644 --- a/crates/hir_expand/Cargo.toml +++ b/crates/hir_expand/Cargo.toml @@ -13,8 +13,8 @@ doctest = false log = "0.4.8" either = "1.5.3" rustc-hash = "1.0.0" +la-arena = "0.1.0" -arena = { path = "../arena", version = "0.0.0" } base_db = { path = "../base_db", version = "0.0.0" } syntax = { path = "../syntax", version = "0.0.0" } parser = { path = "../parser", version = "0.0.0" } diff --git a/crates/hir_expand/src/ast_id_map.rs b/crates/hir_expand/src/ast_id_map.rs index f63629b305..f4f6e11fdb 100644 --- a/crates/hir_expand/src/ast_id_map.rs +++ b/crates/hir_expand/src/ast_id_map.rs @@ -12,7 +12,7 @@ use std::{ marker::PhantomData, }; -use arena::{Arena, Idx}; +use la_arena::{Arena, Idx}; use syntax::{ast, AstNode, AstPtr, SyntaxNode, SyntaxNodePtr}; /// `AstId` points to an AST node in a specific file. diff --git a/crates/hir_ty/Cargo.toml b/crates/hir_ty/Cargo.toml index b0a453961e..436c1405b3 100644 --- a/crates/hir_ty/Cargo.toml +++ b/crates/hir_ty/Cargo.toml @@ -20,11 +20,11 @@ scoped-tls = "1" chalk-solve = { version = "0.47", default-features = false } chalk-ir = "0.47" chalk-recursive = "0.47" +la-arena = "0.1.0" stdx = { path = "../stdx", version = "0.0.0" } hir_def = { path = "../hir_def", version = "0.0.0" } hir_expand = { path = "../hir_expand", version = "0.0.0" } -arena = { path = "../arena", version = "0.0.0" } base_db = { path = "../base_db", version = "0.0.0" } profile = { path = "../profile", version = "0.0.0" } syntax = { path = "../syntax", version = "0.0.0" } diff --git a/crates/hir_ty/src/db.rs b/crates/hir_ty/src/db.rs index f3567c49e6..b0e2a3b7d8 100644 --- a/crates/hir_ty/src/db.rs +++ b/crates/hir_ty/src/db.rs @@ -2,12 +2,12 @@ use std::sync::Arc; -use arena::map::ArenaMap; use base_db::{impl_intern_key, salsa, CrateId, Upcast}; use hir_def::{ db::DefDatabase, expr::ExprId, ConstParamId, DefWithBodyId, FunctionId, GenericDefId, ImplId, LocalFieldId, TypeParamId, VariantId, }; +use la_arena::map::ArenaMap; use crate::{ method_resolution::{InherentImpls, TraitImpls}, diff --git a/crates/hir_ty/src/diagnostics/match_check.rs b/crates/hir_ty/src/diagnostics/match_check.rs index 61c47eec87..fbe760c39e 100644 --- a/crates/hir_ty/src/diagnostics/match_check.rs +++ b/crates/hir_ty/src/diagnostics/match_check.rs @@ -218,13 +218,13 @@ //! ``` use std::{iter, sync::Arc}; -use arena::Idx; use hir_def::{ adt::VariantData, body::Body, expr::{Expr, Literal, Pat, PatId}, AdtId, EnumVariantId, StructId, VariantId, }; +use la_arena::Idx; use smallvec::{smallvec, SmallVec}; use crate::{db::HirDatabase, ApplicationTy, InferenceResult, Ty, TypeCtor}; diff --git a/crates/hir_ty/src/infer.rs b/crates/hir_ty/src/infer.rs index a14d67c066..46a806b9ac 100644 --- a/crates/hir_ty/src/infer.rs +++ b/crates/hir_ty/src/infer.rs @@ -18,7 +18,6 @@ use std::mem; use std::ops::Index; use std::sync::Arc; -use arena::map::ArenaMap; use hir_def::{ body::Body, data::{ConstData, FunctionData, StaticData}, @@ -31,6 +30,7 @@ use hir_def::{ TypeAliasId, VariantId, }; use hir_expand::{diagnostics::DiagnosticSink, name::name}; +use la_arena::map::ArenaMap; use rustc_hash::FxHashMap; use stdx::impl_from; use syntax::SmolStr; diff --git a/crates/hir_ty/src/lower.rs b/crates/hir_ty/src/lower.rs index 9594cce8b7..68d16f89a9 100644 --- a/crates/hir_ty/src/lower.rs +++ b/crates/hir_ty/src/lower.rs @@ -7,7 +7,6 @@ //! This usually involves resolving names, collecting generic arguments etc. use std::{iter, sync::Arc}; -use arena::map::ArenaMap; use base_db::CrateId; use hir_def::{ adt::StructKind, @@ -21,6 +20,7 @@ use hir_def::{ TypeAliasId, TypeParamId, UnionId, VariantId, }; use hir_expand::name::Name; +use la_arena::map::ArenaMap; use smallvec::SmallVec; use stdx::impl_from; use test_utils::mark; diff --git a/crates/profile/Cargo.toml b/crates/profile/Cargo.toml index 4951f1835c..096233a095 100644 --- a/crates/profile/Cargo.toml +++ b/crates/profile/Cargo.toml @@ -13,8 +13,7 @@ doctest = false once_cell = "1.3.1" cfg-if = "1" libc = "0.2.73" - -arena = { path = "../arena", version = "0.0.0" } +la-arena = "0.1.0" [target.'cfg(target_os = "linux")'.dependencies] perf-event = "0.4" diff --git a/crates/profile/src/tree.rs b/crates/profile/src/tree.rs index 3fac1f36c9..62f0c30b52 100644 --- a/crates/profile/src/tree.rs +++ b/crates/profile/src/tree.rs @@ -1,7 +1,7 @@ //! A simple tree implementation which tries to not allocate all over the place. use std::ops; -use arena::Arena; +use la_arena::Arena; #[derive(Default)] pub(crate) struct Tree { @@ -9,7 +9,7 @@ pub(crate) struct Tree { current_path: Vec<(Idx, Option>)>, } -pub(crate) type Idx = arena::Idx>; +pub(crate) type Idx = la_arena::Idx>; impl Tree { pub(crate) fn start(&mut self) diff --git a/crates/project_model/Cargo.toml b/crates/project_model/Cargo.toml index 855fb83eaf..51e7a7070f 100644 --- a/crates/project_model/Cargo.toml +++ b/crates/project_model/Cargo.toml @@ -17,8 +17,8 @@ serde = { version = "1.0.106", features = ["derive"] } serde_json = "1.0.48" anyhow = "1.0.26" itertools = "0.10.0" +la-arena = "0.1.0" -arena = { path = "../arena", version = "0.0.0" } cfg = { path = "../cfg", version = "0.0.0" } base_db = { path = "../base_db", version = "0.0.0" } toolchain = { path = "../toolchain", version = "0.0.0" } diff --git a/crates/project_model/src/cargo_workspace.rs b/crates/project_model/src/cargo_workspace.rs index a1ab9c6db5..c0ed37fc12 100644 --- a/crates/project_model/src/cargo_workspace.rs +++ b/crates/project_model/src/cargo_workspace.rs @@ -10,10 +10,10 @@ use std::{ }; use anyhow::{Context, Result}; -use arena::{Arena, Idx}; use base_db::Edition; use cargo_metadata::{BuildScript, CargoOpt, Message, MetadataCommand, PackageId}; use itertools::Itertools; +use la_arena::{Arena, Idx}; use paths::{AbsPath, AbsPathBuf}; use rustc_hash::FxHashMap; use stdx::JodChild; diff --git a/crates/project_model/src/sysroot.rs b/crates/project_model/src/sysroot.rs index 95b622715f..ff44dae4a2 100644 --- a/crates/project_model/src/sysroot.rs +++ b/crates/project_model/src/sysroot.rs @@ -7,7 +7,7 @@ use std::{convert::TryFrom, env, ops, path::PathBuf, process::Command}; use anyhow::{format_err, Result}; -use arena::{Arena, Idx}; +use la_arena::{Arena, Idx}; use paths::{AbsPath, AbsPathBuf}; use crate::utf8_stdout; diff --git a/lib/README.md b/lib/README.md new file mode 100644 index 0000000000..6b2eeac2c0 --- /dev/null +++ b/lib/README.md @@ -0,0 +1,2 @@ +Crates in this directory are published to crates.io and obey semver. +They *could* live in a separate repo, but we want to experiment with a monorepo setup. diff --git a/crates/arena/Cargo.toml b/lib/arena/Cargo.toml similarity index 61% rename from crates/arena/Cargo.toml rename to lib/arena/Cargo.toml index 863eedf769..183a5bb6a9 100644 --- a/crates/arena/Cargo.toml +++ b/lib/arena/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "arena" -version = "0.0.0" -description = "TBD" +name = "la-arena" +version = "0.1.0" +description = "Thy rope of sands..." license = "MIT OR Apache-2.0" authors = ["rust-analyzer developers"] edition = "2018" diff --git a/crates/arena/src/lib.rs b/lib/arena/src/lib.rs similarity index 100% rename from crates/arena/src/lib.rs rename to lib/arena/src/lib.rs diff --git a/crates/arena/src/map.rs b/lib/arena/src/map.rs similarity index 100% rename from crates/arena/src/map.rs rename to lib/arena/src/map.rs