mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-14 17:07:26 +00:00
Test whether it is bang macro properly
This commit is contained in:
parent
291d03949b
commit
edf0b4c152
2 changed files with 10 additions and 8 deletions
|
@ -9,10 +9,7 @@ use hir_expand::{
|
||||||
hygiene::Hygiene,
|
hygiene::Hygiene,
|
||||||
name::{name, AsName},
|
name::{name, AsName},
|
||||||
};
|
};
|
||||||
use ra_syntax::{
|
use ra_syntax::ast::{self, AstNode, TypeAscriptionOwner, TypeBoundsOwner};
|
||||||
ast::{self, AstNode, TypeAscriptionOwner, TypeBoundsOwner},
|
|
||||||
T,
|
|
||||||
};
|
|
||||||
|
|
||||||
use super::AssociatedTypeBinding;
|
use super::AssociatedTypeBinding;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -122,13 +119,14 @@ pub(super) fn lower_path(mut path: ast::Path, hygiene: &Hygiene) -> Option<Path>
|
||||||
// https://github.com/rust-lang/rust/blob/614f273e9388ddd7804d5cbc80b8865068a3744e/src/librustc_resolve/macros.rs#L456
|
// https://github.com/rust-lang/rust/blob/614f273e9388ddd7804d5cbc80b8865068a3744e/src/librustc_resolve/macros.rs#L456
|
||||||
// We follow what it did anyway :)
|
// We follow what it did anyway :)
|
||||||
if segments.len() == 1 && kind == PathKind::Plain {
|
if segments.len() == 1 && kind == PathKind::Plain {
|
||||||
let next = path.syntax().last_token().and_then(|it| it.next_token());
|
if let Some(macro_call) = path.syntax().parent().and_then(ast::MacroCall::cast) {
|
||||||
if next.map_or(false, |it| it.kind() == T![!]) {
|
if macro_call.is_bang() {
|
||||||
if let Some(crate_id) = hygiene.local_inner_macros() {
|
if let Some(crate_id) = hygiene.local_inner_macros() {
|
||||||
kind = PathKind::DollarCrate(crate_id);
|
kind = PathKind::DollarCrate(crate_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mod_path = ModPath { kind, segments };
|
let mod_path = ModPath { kind, segments };
|
||||||
return Some(Path { type_anchor, mod_path, generic_args });
|
return Some(Path { type_anchor, mod_path, generic_args });
|
||||||
|
|
|
@ -423,6 +423,10 @@ impl ast::MacroCall {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_bang(&self) -> bool {
|
||||||
|
self.is_macro_rules().is_none()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ast::LifetimeParam {
|
impl ast::LifetimeParam {
|
||||||
|
|
Loading…
Reference in a new issue