@@ -20,19 +20,20 @@ import Neovim.Classes
20
20
21
21
import Control.Applicative
22
22
import Control.Monad.Except
23
- import qualified Data.ByteString as B
24
- import Data.Map (Map )
25
- import qualified Data.Map as Map
23
+ import qualified Data.ByteString as B
24
+ import Data.Map (Map )
25
+ import qualified Data.Map as Map
26
26
import Data.MessagePack
27
27
import Data.Monoid
28
28
import Data.Serialize
29
- import System.IO (hClose )
29
+ import Neovim.Compat.Megaparsec as P
30
+ import System.IO (hClose )
30
31
import System.Process
31
- import Neovim.Compat.Megaparsec as P
32
- import Text.PrettyPrint.ANSI.Leijen ( Doc )
33
- import qualified Text.PrettyPrint.ANSI.Leijen as P
34
- import UnliftIO.Exception ( SomeException ,
35
- bracket , catch )
32
+ import UnliftIO.Exception ( SomeException ,
33
+ bracket , catch )
34
+
35
+ import Data.Text.Prettyprint.Doc ( Doc , Pretty ( .. ), (<+>) )
36
+ import Data.Text.Prettyprint.Doc.Render.Terminal ( AnsiStyle )
36
37
37
38
import Prelude
38
39
@@ -80,10 +81,10 @@ data NeovimAPI
80
81
deriving (Show )
81
82
82
83
-- | Run @nvim --api-info@ and parse its output.
83
- parseAPI :: IO (Either Doc NeovimAPI )
84
- parseAPI = either (Left . P. text ) extractAPI <$> (decodeAPI `catch` readFromAPIFile)
84
+ parseAPI :: IO (Either ( Doc AnsiStyle ) NeovimAPI )
85
+ parseAPI = either (Left . pretty ) extractAPI <$> (decodeAPI `catch` readFromAPIFile)
85
86
86
- extractAPI :: Object -> Either Doc NeovimAPI
87
+ extractAPI :: Object -> Either ( Doc AnsiStyle ) NeovimAPI
87
88
extractAPI apiObj = fromObject apiObj >>= \ apiMap -> NeovimAPI
88
89
<$> extractErrorTypes apiMap
89
90
<*> extractCustomTypes apiMap
@@ -112,43 +113,43 @@ decodeAPI = bracket queryNeovimAPI clean $ \(out, _) ->
112
113
terminateProcess ph
113
114
114
115
115
- oLookup :: (NvimObject o ) => String -> Map String Object -> Either Doc o
116
+ oLookup :: (NvimObject o ) => String -> Map String Object -> Either ( Doc AnsiStyle ) o
116
117
oLookup qry = maybe throwErrorMessage fromObject . Map. lookup qry
117
118
where
118
- throwErrorMessage = throwError . P. text $ " No entry for: " <> show qry
119
+ throwErrorMessage = throwError $ " No entry for:" <+> pretty qry
119
120
120
121
121
- oLookupDefault :: (NvimObject o ) => o -> String -> Map String Object -> Either Doc o
122
+ oLookupDefault :: (NvimObject o ) => o -> String -> Map String Object -> Either ( Doc AnsiStyle ) o
122
123
oLookupDefault d qry m = maybe (return d) fromObject $ Map. lookup qry m
123
124
124
125
125
- extractErrorTypes :: Map String Object -> Either Doc [(String , Int64 )]
126
+ extractErrorTypes :: Map String Object -> Either ( Doc AnsiStyle ) [(String , Int64 )]
126
127
extractErrorTypes objAPI = extractTypeNameAndID =<< oLookup " error_types" objAPI
127
128
128
129
129
- extractTypeNameAndID :: Object -> Either Doc [(String , Int64 )]
130
+ extractTypeNameAndID :: Object -> Either ( Doc AnsiStyle ) [(String , Int64 )]
130
131
extractTypeNameAndID m = do
131
132
types <- Map. toList <$> fromObject m
132
133
forM types $ \ (errName, idMap) -> do
133
134
i <- oLookup " id" idMap
134
135
return (errName,i)
135
136
136
137
137
- extractCustomTypes :: Map String Object -> Either Doc [(String , Int64 )]
138
+ extractCustomTypes :: Map String Object -> Either ( Doc AnsiStyle ) [(String , Int64 )]
138
139
extractCustomTypes objAPI = extractTypeNameAndID =<< oLookup " types" objAPI
139
140
140
141
141
- extractFunctions :: Map String Object -> Either Doc [NeovimFunction ]
142
+ extractFunctions :: Map String Object -> Either ( Doc AnsiStyle ) [NeovimFunction ]
142
143
extractFunctions objAPI = mapM extractFunction =<< oLookup " functions" objAPI
143
144
144
145
145
- toParameterlist :: [(String , String )] -> Either Doc [(NeovimType , String )]
146
+ toParameterlist :: [(String , String )] -> Either ( Doc AnsiStyle ) [(NeovimType , String )]
146
147
toParameterlist ps = forM ps $ \ (t,n) -> do
147
148
t' <- parseType t
148
149
return (t', n)
149
150
150
151
151
- extractFunction :: Map String Object -> Either Doc NeovimFunction
152
+ extractFunction :: Map String Object -> Either ( Doc AnsiStyle ) NeovimFunction
152
153
extractFunction funDefMap = NeovimFunction
153
154
<$> (oLookup " name" funDefMap)
154
155
<*> (oLookup " parameters" funDefMap >>= toParameterlist)
@@ -157,8 +158,8 @@ extractFunction funDefMap = NeovimFunction
157
158
<*> (oLookup " return_type" funDefMap >>= parseType)
158
159
159
160
160
- parseType :: String -> Either Doc NeovimType
161
- parseType s = either (throwError . P. text . show ) return $ parse (pType <* eof) s s
161
+ parseType :: String -> Either ( Doc AnsiStyle ) NeovimType
162
+ parseType s = either (throwError . pretty . show ) return $ parse (pType <* eof) s s
162
163
163
164
164
165
pType :: P. Parser NeovimType
0 commit comments