{-# 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