on master help sign in
Display docstrings for typeclass parameters and simplify dispaly of subclasses
f5705ebPaul Koerbitz
src/Idris/Docs.hs+22−16
@@ -27,7 +27,7 @@ data Docs = FunDoc FunDoc
27 [FunDoc] -- data constructor docs
27 [FunDoc] -- data constructor docs
28 | ClassDoc Name Docstring -- class docs
28 | ClassDoc Name Docstring -- class docs
29 [FunDoc] -- method docs
29 [FunDoc] -- method docs
30− [Name] -- parameter docs
30+ [(Name, Maybe Docstring)] -- parameters and their docstrings
31 [PTerm] -- instances
31 [PTerm] -- instances
32 deriving Show
32 deriving Show
33
33
@@ -78,30 +78,37 @@ pprintDocs imp (ClassDoc n doc meths params instances)
78 = nest 4 (text "Type class" <+> prettyName imp [] n <>
78 = nest 4 (text "Type class" <+> prettyName imp [] n <>
79 if nullDocstring doc then empty else line <> renderDocstring doc)
79 if nullDocstring doc then empty else line <> renderDocstring doc)
80 <> line <$>
80 <> line <$>
81− nest 4 (text "Parameters:" <$>
81+ nest 4 (text "Parameters:" <$> prettyParameters)
82− hsep (punctuate comma (map (prettyName False params') params)))
83 <> line <$>
82 <> line <$>
84 nest 4 (text "Methods:" <$>
83 nest 4 (text "Methods:" <$>
85 vsep (map (pprintFD imp) meths))
84 vsep (map (pprintFD imp) meths))
86 <$>
85 <$>
87− nest 4 (text "Defined instances:" <$>
86+ nest 4 (text "Instances:" <$>
88− vsep (if null definedInstances then [text "<no instances>"]
87+ vsep (if null instances' then [text "<no instances>"]
89− else map dumpInstance definedInstances))
88+ else map dumpInstance instances'))
90 <>
89 <>
91− if null generatedInstances then empty
90+ if null subclasses then empty
92− else line <$> nest 4 (text "Instances generated from subclasses:" <$>
91+ else line <$> nest 4 (text "Subclasses:" <$>
93− vsep (map dumpInstance generatedInstances))
92+ vsep (map (dumpInstance . remConstraint) subclasses))
94 where
93 where
95− params' = zip params (repeat False)
94+ params' = map (\x -> (fst x, False)) params
96
95
97 dumpInstance :: PTerm -> Doc OutputAnnotation
96 dumpInstance :: PTerm -> Doc OutputAnnotation
98 dumpInstance = pprintPTerm imp params' []
97 dumpInstance = pprintPTerm imp params' []
99
98
99+ remConstraint (PPi (Constraint _ _) _ tm _) = tm
100+ remConstraint (PPi x y z pt) = PPi x y z (remConstraint pt)
101+ remConstraint p = p
102+
100 hasConstraint (PPi (Constraint _ _) _ _ _) = True
103 hasConstraint (PPi (Constraint _ _) _ _ _) = True
101 hasConstraint (PPi _ _ _ pt) = hasConstraint pt
104 hasConstraint (PPi _ _ _ pt) = hasConstraint pt
102 hasConstraint _ = False
105 hasConstraint _ = False
103
106
104− (generatedInstances, definedInstances) = partition hasConstraint instances
107+ (subclasses, instances') = partition hasConstraint instances
108+
109+ prettyParameters = if any (isJust . snd) params
110+ then vsep (map (\(n,md) -> prettyName False params' n <+> maybe empty showDoc md) params)
111+ else hsep (punctuate comma (map (prettyName False params' . fst) params))
105
112
106getDocs :: Name -> Idris Docs
113getDocs :: Name -> Idris Docs
107getDocs n
114getDocs n
@@ -123,12 +130,11 @@ docClass :: Name -> ClassInfo -> Idris Docs
123docClass n ci
130docClass n ci
124 = do i <- getIState
131 = do i <- getIState
125 ctxt <- getContext
132 ctxt <- getContext
126− let docstr = case lookupCtxt n (idris_docstrings i) of
133+ let docStrings = listToMaybe $ lookupCtxt n $ idris_docstrings i
127− [str] -> fst str
134+ docstr = maybe emptyDocstring fst docStrings
128− _ -> emptyDocstring
129− params = class_params ci
135+ params = map (\pn -> (pn, docStrings >>= (lookup pn . snd))) (class_params ci)
130 instances = map (delabTy i) (class_instances ci)
136 instances = map (delabTy i) (class_instances ci)
131− mdocs <- mapM docFun (map fst (class_methods ci))
137+ mdocs <- mapM (docFun .fst) (class_methods ci)
132 return $ ClassDoc n docstr mdocs params instances
138 return $ ClassDoc n docstr mdocs params instances
133
139
134docFun :: Name -> Idris FunDoc
140docFun :: Name -> Idris FunDoc