{-# LANGUAGE LambdaCase #-}
module Neovim.Context (
newUniqueFunctionName,
Neovim,
NeovimException (..),
exceptionToDoc,
FunctionMap,
FunctionMapEntry,
mkFunctionMap,
runNeovim,
err,
errOnInvalidResult,
restart,
quit,
subscribe,
unsubscribe,
ask,
asks,
get,
gets,
put,
modify,
Doc,
AnsiStyle,
docToText,
throwError,
module Control.Monad.IO.Class,
) where
import Neovim.Classes
import Neovim.Context.Internal (
FunctionMap,
FunctionMapEntry,
Neovim,
mkFunctionMap,
newUniqueFunctionName,
runNeovim,
subscribe,
unsubscribe,
)
import Neovim.Exceptions (NeovimException (..), exceptionToDoc)
import qualified Neovim.Context.Internal as Internal
import Control.Concurrent (putMVar)
import Control.Exception
import Control.Monad.Except
import Control.Monad.IO.Class
import Control.Monad.Reader
import Control.Monad.State
import Data.MessagePack (Object)
err :: Doc AnsiStyle -> Neovim env a
err :: forall env a. Doc AnsiStyle -> Neovim env a
err = forall a e. Exception e => e -> a
throw forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc AnsiStyle -> NeovimException
ErrorMessage
errOnInvalidResult ::
(NvimObject o) =>
Neovim env (Either NeovimException Object) ->
Neovim env o
errOnInvalidResult :: forall o env.
NvimObject o =>
Neovim env (Either NeovimException Object) -> Neovim env o
errOnInvalidResult Neovim env (Either NeovimException Object)
a =
Neovim env (Either NeovimException Object)
a forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Left NeovimException
o ->
(forall env a. Doc AnsiStyle -> Neovim env a
err forall b c a. (b -> c) -> (a -> b) -> a -> c
. NeovimException -> Doc AnsiStyle
exceptionToDoc) NeovimException
o
Right Object
o -> case forall o. NvimObject o => Object -> Either (Doc AnsiStyle) o
fromObject Object
o of
Left Doc AnsiStyle
e ->
forall env a. Doc AnsiStyle -> Neovim env a
err Doc AnsiStyle
e
Right o
x ->
forall (m :: * -> *) a. Monad m => a -> m a
return o
x
restart :: Neovim env ()
restart :: forall env. Neovim env ()
restart = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. MVar a -> a -> IO ()
putMVar StateTransition
Internal.Restart forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall env a. (Config env -> a) -> Neovim env a
Internal.asks' forall env. Config env -> MVar StateTransition
Internal.transitionTo
quit :: Neovim env ()
quit :: forall env. Neovim env ()
quit = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. MVar a -> a -> IO ()
putMVar StateTransition
Internal.Quit forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall env a. (Config env -> a) -> Neovim env a
Internal.asks' forall env. Config env -> MVar StateTransition
Internal.transitionTo