proteome-0.3.13.0: lib/Proteome/Plugin.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Proteome.Plugin(
plugin,
)
where
import Data.Default.Class (Default(def))
import UnliftIO.STM (TVar)
import Neovim (
Plugin(..),
function,
function',
command,
autocmd,
Neovim,
StartupConfig,
NeovimConfig,
NeovimPlugin,
Synchronous(..),
wrapPlugin,
CommandOption(CmdBang),
)
import Ribosome.Data.Ribosome (Ribosome)
import Proteome.Init (proteomePoll, proteomeStage1, proteomeStage2, proteomeStage4, initialize)
import Proteome.Data.Env (Env)
import Proteome.Add (proAdd, proAddCmd)
import Proteome.Config (proReadConfig)
import Proteome.Tags (proTags)
import Proteome.Save (proSave)
import Proteome.BufEnter (bufEnter)
plugin' :: Ribosome (TVar Env) -> Plugin (Ribosome (TVar Env))
plugin' env =
Plugin {
environment = env,
exports = [
$(function' 'proteomePoll) Sync,
$(function' 'proteomeStage1) Async,
$(function' 'proteomeStage2) Async,
$(function' 'proteomeStage4) Async,
$(function "ProAddProject" 'proAdd) Sync,
$(command "ProAdd" 'proAddCmd) [CmdBang],
$(function' 'proSave) Async,
$(function' 'proTags) Async,
$(function' 'proReadConfig) Sync,
$(autocmd 'bufEnter) "BufEnter" def
]
}
plugin :: Neovim (StartupConfig NeovimConfig) NeovimPlugin
plugin = do
env <- initialize
wrapPlugin $ plugin' env