@@ -1,12 +1,12 @@
1−{-# LANGUAGE PatternGuards #-}
1+{-# LANGUAGE DeriveFunctor, PatternGuards #-}
2−module Idris.Docs (pprintDocs, getDocs, pprintConstDocs, FunDoc(..), Docs (..)) where
2+module Idris.Docs (pprintDocs, getDocs, pprintConstDocs, FunDoc, FunDoc'(..), Docs, Docs'(..)) where
4import Idris.AbsSyntax
4import Idris.AbsSyntax
5import Idris.AbsSyntaxTree
5import Idris.AbsSyntaxTree
6import Idris.Delaborate
6import Idris.Delaborate
7import Idris.Core.TT
7import Idris.Core.TT
8import Idris.Core.Evaluate
8import 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)
11import Util.Pretty
11import Util.Pretty
@@ -18,21 +18,27 @@ import qualified Data.Text as T
19-- Issue #1573 on the Issue tracker.
19-- Issue #1573 on the Issue tracker.
20-- https://github.com/idris-lang/Idris-dev/issues/1573
20-- https://github.com/idris-lang/Idris-dev/issues/1573
21−data FunDoc = FD Name (Docstring DocTerm)
21+data FunDoc' d = FD Name d
22− [(Name, PTerm, Plicity, Maybe (Docstring DocTerm))] -- args: name, ty, implicit, docs
22+ [(Name, PTerm, Plicity, Maybe d)] -- args: name, ty, implicit, docs
23− PTerm -- function type
23+ PTerm -- function type
24− (Maybe Fixity)
24+ (Maybe Fixity)
27+type FunDoc = FunDoc' (Docstring DocTerm)
26−data Docs = FunDoc FunDoc
29+data Docs' d = FunDoc (FunDoc' d)
27− | DataDoc FunDoc -- type constructor docs
30+ | DataDoc (FunDoc' d) -- type constructor docs
28− [FunDoc] -- data constructor docs
31+ [FunDoc' d] -- data constructor docs
29− | ClassDoc Name (Docstring DocTerm)-- class docs
32+ | ClassDoc Name d -- class docs
30− [FunDoc] -- method docs
33+ [FunDoc' d] -- method docs
31− [(Name, Maybe (Docstring DocTerm))] -- parameters and their docstrings
34+ [(Name, Maybe d)] -- parameters and their docstrings
32− [PTerm] -- instances
35+ [PTerm] -- instances
33− [PTerm] -- superclasses
36+ [PTerm] -- superclasses
34− | ModDoc [String] -- Module name
37+ | ModDoc [String] -- Module name
35− (Docstring DocTerm)
41+type Docs = Docs' (Docstring DocTerm)
37showDoc ist d
43showDoc ist d
38 | nullDocstring d = empty
44 | nullDocstring d = empty
@@ -144,23 +150,29 @@ pprintDocs ist (ModDoc mod docs)
144 = nest 4 $ text "Module" <+> text (concat (intersperse "." mod)) <> colon <$>
150 = nest 4 $ text "Module" <+> text (concat (intersperse "." mod)) <> colon <$>
145 renderDocstring (renderDocTerm (pprintDelab ist) (normaliseAll (tt_ctxt ist) [])) docs
151 renderDocstring (renderDocTerm (pprintDelab ist) (normaliseAll (tt_ctxt ist) [])) docs
153+-- | Determine a truncation function depending how much docs the user
155+howMuch FullDocs = id
156+howMuch OverviewDocs = overview
147-- | Given a fully-qualified, disambiguated name, construct the
158-- | Given a fully-qualified, disambiguated name, construct the
148-- documentation object for it
159-- documentation object for it
149−getDocs :: Name -> Idris Docs
160+getDocs :: Name -> HowMuchDocs -> Idris Docs
150−getDocs n@(NS n' ns) | n' == modDocName
161+getDocs n@(NS n' ns) w | n' == modDocName
151 = do i <- getIState
162 = do i <- getIState
152 case lookupCtxtExact n (idris_moduledocs i) of
163 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
154 Nothing -> fail $ "Module docs for " ++ show (reverse (map T.unpack ns)) ++
165 Nothing -> fail $ "Module docs for " ++ show (reverse (map T.unpack ns)) ++
155 " do not exist! This shouldn't have happened and is a bug."
166 " do not exist! This shouldn't have happened and is a bug."
156−getDocs n
167+getDocs n w
157 = do i <- getIState
168 = do i <- getIState
158− case lookupCtxt n (idris_classes i) of
169+ docs <- case lookupCtxt n (idris_classes i) of
159− [ci] -> docClass n ci
170+ [ci] -> docClass n ci
160− _ -> case lookupCtxt n (idris_datatypes i) of
171+ _ -> case lookupCtxt n (idris_datatypes i) of
161− [ti] -> docData n ti
172+ [ti] -> docData n ti
162− _ -> do fd <- docFun n
173+ _ -> do fd <- docFun n
163− return (FunDoc fd)
174+ return (FunDoc fd)
175+ return $ fmap (howMuch w) docs
165docData :: Name -> TypeInfo -> Idris Docs
177docData :: Name -> TypeInfo -> Idris Docs
166docData n ti
178docData n ti