Skip to content

Commit 6a045c7

Browse files
committed
Introduce NameRefContext
1 parent 1dc83f5 commit 6a045c7

File tree

20 files changed

+145
-106
lines changed

20 files changed

+145
-106
lines changed

crates/ide-completion/src/completions/attribute.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ pub(crate) fn complete_known_attribute_input(
6969
}
7070

7171
pub(crate) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) {
72-
let (is_absolute_path, qualifier, is_inner, annotated_item_kind) = match ctx.path_context {
73-
Some(PathCompletionCtx {
72+
let (is_absolute_path, qualifier, is_inner, annotated_item_kind) = match ctx.path_context() {
73+
Some(&PathCompletionCtx {
7474
kind: PathKind::Attr { kind, annotated_item_kind },
7575
is_absolute_path,
7676
ref qualifier,

crates/ide-completion/src/completions/attribute/derive.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ use crate::{
1111
};
1212

1313
pub(crate) fn complete_derive(acc: &mut Completions, ctx: &CompletionContext) {
14-
let (qualifier, is_absolute_path) = match ctx.path_context {
15-
Some(PathCompletionCtx {
16-
kind: PathKind::Derive, ref qualifier, is_absolute_path, ..
14+
let (qualifier, is_absolute_path) = match ctx.path_context() {
15+
Some(&PathCompletionCtx {
16+
kind: PathKind::Derive,
17+
ref qualifier,
18+
is_absolute_path,
19+
..
1720
}) => (qualifier, is_absolute_path),
1821
_ => return,
1922
};

crates/ide-completion/src/completions/dot.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
use ide_db::FxHashSet;
44

55
use crate::{
6-
context::{CompletionContext, PathCompletionCtx, PathKind},
7-
patterns::ImmediateLocation,
6+
context::{CompletionContext, DotAccess, NameRefContext, PathCompletionCtx, PathKind},
87
Completions,
98
};
109

@@ -20,7 +19,10 @@ pub(crate) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) {
2019
_ => return,
2120
};
2221

23-
if matches!(ctx.completion_location, Some(ImmediateLocation::MethodCall { .. })) {
22+
if matches!(
23+
ctx.nameref_ctx,
24+
Some(NameRefContext { dot_access: Some(DotAccess::Method { .. }), .. }),
25+
) {
2426
cov_mark::hit!(test_no_struct_field_completion_for_method_call);
2527
} else {
2628
complete_fields(
@@ -38,7 +40,7 @@ fn complete_undotted_self(acc: &mut Completions, ctx: &CompletionContext) {
3840
if !ctx.config.enable_self_on_the_fly {
3941
return;
4042
}
41-
match ctx.path_context {
43+
match ctx.path_context() {
4244
Some(PathCompletionCtx {
4345
is_absolute_path: false,
4446
qualifier: None,

crates/ide-completion/src/completions/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub(crate) fn complete_expr_path(acc: &mut Completions, ctx: &CompletionContext)
1414
return;
1515
}
1616

17-
let (&is_absolute_path, qualifier) = match &ctx.path_context {
17+
let (&is_absolute_path, qualifier) = match ctx.path_context() {
1818
Some(PathCompletionCtx {
1919
kind: PathKind::Expr { .. },
2020
is_absolute_path,

crates/ide-completion/src/completions/flyimport.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ pub(crate) fn import_on_the_fly(acc: &mut Completions, ctx: &CompletionContext)
119119
return None;
120120
}
121121
// FIXME: This should be encoded in a different way
122-
if ctx.pattern_ctx.is_none() && ctx.path_context.is_none() && !ctx.has_dot_receiver() {
122+
if ctx.pattern_ctx.is_none() && ctx.path_context().is_none() && !ctx.has_dot_receiver() {
123123
// completion inside `ast::Name` of a item declaration
124124
return None;
125125
}

crates/ide-completion/src/completions/item_list.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub(crate) fn complete_item_list(acc: &mut Completions, ctx: &CompletionContext)
1212
return;
1313
}
1414

15-
let (&is_absolute_path, qualifier) = match &ctx.path_context {
15+
let (&is_absolute_path, qualifier) = match ctx.path_context() {
1616
Some(PathCompletionCtx {
1717
kind: PathKind::Item { .. },
1818
is_absolute_path,

crates/ide-completion/src/completions/keyword.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ pub(crate) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
124124
add_keyword("mut", "mut ");
125125
}
126126

127-
let (can_be_stmt, in_loop_body) = match ctx.path_context {
128-
Some(PathCompletionCtx {
127+
let (can_be_stmt, in_loop_body) = match ctx.path_context() {
128+
Some(&PathCompletionCtx {
129129
is_absolute_path: false,
130130
kind: PathKind::Expr { in_block_expr, in_loop_body, .. },
131131
..

crates/ide-completion/src/completions/pattern.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub(crate) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) {
1717
};
1818
let refutable = patctx.refutability == PatternRefutability::Refutable;
1919

20-
if let Some(path_ctx) = &ctx.path_context {
20+
if let Some(path_ctx) = ctx.path_context() {
2121
pattern_path_completion(acc, ctx, path_ctx);
2222
return;
2323
}

crates/ide-completion/src/completions/postfix.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ use text_edit::TextEdit;
1313

1414
use crate::{
1515
completions::postfix::format_like::add_format_like_completions,
16-
context::CompletionContext,
16+
context::{CompletionContext, DotAccess, NameRefContext},
1717
item::{Builder, CompletionRelevancePostfixMatch},
18-
patterns::ImmediateLocation,
1918
CompletionItem, CompletionItemKind, CompletionRelevance, Completions, SnippetScope,
2019
};
2120

@@ -24,11 +23,15 @@ pub(crate) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
2423
return;
2524
}
2625

27-
let (dot_receiver, receiver_is_ambiguous_float_literal) = match &ctx.completion_location {
28-
Some(ImmediateLocation::MethodCall { receiver: Some(it), .. }) => (it, false),
29-
Some(ImmediateLocation::FieldAccess {
30-
receiver: Some(it),
31-
receiver_is_ambiguous_float_literal,
26+
let (dot_receiver, receiver_is_ambiguous_float_literal) = match &ctx.nameref_ctx {
27+
Some(NameRefContext {
28+
dot_access: Some(DotAccess::Method { receiver: Some(it), .. }),
29+
..
30+
}) => (it, false),
31+
Some(NameRefContext {
32+
dot_access:
33+
Some(DotAccess::Field { receiver: Some(it), receiver_is_ambiguous_float_literal }),
34+
..
3235
}) => (it, *receiver_is_ambiguous_float_literal),
3336
_ => return,
3437
};

crates/ide-completion/src/completions/snippet.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ fn snippet(ctx: &CompletionContext, cap: SnippetCap, label: &str, snippet: &str)
1717
}
1818

1919
pub(crate) fn complete_expr_snippet(acc: &mut Completions, ctx: &CompletionContext) {
20-
let can_be_stmt = match ctx.path_context {
20+
let &can_be_stmt = match ctx.path_context() {
2121
Some(PathCompletionCtx {
2222
is_absolute_path: false,
2323
qualifier: None,
@@ -43,7 +43,7 @@ pub(crate) fn complete_expr_snippet(acc: &mut Completions, ctx: &CompletionConte
4343
}
4444

4545
pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionContext) {
46-
let path_kind = match ctx.path_context {
46+
let path_kind = match ctx.path_context() {
4747
Some(PathCompletionCtx {
4848
is_absolute_path: false,
4949
qualifier: None,

crates/ide-completion/src/completions/type.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub(crate) fn complete_type_path(acc: &mut Completions, ctx: &CompletionContext)
1717
return;
1818
}
1919

20-
let (&is_absolute_path, qualifier) = match &ctx.path_context {
20+
let (&is_absolute_path, qualifier) = match ctx.path_context() {
2121
Some(PathCompletionCtx { kind: PathKind::Type, is_absolute_path, qualifier, .. }) => {
2222
(is_absolute_path, qualifier)
2323
}

crates/ide-completion/src/completions/use_.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::{
1111
};
1212

1313
pub(crate) fn complete_use_tree(acc: &mut Completions, ctx: &CompletionContext) {
14-
let (&is_absolute_path, qualifier) = match &ctx.path_context {
14+
let (&is_absolute_path, qualifier) = match ctx.path_context() {
1515
Some(PathCompletionCtx { kind: PathKind::Use, is_absolute_path, qualifier, .. }) => {
1616
(is_absolute_path, qualifier)
1717
}

crates/ide-completion/src/completions/vis.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::{
88
};
99

1010
pub(crate) fn complete_vis(acc: &mut Completions, ctx: &CompletionContext) {
11-
let (&is_absolute_path, qualifier, &has_in_token) = match &ctx.path_context {
11+
let (&is_absolute_path, qualifier, &has_in_token) = match ctx.path_context() {
1212
Some(PathCompletionCtx {
1313
kind: PathKind::Vis { has_in_token },
1414
is_absolute_path,

0 commit comments

Comments
 (0)