@@ -1,12 +1,12 @@
1−{-# LANGUAGE PatternGuards #-}
2−module Idris.Docs (pprintDocs, getDocs, pprintConstDocs, FunDoc(..), Docs (..)) where
1+{-# LANGUAGE DeriveFunctor, PatternGuards #-}
2+module Idris.Docs (pprintDocs, getDocs, pprintConstDocs, FunDoc, FunDoc'(..), Docs, Docs'(..)) where
33
44import Idris.AbsSyntax
55import Idris.AbsSyntaxTree
66import Idris.Delaborate
77import Idris.Core.TT
88import Idris.Core.Evaluate
9−import Idris.Docstrings (Docstring, emptyDocstring, noDocs, nullDocstring, renderDocstring, DocTerm, renderDocTerm)
9+import Idris.Docstrings (Docstring, emptyDocstring, noDocs, nullDocstring, renderDocstring, DocTerm, renderDocTerm, overview)
1010
1111import Util.Pretty
1212
@@ -18,21 +18,27 @@ import qualified Data.Text as T
1818--
1919-- Issue #1573 on the Issue tracker.
2020-- https://github.com/idris-lang/Idris-dev/issues/1573
21−data FunDoc = FD Name (Docstring DocTerm)
22− [(Name, PTerm, Plicity, Maybe (Docstring DocTerm))] -- args: name, ty, implicit, docs
23− PTerm -- function type
24− (Maybe Fixity)
25−
26−data Docs = FunDoc FunDoc
27− | DataDoc FunDoc -- type constructor docs
28− [FunDoc] -- data constructor docs
29− | ClassDoc Name (Docstring DocTerm)-- class docs
30− [FunDoc] -- method docs
31− [(Name, Maybe (Docstring DocTerm))] -- parameters and their docstrings
32− [PTerm] -- instances
33− [PTerm] -- superclasses
34− | ModDoc [String] -- Module name
35− (Docstring DocTerm)
21+data FunDoc' d = FD Name d
22+ [(Name, PTerm, Plicity, Maybe d)] -- args: name, ty, implicit, docs
23+ PTerm -- function type
24+ (Maybe Fixity)
25+ deriving Functor
26+
27+type FunDoc = FunDoc' (Docstring DocTerm)
28+
29+data Docs' d = FunDoc (FunDoc' d)
30+ | DataDoc (FunDoc' d) -- type constructor docs
31+ [FunDoc' d] -- data constructor docs
32+ | ClassDoc Name d -- class docs
33+ [FunDoc' d] -- method docs
34+ [(Name, Maybe d)] -- parameters and their docstrings
35+ [PTerm] -- instances
36+ [PTerm] -- superclasses
37+ | ModDoc [String] -- Module name
38+ d
39+ deriving Functor
40+
41+type Docs = Docs' (Docstring DocTerm)
3642
3743showDoc ist d
3844 | nullDocstring d = empty
@@ -144,23 +150,29 @@ pprintDocs ist (ModDoc mod docs)
144150 = nest 4 $ text "Module" <+> text (concat (intersperse "." mod)) <> colon <$>
145151 renderDocstring (renderDocTerm (pprintDelab ist) (normaliseAll (tt_ctxt ist) [])) docs
146152
153+-- | Determine a truncation function depending how much docs the user
154+-- wants to see
155+howMuch FullDocs = id
156+howMuch OverviewDocs = overview
157+
147158-- | Given a fully-qualified, disambiguated name, construct the
148159-- documentation object for it
149−getDocs :: Name -> Idris Docs
150−getDocs n@(NS n' ns) | n' == modDocName
160+getDocs :: Name -> HowMuchDocs -> Idris Docs
161+getDocs n@(NS n' ns) w | n' == modDocName
151162 = do i <- getIState
152163 case lookupCtxtExact n (idris_moduledocs i) of
153− Just doc -> return $ ModDoc (reverse (map T.unpack ns)) doc
164+ Just doc -> return . ModDoc (reverse (map T.unpack ns)) $ howMuch w doc
154165 Nothing -> fail $ "Module docs for " ++ show (reverse (map T.unpack ns)) ++
155166 " do not exist! This shouldn't have happened and is a bug."
156−getDocs n
167+getDocs n w
157168 = do i <- getIState
158− case lookupCtxt n (idris_classes i) of
159− [ci] -> docClass n ci
160− _ -> case lookupCtxt n (idris_datatypes i) of
161− [ti] -> docData n ti
162− _ -> do fd <- docFun n
163− return (FunDoc fd)
169+ docs <- case lookupCtxt n (idris_classes i) of
170+ [ci] -> docClass n ci
171+ _ -> case lookupCtxt n (idris_datatypes i) of
172+ [ti] -> docData n ti
173+ _ -> do fd <- docFun n
174+ return (FunDoc fd)
175+ return $ fmap (howMuch w) docs
164176
165177docData :: Name -> TypeInfo -> Idris Docs
166178docData n ti