@@ -44,6 +44,7 @@ import Control.Lens hiding (op, (&))
4444import "monad-logger" Control.Monad.Logger
4545import qualified Data.Map.Lazy as Map
4646import qualified Language.PureScript as P
47+ import Language.PureScript.Docs.Convert.Single (convertComments )
4748import Language.PureScript.Externs
4849import Language.PureScript.Ide.Externs
4950import Language.PureScript.Ide.Reexports
@@ -199,6 +200,7 @@ populateVolatileStateSTM ref = do
199200 moduleDeclarations
200201 & map resolveDataConstructorsForModule
201202 & resolveLocations asts
203+ & resolveDocumentation (map fst modules)
202204 & resolveInstances externs
203205 & resolveOperators
204206 & resolveReexports reexportRefs
@@ -221,23 +223,7 @@ resolveLocationsForModule (defs, types) decls =
221223 map convertDeclaration decls
222224 where
223225 convertDeclaration :: IdeDeclarationAnn -> IdeDeclarationAnn
224- convertDeclaration (IdeDeclarationAnn ann d) = case d of
225- IdeDeclValue v ->
226- annotateFunction (v ^. ideValueIdent) (IdeDeclValue v)
227- IdeDeclType t ->
228- annotateType (t ^. ideTypeName . properNameT) (IdeDeclType t)
229- IdeDeclTypeSynonym s ->
230- annotateType (s ^. ideSynonymName . properNameT) (IdeDeclTypeSynonym s)
231- IdeDeclDataConstructor dtor ->
232- annotateValue (dtor ^. ideDtorName . properNameT) (IdeDeclDataConstructor dtor)
233- IdeDeclTypeClass tc ->
234- annotateType (tc ^. ideTCName . properNameT) (IdeDeclTypeClass tc)
235- IdeDeclValueOperator operator ->
236- annotateValue (operator ^. ideValueOpName . opNameT) (IdeDeclValueOperator operator)
237- IdeDeclTypeOperator operator ->
238- annotateType (operator ^. ideTypeOpName . opNameT) (IdeDeclTypeOperator operator)
239- IdeDeclKind i ->
240- annotateKind (i ^. properNameT) (IdeDeclKind i)
226+ convertDeclaration (IdeDeclarationAnn ann d) = convertDeclaration' annotateFunction annotateValue annotateType annotateKind d
241227 where
242228 annotateFunction x = IdeDeclarationAnn (ann { _annLocation = Map. lookup (IdeNamespaced IdeNSValue (P. runIdent x)) defs
243229 , _annTypeAnnotation = Map. lookup x types
@@ -246,6 +232,71 @@ resolveLocationsForModule (defs, types) decls =
246232 annotateType x = IdeDeclarationAnn (ann {_annLocation = Map. lookup (IdeNamespaced IdeNSType x) defs})
247233 annotateKind x = IdeDeclarationAnn (ann {_annLocation = Map. lookup (IdeNamespaced IdeNSKind x) defs})
248234
235+ convertDeclaration'
236+ :: (P. Ident -> IdeDeclaration -> IdeDeclarationAnn )
237+ -> (Text -> IdeDeclaration -> IdeDeclarationAnn )
238+ -> (Text -> IdeDeclaration -> IdeDeclarationAnn )
239+ -> (Text -> IdeDeclaration -> IdeDeclarationAnn )
240+ -> IdeDeclaration
241+ -> IdeDeclarationAnn
242+ convertDeclaration' annotateFunction annotateValue annotateType annotateKind d =
243+ case d of
244+ IdeDeclValue v ->
245+ annotateFunction (v ^. ideValueIdent) d
246+ IdeDeclType t ->
247+ annotateType (t ^. ideTypeName . properNameT) d
248+ IdeDeclTypeSynonym s ->
249+ annotateType (s ^. ideSynonymName . properNameT) d
250+ IdeDeclDataConstructor dtor ->
251+ annotateValue (dtor ^. ideDtorName . properNameT) d
252+ IdeDeclTypeClass tc ->
253+ annotateType (tc ^. ideTCName . properNameT) d
254+ IdeDeclValueOperator operator ->
255+ annotateValue (operator ^. ideValueOpName . opNameT) d
256+ IdeDeclTypeOperator operator ->
257+ annotateType (operator ^. ideTypeOpName . opNameT) d
258+ IdeDeclKind i ->
259+ annotateKind (i ^. properNameT) d
260+
261+ resolveDocumentation
262+ :: ModuleMap P. Module
263+ -> ModuleMap [IdeDeclarationAnn ]
264+ -> ModuleMap [IdeDeclarationAnn ]
265+ resolveDocumentation modules =
266+ Map. mapWithKey (\ mn decls ->
267+ maybe decls (flip resolveDocumentationForModule decls) (Map. lookup mn modules))
268+
269+ resolveDocumentationForModule
270+ :: P. Module
271+ -> [IdeDeclarationAnn ]
272+ -> [IdeDeclarationAnn ]
273+ resolveDocumentationForModule (P. Module _ _ _ sdecls _) decls = map convertDecl decls
274+ where
275+ comments :: Map P. Name [P. Comment ]
276+ comments = Map. fromListWith (flip (<>) ) $ mapMaybe (\ d ->
277+ case name d of
278+ Just name' -> Just (name', snd $ P. declSourceAnn d)
279+ _ -> Nothing )
280+ sdecls
281+
282+ name :: P. Declaration -> Maybe P. Name
283+ name (P. TypeDeclaration d) = Just $ P. IdentName $ P. tydeclIdent d
284+ name decl = P. declName decl
285+
286+ convertDecl :: IdeDeclarationAnn -> IdeDeclarationAnn
287+ convertDecl (IdeDeclarationAnn ann d) =
288+ convertDeclaration'
289+ (annotateValue . P. IdentName )
290+ (annotateValue . P. IdentName . P. Ident )
291+ (annotateValue . P. TyName . P. ProperName )
292+ (annotateValue . P. KiName . P. ProperName )
293+ d
294+ where
295+ docs :: P. Name -> Text
296+ docs ident = fromMaybe " " $ convertComments =<< Map. lookup ident comments
297+
298+ annotateValue ident = IdeDeclarationAnn (ann { _annDocumentation = Just $ docs ident })
299+
249300resolveInstances
250301 :: ModuleMap P. ExternsFile
251302 -> ModuleMap [IdeDeclarationAnn ]
0 commit comments