]> git.lizzy.rs Git - rust.git/blobdiff - crates/hir_def/src/db.rs
feat: Honor recursion limit configuration
[rust.git] / crates / hir_def / src / db.rs
index 7946558311a27f4fcc0090eca2fdee8fc0066444..f9dd935c4b0c994e2cda76947b69852f7a04d02a 100644 (file)
@@ -157,9 +157,26 @@ fn fields_attrs_source_map(
 
     #[salsa::invoke(visibility::function_visibility_query)]
     fn function_visibility(&self, def: FunctionId) -> Visibility;
+
+    #[salsa::transparent]
+    fn crate_limits(&self, crate_id: CrateId) -> CrateLimits;
 }
 
 fn crate_def_map_wait(db: &dyn DefDatabase, krate: CrateId) -> Arc<DefMap> {
     let _p = profile::span("crate_def_map:wait");
     db.crate_def_map_query(krate)
 }
+
+pub struct CrateLimits {
+    /// The maximum depth for potentially infinitely-recursive compile-time operations like macro expansion or auto-dereference.
+    pub recursion_limit: u32,
+}
+
+fn crate_limits(db: &dyn DefDatabase, crate_id: CrateId) -> CrateLimits {
+    let def_map = db.crate_def_map(crate_id);
+
+    CrateLimits {
+        // 128 is the default in rustc.
+        recursion_limit: def_map.recursion_limit().unwrap_or(128),
+    }
+}