Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/utils.rs')
-rw-r--r--crates/ide-assists/src/utils.rs44
1 files changed, 32 insertions, 12 deletions
diff --git a/crates/ide-assists/src/utils.rs b/crates/ide-assists/src/utils.rs
index 39686f065a..a6fa170671 100644
--- a/crates/ide-assists/src/utils.rs
+++ b/crates/ide-assists/src/utils.rs
@@ -3,7 +3,8 @@
pub(crate) use gen_trait_fn_body::gen_trait_fn_body;
use hir::{
db::{ExpandDatabase, HirDatabase},
- HasAttrs as HirHasAttrs, HirDisplay, InFile, ModuleDef, PathResolution, Semantics,
+ DisplayTarget, HasAttrs as HirHasAttrs, HirDisplay, InFile, ModuleDef, PathResolution,
+ Semantics,
};
use ide_db::{
famous_defs::FamousDefs,
@@ -21,7 +22,7 @@ use syntax::{
syntax_factory::SyntaxFactory,
HasArgList, HasAttrs, HasGenericParams, HasName, HasTypeBounds, Whitespace,
},
- ted, AstNode, AstToken, Direction, Edition, NodeOrToken, SourceFile,
+ ted, AstNode, AstToken, Direction, NodeOrToken, SourceFile,
SyntaxKind::*,
SyntaxNode, SyntaxToken, TextRange, TextSize, WalkEvent, T,
};
@@ -793,31 +794,50 @@ enum ReferenceConversionType {
}
impl ReferenceConversion {
- pub(crate) fn convert_type(&self, db: &dyn HirDatabase, edition: Edition) -> ast::Type {
+ pub(crate) fn convert_type(
+ &self,
+ db: &dyn HirDatabase,
+ display_target: DisplayTarget,
+ ) -> ast::Type {
let ty = match self.conversion {
- ReferenceConversionType::Copy => self.ty.display(db, edition).to_string(),
+ ReferenceConversionType::Copy => self.ty.display(db, display_target).to_string(),
ReferenceConversionType::AsRefStr => "&str".to_owned(),
ReferenceConversionType::AsRefSlice => {
- let type_argument_name =
- self.ty.type_arguments().next().unwrap().display(db, edition).to_string();
+ let type_argument_name = self
+ .ty
+ .type_arguments()
+ .next()
+ .unwrap()
+ .display(db, display_target)
+ .to_string();
format!("&[{type_argument_name}]")
}
ReferenceConversionType::Dereferenced => {
- let type_argument_name =
- self.ty.type_arguments().next().unwrap().display(db, edition).to_string();
+ let type_argument_name = self
+ .ty
+ .type_arguments()
+ .next()
+ .unwrap()
+ .display(db, display_target)
+ .to_string();
format!("&{type_argument_name}")
}
ReferenceConversionType::Option => {
- let type_argument_name =
- self.ty.type_arguments().next().unwrap().display(db, edition).to_string();
+ let type_argument_name = self
+ .ty
+ .type_arguments()
+ .next()
+ .unwrap()
+ .display(db, display_target)
+ .to_string();
format!("Option<&{type_argument_name}>")
}
ReferenceConversionType::Result => {
let mut type_arguments = self.ty.type_arguments();
let first_type_argument_name =
- type_arguments.next().unwrap().display(db, edition).to_string();
+ type_arguments.next().unwrap().display(db, display_target).to_string();
let second_type_argument_name =
- type_arguments.next().unwrap().display(db, edition).to_string();
+ type_arguments.next().unwrap().display(db, display_target).to_string();
format!("Result<&{first_type_argument_name}, &{second_type_argument_name}>")
}
};