mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-10 15:14:32 +00:00
Reuse recursion limit as expansion limit
A configurable recursion limit was introduced by looking at the recursion_limit crate attribute. Instead of relying on a global constant we will reuse this value for expansion limit as well.
This commit is contained in:
parent
dab022fb31
commit
6041433999
1 changed files with 8 additions and 2 deletions
|
@ -56,7 +56,6 @@ use crate::{
|
|||
};
|
||||
|
||||
static GLOB_RECURSION_LIMIT: Limit = Limit::new(100);
|
||||
static EXPANSION_DEPTH_LIMIT: Limit = Limit::new(128);
|
||||
static FIXED_POINT_LIMIT: Limit = Limit::new(8192);
|
||||
|
||||
pub(super) fn collect_defs(db: &dyn DefDatabase, def_map: DefMap, tree_id: TreeId) -> DefMap {
|
||||
|
@ -1440,7 +1439,14 @@ impl DefCollector<'_> {
|
|||
depth: usize,
|
||||
container: ItemContainerId,
|
||||
) {
|
||||
if EXPANSION_DEPTH_LIMIT.check(depth).is_err() {
|
||||
let recursion_limit = self.def_map.recursion_limit() as usize;
|
||||
let recursion_limit = Limit::new(if cfg!(test) {
|
||||
// Without this, `body::tests::your_stack_belongs_to_me` stack-overflows in debug
|
||||
std::cmp::min(32, recursion_limit)
|
||||
} else {
|
||||
recursion_limit
|
||||
});
|
||||
if recursion_limit.check(depth).is_err() {
|
||||
cov_mark::hit!(macro_expansion_overflow);
|
||||
tracing::warn!("macro expansion is too deep");
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue