Unnamed repository; edit this file 'description' to name the repository.
Add `crate_limits` query to `SourceDatabase`
This allows fetching crate limits like `recursion_limit`. The implementation is currently dummy and just returns the defaults. Future work: Use this query instead of the hardcoded constant. Future work: Actually implement this query by parsing `#![recursion_limit = N]` attribute.
Maybe Waffle 2022-01-28
parent 93036aa · commit c932ca5
-rw-r--r--crates/base_db/src/lib.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/crates/base_db/src/lib.rs b/crates/base_db/src/lib.rs
index d80660f7c9..a4c590cf6d 100644
--- a/crates/base_db/src/lib.rs
+++ b/crates/base_db/src/lib.rs
@@ -69,6 +69,21 @@ pub trait SourceDatabase: FileLoader + std::fmt::Debug {
/// The crate graph.
#[salsa::input]
fn crate_graph(&self) -> Arc<CrateGraph>;
+
+ #[salsa::transparent]
+ fn crate_limits(&self, crate_id: CrateId) -> CrateLimits;
+}
+
+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 SourceDatabase, _crate_id: CrateId) -> CrateLimits {
+ CrateLimits {
+ // 128 is the default in rustc.
+ recursion_limit: 128,
+ }
}
fn parse_query(db: &dyn SourceDatabase, file_id: FileId) -> Parse<ast::SourceFile> {