Skip to content

Commit 274c214

Browse files
committed
Auto merge of #17666 - Veykril:simplify, r=Veykril
Simplify
2 parents 232e555 + e3f1622 commit 274c214

17 files changed

+65
-139
lines changed

crates/ide-assists/src/assist_config.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! module, and we use to statically check that we only produce snippet
55
//! assists if we are allowed to.
66
7+
use hir::ImportPathConfig;
78
use ide_db::{imports::insert_use::InsertUseConfig, SnippetCap};
89

910
use crate::AssistKind;
@@ -20,3 +21,13 @@ pub struct AssistConfig {
2021
pub term_search_fuel: u64,
2122
pub term_search_borrowck: bool,
2223
}
24+
25+
impl AssistConfig {
26+
pub fn import_path_config(&self) -> ImportPathConfig {
27+
ImportPathConfig {
28+
prefer_no_std: self.prefer_no_std,
29+
prefer_prelude: self.prefer_prelude,
30+
prefer_absolute: self.prefer_absolute,
31+
}
32+
}
33+
}

crates/ide-assists/src/handlers/add_missing_match_arms.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,7 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
7171
.filter(|pat| !matches!(pat, Pat::WildcardPat(_)))
7272
.collect();
7373

74-
let cfg = ImportPathConfig {
75-
prefer_no_std: ctx.config.prefer_no_std,
76-
prefer_prelude: ctx.config.prefer_prelude,
77-
prefer_absolute: ctx.config.prefer_absolute,
78-
};
74+
let cfg = ctx.config.import_path_config();
7975

8076
let module = ctx.sema.scope(expr.syntax())?.module();
8177
let (mut missing_pats, is_non_exhaustive, has_hidden_variants): (

crates/ide-assists/src/handlers/auto_import.rs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::cmp::Reverse;
22

3-
use hir::{db::HirDatabase, ImportPathConfig, Module};
3+
use hir::{db::HirDatabase, Module};
44
use ide_db::{
55
helpers::mod_path_to_ast,
66
imports::{
@@ -90,11 +90,7 @@ use crate::{AssistContext, AssistId, AssistKind, Assists, GroupLabel};
9090
// # pub mod std { pub mod collections { pub struct HashMap { } } }
9191
// ```
9292
pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
93-
let cfg = ImportPathConfig {
94-
prefer_no_std: ctx.config.prefer_no_std,
95-
prefer_prelude: ctx.config.prefer_prelude,
96-
prefer_absolute: ctx.config.prefer_absolute,
97-
};
93+
let cfg = ctx.config.import_path_config();
9894

9995
let (import_assets, syntax_under_caret) = find_importable_node(ctx)?;
10096
let mut proposed_imports: Vec<_> = import_assets
@@ -108,7 +104,6 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<
108104
NodeOrToken::Node(node) => ctx.sema.original_range(node).range,
109105
NodeOrToken::Token(token) => token.text_range(),
110106
};
111-
let group_label = group_label(import_assets.import_candidate());
112107
let scope = ImportScope::find_insert_use_container(
113108
&match syntax_under_caret {
114109
NodeOrToken::Node(it) => it,
@@ -121,18 +116,12 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<
121116
proposed_imports.sort_by(|a, b| a.import_path.cmp(&b.import_path));
122117
proposed_imports.dedup_by(|a, b| a.import_path == b.import_path);
123118

124-
let current_node = match ctx.covering_element() {
125-
NodeOrToken::Node(node) => Some(node),
126-
NodeOrToken::Token(token) => token.parent(),
127-
};
128-
129-
let current_module =
130-
current_node.as_ref().and_then(|node| ctx.sema.scope(node)).map(|scope| scope.module());
131-
119+
let current_module = ctx.sema.scope(scope.as_syntax_node()).map(|scope| scope.module());
132120
// prioritize more relevant imports
133121
proposed_imports
134122
.sort_by_key(|import| Reverse(relevance_score(ctx, import, current_module.as_ref())));
135123

124+
let group_label = group_label(import_assets.import_candidate());
136125
for import in proposed_imports {
137126
let import_path = import.import_path;
138127

@@ -226,7 +215,7 @@ fn group_label(import_candidate: &ImportCandidate) -> GroupLabel {
226215

227216
/// Determine how relevant a given import is in the current context. Higher scores are more
228217
/// relevant.
229-
fn relevance_score(
218+
pub(crate) fn relevance_score(
230219
ctx: &AssistContext<'_>,
231220
import: &LocatedImport,
232221
current_module: Option<&Module>,

crates/ide-assists/src/handlers/bool_to_enum.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use either::Either;
2-
use hir::{ImportPathConfig, ModuleDef};
2+
use hir::ModuleDef;
33
use ide_db::{
44
assists::{AssistId, AssistKind},
55
defs::Definition,
@@ -337,11 +337,7 @@ fn augment_references_with_imports(
337337
) -> Vec<FileReferenceWithImport> {
338338
let mut visited_modules = FxHashSet::default();
339339

340-
let cfg = ImportPathConfig {
341-
prefer_no_std: ctx.config.prefer_no_std,
342-
prefer_prelude: ctx.config.prefer_prelude,
343-
prefer_absolute: ctx.config.prefer_absolute,
344-
};
340+
let cfg = ctx.config.import_path_config();
345341

346342
references
347343
.into_iter()

crates/ide-assists/src/handlers/convert_into_to_from.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use hir::ImportPathConfig;
21
use ide_db::{famous_defs::FamousDefs, helpers::mod_path_to_ast, traits::resolve_target_trait};
32
use syntax::ast::{self, AstNode, HasGenericArgs, HasName};
43

@@ -44,11 +43,7 @@ pub(crate) fn convert_into_to_from(acc: &mut Assists, ctx: &AssistContext<'_>) -
4443
return None;
4544
}
4645

47-
let cfg = ImportPathConfig {
48-
prefer_no_std: ctx.config.prefer_no_std,
49-
prefer_prelude: ctx.config.prefer_prelude,
50-
prefer_absolute: ctx.config.prefer_absolute,
51-
};
46+
let cfg = ctx.config.import_path_config();
5247

5348
let src_type_path = {
5449
let src_type_path = src_type.syntax().descendants().find_map(ast::Path::cast)?;

crates/ide-assists/src/handlers/convert_tuple_return_type_to_struct.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use either::Either;
2-
use hir::{ImportPathConfig, ModuleDef};
2+
use hir::ModuleDef;
33
use ide_db::{
44
assists::{AssistId, AssistKind},
55
defs::Definition,
@@ -183,11 +183,7 @@ fn augment_references_with_imports(
183183
) -> Vec<(ast::NameLike, Option<(ImportScope, ast::Path)>)> {
184184
let mut visited_modules = FxHashSet::default();
185185

186-
let cfg = ImportPathConfig {
187-
prefer_no_std: ctx.config.prefer_no_std,
188-
prefer_prelude: ctx.config.prefer_prelude,
189-
prefer_absolute: ctx.config.prefer_absolute,
190-
};
186+
let cfg = ctx.config.import_path_config();
191187

192188
references
193189
.iter()

crates/ide-assists/src/handlers/destructure_struct_binding.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use hir::{sym, HasVisibility, ImportPathConfig};
1+
use hir::{sym, HasVisibility};
22
use ide_db::{
33
assists::{AssistId, AssistKind},
44
defs::Definition,
@@ -87,11 +87,7 @@ fn collect_data(ident_pat: ast::IdentPat, ctx: &AssistContext<'_>) -> Option<Str
8787
let ty = ctx.sema.type_of_binding_in_pat(&ident_pat)?;
8888
let hir::Adt::Struct(struct_type) = ty.strip_references().as_adt()? else { return None };
8989

90-
let cfg = ImportPathConfig {
91-
prefer_no_std: ctx.config.prefer_no_std,
92-
prefer_prelude: ctx.config.prefer_prelude,
93-
prefer_absolute: ctx.config.prefer_absolute,
94-
};
90+
let cfg = ctx.config.import_path_config();
9591

9692
let module = ctx.sema.scope(ident_pat.syntax())?.module();
9793
let struct_def = hir::ModuleDef::from(struct_type);

crates/ide-assists/src/handlers/extract_function.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use std::{iter, ops::RangeInclusive};
33
use ast::make;
44
use either::Either;
55
use hir::{
6-
DescendPreference, HasSource, HirDisplay, ImportPathConfig, InFile, Local, LocalSource,
7-
ModuleDef, PathResolution, Semantics, TypeInfo, TypeParam,
6+
DescendPreference, HasSource, HirDisplay, InFile, Local, LocalSource, ModuleDef,
7+
PathResolution, Semantics, TypeInfo, TypeParam,
88
};
99
use ide_db::{
1010
defs::{Definition, NameRefClass},
@@ -213,11 +213,7 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext<'_>) -> Op
213213
ctx.sema.db,
214214
ModuleDef::from(control_flow_enum),
215215
ctx.config.insert_use.prefix_kind,
216-
ImportPathConfig {
217-
prefer_no_std: ctx.config.prefer_no_std,
218-
prefer_prelude: ctx.config.prefer_prelude,
219-
prefer_absolute: ctx.config.prefer_absolute,
220-
},
216+
ctx.config.import_path_config(),
221217
);
222218

223219
if let Some(mod_path) = mod_path {

crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::iter;
22

33
use either::Either;
4-
use hir::{ImportPathConfig, Module, ModuleDef, Name, Variant};
4+
use hir::{Module, ModuleDef, Name, Variant};
55
use ide_db::{
66
defs::Definition,
77
helpers::mod_path_to_ast,
@@ -390,11 +390,7 @@ fn process_references(
390390
ctx.sema.db,
391391
*enum_module_def,
392392
ctx.config.insert_use.prefix_kind,
393-
ImportPathConfig {
394-
prefer_no_std: ctx.config.prefer_no_std,
395-
prefer_prelude: ctx.config.prefer_prelude,
396-
prefer_absolute: ctx.config.prefer_absolute,
397-
},
393+
ctx.config.import_path_config(),
398394
);
399395
if let Some(mut mod_path) = mod_path {
400396
mod_path.pop_segment();

crates/ide-assists/src/handlers/generate_deref.rs

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::fmt::Display;
22

3-
use hir::{ImportPathConfig, ModPath, ModuleDef};
3+
use hir::{ModPath, ModuleDef};
44
use ide_db::{famous_defs::FamousDefs, RootDatabase};
55
use syntax::{
66
ast::{self, HasName},
@@ -58,15 +58,8 @@ fn generate_record_deref(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<(
5858

5959
let module = ctx.sema.to_def(&strukt)?.module(ctx.db());
6060
let trait_ = deref_type_to_generate.to_trait(&ctx.sema, module.krate())?;
61-
let trait_path = module.find_path(
62-
ctx.db(),
63-
ModuleDef::Trait(trait_),
64-
ImportPathConfig {
65-
prefer_no_std: ctx.config.prefer_no_std,
66-
prefer_prelude: ctx.config.prefer_prelude,
67-
prefer_absolute: ctx.config.prefer_absolute,
68-
},
69-
)?;
61+
let trait_path =
62+
module.find_path(ctx.db(), ModuleDef::Trait(trait_), ctx.config.import_path_config())?;
7063

7164
let field_type = field.ty()?;
7265
let field_name = field.name()?;
@@ -106,15 +99,8 @@ fn generate_tuple_deref(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()
10699

107100
let module = ctx.sema.to_def(&strukt)?.module(ctx.db());
108101
let trait_ = deref_type_to_generate.to_trait(&ctx.sema, module.krate())?;
109-
let trait_path = module.find_path(
110-
ctx.db(),
111-
ModuleDef::Trait(trait_),
112-
ImportPathConfig {
113-
prefer_no_std: ctx.config.prefer_no_std,
114-
prefer_prelude: ctx.config.prefer_prelude,
115-
prefer_absolute: ctx.config.prefer_absolute,
116-
},
117-
)?;
102+
let trait_path =
103+
module.find_path(ctx.db(), ModuleDef::Trait(trait_), ctx.config.import_path_config())?;
118104

119105
let field_type = field.ty()?;
120106
let target = field.syntax().text_range();

crates/ide-assists/src/handlers/generate_new.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use hir::ImportPathConfig;
21
use ide_db::{
32
imports::import_assets::item_for_path_search, use_trivial_constructor::use_trivial_constructor,
43
};
@@ -62,11 +61,7 @@ pub(crate) fn generate_new(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
6261
let type_path = current_module.find_path(
6362
ctx.sema.db,
6463
item_for_path_search(ctx.sema.db, item_in_ns)?,
65-
ImportPathConfig {
66-
prefer_no_std: ctx.config.prefer_no_std,
67-
prefer_prelude: ctx.config.prefer_prelude,
68-
prefer_absolute: ctx.config.prefer_absolute,
69-
},
64+
ctx.config.import_path_config(),
7065
)?;
7166

7267
let expr = use_trivial_constructor(

crates/ide-assists/src/handlers/qualify_method_call.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use hir::{
2-
db::HirDatabase, AsAssocItem, AssocItem, AssocItemContainer, ImportPathConfig, ItemInNs,
3-
ModuleDef,
4-
};
1+
use hir::{db::HirDatabase, AsAssocItem, AssocItem, AssocItemContainer, ItemInNs, ModuleDef};
52
use ide_db::assists::{AssistId, AssistKind};
63
use syntax::{ast, AstNode};
74

@@ -50,11 +47,7 @@ pub(crate) fn qualify_method_call(acc: &mut Assists, ctx: &AssistContext<'_>) ->
5047
let receiver_path = current_module.find_path(
5148
ctx.sema.db,
5249
item_for_path_search(ctx.sema.db, item_in_ns)?,
53-
ImportPathConfig {
54-
prefer_no_std: ctx.config.prefer_no_std,
55-
prefer_prelude: ctx.config.prefer_prelude,
56-
prefer_absolute: ctx.config.prefer_absolute,
57-
},
50+
ctx.config.import_path_config(),
5851
)?;
5952

6053
let qualify_candidate = QualifyCandidate::ImplMethod(ctx.sema.db, call, resolved_call);

crates/ide-assists/src/handlers/qualify_path.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
use std::cmp::Reverse;
12
use std::iter;
23

3-
use hir::{AsAssocItem, ImportPathConfig};
4+
use hir::AsAssocItem;
45
use ide_db::RootDatabase;
56
use ide_db::{
67
helpers::mod_path_to_ast,
@@ -38,24 +39,16 @@ use crate::{
3839
// ```
3940
pub(crate) fn qualify_path(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
4041
let (import_assets, syntax_under_caret) = find_importable_node(ctx)?;
41-
let cfg = ImportPathConfig {
42-
prefer_no_std: ctx.config.prefer_no_std,
43-
prefer_prelude: ctx.config.prefer_prelude,
44-
prefer_absolute: ctx.config.prefer_absolute,
45-
};
42+
let cfg = ctx.config.import_path_config();
4643

4744
let mut proposed_imports: Vec<_> =
4845
import_assets.search_for_relative_paths(&ctx.sema, cfg).collect();
4946
if proposed_imports.is_empty() {
5047
return None;
5148
}
5249

53-
let range = match &syntax_under_caret {
54-
NodeOrToken::Node(node) => ctx.sema.original_range(node).range,
55-
NodeOrToken::Token(token) => token.text_range(),
56-
};
5750
let candidate = import_assets.import_candidate();
58-
let qualify_candidate = match syntax_under_caret {
51+
let qualify_candidate = match syntax_under_caret.clone() {
5952
NodeOrToken::Node(syntax_under_caret) => match candidate {
6053
ImportCandidate::Path(candidate) if candidate.qualifier.is_some() => {
6154
cov_mark::hit!(qualify_path_qualifier_start);
@@ -89,6 +82,22 @@ pub(crate) fn qualify_path(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
8982
proposed_imports.sort_by(|a, b| a.import_path.cmp(&b.import_path));
9083
proposed_imports.dedup_by(|a, b| a.import_path == b.import_path);
9184

85+
let range = match &syntax_under_caret {
86+
NodeOrToken::Node(node) => ctx.sema.original_range(node).range,
87+
NodeOrToken::Token(token) => token.text_range(),
88+
};
89+
let current_module = ctx
90+
.sema
91+
.scope(&match syntax_under_caret {
92+
NodeOrToken::Node(node) => node.clone(),
93+
NodeOrToken::Token(t) => t.parent()?,
94+
})
95+
.map(|scope| scope.module());
96+
// prioritize more relevant imports
97+
proposed_imports.sort_by_key(|import| {
98+
Reverse(super::auto_import::relevance_score(ctx, import, current_module.as_ref()))
99+
});
100+
92101
let group_label = group_label(candidate);
93102
for import in proposed_imports {
94103
acc.add_group(

crates/ide-assists/src/handlers/replace_derive_with_manual_impl.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use hir::{ImportPathConfig, InFile, MacroFileIdExt, ModuleDef};
1+
use hir::{InFile, MacroFileIdExt, ModuleDef};
22
use ide_db::{helpers::mod_path_to_ast, imports::import_assets::NameToImport, items_locator};
33
use itertools::Itertools;
44
use syntax::{
@@ -83,15 +83,7 @@ pub(crate) fn replace_derive_with_manual_impl(
8383
})
8484
.flat_map(|trait_| {
8585
current_module
86-
.find_path(
87-
ctx.sema.db,
88-
hir::ModuleDef::Trait(trait_),
89-
ImportPathConfig {
90-
prefer_no_std: ctx.config.prefer_no_std,
91-
prefer_prelude: ctx.config.prefer_prelude,
92-
prefer_absolute: ctx.config.prefer_absolute,
93-
},
94-
)
86+
.find_path(ctx.sema.db, hir::ModuleDef::Trait(trait_), ctx.config.import_path_config())
9587
.as_ref()
9688
.map(mod_path_to_ast)
9789
.zip(Some(trait_))

0 commit comments

Comments
 (0)