add name resolution from the old impl

unlike the old impl, this also handles macro imports across crates
This commit is contained in:
Aleksey Kladov 2019-03-13 16:04:28 +03:00
parent 0d8d918656
commit 182c05a96c
9 changed files with 743 additions and 189 deletions

View file

@ -114,6 +114,9 @@ pub trait AttrsOwner: AstNode {
fn attrs(&self) -> AstChildren<Attr> {
children(self)
}
fn has_atom_attr(&self, atom: &str) -> bool {
self.attrs().filter_map(|x| x.as_atom()).any(|x| x == atom)
}
}
pub trait DocCommentsOwner: AstNode {
@ -153,12 +156,6 @@ pub trait DocCommentsOwner: AstNode {
}
}
impl FnDef {
pub fn has_atom_attr(&self, atom: &str) -> bool {
self.attrs().filter_map(|x| x.as_atom()).any(|x| x == atom)
}
}
impl Attr {
pub fn is_inner(&self) -> bool {
let tt = match self.value() {

View file

@ -2108,6 +2108,7 @@ impl ToOwned for MacroCall {
impl ast::NameOwner for MacroCall {}
impl ast::AttrsOwner for MacroCall {}
impl MacroCall {
pub fn token_tree(&self) -> Option<&TokenTree> {
super::child_opt(self)

View file

@ -557,7 +557,7 @@ Grammar(
"Name": (),
"NameRef": (),
"MacroCall": (
traits: [ "NameOwner" ],
traits: [ "NameOwner", "AttrsOwner" ],
options: [ "TokenTree", "Path" ],
),
"Attr": ( options: [ ["value", "TokenTree"] ] ),