mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 06:41:48 +00:00
Only remember blocks that have a DefMap
This commit is contained in:
parent
4c8ee9a531
commit
9b13e1bb91
2 changed files with 8 additions and 6 deletions
|
@ -317,7 +317,7 @@ impl Body {
|
||||||
) -> impl Iterator<Item = (BlockId, Arc<DefMap>)> + '_ {
|
) -> impl Iterator<Item = (BlockId, Arc<DefMap>)> + '_ {
|
||||||
self.block_scopes
|
self.block_scopes
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(move |block| db.block_def_map(*block).map(|map| (*block, map)))
|
.map(move |block| (*block, db.block_def_map(*block).expect("block ID without DefMap")))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new(
|
fn new(
|
||||||
|
|
|
@ -673,12 +673,14 @@ impl ExprCollector<'_> {
|
||||||
let block_loc =
|
let block_loc =
|
||||||
BlockLoc { ast_id, module: self.expander.def_map.module_id(self.expander.module) };
|
BlockLoc { ast_id, module: self.expander.def_map.module_id(self.expander.module) };
|
||||||
let block_id = self.db.intern_block(block_loc);
|
let block_id = self.db.intern_block(block_loc);
|
||||||
self.body.block_scopes.push(block_id);
|
|
||||||
|
|
||||||
let opt_def_map = self.db.block_def_map(block_id);
|
let (module, def_map) = match self.db.block_def_map(block_id) {
|
||||||
let has_def_map = opt_def_map.is_some();
|
Some(def_map) => {
|
||||||
let def_map = opt_def_map.unwrap_or_else(|| self.expander.def_map.clone());
|
self.body.block_scopes.push(block_id);
|
||||||
let module = if has_def_map { def_map.root() } else { self.expander.module };
|
(def_map.root(), def_map)
|
||||||
|
}
|
||||||
|
None => (self.expander.module, self.expander.def_map.clone()),
|
||||||
|
};
|
||||||
let prev_def_map = mem::replace(&mut self.expander.def_map, def_map);
|
let prev_def_map = mem::replace(&mut self.expander.def_map, def_map);
|
||||||
let prev_local_module = mem::replace(&mut self.expander.module, module);
|
let prev_local_module = mem::replace(&mut self.expander.module, module);
|
||||||
let prev_statements = std::mem::take(&mut self.statements_in_scope);
|
let prev_statements = std::mem::take(&mut self.statements_in_scope);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue