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 ]