@@ -32,7 +32,8 @@ data Docs' d = FunDoc (FunDoc' d)
32 | ClassDoc Name d -- class docs
32 | ClassDoc Name d -- class docs
33 [FunDoc' d] -- method docs
33 [FunDoc' d] -- method docs
34 [(Name, Maybe d)] -- parameters and their docstrings
34 [(Name, Maybe d)] -- parameters and their docstrings
35− [(PTerm, Docstring DocTerm)] -- instances and docs
35+ [(PTerm, (d, [(Name, d)]))] -- instances
36+ [PTerm] -- subclasses
36 [PTerm] -- superclasses
37 [PTerm] -- superclasses
37 | ModDoc [String] -- Module name
38 | ModDoc [String] -- Module name
@@ -88,7 +89,7 @@ pprintDocs ist (DataDoc t args)
88 if null args then text "No constructors."
89 if null args then text "No constructors."
89 else nest 4 (text "Constructors:" <> line <>
90 else nest 4 (text "Constructors:" <> line <>
90 vsep (map (pprintFD ist) args))
91 vsep (map (pprintFD ist) args))
91−pprintDocs ist (ClassDoc n doc meths params instances superclasses)
92+pprintDocs ist (ClassDoc n doc meths params instances subclasses superclasses)
92 = nest 4 (text "Type class" <+> prettyName True (ppopt_impl ppo) [] n <>
93 = nest 4 (text "Type class" <+> prettyName True (ppopt_impl ppo) [] n <>
93 if nullDocstring doc
94 if nullDocstring doc
94 then empty
95 then empty
@@ -100,12 +101,12 @@ pprintDocs ist (ClassDoc n doc meths params instances superclasses)
100 vsep (map (pprintFD ist) meths))
101 vsep (map (pprintFD ist) meths))
102 nest 4 (text "Instances:" <$>
103 nest 4 (text "Instances:" <$>
103− vsep (if null instances' then [text "<no instances>"]
104+ vsep (if null instances then [text "<no instances>"]
104− else map pprintInstance instances'))
105+ else map pprintInstance instances))
106 (if null subclasses then empty
107 (if null subclasses then empty
107 else line <$> nest 4 (text "Subclasses:" <$>
108 else line <$> nest 4 (text "Subclasses:" <$>
108− vsep (map (dumpInstance . prettifySubclasses . fst) subclasses)))
109+ vsep (map (dumpInstance . prettifySubclasses) subclasses)))
110 (if null superclasses then empty
111 (if null superclasses then empty
111 else line <$> nest 4 (text "Default superclass instances:" <$>
112 else line <$> nest 4 (text "Default superclass instances:" <$>
@@ -118,16 +119,29 @@ pprintDocs ist (ClassDoc n doc meths params instances superclasses)
118 ppo = ppOptionIst ist
119 ppo = ppOptionIst ist
119 infixes = idris_infixes ist
120 infixes = idris_infixes ist
121− pprintInstance (term, doc) =
122+ pprintInstance (term, (doc, argDocs)) =
122 nest 4 (dumpInstance term <>
123 nest 4 (dumpInstance term <>
123− if nullDocstring doc
124+ (if nullDocstring doc
124 then empty
125 then empty
125 else line <>
126 else line <>
126 renderDocstring
127 renderDocstring
127 (renderDocTerm
128 (renderDocTerm
128 (pprintDelab ist)
129 (pprintDelab ist)
129 (normaliseAll (tt_ctxt ist) []))
130 (normaliseAll (tt_ctxt ist) []))
134+ else line <> vsep (map (prettyInstanceParam (map fst argDocs)) argDocs))
136+ prettyInstanceParam params (name, doc) =
137+ if nullDocstring doc
139+ else prettyName True False (zip params (repeat False)) name <+>
142+-- if any (isJust . snd) params
143+-- then vsep (map (\(nm,md) -> prettyName True False params' nm <+> maybe empty (showDoc ist) md) params)
144+-- else hsep (punctuate comma (map (prettyName True False params' . fst) params))
132 dumpInstance :: PTerm -> Doc OutputAnnotation
146 dumpInstance :: PTerm -> Doc OutputAnnotation
133 dumpInstance = pprintPTerm ppo params' [] infixes
147 dumpInstance = pprintPTerm ppo params' [] infixes
@@ -151,11 +165,10 @@ pprintDocs ist (ClassDoc n doc meths params instances superclasses)
151 isSubclass (PPi _ _ _ pt) = isSubclass pt
165 isSubclass (PPi _ _ _ pt) = isSubclass pt
152 isSubclass _ = False
166 isSubclass _ = False
154− (subclasses, instances') = partition (isSubclass . fst) instances
168+ prettyParameters =
156− prettyParameters = if any (isJust . snd) params
169+ if any (isJust . snd) params
157− then vsep (map (\(nm,md) -> prettyName True False params' nm <+> maybe empty (showDoc ist) md) params)
170+ then vsep (map (\(nm,md) -> prettyName True False params' nm <+> maybe empty (showDoc ist) md) params)
158− else hsep (punctuate comma (map (prettyName True False params' . fst) params))
171+ else hsep (punctuate comma (map (prettyName True False params' . fst) params))
160pprintDocs ist (ModDoc mod docs)
173pprintDocs ist (ModDoc mod docs)
161 = nest 4 $ text "Module" <+> text (concat (intersperse "." mod)) <> colon <$>
174 = nest 4 $ text "Module" <+> text (concat (intersperse "." mod)) <> colon <$>
@@ -197,18 +210,28 @@ docClass n ci
197 let docStrings = listToMaybe $ lookupCtxt n $ idris_docstrings i
210 let docStrings = listToMaybe $ lookupCtxt n $ idris_docstrings i
198 docstr = maybe emptyDocstring fst docStrings
211 docstr = maybe emptyDocstring fst docStrings
199 params = map (\pn -> (pn, docStrings >>= (lookup pn . snd))) (class_params ci)
212 params = map (\pn -> (pn, docStrings >>= (lookup pn . snd))) (class_params ci)
200− instanceDocs = map (maybe emptyDocstring fst .
213+ instanceDocs = map (fromMaybe (emptyDocstring, []) .
201 listToMaybe .
214 listToMaybe .
202 flip lookupCtxt (idris_docstrings i))
215 flip lookupCtxt (idris_docstrings i))
203 (class_instances ci)
216 (class_instances ci)
204− instances = map (delabTy i) (class_instances ci)
217+ instances = zip (map (delabTy i) (class_instances ci)) instanceDocs
218+ (subclasses, instances') = partition (isSubclass . fst) instances
205 superclasses = catMaybes $ map getDInst (class_default_superclasses ci)
219 superclasses = catMaybes $ map getDInst (class_default_superclasses ci)
206 mdocs <- mapM (docFun . fst) (class_methods ci)
220 mdocs <- mapM (docFun . fst) (class_methods ci)
207− return $ ClassDoc n docstr mdocs params (zip instances instanceDocs) superclasses
222+ n docstr mdocs params
223+ instances' (map fst subclasses) superclasses
209− getDInst (PInstance _ _ _ _ _ _ t _ _) = Just t
225+ getDInst (PInstance _ _ _ _ _ _ _ t _ _) = Just t
210 getDInst _ = Nothing
226 getDInst _ = Nothing
228+ isSubclass (PPi (Constraint _ _) _ (PApp _ _ args) (PApp _ (PRef _ nm) args'))
229+ = nm == n && map getTm args == map getTm args'
230+ isSubclass (PPi _ _ _ pt)
212docFun :: Name -> Idris FunDoc
235docFun :: Name -> Idris FunDoc
214 = do i <- getIState
237 = do i <- getIState