@@ -24,7 +24,8 @@ it :: Doc a
24
24
{-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
25
25
26
26
module Language.Rust.Pretty (
27
- Pretty (.. ), PrettyAnnotated (.. ), Resolve (.. ), Doc , writeSourceFile
27
+ Pretty (.. ), pretty , PrettyAnnotated (.. ), prettyAnnotated , Resolve (.. ), Issue (.. ), Severity (.. ),
28
+ runResolve , Doc , writeSourceFile
28
29
) where
29
30
30
31
import Language.Rust.Data.Position
@@ -36,94 +37,110 @@ import Language.Rust.Syntax.Ident
36
37
import Language.Rust.Pretty.Internal
37
38
import Language.Rust.Pretty.Resolve
38
39
39
- import Data.Text.Prettyprint.Doc (Doc , Pretty (.. ), unAnnotate , layoutPretty , LayoutOptions (.. ), PageWidth (.. ))
40
+ import Data.Text.Prettyprint.Doc (Doc )
41
+ import qualified Data.Text.Prettyprint.Doc as PP
40
42
import Data.Text.Prettyprint.Doc.Render.Text (renderIO )
41
43
import System.IO (Handle )
44
+ import Data.Typeable (Typeable )
42
45
43
46
-- | Given a handle, write into it the given 'SourceFile' (with file width will be 100).
44
- writeSourceFile :: Handle -> SourceFile a -> IO ()
45
- writeSourceFile hdl = renderIO hdl . layoutPretty (LayoutOptions (AvailablePerLine 100 1.0 )) . pretty
46
-
47
- instance Pretty Abi where pretty = printAbi
48
- instance Pretty BindingMode where pretty = printBindingMode
49
- instance Pretty BinOp where pretty = printBinOp
50
- instance Pretty Ident where pretty = printIdent
51
- instance Pretty ImplPolarity where pretty = printPolarity
52
- instance Pretty LitTok where pretty = printLitTok
53
- instance Pretty Mutability where pretty = printMutability
54
- instance Pretty RangeLimits where pretty = printRangeLimits
55
- instance Pretty Token where pretty = printToken
56
- instance Pretty TokenTree where pretty = printTt
57
- instance Pretty TokenStream where pretty = printTokenStream
58
- instance Pretty UnOp where pretty = printUnOp
59
- instance Pretty Unsafety where pretty = printUnsafety
60
- instance Pretty (Attribute a ) where pretty = unAnnotate . prettyAnn
61
- instance Pretty (Block a ) where pretty = unAnnotate . prettyAnn
62
- instance Pretty (SourceFile a ) where pretty = unAnnotate . prettyAnn
63
- instance Pretty (Expr a ) where pretty = unAnnotate . prettyAnn
64
- instance Pretty (Field a ) where pretty = unAnnotate . prettyAnn
65
- instance Pretty (FieldPat a ) where pretty = unAnnotate . prettyAnn
66
- instance Pretty (FnDecl a ) where pretty = unAnnotate . prettyAnn
67
- instance Pretty (ForeignItem a ) where pretty = unAnnotate . prettyAnn
68
- instance Pretty (Generics a ) where pretty = unAnnotate . prettyAnn
69
- instance Pretty (ImplItem a ) where pretty = unAnnotate . prettyAnn
70
- instance Pretty (Item a ) where pretty = unAnnotate . prettyAnn
71
- instance Pretty (Lifetime a ) where pretty = unAnnotate . prettyAnn
72
- instance Pretty (LifetimeDef a ) where pretty = unAnnotate . prettyAnn
73
- instance Pretty (Lit a ) where pretty = unAnnotate . prettyAnn
74
- instance Pretty (Nonterminal a ) where pretty = unAnnotate . prettyAnn
75
- instance Pretty (Pat a ) where pretty = unAnnotate . prettyAnn
76
- instance Pretty (Path a ) where pretty = unAnnotate . prettyAnn
77
- instance Pretty (PolyTraitRef a ) where pretty = unAnnotate . prettyAnn
78
- instance Pretty (Stmt a ) where pretty = unAnnotate . prettyAnn
79
- instance Pretty (StructField a ) where pretty = unAnnotate . prettyAnn
80
- instance Pretty (TraitItem a ) where pretty = unAnnotate . prettyAnn
81
- instance Pretty (TraitRef a ) where pretty = unAnnotate . prettyAnn
82
- instance Pretty (Ty a ) where pretty = unAnnotate . prettyAnn
83
- instance Pretty (TyParam a ) where pretty = unAnnotate . prettyAnn
84
- instance Pretty (TyParamBound a ) where pretty = unAnnotate . prettyAnn
85
- instance Pretty (Variant a ) where pretty = unAnnotate . prettyAnn
86
- instance Pretty (ViewPath a ) where pretty = unAnnotate . prettyAnn
87
- instance Pretty (Visibility a ) where pretty = unAnnotate . prettyAnn
88
- instance Pretty (WhereClause a ) where pretty = unAnnotate . prettyAnn
89
- instance Pretty (WherePredicate a ) where pretty = unAnnotate . prettyAnn
90
- instance Pretty Position where pretty = pretty . prettyPosition
91
- instance Pretty Span where pretty = pretty . prettySpan
47
+ writeSourceFile :: (Monoid a , Typeable a ) => Handle -> SourceFile a -> IO ()
48
+ writeSourceFile hdl = renderIO hdl . PP. layoutPretty (PP. LayoutOptions (PP. AvailablePerLine 100 1.0 )) . pretty
49
+
50
+ pretty :: (Resolve a , Pretty a ) => a -> Doc b
51
+ pretty x = case resolve x of
52
+ Left desc -> error (" Failed to resolve: " ++ desc)
53
+ Right y -> prettyUnresolved y
54
+
55
+ prettyAnnotated :: (Resolve (f a ), PrettyAnnotated f ) => f a -> Doc a
56
+ prettyAnnotated x = case resolve x of
57
+ Left desc -> error (" Failed to resolve: " ++ desc)
58
+ Right y -> prettyAnnUnresolved y
59
+
60
+ class Pretty a where
61
+ -- | Pretty-print the given value
62
+ prettyUnresolved :: a -> Doc b
63
+
64
+ instance Pretty Abi where prettyUnresolved = printAbi
65
+ instance Pretty BindingMode where prettyUnresolved = printBindingMode
66
+ instance Pretty BinOp where prettyUnresolved = printBinOp
67
+ instance Pretty Ident where prettyUnresolved = printIdent
68
+ instance Pretty ImplPolarity where prettyUnresolved = printPolarity
69
+ instance Pretty LitTok where prettyUnresolved = printLitTok
70
+ instance Pretty Mutability where prettyUnresolved = printMutability
71
+ instance Pretty RangeLimits where prettyUnresolved = printRangeLimits
72
+ instance Pretty Token where prettyUnresolved = printToken
73
+ instance Pretty TokenTree where prettyUnresolved = printTt
74
+ instance Pretty TokenStream where prettyUnresolved = printTokenStream
75
+ instance Pretty UnOp where prettyUnresolved = printUnOp
76
+ instance Pretty Unsafety where prettyUnresolved = printUnsafety
77
+ instance Pretty (Attribute a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
78
+ instance Pretty (Block a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
79
+ instance Pretty (SourceFile a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
80
+ instance Pretty (Expr a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
81
+ instance Pretty (Field a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
82
+ instance Pretty (FieldPat a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
83
+ instance Pretty (FnDecl a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
84
+ instance Pretty (ForeignItem a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
85
+ instance Pretty (Generics a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
86
+ instance Pretty (ImplItem a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
87
+ instance Pretty (Item a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
88
+ instance Pretty (Lifetime a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
89
+ instance Pretty (LifetimeDef a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
90
+ instance Pretty (Lit a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
91
+ instance Pretty (Nonterminal a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
92
+ instance Pretty (Pat a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
93
+ instance Pretty (Path a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
94
+ instance Pretty (PolyTraitRef a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
95
+ instance Pretty (Stmt a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
96
+ instance Pretty (StructField a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
97
+ instance Pretty (TraitItem a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
98
+ instance Pretty (TraitRef a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
99
+ instance Pretty (Ty a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
100
+ instance Pretty (TyParam a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
101
+ instance Pretty (TyParamBound a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
102
+ instance Pretty (Variant a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
103
+ instance Pretty (ViewPath a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
104
+ instance Pretty (Visibility a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
105
+ instance Pretty (WhereClause a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
106
+ instance Pretty (WherePredicate a ) where prettyUnresolved = PP. unAnnotate . prettyAnnUnresolved
107
+ instance Pretty Position where prettyUnresolved = PP. pretty . prettyPosition
108
+ instance Pretty Span where prettyUnresolved = PP. pretty . prettySpan
92
109
93
110
-- | Similar to 'Pretty', but for types which are parametrized over an annotation type.
94
111
class PrettyAnnotated p where
95
112
-- | Pretty-print the given value, adding annotations in the 'Doc' whenever possible.
96
- prettyAnn :: p a -> Doc a
113
+ prettyAnnUnresolved :: p a -> Doc a
97
114
98
115
-- | This instance prints attributes inline
99
- instance PrettyAnnotated Attribute where prettyAnn = flip printAttr True
100
- instance PrettyAnnotated Block where prettyAnn = printBlock
101
- instance PrettyAnnotated SourceFile where prettyAnn = printSourceFile
102
- instance PrettyAnnotated Expr where prettyAnn = printExpr
103
- instance PrettyAnnotated Field where prettyAnn = printField
104
- instance PrettyAnnotated FieldPat where prettyAnn = printFieldPat
105
- instance PrettyAnnotated FnDecl where prettyAnn = printFnArgsAndRet
106
- instance PrettyAnnotated ForeignItem where prettyAnn = printForeignItem
107
- instance PrettyAnnotated Generics where prettyAnn = printGenerics
108
- instance PrettyAnnotated ImplItem where prettyAnn = printImplItem
109
- instance PrettyAnnotated Item where prettyAnn = printItem
110
- instance PrettyAnnotated Lifetime where prettyAnn = printLifetime
111
- instance PrettyAnnotated LifetimeDef where prettyAnn = printLifetimeDef
112
- instance PrettyAnnotated Lit where prettyAnn = printLit
113
- instance PrettyAnnotated Nonterminal where prettyAnn = printNonterminal
114
- instance PrettyAnnotated Pat where prettyAnn = printPat
115
- instance PrettyAnnotated Path where prettyAnn = flip printPath False
116
- instance PrettyAnnotated PolyTraitRef where prettyAnn = printPolyTraitRef
117
- instance PrettyAnnotated Stmt where prettyAnn = printStmt
118
- instance PrettyAnnotated StructField where prettyAnn = printStructField
119
- instance PrettyAnnotated TraitItem where prettyAnn = printTraitItem
120
- instance PrettyAnnotated TraitRef where prettyAnn = printTraitRef
121
- instance PrettyAnnotated Ty where prettyAnn = printType
122
- instance PrettyAnnotated TyParam where prettyAnn = printTyParam
123
- instance PrettyAnnotated TyParamBound where prettyAnn = printBound
124
- instance PrettyAnnotated Variant where prettyAnn = printVariant
125
- instance PrettyAnnotated ViewPath where prettyAnn = printViewPath
126
- instance PrettyAnnotated Visibility where prettyAnn = printVis
127
- instance PrettyAnnotated WhereClause where prettyAnn = printWhereClause True
128
- instance PrettyAnnotated WherePredicate where prettyAnn = printWherePredicate
116
+ instance PrettyAnnotated Attribute where prettyAnnUnresolved = flip printAttr True
117
+ instance PrettyAnnotated Block where prettyAnnUnresolved = printBlock
118
+ instance PrettyAnnotated SourceFile where prettyAnnUnresolved = printSourceFile
119
+ instance PrettyAnnotated Expr where prettyAnnUnresolved = printExpr
120
+ instance PrettyAnnotated Field where prettyAnnUnresolved = printField
121
+ instance PrettyAnnotated FieldPat where prettyAnnUnresolved = printFieldPat
122
+ instance PrettyAnnotated FnDecl where prettyAnnUnresolved = printFnArgsAndRet
123
+ instance PrettyAnnotated ForeignItem where prettyAnnUnresolved = printForeignItem
124
+ instance PrettyAnnotated Generics where prettyAnnUnresolved = printGenerics
125
+ instance PrettyAnnotated ImplItem where prettyAnnUnresolved = printImplItem
126
+ instance PrettyAnnotated Item where prettyAnnUnresolved = printItem
127
+ instance PrettyAnnotated Lifetime where prettyAnnUnresolved = printLifetime
128
+ instance PrettyAnnotated LifetimeDef where prettyAnnUnresolved = printLifetimeDef
129
+ instance PrettyAnnotated Lit where prettyAnnUnresolved = printLit
130
+ instance PrettyAnnotated Nonterminal where prettyAnnUnresolved = printNonterminal
131
+ instance PrettyAnnotated Pat where prettyAnnUnresolved = printPat
132
+ instance PrettyAnnotated Path where prettyAnnUnresolved = flip printPath False
133
+ instance PrettyAnnotated PolyTraitRef where prettyAnnUnresolved = printPolyTraitRef
134
+ instance PrettyAnnotated Stmt where prettyAnnUnresolved = printStmt
135
+ instance PrettyAnnotated StructField where prettyAnnUnresolved = printStructField
136
+ instance PrettyAnnotated TraitItem where prettyAnnUnresolved = printTraitItem
137
+ instance PrettyAnnotated TraitRef where prettyAnnUnresolved = printTraitRef
138
+ instance PrettyAnnotated Ty where prettyAnnUnresolved = printType
139
+ instance PrettyAnnotated TyParam where prettyAnnUnresolved = printTyParam
140
+ instance PrettyAnnotated TyParamBound where prettyAnnUnresolved = printBound
141
+ instance PrettyAnnotated Variant where prettyAnnUnresolved = printVariant
142
+ instance PrettyAnnotated ViewPath where prettyAnnUnresolved = printViewPath
143
+ instance PrettyAnnotated Visibility where prettyAnnUnresolved = printVis
144
+ instance PrettyAnnotated WhereClause where prettyAnnUnresolved = printWhereClause True
145
+ instance PrettyAnnotated WherePredicate where prettyAnnUnresolved = printWherePredicate
129
146
0 commit comments