about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMaybe Waffle <waffle.lapkin@gmail.com>2022-12-22 11:00:25 +0000
committerMaybe Waffle <waffle.lapkin@gmail.com>2022-12-22 11:00:25 +0000
commitef4c8167e87c27950bbc9553a50c269d0e27fd56 (patch)
treec08e7ea6ec0dd2d7d6995ce859bd714f6d1ff317
parenteb3963b22ec8ec7e99aeb1a2c7acb5689a2f76c5 (diff)
downloadrust-ef4c8167e87c27950bbc9553a50c269d0e27fd56.tar.gz
rust-ef4c8167e87c27950bbc9553a50c269d0e27fd56.zip
Pass `FamousDefs` around in inlay hints
-rw-r--r--crates/ide/src/inlay_hints.rs13
-rw-r--r--crates/ide/src/inlay_hints/bind_pat.rs6
-rw-r--r--crates/ide/src/inlay_hints/chaining.rs7
-rw-r--r--crates/ide/src/inlay_hints/closure_ret.rs7
4 files changed, 14 insertions, 19 deletions
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs
index eb91d5cec1e..2b78dc51d94 100644
--- a/crates/ide/src/inlay_hints.rs
+++ b/crates/ide/src/inlay_hints.rs
@@ -232,8 +232,7 @@ impl InlayHintLabelBuilder<'_> {
 }
 
 fn label_of_ty(
-    sema: &Semantics<'_, RootDatabase>,
-    desc_pat: &impl AstNode,
+    famous_defs @ FamousDefs(sema, _): &FamousDefs<'_, '_>,
     config: &InlayHintsConfig,
     ty: hir::Type,
 ) -> Option<InlayHintLabel> {
@@ -263,8 +262,6 @@ fn label_of_ty(
         };
     }
 
-    let krate = sema.scope(desc_pat.syntax())?.krate();
-    let famous_defs = FamousDefs(sema, krate);
     let mut label_builder = InlayHintLabelBuilder {
         db: sema.db,
         last_part: String::new(),
@@ -329,7 +326,7 @@ pub(crate) fn inlay_hints(
 
 fn hints(
     hints: &mut Vec<InlayHint>,
-    FamousDefs(sema, _): &FamousDefs<'_, '_>,
+    famous_defs @ FamousDefs(sema, _): &FamousDefs<'_, '_>,
     config: &InlayHintsConfig,
     file_id: FileId,
     node: SyntaxNode,
@@ -338,14 +335,14 @@ fn hints(
     match_ast! {
         match node {
             ast::Expr(expr) => {
-                chaining::hints(hints, sema, config, file_id, &expr);
+                chaining::hints(hints, famous_defs, config, file_id, &expr);
                 adjustment::hints(hints, sema, config, &expr);
                 match expr {
                     ast::Expr::CallExpr(it) => param_name::hints(hints, sema, config, ast::Expr::from(it)),
                     ast::Expr::MethodCallExpr(it) => {
                         param_name::hints(hints, sema, config, ast::Expr::from(it))
                     }
-                    ast::Expr::ClosureExpr(it) => closure_ret::hints(hints, sema, config, file_id, it),
+                    ast::Expr::ClosureExpr(it) => closure_ret::hints(hints, famous_defs, config, file_id, it),
                     // We could show reborrows for all expressions, but usually that is just noise to the user
                     // and the main point here is to show why "moving" a mutable reference doesn't necessarily move it
                     // ast::Expr::PathExpr(_) => reborrow_hints(hints, sema, config, &expr),
@@ -355,7 +352,7 @@ fn hints(
             ast::Pat(it) => {
                 binding_mode::hints(hints, sema, config, &it);
                 if let ast::Pat::IdentPat(it) = it {
-                    bind_pat::hints(hints, sema, config, file_id, &it);
+                    bind_pat::hints(hints, famous_defs, config, file_id, &it);
                 }
                 Some(())
             },
diff --git a/crates/ide/src/inlay_hints/bind_pat.rs b/crates/ide/src/inlay_hints/bind_pat.rs
index 7766d497918..e22b16a3f82 100644
--- a/crates/ide/src/inlay_hints/bind_pat.rs
+++ b/crates/ide/src/inlay_hints/bind_pat.rs
@@ -4,7 +4,7 @@
 //! let _x /* i32 */= f(4, 4);
 //! ```
 use hir::{Semantics, TypeInfo};
-use ide_db::{base_db::FileId, RootDatabase};
+use ide_db::{base_db::FileId, famous_defs::FamousDefs, RootDatabase};
 
 use itertools::Itertools;
 use syntax::{
@@ -20,7 +20,7 @@ use super::label_of_ty;
 
 pub(super) fn hints(
     acc: &mut Vec<InlayHint>,
-    sema: &Semantics<'_, RootDatabase>,
+    famous_defs @ FamousDefs(sema, _): &FamousDefs<'_, '_>,
     config: &InlayHintsConfig,
     file_id: FileId,
     pat: &ast::IdentPat,
@@ -37,7 +37,7 @@ pub(super) fn hints(
         return None;
     }
 
-    let label = label_of_ty(sema, desc_pat, config, ty)?;
+    let label = label_of_ty(famous_defs, config, ty)?;
 
     if config.hide_named_constructor_hints
         && is_named_constructor(sema, pat, &label.to_string()).is_some()
diff --git a/crates/ide/src/inlay_hints/chaining.rs b/crates/ide/src/inlay_hints/chaining.rs
index efeb2b79255..8810d5d34db 100644
--- a/crates/ide/src/inlay_hints/chaining.rs
+++ b/crates/ide/src/inlay_hints/chaining.rs
@@ -1,6 +1,5 @@
 //! Implementation of "chaining" inlay hints.
-use hir::Semantics;
-use ide_db::RootDatabase;
+use ide_db::famous_defs::FamousDefs;
 use syntax::{
     ast::{self, AstNode},
     Direction, NodeOrToken, SyntaxKind, T,
@@ -12,7 +11,7 @@ use super::label_of_ty;
 
 pub(super) fn hints(
     acc: &mut Vec<InlayHint>,
-    sema: &Semantics<'_, RootDatabase>,
+    famous_defs @ FamousDefs(sema, _): &FamousDefs<'_, '_>,
     config: &InlayHintsConfig,
     file_id: FileId,
     expr: &ast::Expr,
@@ -61,7 +60,7 @@ pub(super) fn hints(
             acc.push(InlayHint {
                 range: expr.syntax().text_range(),
                 kind: InlayKind::ChainingHint,
-                label: label_of_ty(sema, desc_expr, config, ty)?,
+                label: label_of_ty(famous_defs, config, ty)?,
                 tooltip: Some(InlayTooltip::HoverRanged(file_id, expr.syntax().text_range())),
             });
         }
diff --git a/crates/ide/src/inlay_hints/closure_ret.rs b/crates/ide/src/inlay_hints/closure_ret.rs
index 247a4abcc56..e711a4af235 100644
--- a/crates/ide/src/inlay_hints/closure_ret.rs
+++ b/crates/ide/src/inlay_hints/closure_ret.rs
@@ -1,6 +1,5 @@
 //! Implementation of "closure return type" inlay hints.
-use hir::Semantics;
-use ide_db::{base_db::FileId, RootDatabase};
+use ide_db::{base_db::FileId, famous_defs::FamousDefs};
 use syntax::ast::{self, AstNode};
 
 use crate::{
@@ -12,7 +11,7 @@ use super::label_of_ty;
 
 pub(super) fn hints(
     acc: &mut Vec<InlayHint>,
-    sema: &Semantics<'_, RootDatabase>,
+    famous_defs @ FamousDefs(sema, _): &FamousDefs<'_, '_>,
     config: &InlayHintsConfig,
     file_id: FileId,
     closure: ast::ClosureExpr,
@@ -43,7 +42,7 @@ pub(super) fn hints(
     acc.push(InlayHint {
         range: param_list.syntax().text_range(),
         kind: InlayKind::ClosureReturnTypeHint,
-        label: label_of_ty(sema, &param_list, config, ty)?,
+        label: label_of_ty(famous_defs, config, ty)?,
         tooltip: Some(InlayTooltip::HoverRanged(file_id, param_list.syntax().text_range())),
     });
     Some(())