proteome 0.3.10.0 → 0.3.11.0
raw patch · 10 files changed
+181/−27 lines, 10 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Proteome.BufEnter: bufEnter :: Proteome ()
+ Proteome.Project: allProjects :: Proteome [Project]
+ Ribosome.Api.Buffer: buflisted :: Buffer -> Neovim e Bool
- Proteome.Data.Env: _errors :: HasEnv c_atAB => Lens' c_atAB Errors
+ Proteome.Data.Env: _errors :: HasEnv c_atF8 => Lens' c_atF8 Errors
- Proteome.Data.Env: _mainProject :: HasEnv c_atAB => Lens' c_atAB Project
+ Proteome.Data.Env: _mainProject :: HasEnv c_atF8 => Lens' c_atF8 Project
- Proteome.Data.Env: _projects :: HasEnv c_atAB => Lens' c_atAB [Project]
+ Proteome.Data.Env: _projects :: HasEnv c_atF8 => Lens' c_atF8 [Project]
- Proteome.Data.Project: _lang :: HasProject c_apZV => Lens' c_apZV (Maybe ProjectLang)
+ Proteome.Data.Project: _lang :: HasProject c_aq4s => Lens' c_aq4s (Maybe ProjectLang)
- Proteome.Data.Project: _meta :: HasProject c_apZV => Lens' c_apZV ProjectMetadata
+ Proteome.Data.Project: _meta :: HasProject c_aq4s => Lens' c_aq4s ProjectMetadata
Files
- lib/Proteome/BufEnter.hs +30/−0
- lib/Proteome/PersistBuffers.hs +2/−2
- lib/Proteome/Plugin.hs +17/−2
- lib/Proteome/Project.hs +14/−0
- lib/Ribosome/Api/Buffer.hs +11/−1
- proteome.cabal +6/−2
- test/u/AddSpec.hs +3/−20
- test/u/MultiSpec.hs +49/−0
- test/u/Project.hs +48/−0
- test/u/SpecMain.hs +1/−0
+ lib/Proteome/BufEnter.hs view
@@ -0,0 +1,30 @@+module Proteome.BufEnter(+ bufEnter,+) where++import Data.List (intercalate)+import Data.Maybe (maybeToList)+import System.FilePath ((</>))+import Neovim (buffer_set_option', Neovim, vim_get_current_buffer', toObject)+import Ribosome.Config.Setting (setting)+import Proteome.Data.Proteome (Proteome)+import Proteome.Data.Project (Project(Project), ProjectMetadata(DirProject), ProjectRoot(ProjectRoot))+import Proteome.Project (allProjects)+import Proteome.Settings (tagsFileName)++setBufferTags :: [String] -> Neovim e ()+setBufferTags tags = do+ buf <- vim_get_current_buffer'+ buffer_set_option' buf "tags" (toObject $ intercalate "," tags)++projectRoot :: Project -> Maybe FilePath+projectRoot (Project (DirProject _ (ProjectRoot root) _) _ _ _) = Just root+projectRoot _ = Nothing++bufEnter :: Proteome ()+bufEnter = do+ pros <- allProjects+ name <- setting tagsFileName+ let roots = pros >>= maybeToList . projectRoot+ let tags = fmap (</> name) roots+ setBufferTags tags
lib/Proteome/PersistBuffers.hs view
@@ -15,7 +15,7 @@ import System.Directory (doesFileExist) import System.FilePath ((</>)) import Neovim (vim_get_current_buffer', vim_get_buffers', buffer_get_name', vim_command')-import Ribosome.Api.Buffer (edit)+import Ribosome.Api.Buffer (edit, buflisted) import Ribosome.Persist (persistStore, persistLoad) import Ribosome.Data.Ribo (lockOrSkip) import Proteome.Data.Proteome (Proteome)@@ -52,7 +52,7 @@ activeName <- buffer_get_name' active activeIsFile <- liftIO $ doesFileExist activeName let current' = if activeIsFile then Just activeName else Nothing- all' <- vim_get_buffers' >>= traverse buffer_get_name'+ all' <- vim_get_buffers' >>= filterM buflisted >>= traverse buffer_get_name' files <- liftIO $ filterM doesFileExist all' persistStore (path </> "buffers") (PersistBuffers current' files)
lib/Proteome/Plugin.hs view
@@ -1,12 +1,25 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-} module Proteome.Plugin( plugin, ) where +import Data.Default.Class (Default(def)) import UnliftIO.STM (TVar)-import Neovim (Plugin(..), function', Neovim, StartupConfig, NeovimConfig, NeovimPlugin, Synchronous(..), wrapPlugin)+import Neovim (+ Plugin(..),+ function',+ autocmd,+ Neovim,+ StartupConfig,+ NeovimConfig,+ NeovimPlugin,+ Synchronous(..),+ wrapPlugin,+ acmdGroup+ ) import Ribosome.Data.Ribosome (Ribosome, newRibosome) import Proteome.Init (proteomePoll, proteomeStage1, proteomeStage2, proteomeStage4, initialize) import Proteome.Data.Env (Env)@@ -14,6 +27,7 @@ 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 =@@ -27,7 +41,8 @@ $(function' 'proAdd) Async, $(function' 'proSave) Async, $(function' 'proTags) Async,- $(function' 'proReadConfig) Sync+ $(function' 'proReadConfig) Sync,+ $(autocmd 'bufEnter) "BufEnter" def { acmdGroup = Just "proteome" } ] }
+ lib/Proteome/Project.hs view
@@ -0,0 +1,14 @@+module Proteome.Project(+ allProjects,+) where++import qualified Ribosome.Data.Ribo as Ribo (inspect)+import Proteome.Data.Proteome (Proteome)+import Proteome.Data.Project (Project)+import Proteome.Data.Env (Env(mainProject, projects))++allProjects :: Proteome [Project]+allProjects = do+ main <- Ribo.inspect mainProject+ extra <- Ribo.inspect projects+ return $ main : extra
lib/Ribosome/Api/Buffer.hs view
@@ -1,9 +1,19 @@ module Ribosome.Api.Buffer( edit,+ buflisted, ) where -import Neovim (vim_command')+import Neovim (Neovim, vim_command', Buffer, NvimObject(..), vim_call_function', Object, buffer_get_number') import Ribosome.Data.Ribo (Ribo) edit :: FilePath -> Ribo e () edit path = vim_command' $ "silent! edit " ++ path++nvimCallBool :: String -> [Object] -> Neovim e Bool+nvimCallBool fun args =+ vim_call_function' fun args >>= fromObject'++buflisted :: Buffer -> Neovim e Bool+buflisted buf = do+ num <- buffer_get_number' buf+ nvimCallBool "buflisted" [toObject num]
proteome.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 5fba2c152bddc90f0d4e9642ee33b0cd2b1591db5f4aec89a3d3558ef9c00e17+-- hash: d351a462fd991c12f14990526d369c7f0c7e0497ef67def82fa7175b6b2a1f82 name: proteome-version: 0.3.10.0+version: 0.3.11.0 synopsis: neovim project manager description: Please see the README on GitHub at <https://github.com/tek/proteome-hs> category: Neovim@@ -29,6 +29,7 @@ library exposed-modules: Proteome.Add+ Proteome.BufEnter Proteome.Config Proteome.Data.AddOptions Proteome.Data.Env@@ -40,6 +41,7 @@ Proteome.Log Proteome.PersistBuffers Proteome.Plugin+ Proteome.Project Proteome.Project.Resolve Proteome.Save Proteome.Settings@@ -190,8 +192,10 @@ other-modules: AddSpec Config+ MultiSpec PersistLoadSpec PersistStoreSpec+ Project ResolveSpec TagsSpec Paths_proteome
test/u/AddSpec.hs view
@@ -15,9 +15,6 @@ import Proteome.Data.Env (projects) import Proteome.Data.AddOptions (AddOptions(AddOptions)) import Proteome.Data.Project (- ProjectName(ProjectName),- ProjectType(ProjectType),- ProjectLang(ProjectLang), ProjectRoot(ProjectRoot), ProjectMetadata(DirProject), Project(Project),@@ -25,30 +22,16 @@ import qualified Proteome.Settings as S (projectBaseDirs) import Proteome.Test.Unit (specWithDef) import Config (vars)--flag :: String-flag = "flagellum"--hask :: String-hask = "haskell"--n :: ProjectName-n = ProjectName flag--tp :: ProjectType-tp = ProjectType hask--l :: ProjectLang-l = ProjectLang hask+import Project (flag, hask, fn, tp, l) addSpec :: Proteome () addSpec = do projectsDir <- fixture "projects" updateSetting S.projectBaseDirs [projectsDir]- proAdd $ AddOptions n tp+ proAdd $ AddOptions fn tp ps <- Ribo.inspect projects let root = projectsDir </> hask </> flag- liftIO $ assertEqual [Project (DirProject n (ProjectRoot root) (Just tp)) [] (Just l) []] ps+ liftIO $ assertEqual [Project (DirProject fn (ProjectRoot root) (Just tp)) [] (Just l) []] ps test_add :: IO () test_add = vars >>= specWithDef addSpec
+ test/u/MultiSpec.hs view
@@ -0,0 +1,49 @@+{-# OPTIONS_GHC -F -pgmF htfpp #-}++module MultiSpec(+ htf_thisModulesTests+) where++import Control.Monad.IO.Class (liftIO)+import System.FilePath ((</>))+import System.Directory (doesFileExist)+import Test.Framework+import Neovim (fromObject', vim_get_current_buffer', buffer_get_option')+import Ribosome.Config.Setting (updateSetting)+import Ribosome.Test.Unit (tempDir)+import Proteome.Data.Proteome (Proteome)+import Proteome.Add (proAdd)+import Proteome.Data.AddOptions (AddOptions(AddOptions))+import qualified Proteome.Settings as S (projectBaseDirs)+import Proteome.Tags (proTags)+import Proteome.Test.Unit (specWithDef)+import Proteome.BufEnter (bufEnter)+import qualified Proteome.Settings as PS (tagsCommand, tagsArgs, tagsFork)+import Config (vars)+import Project (flag, cil, hask, cn, fn, tp, createTestProject)++multiSpec :: Proteome ()+multiSpec = do+ projectsDir <- tempDir "multi/projects"+ updateSetting S.projectBaseDirs [projectsDir]+ createTestProject tp fn+ createTestProject tp cn+ updateSetting PS.tagsCommand "touch"+ updateSetting PS.tagsArgs ".tags"+ updateSetting PS.tagsFork False+ proAdd $ AddOptions fn tp+ proAdd $ AddOptions cn tp+ proTags+ bufEnter+ let ftags = projectsDir </> hask </> flag </> ".tags"+ let ctags = projectsDir </> hask </> cil </> ".tags"+ ftagsExists <- liftIO $ doesFileExist ftags+ ctagsExists <- liftIO $ doesFileExist ctags+ buf <- vim_get_current_buffer'+ tags <- buffer_get_option' buf "tags" >>= fromObject'+ liftIO $ assertEqual ftagsExists True+ liftIO $ assertEqual ctagsExists True+ liftIO $ assertEqual (ftags ++ "," ++ ctags) tags++test_multi :: IO ()+test_multi = vars >>= specWithDef multiSpec
+ test/u/Project.hs view
@@ -0,0 +1,48 @@+module Project(+ flag,+ hask,+ cn,+ tp,+ l,+ fn,+ cil,+ createTestProject,+) where++import Control.Monad.IO.Class (liftIO)+import System.FilePath ((</>))+import System.Directory (createDirectoryIfMissing)+import Ribosome.Config.Setting (setting)+import Ribosome.Data.Ribo (Ribo)+import qualified Proteome.Settings as S (projectBaseDirs)+import Proteome.Data.Project (+ ProjectName(ProjectName),+ ProjectType(ProjectType),+ ProjectLang(ProjectLang),+ )++flag :: String+flag = "flagellum"++hask :: String+hask = "haskell"++cil :: String+cil = "cilia"++fn :: ProjectName+fn = ProjectName flag++cn :: ProjectName+cn = ProjectName cil++tp :: ProjectType+tp = ProjectType hask++l :: ProjectLang+l = ProjectLang hask++createTestProject :: ProjectType -> ProjectName -> Ribo e ()+createTestProject (ProjectType tpe) (ProjectName name) = do+ bases <- setting S.projectBaseDirs+ liftIO $ createDirectoryIfMissing True (head bases </> tpe </> name)
test/u/SpecMain.hs view
@@ -7,6 +7,7 @@ import {-@ HTF_TESTS @-} PersistLoadSpec import {-@ HTF_TESTS @-} PersistStoreSpec import {-@ HTF_TESTS @-} AddSpec+import {-@ HTF_TESTS @-} MultiSpec import Test.Framework import Test.Framework.BlackBoxTest ()