Skip to content

Commit 4ddc5a3

Browse files
committed
Visit nested cfg_if!
1 parent 30ae689 commit 4ddc5a3

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/modules.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
8484
Ok(self.file_map)
8585
}
8686

87-
fn visit_mac(&mut self, item: &'ast ast::Item) -> Result<(), String> {
8887
/// Visit macro calls and look for module declarations. Currently only supports `cfg_if` macro.
88+
fn visit_mac(&mut self, item: Cow<'ast, ast::Item>) -> Result<(), String> {
8989
let mut visitor =
9090
visitor::CfgIfVisitor::new(self.parse_sess, self.directory.to_syntax_directory());
91-
visitor.visit_item(item);
91+
visitor.visit_item(&item);
9292
for module_item in visitor.mods() {
9393
if let ast::ItemKind::Mod(ref sub_mod) = module_item.item.node {
9494
let cow_sub_mod = Cow::Owned(sub_mod.clone());
@@ -104,6 +104,10 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
104104
/// Visit modules defined inside macro calls.
105105
fn visit_mod_from_macro(&mut self, module: Cow<'ast, ast::Mod>) -> Result<(), String> {
106106
for item in &module.items {
107+
if let ast::ItemKind::Mac(..) = item.node {
108+
self.visit_mac(Cow::Owned(item.clone().into_inner()))?;
109+
}
110+
107111
if let ast::ItemKind::Mod(ref sub_mod) = item.node {
108112
let cow_sub_mod = Cow::Owned(sub_mod.clone());
109113
if let Some(old_directory) = self.peek_sub_mod(item, &cow_sub_mod)? {
@@ -119,7 +123,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
119123
fn visit_mod_from_ast(&mut self, module: &'ast ast::Mod) -> Result<(), String> {
120124
for item in &module.items {
121125
if let ast::ItemKind::Mac(..) = item.node {
122-
self.visit_mac(item)?;
126+
self.visit_mac(Cow::Borrowed(item))?;
123127
}
124128

125129
if let ast::ItemKind::Mod(ref sub_mod) = item.node {

0 commit comments

Comments
 (0)