@@ -713,54 +713,84 @@ printCookedIdent ident@(Ident str _)
713
713
| ' -' `elem` str = printStr Cooked str
714
714
| otherwise = printIdent ident
715
715
716
+
716
717
-- | Print an item (@print_item@)
717
718
printItem :: Item a -> Doc a
718
- printItem (Item ident attrs node vis x) = annotate x $ align $ printOuterAttrs attrs <#> case node of
719
- ExternCrate p -> hsep [ printVis vis, " extern" , " crate" , perhaps (\ p' -> printCookedIdent p' <+> " as" ) p, printIdent ident <> " ;" ]
720
- Use vp -> hsep [ printVis vis, " use" , printViewPath vp <> " ;" ]
721
- Static ty m e -> hsep [ printVis vis, " static" , printMutability m, printIdent ident <> " :" , printType ty, " =" , printExpr e <> " ;" ]
722
- ConstItem t e -> hsep [ printVis vis, " const" , printIdent ident <> " :" , printType t, " =" , printExpr e <> " ;" ]
723
- Fn d s c a t b -> printFn d s c a (Just ident) t vis (Just (b, attrs))
724
- Mod items -> hsep [ printVis vis, " mod" , printIdent ident, printMod items attrs ]
725
- ForeignMod a i -> hsep [ printAbi a, printForeignMod i attrs ]
726
- TyAlias ty ps -> let wc = printWhereClause True (whereClause ps)
727
- leading = printVis vis <+> " type" <+> printIdent ident <> printGenerics ps
728
- in case wc of
729
- WL. Empty -> group (leading <+> " =" <#> indent n (printType ty <> " ;" ))
730
- _ -> leading <#> wc <#> " =" <+> printType ty <> " ;"
731
- Enum vars ps -> printEnumDef vars ps ident vis
732
- StructItem s g -> hsep [ printVis vis, " struct" , printStruct s g ident True True ]
733
- Union s g -> hsep [ printVis vis, " union" , printStruct s g ident True True ]
734
- DefaultImpl u t -> hsep [ printVis vis, printUnsafety u, " impl" , printTraitRef t, " for" , " .." , " { }" ]
735
- Impl u p g t ty i -> let generics = case g of { Generics [] [] _ _ -> mempty ; _ -> printGenerics g }
736
- traitref = perhaps (\ t' -> printPolarity p <> printTraitRef t' <+> " for" ) t
737
- leading = hsep [ printVis vis, printUnsafety u
738
- , " impl" <> generics, traitref, printType ty
739
- ]
740
- lagging = block Brace False mempty (printInnerAttrs attrs) (printImplItem `map` i)
741
- wc = printWhereClause True (whereClause g)
742
- in case wc of
743
- WL. Empty -> leading <+> lagging
744
- _ -> leading <#> wc <#> lagging
745
- Trait u g tys i -> let leading = hsep [ printVis vis, printUnsafety u, " trait"
746
- , printIdent ident <> printGenerics g <> printBounds " :" tys
747
- ]
748
- lagging = block Brace False mempty (printInnerAttrs attrs) (printTraitItem `map` i)
749
- wc = printWhereClause True (whereClause g)
750
- in case wc of
751
- WL. Empty -> leading <+> lagging
752
- _ -> leading <#> wc <#> lagging
753
- MacItem m -> printMac m Paren <> " ;"
754
- MacroDef tts -> " macro_rules" <> " !" <+> printIdent ident <+> block Brace True mempty mempty [ printTts tts ]
719
+ printItem (ExternCrate as vis ident p x) = annotate x $ align $ printOuterAttrs as <#>
720
+ hsep [ printVis vis, " extern" , " crate" , perhaps (\ p' -> printCookedIdent p' <+> " as" ) p, printIdent ident <> " ;" ]
721
+
722
+ printItem (Use as vis vp x) = annotate x $ align $ printOuterAttrs as <#>
723
+ hsep [ printVis vis, " use" , printViewPath vp <> " ;" ]
724
+
725
+ printItem (Static as vis ident ty m e x) = annotate x $ align $ printOuterAttrs as <#>
726
+ hsep [ printVis vis, " static" , printMutability m, printIdent ident <> " :" , printType ty, " =" , printExpr e <> " ;" ]
727
+
728
+ printItem (ConstItem as vis ident t e x) = annotate x $ align $ printOuterAttrs as <#>
729
+ hsep [ printVis vis, " const" , printIdent ident <> " :" , printType t, " =" , printExpr e <> " ;" ]
730
+
731
+ printItem (Fn as vis ident d s c a t b x) = annotate x $ align $ printOuterAttrs as <#>
732
+ printFn d s c a (Just ident) t vis (Just (b, as))
733
+
734
+ printItem (Mod as vis ident items x) = annotate x $ align $ printOuterAttrs as <#>
735
+ hsep [ printVis vis, " mod" , printIdent ident, printMod items as ]
736
+
737
+ printItem (ForeignMod as vis a i x) = annotate x $ align $ printOuterAttrs as <#>
738
+ hsep [ printVis vis, printAbi a, printForeignMod i as ]
739
+
740
+ printItem (TyAlias as vis ident ty ps x) = annotate x $ align $ printOuterAttrs as <#>
741
+ let wc = printWhereClause True (whereClause ps)
742
+ leading = printVis vis <+> " type" <+> printIdent ident <> printGenerics ps
743
+ in case wc of
744
+ WL. Empty -> group (leading <+> " =" <#> indent n (printType ty <> " ;" ))
745
+ _ -> leading <#> wc <#> " =" <+> printType ty <> " ;"
746
+
747
+ printItem (Enum as vis ident vars ps x) = annotate x $ align $ printOuterAttrs as <#>
748
+ printEnumDef vars ps ident vis
749
+
750
+ printItem (StructItem as vis ident s g x) = annotate x $ align $ printOuterAttrs as <#>
751
+ hsep [ printVis vis, " struct" , printStruct s g ident True True ]
752
+
753
+ printItem (Union as vis ident s g x) = annotate x $ align $ printOuterAttrs as <#>
754
+ hsep [ printVis vis, " union" , printStruct s g ident True True ]
755
+
756
+ printItem (Trait as vis ident u g tys i x) = annotate x $ align $ printOuterAttrs as <#>
757
+ let leading = hsep [ printVis vis, printUnsafety u, " trait"
758
+ , printIdent ident <> printGenerics g <> printBounds " :" tys
759
+ ]
760
+ lagging = block Brace False mempty (printInnerAttrs as) (printTraitItem `map` i)
761
+ wc = printWhereClause True (whereClause g)
762
+ in case wc of
763
+ WL. Empty -> leading <+> lagging
764
+ _ -> leading <#> wc <#> lagging
765
+
766
+ printItem (DefaultImpl as vis u t x) = annotate x $ align $ printOuterAttrs as <#>
767
+ hsep [ printVis vis, printUnsafety u, " impl" , printTraitRef t, " for" , " .." , " { }" ]
768
+
769
+ printItem (Impl as vis d u p g t ty i x) = annotate x $ align $ printOuterAttrs as <#>
770
+ let generics = case g of { Generics [] [] _ _ -> mempty ; _ -> printGenerics g }
771
+ traitref = perhaps (\ t' -> printPolarity p <> printTraitRef t' <+> " for" ) t
772
+ leading = hsep [ printVis vis, printDef d, printUnsafety u
773
+ , " impl" <> generics, traitref, printType ty
774
+ ]
775
+ lagging = block Brace False mempty (printInnerAttrs as) (printImplItem `map` i)
776
+ wc = printWhereClause True (whereClause g)
777
+ in case wc of
778
+ WL. Empty -> leading <+> lagging
779
+ _ -> leading <#> wc <#> lagging
780
+
781
+ printItem (MacItem as i (Mac p tts y) x) = annotate x $ annotate y $ align $ printOuterAttrs as <#>
782
+ (printPath p True <> " !" <+> perhaps printIdent i <+> block Brace True mempty mempty [ printTts tts ])
783
+
784
+ printItem (MacroDef as i tts x) = annotate x $ align $ printOuterAttrs as <#>
785
+ (" macro_rules" <> " !" <+> printIdent i <+> block Brace True mempty mempty [ printTts tts ])
786
+
755
787
756
788
-- | Print a trait item (@print_trait_item@)
757
789
printTraitItem :: TraitItem a -> Doc a
758
- printTraitItem (TraitItem ident attrs node x) = annotate x $ printOuterAttrs attrs <#>
759
- case node of
760
- ConstT ty default_m -> printAssociatedConst ident ty default_m InheritedV
761
- MethodT sig block_m -> printMethodSig ident sig InheritedV (fmap (\ b -> (b, attrs)) block_m)
762
- TypeT bounds default_m -> printAssociatedType ident (Just bounds) default_m
763
- MacroT m -> printMac m Paren <> " ;"
790
+ printTraitItem (ConstT as ident ty expr x) = annotate x $ printOuterAttrs as <#> printAssociatedConst ident ty expr InheritedV
791
+ printTraitItem (MethodT as ident sig body x) = annotate x $ printOuterAttrs as <#> printMethodSig ident sig InheritedV (fmap (\ b -> (b, as)) body)
792
+ printTraitItem (TypeT as ident bounds ty x) = annotate x $ printOuterAttrs as <#> printAssociatedType ident (Just bounds) ty
793
+ printTraitItem (MacroT as m x) = annotate x $ printOuterAttrs as <#> printMac m Paren <> " ;"
764
794
765
795
-- | Print type parameter bounds with the given prefix, but only if there are any bounds (@print_bounds@)
766
796
-- TODO: follow up on <https://github.com/rust-lang-nursery/fmt-rfcs/issues/80>
@@ -781,14 +811,19 @@ printFormalLifetimeList defs = "for" <> angles (align (fillSep (punctuate "," (p
781
811
782
812
-- | Print an impl item (@print_impl_item@)
783
813
printImplItem :: ImplItem a -> Doc a
784
- printImplItem (ImplItem ident vis defaultness attrs node x) = annotate x $ printOuterAttrs attrs <#> hsep
785
- [ printVis vis, when (defaultness == Default ) " default"
786
- , case node of
787
- ConstI ty expr -> printAssociatedConst ident ty (Just expr) InheritedV
788
- MethodI sig body -> printMethodSig ident sig InheritedV (Just (body, attrs))
789
- TypeI ty -> printAssociatedType ident Nothing (Just ty)
790
- MacroI m -> printMac m Paren <> " ;"
791
- ]
814
+ printImplItem (ConstI as vis def ident ty expr x) = annotate x $ printOuterAttrs as <#>
815
+ (printVis vis <+> printDef def <+> printAssociatedConst ident ty (Just expr) InheritedV )
816
+ printImplItem (MethodI as vis def ident sig body x) = annotate x $ printOuterAttrs as <#>
817
+ (printVis vis <+> printDef def <+> printMethodSig ident sig InheritedV (Just (body, as)))
818
+ printImplItem (TypeI as vis def ident ty x) = annotate x $ printOuterAttrs as <#>
819
+ (printVis vis <+> printDef def <+> printAssociatedType ident Nothing (Just ty))
820
+ printImplItem (MacroI as def mac x) = annotate x $ printOuterAttrs as <#>
821
+ (printDef def <+> printMac mac Paren <> " ;" )
822
+
823
+ -- | Print defaultness (@Defaultness@)
824
+ printDef :: Defaultness -> Doc a
825
+ printDef Default = " default"
826
+ printDef Final = mempty
792
827
793
828
-- | Print an associated type (@printAssociatedType@)
794
829
printAssociatedType :: Ident -> Maybe [TyParamBound a ] -> Maybe (Ty a ) -> Doc a
@@ -823,11 +858,10 @@ printVis InheritedV = mempty
823
858
824
859
-- | Print a foreign item (@print_foreign_item@)
825
860
printForeignItem :: ForeignItem a -> Doc a
826
- printForeignItem (ForeignItem ident attrs node vis x) = annotate x $ printOuterAttrs attrs <+>
827
- case node of
828
- ForeignFn decl generics -> printFn decl Normal NotConst Rust (Just ident) generics vis Nothing
829
- ForeignStatic ty mut -> printVis vis <+> " static" <+> when mut " mut" <+> printIdent ident <> " :" <+> printType ty <> " ;"
830
-
861
+ printForeignItem (ForeignFn attrs vis ident decl generics x) = annotate x $
862
+ printOuterAttrs attrs <+> printFn decl Normal NotConst Rust (Just ident) generics vis Nothing
863
+ printForeignItem (ForeignStatic attrs vis ident ty mut x) = annotate x $
864
+ printOuterAttrs attrs <+> printVis vis <+> " static" <+> printMutability mut <+> printIdent ident <> " :" <+> printType ty <> " ;"
831
865
832
866
-- | Print a struct definition (@print_struct@)
833
867
printStruct :: VariantData a -> Generics a -> Ident -> Bool -> Bool -> Doc a
0 commit comments