@@ -397,6 +397,76 @@ fn mixed_use_and_raw_cases() {
397397 assert_eq ! ( decode( & encode( & rhs) ) , rhs)
398398}
399399
400+ #[ test]
401+ fn small_mixed_lib ( ) {
402+ let lhs = r#"
403+ pub mod decode;
404+ pub mod encode;
405+ pub use chumsky::prelude::Parser;
406+
407+ #[derive(Eq, PartialEq, Debug, Clone)]
408+ pub enum Expr<'a> {
409+ Mod(&'a str),
410+ Use(ExprUse<'a>),
411+ Raw(&'a str),
412+ }
413+
414+ #[derive(Eq, PartialEq, Debug, Clone)]
415+ pub enum ExprUse<'a> {
416+ Item {
417+ module: &'a str,
418+ rename: Option<&'a str>,
419+ nested: Option<Box<ExprUse<'a>>>,
420+ },
421+ Many(Vec<ExprUse<'a>>),
422+ Glob,
423+ }"# ;
424+ let rhs = vec ! [
425+ Expr :: Raw ( "\n pub " ) ,
426+ Expr :: Mod ( "decode" ) ,
427+ Expr :: Raw ( "\n pub " ) ,
428+ Expr :: Mod ( "encode" ) ,
429+ Expr :: Raw ( "\n pub " ) ,
430+ Expr :: Use ( ExprUse :: Item {
431+ module: "chumsky" ,
432+ rename: None ,
433+ nested: Some ( Box :: new( ExprUse :: Item {
434+ module: "prelude" ,
435+ rename: None ,
436+ nested: Some ( Box :: new( ExprUse :: Item {
437+ module: "Parser" ,
438+ rename: None ,
439+ nested: None ,
440+ } ) ) ,
441+ } ) ) ,
442+ } ) ,
443+ Expr :: Raw (
444+ r#"
445+
446+ #[derive(Eq, PartialEq, Debug, Clone)]
447+ pub enum Expr<'a> {
448+ Mod(&'a str),
449+ Use(ExprUse<'a>),
450+ Raw(&'a str),
451+ }
452+
453+ #[derive(Eq, PartialEq, Debug, Clone)]
454+ pub enum ExprUse<'a> {
455+ Item {
456+ module: &'a str,
457+ rename: Option<&'a str>,
458+ nested: Option<Box<ExprUse<'a>>>,
459+ },
460+ Many(Vec<ExprUse<'a>>),
461+ Glob,
462+ }"# ,
463+ ) ,
464+ ] ;
465+ assert_eq ! ( decode( lhs) , rhs) ;
466+ assert_eq ! ( decode( & sloppy( lhs) ) , rhs) ;
467+ assert_eq ! ( decode( & encode( & rhs) ) , rhs)
468+ }
469+
400470#[ test]
401471fn roundtrip_source_files ( ) {
402472 get_rust_files ( "./" ) . into_iter ( ) . for_each ( |path| {
0 commit comments