@@ -199,39 +199,43 @@ pub mod token_stream {
199199
200200 impl ToString for TokenStream {
201201 fn to_string ( & self ) -> String {
202- tokentrees_to_text ( & self . token_trees [ ..] )
203- }
204- }
202+ return tokentrees_to_text ( & self . token_trees [ ..] ) ;
203+
204+ fn tokentrees_to_text ( tkns : & [ tt:: TokenTree ] ) -> String {
205+ tkns. iter ( )
206+ . fold ( ( String :: new ( ) , true ) , |( last, last_to_joint) , tkn| {
207+ let s = [ last, tokentree_to_text ( tkn) ] . join ( if last_to_joint {
208+ ""
209+ } else {
210+ " "
211+ } ) ;
212+ let mut is_joint = false ;
213+ if let tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) = tkn {
214+ if punct. spacing == tt:: Spacing :: Joint {
215+ is_joint = true ;
216+ }
217+ }
218+ ( s, is_joint)
219+ } )
220+ . 0
221+ }
205222
206- fn tokentrees_to_text ( tkns : & [ tt:: TokenTree ] ) -> String {
207- tkns. iter ( )
208- . fold ( ( String :: new ( ) , true ) , |( last, last_to_joint) , tkn| {
209- let s = [ last, tokentree_to_text ( tkn) ] . join ( if last_to_joint { "" } else { " " } ) ;
210- let mut is_joint = false ;
211- if let tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) = tkn {
212- if punct. spacing == tt:: Spacing :: Joint {
213- is_joint = true ;
223+ fn tokentree_to_text ( tkn : & tt:: TokenTree ) -> String {
224+ match tkn {
225+ tt:: TokenTree :: Leaf ( tt:: Leaf :: Ident ( ident) ) => ident. text . clone ( ) . into ( ) ,
226+ tt:: TokenTree :: Leaf ( tt:: Leaf :: Literal ( literal) ) => literal. text . clone ( ) . into ( ) ,
227+ tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) => format ! ( "{}" , punct. char ) ,
228+ tt:: TokenTree :: Subtree ( subtree) => {
229+ let content = tokentrees_to_text ( & subtree. token_trees ) ;
230+ let ( open, close) = match subtree. delimiter . map ( |it| it. kind ) {
231+ None => ( "" , "" ) ,
232+ Some ( tt:: DelimiterKind :: Brace ) => ( "{" , "}" ) ,
233+ Some ( tt:: DelimiterKind :: Parenthesis ) => ( "(" , ")" ) ,
234+ Some ( tt:: DelimiterKind :: Bracket ) => ( "[" , "]" ) ,
235+ } ;
236+ format ! ( "{}{}{}" , open, content, close)
214237 }
215238 }
216- ( s, is_joint)
217- } )
218- . 0
219- }
220-
221- fn tokentree_to_text ( tkn : & tt:: TokenTree ) -> String {
222- match tkn {
223- tt:: TokenTree :: Leaf ( tt:: Leaf :: Ident ( ident) ) => ident. text . clone ( ) . into ( ) ,
224- tt:: TokenTree :: Leaf ( tt:: Leaf :: Literal ( literal) ) => literal. text . clone ( ) . into ( ) ,
225- tt:: TokenTree :: Leaf ( tt:: Leaf :: Punct ( punct) ) => format ! ( "{}" , punct. char ) ,
226- tt:: TokenTree :: Subtree ( subtree) => {
227- let content = tokentrees_to_text ( & subtree. token_trees ) ;
228- let ( open, close) = match subtree. delimiter . map ( |it| it. kind ) {
229- None => ( "" , "" ) ,
230- Some ( tt:: DelimiterKind :: Brace ) => ( "{" , "}" ) ,
231- Some ( tt:: DelimiterKind :: Parenthesis ) => ( "(" , ")" ) ,
232- Some ( tt:: DelimiterKind :: Bracket ) => ( "[" , "]" ) ,
233- } ;
234- format ! ( "{}{}{}" , open, content, close)
235239 }
236240 }
237241 }
0 commit comments