on master help sign in
Instance docs: show in :doc output
3d7aba5Adam Sandberg Eriksson
src/Idris/Docs.hs+20−5
@@ -32,7 +32,7 @@ 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] -- instances
35+ [(PTerm, Docstring DocTerm)] -- instances and docs
36 [PTerm] -- superclasses
36 [PTerm] -- superclasses
37 | ModDoc [String] -- Module name
37 | ModDoc [String] -- Module name
38 d
38 d
@@ -101,11 +101,11 @@ pprintDocs ist (ClassDoc n doc meths params instances superclasses)
101 <$>
101 <$>
102 nest 4 (text "Instances:" <$>
102 nest 4 (text "Instances:" <$>
103 vsep (if null instances' then [text "<no instances>"]
103 vsep (if null instances' then [text "<no instances>"]
104− else map dumpInstance instances'))
104+ else map pprintInstance instances'))
105 <>
105 <>
106 (if null subclasses then empty
106 (if null subclasses then empty
107 else line <$> nest 4 (text "Subclasses:" <$>
107 else line <$> nest 4 (text "Subclasses:" <$>
108− vsep (map (dumpInstance . prettifySubclasses) subclasses)))
108+ vsep (map (dumpInstance . prettifySubclasses . fst) subclasses)))
109 <>
109 <>
110 (if null superclasses then empty
110 (if null superclasses then empty
111 else line <$> nest 4 (text "Default superclass instances:" <$>
111 else line <$> nest 4 (text "Default superclass instances:" <$>
@@ -118,6 +118,17 @@ pprintDocs ist (ClassDoc n doc meths params instances superclasses)
118 ppo = ppOptionIst ist
118 ppo = ppOptionIst ist
119 infixes = idris_infixes ist
119 infixes = idris_infixes ist
120
120
121+ pprintInstance (term, doc) =
122+ nest 2 (dumpInstance term <>
123+ if nullDocstring doc
124+ then empty
125+ else line <>
126+ renderDocstring
127+ (renderDocTerm
128+ (pprintDelab ist)
129+ (normaliseAll (tt_ctxt ist) []))
130+ doc)
131+
121 dumpInstance :: PTerm -> Doc OutputAnnotation
132 dumpInstance :: PTerm -> Doc OutputAnnotation
122 dumpInstance = pprintPTerm ppo params' [] infixes
133 dumpInstance = pprintPTerm ppo params' [] infixes
123
134
@@ -140,7 +151,7 @@ pprintDocs ist (ClassDoc n doc meths params instances superclasses)
140 isSubclass (PPi _ _ _ pt) = isSubclass pt
151 isSubclass (PPi _ _ _ pt) = isSubclass pt
141 isSubclass _ = False
152 isSubclass _ = False
142
153
143− (subclasses, instances') = partition isSubclass instances
154+ (subclasses, instances') = partition (isSubclass . fst) instances
144
155
145 prettyParameters = if any (isJust . snd) params
156 prettyParameters = if any (isJust . snd) params
146 then vsep (map (\(nm,md) -> prettyName True False params' nm <+> maybe empty (showDoc ist) md) params)
157 then vsep (map (\(nm,md) -> prettyName True False params' nm <+> maybe empty (showDoc ist) md) params)
@@ -186,10 +197,14 @@ docClass n ci
186 let docStrings = listToMaybe $ lookupCtxt n $ idris_docstrings i
197 let docStrings = listToMaybe $ lookupCtxt n $ idris_docstrings i
187 docstr = maybe emptyDocstring fst docStrings
198 docstr = maybe emptyDocstring fst docStrings
188 params = map (\pn -> (pn, docStrings >>= (lookup pn . snd))) (class_params ci)
199 params = map (\pn -> (pn, docStrings >>= (lookup pn . snd))) (class_params ci)
200+ instanceDocs = map (maybe emptyDocstring fst .
201+ listToMaybe .
202+ flip lookupCtxt (idris_docstrings i))
203+ (class_instances ci)
189 instances = map (delabTy i) (class_instances ci)
204 instances = map (delabTy i) (class_instances ci)
190 superclasses = catMaybes $ map getDInst (class_default_superclasses ci)
205 superclasses = catMaybes $ map getDInst (class_default_superclasses ci)
191 mdocs <- mapM (docFun . fst) (class_methods ci)
206 mdocs <- mapM (docFun . fst) (class_methods ci)
192− return $ ClassDoc n docstr mdocs params instances superclasses
207+ return $ ClassDoc n docstr mdocs params (zip instances instanceDocs) superclasses
193 where
208 where
194 getDInst (PInstance _ _ _ _ _ _ t _ _) = Just t
209 getDInst (PInstance _ _ _ _ _ _ t _ _) = Just t
195 getDInst _ = Nothing
210 getDInst _ = Nothing