glean-0.1.0.0: glean/glass/Glean/Glass/Pretty/LSIF.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
{-# LANGUAGE TypeApplications #-}
module Glean.Glass.Pretty.LSIF ( prettyLsifSignature ) where
import Data.Text ( Text )
import qualified Glean
import Glean.Angle as Angle
import Glean.Haxl.Repos as Glean ( RepoHaxl )
import Glean.Glass.Utils ( fetchData )
import Compat.Prettyprinter
(pretty,
layoutSmart,
LayoutOptions,
SimpleDocStream,
reAnnotateS)
import qualified Glean.Schema.Lsif.Types as LSIF
import Glean.Glass.Types ( SymbolId(..) )
prettyLsifSignature
:: LayoutOptions
-> LSIF.SomeEntity
-> Glean.RepoHaxl u w (Maybe (SimpleDocStream (Maybe SymbolId)))
prettyLsifSignature opts (LSIF.SomeEntity_defn dm) = do
LSIF.DefinitionMoniker_key{..} <- Glean.keyOf dm
text <- fetchData (definitionHover (Glean.getId definitionMoniker_key_defn))
let docStream = layoutSmart opts . pretty <$> text
return $ reAnnotateS (const Nothing) <$> docStream
prettyLsifSignature _ _ = pure Nothing
definitionHover :: Glean.IdOf LSIF.Definition -> Angle Text
definitionHover defnId = vars $ \text hoverText ->
text `where_` [
wild .= predicate @LSIF.DefinitionHover (
rec $
field @"defn" (asPredicate (factId defnId)) $
field @"hover" (
rec $
field @"text" (asPredicate hoverText)
end)
end),
hoverText .= predicate @LSIF.HoverText text
]