Support nested import syntax
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index ba63aa4..84523a1 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -394,10 +394,14 @@
 # [ cfg ( feature = "full" ) ]
 fn fold_use_glob(&mut self, i: UseGlob) -> UseGlob { fold_use_glob(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn fold_use_list(&mut self, i: UseList) -> UseList { fold_use_list(self, i) }
+fn fold_use_group(&mut self, i: UseGroup) -> UseGroup { fold_use_group(self, i) }
+# [ cfg ( feature = "full" ) ]
+fn fold_use_name(&mut self, i: UseName) -> UseName { fold_use_name(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_use_path(&mut self, i: UsePath) -> UsePath { fold_use_path(self, i) }
 # [ cfg ( feature = "full" ) ]
+fn fold_use_rename(&mut self, i: UseRename) -> UseRename { fold_use_rename(self, i) }
+# [ cfg ( feature = "full" ) ]
 fn fold_use_tree(&mut self, i: UseTree) -> UseTree { fold_use_tree(self, i) }
 # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn fold_variant(&mut self, i: Variant) -> Variant { fold_variant(self, i) }
@@ -1957,7 +1961,6 @@
         vis: _visitor.fold_visibility(_i . vis),
         use_token: Token ! [ use ](tokens_helper(_visitor, &(_i . use_token).0)),
         leading_colon: (_i . leading_colon).map(|it| { Token ! [ :: ](tokens_helper(_visitor, &(it).0)) }),
-        prefix: FoldHelper::lift(_i . prefix, |it| { _visitor.fold_ident(it) }),
         tree: _visitor.fold_use_tree(_i . tree),
         semi_token: Token ! [ ; ](tokens_helper(_visitor, &(_i . semi_token).0)),
     }
@@ -2825,20 +2828,32 @@
     }
 }
 # [ cfg ( feature = "full" ) ]
-pub fn fold_use_list<V: Fold + ?Sized>(_visitor: &mut V, _i: UseList) -> UseList {
-    UseList {
+pub fn fold_use_group<V: Fold + ?Sized>(_visitor: &mut V, _i: UseGroup) -> UseGroup {
+    UseGroup {
         brace_token: Brace(tokens_helper(_visitor, &(_i . brace_token).0)),
         items: FoldHelper::lift(_i . items, |it| { _visitor.fold_use_tree(it) }),
     }
 }
 # [ cfg ( feature = "full" ) ]
+pub fn fold_use_name<V: Fold + ?Sized>(_visitor: &mut V, _i: UseName) -> UseName {
+    UseName {
+        ident: _visitor.fold_ident(_i . ident),
+    }
+}
+# [ cfg ( feature = "full" ) ]
 pub fn fold_use_path<V: Fold + ?Sized>(_visitor: &mut V, _i: UsePath) -> UsePath {
     UsePath {
         ident: _visitor.fold_ident(_i . ident),
-        rename: (_i . rename).map(|it| { (
-            Token ! [ as ](tokens_helper(_visitor, &(( it ) . 0).0)),
-            _visitor.fold_ident(( it ) . 1),
-        ) }),
+        colon2_token: Token ! [ :: ](tokens_helper(_visitor, &(_i . colon2_token).0)),
+        tree: Box::new(_visitor.fold_use_tree(* _i . tree)),
+    }
+}
+# [ cfg ( feature = "full" ) ]
+pub fn fold_use_rename<V: Fold + ?Sized>(_visitor: &mut V, _i: UseRename) -> UseRename {
+    UseRename {
+        ident: _visitor.fold_ident(_i . ident),
+        as_token: Token ! [ as ](tokens_helper(_visitor, &(_i . as_token).0)),
+        rename: _visitor.fold_ident(_i . rename),
     }
 }
 # [ cfg ( feature = "full" ) ]
@@ -2849,14 +2864,24 @@
                 _visitor.fold_use_path(_binding_0),
             )
         }
+        UseTree::Name(_binding_0, ) => {
+            UseTree::Name (
+                _visitor.fold_use_name(_binding_0),
+            )
+        }
+        UseTree::Rename(_binding_0, ) => {
+            UseTree::Rename (
+                _visitor.fold_use_rename(_binding_0),
+            )
+        }
         UseTree::Glob(_binding_0, ) => {
             UseTree::Glob (
                 _visitor.fold_use_glob(_binding_0),
             )
         }
-        UseTree::List(_binding_0, ) => {
-            UseTree::List (
-                _visitor.fold_use_list(_binding_0),
+        UseTree::Group(_binding_0, ) => {
+            UseTree::Group (
+                _visitor.fold_use_group(_binding_0),
             )
         }
     }
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index d0969f8..5af584f 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -392,10 +392,14 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_use_glob(&mut self, i: &'ast UseGlob) { visit_use_glob(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_use_list(&mut self, i: &'ast UseList) { visit_use_list(self, i) }
+fn visit_use_group(&mut self, i: &'ast UseGroup) { visit_use_group(self, i) }
+# [ cfg ( feature = "full" ) ]
+fn visit_use_name(&mut self, i: &'ast UseName) { visit_use_name(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_use_path(&mut self, i: &'ast UsePath) { visit_use_path(self, i) }
 # [ cfg ( feature = "full" ) ]
+fn visit_use_rename(&mut self, i: &'ast UseRename) { visit_use_rename(self, i) }
+# [ cfg ( feature = "full" ) ]
 fn visit_use_tree(&mut self, i: &'ast UseTree) { visit_use_tree(self, i) }
 # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_variant(&mut self, i: &'ast Variant) { visit_variant(self, i) }
@@ -1526,7 +1530,6 @@
     _visitor.visit_visibility(& _i . vis);
     tokens_helper(_visitor, &(& _i . use_token).0);
     if let Some(ref it) = _i . leading_colon { tokens_helper(_visitor, &(it).0) };
-    for el in Punctuated::pairs(& _i . prefix) { let it = el.value(); _visitor.visit_ident(it) };
     _visitor.visit_use_tree(& _i . tree);
     tokens_helper(_visitor, &(& _i . semi_token).0);
 }
@@ -2180,17 +2183,25 @@
     tokens_helper(_visitor, &(& _i . star_token).0);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn visit_use_list<'ast, V: Visit<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseList) {
+pub fn visit_use_group<'ast, V: Visit<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseGroup) {
     tokens_helper(_visitor, &(& _i . brace_token).0);
     for el in Punctuated::pairs(& _i . items) { let it = el.value(); _visitor.visit_use_tree(it) };
 }
 # [ cfg ( feature = "full" ) ]
+pub fn visit_use_name<'ast, V: Visit<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseName) {
+    _visitor.visit_ident(& _i . ident);
+}
+# [ cfg ( feature = "full" ) ]
 pub fn visit_use_path<'ast, V: Visit<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UsePath) {
     _visitor.visit_ident(& _i . ident);
-    if let Some(ref it) = _i . rename { 
-            tokens_helper(_visitor, &(& ( it ) . 0).0);
-            _visitor.visit_ident(& ( it ) . 1);
-         };
+    tokens_helper(_visitor, &(& _i . colon2_token).0);
+    _visitor.visit_use_tree(& * _i . tree);
+}
+# [ cfg ( feature = "full" ) ]
+pub fn visit_use_rename<'ast, V: Visit<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseRename) {
+    _visitor.visit_ident(& _i . ident);
+    tokens_helper(_visitor, &(& _i . as_token).0);
+    _visitor.visit_ident(& _i . rename);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_tree<'ast, V: Visit<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast UseTree) {
@@ -2198,11 +2209,17 @@
         UseTree::Path(ref _binding_0, ) => {
             _visitor.visit_use_path(_binding_0);
         }
+        UseTree::Name(ref _binding_0, ) => {
+            _visitor.visit_use_name(_binding_0);
+        }
+        UseTree::Rename(ref _binding_0, ) => {
+            _visitor.visit_use_rename(_binding_0);
+        }
         UseTree::Glob(ref _binding_0, ) => {
             _visitor.visit_use_glob(_binding_0);
         }
-        UseTree::List(ref _binding_0, ) => {
-            _visitor.visit_use_list(_binding_0);
+        UseTree::Group(ref _binding_0, ) => {
+            _visitor.visit_use_group(_binding_0);
         }
     }
 }
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 30dee23..e81d52e 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -393,10 +393,14 @@
 # [ cfg ( feature = "full" ) ]
 fn visit_use_glob_mut(&mut self, i: &mut UseGlob) { visit_use_glob_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
-fn visit_use_list_mut(&mut self, i: &mut UseList) { visit_use_list_mut(self, i) }
+fn visit_use_group_mut(&mut self, i: &mut UseGroup) { visit_use_group_mut(self, i) }
+# [ cfg ( feature = "full" ) ]
+fn visit_use_name_mut(&mut self, i: &mut UseName) { visit_use_name_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn visit_use_path_mut(&mut self, i: &mut UsePath) { visit_use_path_mut(self, i) }
 # [ cfg ( feature = "full" ) ]
+fn visit_use_rename_mut(&mut self, i: &mut UseRename) { visit_use_rename_mut(self, i) }
+# [ cfg ( feature = "full" ) ]
 fn visit_use_tree_mut(&mut self, i: &mut UseTree) { visit_use_tree_mut(self, i) }
 # [ cfg ( any ( feature = "full" , feature = "derive" ) ) ]
 fn visit_variant_mut(&mut self, i: &mut Variant) { visit_variant_mut(self, i) }
@@ -1527,7 +1531,6 @@
     _visitor.visit_visibility_mut(& mut _i . vis);
     tokens_helper(_visitor, &mut (& mut _i . use_token).0);
     if let Some(ref mut it) = _i . leading_colon { tokens_helper(_visitor, &mut (it).0) };
-    for mut el in Punctuated::pairs_mut(& mut _i . prefix) { let it = el.value_mut(); _visitor.visit_ident_mut(it) };
     _visitor.visit_use_tree_mut(& mut _i . tree);
     tokens_helper(_visitor, &mut (& mut _i . semi_token).0);
 }
@@ -2181,17 +2184,25 @@
     tokens_helper(_visitor, &mut (& mut _i . star_token).0);
 }
 # [ cfg ( feature = "full" ) ]
-pub fn visit_use_list_mut<V: VisitMut + ?Sized>(_visitor: &mut V, _i: &mut UseList) {
+pub fn visit_use_group_mut<V: VisitMut + ?Sized>(_visitor: &mut V, _i: &mut UseGroup) {
     tokens_helper(_visitor, &mut (& mut _i . brace_token).0);
     for mut el in Punctuated::pairs_mut(& mut _i . items) { let it = el.value_mut(); _visitor.visit_use_tree_mut(it) };
 }
 # [ cfg ( feature = "full" ) ]
+pub fn visit_use_name_mut<V: VisitMut + ?Sized>(_visitor: &mut V, _i: &mut UseName) {
+    _visitor.visit_ident_mut(& mut _i . ident);
+}
+# [ cfg ( feature = "full" ) ]
 pub fn visit_use_path_mut<V: VisitMut + ?Sized>(_visitor: &mut V, _i: &mut UsePath) {
     _visitor.visit_ident_mut(& mut _i . ident);
-    if let Some(ref mut it) = _i . rename { 
-            tokens_helper(_visitor, &mut (& mut ( it ) . 0).0);
-            _visitor.visit_ident_mut(& mut ( it ) . 1);
-         };
+    tokens_helper(_visitor, &mut (& mut _i . colon2_token).0);
+    _visitor.visit_use_tree_mut(& mut * _i . tree);
+}
+# [ cfg ( feature = "full" ) ]
+pub fn visit_use_rename_mut<V: VisitMut + ?Sized>(_visitor: &mut V, _i: &mut UseRename) {
+    _visitor.visit_ident_mut(& mut _i . ident);
+    tokens_helper(_visitor, &mut (& mut _i . as_token).0);
+    _visitor.visit_ident_mut(& mut _i . rename);
 }
 # [ cfg ( feature = "full" ) ]
 pub fn visit_use_tree_mut<V: VisitMut + ?Sized>(_visitor: &mut V, _i: &mut UseTree) {
@@ -2199,11 +2210,17 @@
         UseTree::Path(ref mut _binding_0, ) => {
             _visitor.visit_use_path_mut(_binding_0);
         }
+        UseTree::Name(ref mut _binding_0, ) => {
+            _visitor.visit_use_name_mut(_binding_0);
+        }
+        UseTree::Rename(ref mut _binding_0, ) => {
+            _visitor.visit_use_rename_mut(_binding_0);
+        }
         UseTree::Glob(ref mut _binding_0, ) => {
             _visitor.visit_use_glob_mut(_binding_0);
         }
-        UseTree::List(ref mut _binding_0, ) => {
-            _visitor.visit_use_list_mut(_binding_0);
+        UseTree::Group(ref mut _binding_0, ) => {
+            _visitor.visit_use_group_mut(_binding_0);
         }
     }
 }