Skip to content

Commit a613320

Browse files
bors[bot]matklad
andauthored
Merge #3527
3527: Simplify r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2 parents 0dbd8ff + 100cbc5 commit a613320

File tree

9 files changed

+37
-56
lines changed

9 files changed

+37
-56
lines changed

crates/ra_db/src/input.rs

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! actual IO. See `vfs` and `project_model` in the `rust-analyzer` crate for how
77
//! actual IO is done and lowered to input.
88
9-
use std::{fmt, str::FromStr};
9+
use std::{fmt, ops, str::FromStr};
1010

1111
use ra_cfg::CfgOptions;
1212
use ra_syntax::SmolStr;
@@ -111,8 +111,8 @@ pub struct CrateData {
111111
/// This actual crate name can be different in a particular dependent crate
112112
/// or may even be missing for some cases, such as a dummy crate for the code snippet.
113113
pub display_name: Option<String>,
114-
cfg_options: CfgOptions,
115-
env: Env,
114+
pub cfg_options: CfgOptions,
115+
pub env: Env,
116116
pub dependencies: Vec<Dependency>,
117117
}
118118

@@ -142,17 +142,20 @@ impl CrateGraph {
142142
cfg_options: CfgOptions,
143143
env: Env,
144144
) -> CrateId {
145-
let data = CrateData::new(file_id, edition, display_name, cfg_options, env);
145+
let data = CrateData {
146+
root_file_id: file_id,
147+
edition,
148+
display_name,
149+
cfg_options,
150+
env,
151+
dependencies: Vec::new(),
152+
};
146153
let crate_id = CrateId(self.arena.len() as u32);
147154
let prev = self.arena.insert(crate_id, data);
148155
assert!(prev.is_none());
149156
crate_id
150157
}
151158

152-
pub fn cfg_options(&self, crate_id: CrateId) -> &CfgOptions {
153-
&self.arena[&crate_id].cfg_options
154-
}
155-
156159
pub fn add_dep(
157160
&mut self,
158161
from: CrateId,
@@ -174,10 +177,6 @@ impl CrateGraph {
174177
self.arena.keys().copied()
175178
}
176179

177-
pub fn crate_data(&self, crate_id: &CrateId) -> &CrateData {
178-
&self.arena[crate_id]
179-
}
180-
181180
// FIXME: this only finds one crate with the given root; we could have multiple
182181
pub fn crate_id_for_crate_root(&self, file_id: FileId) -> Option<CrateId> {
183182
let (&crate_id, _) =
@@ -207,8 +206,8 @@ impl CrateGraph {
207206
return false;
208207
}
209208

210-
for dep in &self.crate_data(&from).dependencies {
211-
let crate_id = dep.crate_id();
209+
for dep in &self[from].dependencies {
210+
let crate_id = dep.crate_id;
212211
if crate_id == target {
213212
return true;
214213
}
@@ -221,30 +220,20 @@ impl CrateGraph {
221220
}
222221
}
223222

223+
impl ops::Index<CrateId> for CrateGraph {
224+
type Output = CrateData;
225+
fn index(&self, crate_id: CrateId) -> &CrateData {
226+
&self.arena[&crate_id]
227+
}
228+
}
229+
224230
impl CrateId {
225231
pub fn shift(self, amount: u32) -> CrateId {
226232
CrateId(self.0 + amount)
227233
}
228234
}
229235

230236
impl CrateData {
231-
fn new(
232-
root_file_id: FileId,
233-
edition: Edition,
234-
display_name: Option<String>,
235-
cfg_options: CfgOptions,
236-
env: Env,
237-
) -> CrateData {
238-
CrateData {
239-
root_file_id,
240-
edition,
241-
display_name,
242-
dependencies: Vec::new(),
243-
cfg_options,
244-
env,
245-
}
246-
}
247-
248237
fn add_dep(&mut self, name: SmolStr, crate_id: CrateId) {
249238
self.dependencies.push(Dependency { name, crate_id })
250239
}
@@ -272,12 +261,6 @@ impl fmt::Display for Edition {
272261
}
273262
}
274263

275-
impl Dependency {
276-
pub fn crate_id(&self) -> CrateId {
277-
self.crate_id
278-
}
279-
}
280-
281264
#[derive(Debug)]
282265
pub struct ParseEditionError {
283266
invalid_input: String,
@@ -376,7 +359,7 @@ mod tests {
376359
.add_dep(crate1, CrateName::normalize_dashes("crate-name-with-dashes"), crate2)
377360
.is_ok());
378361
assert_eq!(
379-
graph.crate_data(&crate1).dependencies,
362+
graph[crate1].dependencies,
380363
vec![Dependency { crate_id: crate2, name: "crate_name_with_dashes".into() }]
381364
);
382365
}

crates/ra_hir/src/code_model.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,11 @@ pub struct CrateDependency {
5454

5555
impl Crate {
5656
pub fn dependencies(self, db: &impl DefDatabase) -> Vec<CrateDependency> {
57-
db.crate_graph()
58-
.crate_data(&self.id)
57+
db.crate_graph()[self.id]
5958
.dependencies
6059
.iter()
6160
.map(|dep| {
62-
let krate = Crate { id: dep.crate_id() };
61+
let krate = Crate { id: dep.crate_id };
6362
let name = dep.as_name();
6463
CrateDependency { krate, name }
6564
})
@@ -72,7 +71,7 @@ impl Crate {
7271
crate_graph
7372
.iter()
7473
.filter(|&krate| {
75-
crate_graph.crate_data(&krate).dependencies.iter().any(|it| it.crate_id == self.id)
74+
crate_graph[krate].dependencies.iter().any(|it| it.crate_id == self.id)
7675
})
7776
.map(|id| Crate { id })
7877
.collect()
@@ -84,11 +83,11 @@ impl Crate {
8483
}
8584

8685
pub fn root_file(self, db: &impl DefDatabase) -> FileId {
87-
db.crate_graph().crate_data(&self.id).root_file_id
86+
db.crate_graph()[self.id].root_file_id
8887
}
8988

9089
pub fn edition(self, db: &impl DefDatabase) -> Edition {
91-
db.crate_graph().crate_data(&self.id).edition
90+
db.crate_graph()[self.id].edition
9291
}
9392

9493
pub fn all(db: &impl DefDatabase) -> Vec<Crate> {

crates/ra_hir_def/src/find_path.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ fn find_importable_locations(
176176
// directly (only through reexports in direct dependencies).
177177
for krate in Some(from.krate)
178178
.into_iter()
179-
.chain(crate_graph.crate_data(&from.krate).dependencies.iter().map(|dep| dep.crate_id))
179+
.chain(crate_graph[from.krate].dependencies.iter().map(|dep| dep.crate_id))
180180
{
181181
result.extend(
182182
importable_locations_in_crate(db, item, krate)

crates/ra_hir_def/src/lang_item.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,7 @@ impl LangItems {
116116
if let Some(target) = start_crate_target {
117117
return Some(*target);
118118
}
119-
db.crate_graph()
120-
.crate_data(&start_crate)
119+
db.crate_graph()[start_crate]
121120
.dependencies
122121
.iter()
123122
.find_map(|dep| db.lang_item(dep.crate_id, item.clone()))

crates/ra_hir_def/src/nameres.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ impl CrateDefMap {
179179
pub(crate) fn crate_def_map_query(db: &impl DefDatabase, krate: CrateId) -> Arc<CrateDefMap> {
180180
let _p = profile("crate_def_map_query");
181181
let def_map = {
182-
let edition = db.crate_graph().crate_data(&krate).edition;
182+
let edition = db.crate_graph()[krate].edition;
183183
let mut modules: Arena<LocalModuleId, ModuleData> = Arena::default();
184184
let root = modules.alloc(ModuleData::default());
185185
CrateDefMap {

crates/ra_hir_def/src/nameres/collector.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub(super) fn collect_defs(db: &impl DefDatabase, mut def_map: CrateDefMap) -> C
3434
let crate_graph = db.crate_graph();
3535

3636
// populate external prelude
37-
for dep in &crate_graph.crate_data(&def_map.krate).dependencies {
37+
for dep in &crate_graph[def_map.krate].dependencies {
3838
let dep_def_map = db.crate_def_map(dep.crate_id);
3939
log::debug!("crate dep {:?} -> {:?}", dep.name, dep.crate_id);
4040
def_map.extern_prelude.insert(
@@ -51,7 +51,7 @@ pub(super) fn collect_defs(db: &impl DefDatabase, mut def_map: CrateDefMap) -> C
5151
}
5252
}
5353

54-
let cfg_options = crate_graph.cfg_options(def_map.krate);
54+
let cfg_options = &crate_graph[def_map.krate].cfg_options;
5555

5656
let mut collector = DefCollector {
5757
db,
@@ -128,7 +128,7 @@ where
128128
DB: DefDatabase,
129129
{
130130
fn collect(&mut self) {
131-
let file_id = self.db.crate_graph().crate_data(&self.def_map.krate).root_file_id;
131+
let file_id = self.db.crate_graph()[self.def_map.krate].root_file_id;
132132
let raw_items = self.db.raw_items(file_id.into());
133133
let module_id = self.def_map.root;
134134
self.def_map.modules[module_id].origin = ModuleOrigin::CrateRoot { definition: file_id };
@@ -954,7 +954,7 @@ mod tests {
954954
let krate = db.test_crate();
955955

956956
let def_map = {
957-
let edition = db.crate_graph().crate_data(&krate).edition;
957+
let edition = db.crate_graph()[krate].edition;
958958
let mut modules: Arena<LocalModuleId, ModuleData> = Arena::default();
959959
let root = modules.alloc(ModuleData::default());
960960
CrateDefMap {

crates/ra_hir_ty/src/traits.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub(crate) fn impls_for_trait_query(
4747
// will only ever get called for a few crates near the root of the tree (the
4848
// ones the user is editing), so this may actually be a waste of memory. I'm
4949
// doing it like this mainly for simplicity for now.
50-
for dep in &db.crate_graph().crate_data(&krate).dependencies {
50+
for dep in &db.crate_graph()[krate].dependencies {
5151
impls.extend(db.impls_for_trait(dep.crate_id, trait_).iter());
5252
}
5353
let crate_impl_defs = db.impls_in_crate(krate);

crates/ra_ide/src/hover.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ fn definition_owner_name(db: &RootDatabase, def: &Definition) -> Option<String>
121121

122122
fn determine_mod_path(db: &RootDatabase, def: &Definition) -> Option<String> {
123123
let mod_path = def.module(db).map(|module| {
124-
once(db.crate_graph().crate_data(&module.krate().into()).display_name.clone())
124+
once(db.crate_graph()[module.krate().into()].display_name.clone())
125125
.chain(
126126
module
127127
.path_to_root(db)

crates/ra_ide/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,12 +421,12 @@ impl Analysis {
421421

422422
/// Returns the edition of the given crate.
423423
pub fn crate_edition(&self, crate_id: CrateId) -> Cancelable<Edition> {
424-
self.with_db(|db| db.crate_graph().crate_data(&crate_id).edition)
424+
self.with_db(|db| db.crate_graph()[crate_id].edition)
425425
}
426426

427427
/// Returns the root file of the given crate.
428428
pub fn crate_root(&self, crate_id: CrateId) -> Cancelable<FileId> {
429-
self.with_db(|db| db.crate_graph().crate_data(&crate_id).root_file_id)
429+
self.with_db(|db| db.crate_graph()[crate_id].root_file_id)
430430
}
431431

432432
/// Returns the set of possible targets to run for the current file.

0 commit comments

Comments
 (0)