never executed always true always false
    1 module Conjure.LSP.Documentation where
    2 
    3 import Conjure.Language.Validator (RegionType (Documentation))
    4 import Conjure.Prelude
    5 import Data.ByteString.Lazy qualified as BL
    6 import Data.Text qualified as T
    7 import Data.Text.Encoding (decodeUtf8)
    8 import Language.LSP.Protocol.Types (MarkupContent (..), MarkupKind (..))
    9 import Network.HTTP.Client
   10 import Network.HTTP.Client.TLS
   11 
   12 getDocsForBuiltin :: RegionType -> IO (Maybe MarkupContent)
   13 getDocsForBuiltin (Documentation (T.unpack -> name)) = do
   14   let
   15       download = do
   16         -- create a connection manager
   17         manager <- newManager tlsManagerSettings
   18         -- create the request
   19         request <- parseRequest (readUrl name)
   20         -- make the request
   21         r <- httpLbs request manager
   22         -- get the contents (as a lazy ByteString)
   23         let contents = decodeUtf8 $ BL.toStrict $ responseBody r
   24         if contents == "404: Not Found"
   25           then return $ Just $ fallbackMsg name
   26           else
   27             return
   28               $ Just
   29               $ MarkupContent MarkupKind_Markdown
   30               $ T.concat
   31                 [ contents,
   32                   "\n\n -- \n\n",
   33                   "[Edit this doc](",
   34                   editURL name,
   35                   ")"
   36                 ]
   37 
   38       handler :: HttpException -> IO (Maybe MarkupContent)
   39       handler _ = return $ Just $ MarkupContent MarkupKind_Markdown "No internet connection"
   40 
   41   download `catch` handler
   42 
   43 getDocsForBuiltin _ = pure Nothing
   44 
   45 fallbackMsg :: String -> MarkupContent
   46 fallbackMsg n = MarkupContent MarkupKind_Markdown $ T.concat ["[Create this doc](", createURL n, ")"]
   47 
   48 branch :: String
   49 branch = "main"
   50 
   51 readUrl :: String -> String
   52 readUrl name =
   53   concat
   54     [ "https://raw.githubusercontent.com/conjure-cp/conjure/" ++ branch ++ "/docs/bits/",
   55       name,
   56       ".md"
   57     ]
   58 
   59 createURL :: String -> Text
   60 createURL name =
   61   T.pack
   62     $ concat
   63       [ "https://github.com/conjure-cp/conjure/new/" ++ branch ++ "/docs/bits?filename=",
   64         name,
   65         ".md"
   66       ]
   67 
   68 editURL :: String -> Text
   69 editURL name =
   70   T.pack
   71     $ concat
   72       [ "https://github.com/conjure-cp/conjure/edit/" ++ branch ++ "/docs/bits/",
   73         name,
   74         ".md"
   75       ]