Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/qualify_path.rs')
-rw-r--r--crates/ide-assists/src/handlers/qualify_path.rs22
1 files changed, 16 insertions, 6 deletions
diff --git a/crates/ide-assists/src/handlers/qualify_path.rs b/crates/ide-assists/src/handlers/qualify_path.rs
index d8e7da15d5..ac88861fe4 100644
--- a/crates/ide-assists/src/handlers/qualify_path.rs
+++ b/crates/ide-assists/src/handlers/qualify_path.rs
@@ -8,6 +8,7 @@ use ide_db::{
imports::import_assets::{ImportCandidate, LocatedImport},
};
use syntax::ast::HasGenericArgs;
+use syntax::Edition;
use syntax::{
ast,
ast::{make, HasArgList},
@@ -93,6 +94,8 @@ pub(crate) fn qualify_path(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
NodeOrToken::Token(t) => t.parent()?,
})
.map(|scope| scope.module());
+ let current_edition =
+ current_module.map(|it| it.krate().edition(ctx.db())).unwrap_or(Edition::CURRENT);
// prioritize more relevant imports
proposed_imports.sort_by_key(|import| {
Reverse(super::auto_import::relevance_score(ctx, import, current_module.as_ref()))
@@ -103,13 +106,14 @@ pub(crate) fn qualify_path(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
acc.add_group(
&group_label,
AssistId("qualify_path", AssistKind::QuickFix),
- label(ctx.db(), candidate, &import),
+ label(ctx.db(), candidate, &import, current_edition),
range,
|builder| {
qualify_candidate.qualify(
|replace_with: String| builder.replace(range, replace_with),
&import.import_path,
import.item_to_import,
+ current_edition,
)
},
);
@@ -130,8 +134,9 @@ impl QualifyCandidate<'_> {
mut replacer: impl FnMut(String),
import: &hir::ModPath,
item: hir::ItemInNs,
+ edition: Edition,
) {
- let import = mod_path_to_ast(import);
+ let import = mod_path_to_ast(import, edition);
match self {
QualifyCandidate::QualifierStart(segment, generics) => {
let generics = generics.as_ref().map_or_else(String::new, ToString::to_string);
@@ -203,7 +208,7 @@ fn find_trait_method(
if let Some(hir::AssocItem::Function(method)) =
trait_.items(db).into_iter().find(|item: &hir::AssocItem| {
item.name(db)
- .map(|name| name.display(db).to_string() == trait_method_name.to_string())
+ .map(|name| name.eq_ident(trait_method_name.text().as_str()))
.unwrap_or(false)
})
{
@@ -233,14 +238,19 @@ fn group_label(candidate: &ImportCandidate) -> GroupLabel {
GroupLabel(format!("Qualify {name}"))
}
-fn label(db: &RootDatabase, candidate: &ImportCandidate, import: &LocatedImport) -> String {
+fn label(
+ db: &RootDatabase,
+ candidate: &ImportCandidate,
+ import: &LocatedImport,
+ edition: Edition,
+) -> String {
let import_path = &import.import_path;
match candidate {
ImportCandidate::Path(candidate) if candidate.qualifier.is_none() => {
- format!("Qualify as `{}`", import_path.display(db))
+ format!("Qualify as `{}`", import_path.display(db, edition))
}
- _ => format!("Qualify with `{}`", import_path.display(db)),
+ _ => format!("Qualify with `{}`", import_path.display(db, edition)),
}
}