@@ -41,6 +41,10 @@ data Docs' d = FunDoc (FunDoc' d)
41 [PTerm] -- subclasses
41 [PTerm] -- subclasses
42 [PTerm] -- superclasses
42 [PTerm] -- superclasses
43 (Maybe (FunDoc' d)) -- explicit constructor
43 (Maybe (FunDoc' d)) -- explicit constructor
44+ | RecordDoc Name d -- record docs
45+ (FunDoc' d) -- data constructor docs
46+ [FunDoc' d] -- projection docs
47+ [(Name, PTerm, Maybe d)] -- parameters with type and doc
44 | NamedInstanceDoc Name (FunDoc' d) -- name is class
48 | NamedInstanceDoc Name (FunDoc' d) -- name is class
45 | ModDoc [String] -- Module name
49 | ModDoc [String] -- Module name
@@ -209,6 +213,33 @@ pprintDocs ist (ClassDoc n doc meths params instances subclasses superclasses ct
209 then vsep (map (\(nm,md) -> prettyName True False params' nm <+> maybe empty (showDoc ist) md) params)
213 then vsep (map (\(nm,md) -> prettyName True False params' nm <+> maybe empty (showDoc ist) md) params)
210 else hsep (punctuate comma (map (prettyName True False params' . fst) params))
214 else hsep (punctuate comma (map (prettyName True False params' . fst) params))
216+pprintDocs ist (RecordDoc n doc ctor projs params)
217+ = nest 4 (text "Record" <+> prettyName True (ppopt_impl ppo) [] n <>
218+ if nullDocstring doc
221+ renderDocstring (renderDocTerm (pprintDelab ist) (normaliseAll (tt_ctxt ist) [])) doc)
225+ else line <> nest 4 (text "Parameters:" <$> prettyParameters) <> line)
227+ <$> nest 4 (text "Constructor:" <$> pprintFDWithoutTotality ist False ctor)
229+ <$> nest 4 (text "Projections:" <$> vsep (map (pprintFDWithoutTotality ist False) projs))
231+ ppo = ppOptionIst ist
232+ infixes = idris_infixes ist
234+ pNames = [n | (n,_,_) <- params]
235+ params' = zip pNames (repeat False)
238+ if any isJust [d | (_,_,d) <- params]
239+ then vsep (map (\(n,pt,d) -> prettyParam (n,pt) <+> maybe empty (showDoc ist) d) params)
240+ else hsep (punctuate comma (map prettyParam [(n,pt) | (n,pt,_) <- params]))
241+ prettyParam (n,pt) = prettyName True False params' n <+> text ":" <+> pprintPTerm ppo params' [] infixes pt
212pprintDocs ist (NamedInstanceDoc _cls doc)
243pprintDocs ist (NamedInstanceDoc _cls doc)
213 = nest 4 (text "Named instance:" <$> pprintFDWithoutTotality ist True doc)
244 = nest 4 (text "Named instance:" <$> pprintFDWithoutTotality ist True doc)
@@ -234,6 +265,8 @@ getDocs n w
234 = do i <- getIState
265 = do i <- getIState
235 docs <- if | Just ci <- lookupCtxtExact n (idris_classes i)
266 docs <- if | Just ci <- lookupCtxtExact n (idris_classes i)
236 -> docClass n ci
267 -> docClass n ci
268+ | Just ri <- lookupCtxtExact n (idris_records i)
237 | Just ti <- lookupCtxtExact n (idris_datatypes i)
270 | Just ti <- lookupCtxtExact n (idris_datatypes i)
238 -> docData n ti
271 -> docData n ti
239 | Just class_ <- classNameForInst i n
272 | Just class_ <- classNameForInst i n
@@ -296,6 +329,17 @@ docClass n ci
296 isSubclass _
329 isSubclass _
332+docRecord :: Name -> RecordInfo -> Idris Docs
335+ let docStrings = listToMaybe $ lookupCtxt n $ idris_docstrings i
336+ docstr = maybe emptyDocstring fst docStrings
337+ params = map (\(pn,pt) -> (pn, pt, docStrings >>= (lookup pn . snd)))
338+ (record_parameters ri)
339+ pdocs <- mapM docFun (record_projections ri)
340+ ctorDocs <- docFun $ record_constructor ri
341+ return $ RecordDoc n docstr ctorDocs pdocs params
299docFun :: Name -> Idris FunDoc
343docFun :: Name -> Idris FunDoc
301 = do i <- getIState
345 = do i <- getIState