Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_completion/src/context.rs')
-rw-r--r--crates/ide_completion/src/context.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/crates/ide_completion/src/context.rs b/crates/ide_completion/src/context.rs
index d9ddd9f2ae..b3ce1f8e9c 100644
--- a/crates/ide_completion/src/context.rs
+++ b/crates/ide_completion/src/context.rs
@@ -30,10 +30,11 @@ pub(crate) enum PatternRefutability {
Irrefutable,
}
-#[derive(Debug)]
+#[derive(Copy, Clone, Debug)]
pub(super) enum PathKind {
Expr,
Type,
+ Attr,
}
#[derive(Debug)]
@@ -232,8 +233,7 @@ impl<'a> CompletionContext<'a> {
}
pub(crate) fn is_path_disallowed(&self) -> bool {
- self.attribute_under_caret.is_some()
- || self.previous_token_is(T![unsafe])
+ self.previous_token_is(T![unsafe])
|| matches!(
self.prev_sibling,
Some(ImmediatePrevSibling::Attribute | ImmediatePrevSibling::Visibility)
@@ -241,8 +241,7 @@ impl<'a> CompletionContext<'a> {
|| matches!(
self.completion_location,
Some(
- ImmediateLocation::Attribute(_)
- | ImmediateLocation::ModDeclaration(_)
+ ImmediateLocation::ModDeclaration(_)
| ImmediateLocation::RecordPat(_)
| ImmediateLocation::RecordExpr(_)
| ImmediateLocation::Rename
@@ -274,6 +273,10 @@ impl<'a> CompletionContext<'a> {
self.path_context.as_ref().and_then(|it| it.qualifier.as_ref())
}
+ pub(crate) fn path_kind(&self) -> Option<PathKind> {
+ self.path_context.as_ref().and_then(|it| it.kind)
+ }
+
/// Checks if an item is visible and not `doc(hidden)` at the completion site.
pub(crate) fn is_visible<I>(&self, item: &I) -> bool
where
@@ -785,6 +788,7 @@ impl<'a> CompletionContext<'a> {
match parent {
ast::PathType(_it) => Some(PathKind::Type),
ast::PathExpr(_it) => Some(PathKind::Expr),
+ ast::Meta(_it) => Some(PathKind::Attr),
_ => None,
}
};