Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/context/analysis.rs')
-rw-r--r--crates/ide-completion/src/context/analysis.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs
index 49fb36ad04..65bae5b66e 100644
--- a/crates/ide-completion/src/context/analysis.rs
+++ b/crates/ide-completion/src/context/analysis.rs
@@ -5,7 +5,7 @@ use hir::{ExpandResult, InFile, Semantics, Type, TypeInfo, Variant};
use ide_db::{
RootDatabase, active_parameter::ActiveParameter, syntax_helpers::node_ext::find_loops,
};
-use itertools::Either;
+use itertools::{Either, Itertools};
use stdx::always;
use syntax::{
AstNode, AstToken, Direction, NodeOrToken, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxToken,
@@ -510,6 +510,21 @@ fn analyze<'db>(
colon_prefix,
extern_crate: p.ancestors().find_map(ast::ExternCrate::cast),
}
+ } else if p.kind() == SyntaxKind::TOKEN_TREE
+ && p.ancestors().any(|it| ast::Macro::can_cast(it.kind()))
+ {
+ if let Some([_ident, colon, _name, dollar]) = fake_ident_token
+ .siblings_with_tokens(Direction::Prev)
+ .filter(|it| !it.kind().is_trivia())
+ .take(4)
+ .collect_array()
+ && dollar.kind() == T![$]
+ && colon.kind() == T![:]
+ {
+ CompletionAnalysis::MacroSegment
+ } else {
+ return None;
+ }
} else {
return None;
}