]> git.lizzy.rs Git - rust.git/commitdiff
Add `crate_limits` query to `SourceDatabase`
authorMaybe Waffle <waffle.lapkin@gmail.com>
Thu, 27 Jan 2022 20:34:33 +0000 (23:34 +0300)
committerMaybe Waffle <waffle.lapkin@gmail.com>
Fri, 28 Jan 2022 08:31:59 +0000 (11:31 +0300)
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.

crates/base_db/src/lib.rs

index d80660f7c9a36553775b52a5ac483e602b4ee651..a4c590cf6d918435c43967d63b6058c6cff4361e 100644 (file)
@@ -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> {