packages feed

proteome 0.3.2.0 → 0.3.3.0

raw patch · 22 files changed

+355/−101 lines, 22 filesdep +aesondep +bytestringPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: aeson, bytestring

API changes (from Hackage documentation)

- Ribosome.Config.Settings: Setting :: String -> Bool -> Maybe a -> Setting a
- Ribosome.Config.Settings: [fallback] :: Setting a -> Maybe a
- Ribosome.Config.Settings: [name] :: Setting a -> String
- Ribosome.Config.Settings: [prefix] :: Setting a -> Bool
- Ribosome.Config.Settings: data Setting a
- Ribosome.Config.Settings: setting :: NvimObject a => Setting a -> Ribo e a
- Ribosome.Config.Settings: settingE :: NvimObject a => Setting a -> Ribo e (Either String a)
- Ribosome.Config.Settings: settingVariableName :: Setting a -> Ribo e String
- Ribosome.Config.Settings: updateSetting :: NvimObject a => Setting a -> a -> Ribo e ()
+ Proteome.Env: getMainProject :: Proteome Project
+ Proteome.PersistBuffers: PersistBuffers :: Maybe FilePath -> [FilePath] -> PersistBuffers
+ Proteome.PersistBuffers: data PersistBuffers
+ Proteome.PersistBuffers: instance Data.Aeson.Types.FromJSON.FromJSON Proteome.PersistBuffers.PersistBuffers
+ Proteome.PersistBuffers: instance Data.Aeson.Types.ToJSON.ToJSON Proteome.PersistBuffers.PersistBuffers
+ Proteome.PersistBuffers: instance GHC.Classes.Eq Proteome.PersistBuffers.PersistBuffers
+ Proteome.PersistBuffers: instance GHC.Generics.Generic Proteome.PersistBuffers.PersistBuffers
+ Proteome.PersistBuffers: instance GHC.Show.Show Proteome.PersistBuffers.PersistBuffers
+ Proteome.PersistBuffers: loadBuffers :: Proteome ()
+ Proteome.PersistBuffers: storeBuffers :: Proteome ()
+ Ribosome.Api.Buffer: edit :: FilePath -> Ribo e ()
+ Ribosome.Config.Setting: Setting :: String -> Bool -> Maybe a -> Setting a
+ Ribosome.Config.Setting: [fallback] :: Setting a -> Maybe a
+ Ribosome.Config.Setting: [name] :: Setting a -> String
+ Ribosome.Config.Setting: [prefix] :: Setting a -> Bool
+ Ribosome.Config.Setting: data Setting a
+ Ribosome.Config.Setting: setting :: NvimObject a => Setting a -> Ribo e a
+ Ribosome.Config.Setting: settingE :: NvimObject a => Setting a -> Ribo e (Either String a)
+ Ribosome.Config.Setting: settingVariableName :: Setting a -> Ribo e String
+ Ribosome.Config.Setting: updateSetting :: NvimObject a => Setting a -> a -> Ribo e ()
+ Ribosome.Config.Settings: persistenceDir :: Setting FilePath
+ Ribosome.Data.Ribo: name :: Ribo e String
+ Ribosome.Persist: defaultPersistencePath :: FilePath -> IO FilePath
+ Ribosome.Persist: persistLoad :: FromJSON a => FilePath -> Ribo e (Either String a)
+ Ribosome.Persist: persistStore :: ToJSON a => FilePath -> a -> Ribo e ()
+ Ribosome.Persist: persistenceFile :: FilePath -> Ribo e FilePath
+ Ribosome.Persist: persistencePath :: FilePath -> Ribo e FilePath
+ Ribosome.Test.File: fixture :: MonadIO m => String -> FilePath -> m FilePath
+ Ribosome.Test.Unit: fixture :: MonadIO m => FilePath -> m FilePath
- Proteome.Data.Env: _errors :: HasEnv c_aroh => Lens' c_aroh Errors
+ Proteome.Data.Env: _errors :: HasEnv c_arDu => Lens' c_arDu Errors
- Proteome.Data.Env: _mainProject :: HasEnv c_aroh => Lens' c_aroh Project
+ Proteome.Data.Env: _mainProject :: HasEnv c_arDu => Lens' c_arDu Project
- Proteome.Data.Env: _projects :: HasEnv c_aroh => Lens' c_aroh [Project]
+ Proteome.Data.Env: _projects :: HasEnv c_arDu => Lens' c_arDu [Project]
- Proteome.Data.Project: _lang :: HasProject c_anLN => Lens' c_anLN (Maybe ProjectLang)
+ Proteome.Data.Project: _lang :: HasProject c_ao10 => Lens' c_ao10 (Maybe ProjectLang)
- Proteome.Data.Project: _meta :: HasProject c_anLN => Lens' c_anLN ProjectMetadata
+ Proteome.Data.Project: _meta :: HasProject c_ao10 => Lens' c_ao10 ProjectMetadata
- Ribosome.Test.File: tempDir :: String -> FilePath -> Neovim e FilePath
+ Ribosome.Test.File: tempDir :: MonadIO m => String -> FilePath -> m FilePath

Files

lib/Proteome/Config.hs view
@@ -19,8 +19,6 @@ import Neovim (NvimObject(..), Dictionary, Object(ObjectMap), vim_command') import Ribosome.Data.Ribo (Ribo) import Ribosome.Internal.NvimObject (extractObject)-import qualified Ribosome.Data.Ribo as Ribo (inspect)-import qualified Proteome.Data.Env as Env (mainProject) import Proteome.Data.Project (   Project(Project, types),   ProjectType(ProjectType, projectType),@@ -29,6 +27,7 @@   ProjectMetadata(DirProject),   ) import Proteome.Data.Proteome+import Proteome.Env (getMainProject)  data ProjectConfig =   ProjectConfig {@@ -80,6 +79,6 @@  proReadConfig :: Proteome () proReadConfig = do-  main <- Ribo.inspect Env.mainProject+  main <- getMainProject   readConfig "project" main   readConfig "project_after" main
lib/Proteome/Data/Env.hs view
@@ -10,7 +10,7 @@ import Control.Lens (makeClassy_) import Data.Default.Class (Default(def)) import Ribosome.Data.Errors (Errors)-import Proteome.Data.Project+import Proteome.Data.Project(Project)  data Env = Env {   mainProject :: Project,
+ lib/Proteome/Env.hs view
@@ -0,0 +1,12 @@+module Proteome.Env(+  getMainProject,+) where++import qualified Ribosome.Data.Ribo as Ribo (inspect)+import qualified Proteome.Data.Env as Env (mainProject)+import Proteome.Data.Project(Project)+import Proteome.Data.Proteome (Proteome)++getMainProject :: Proteome Project+getMainProject =+  Ribo.inspect Env.mainProject
lib/Proteome/Init.hs view
@@ -12,7 +12,7 @@ import Control.Monad.IO.Class (MonadIO) import Neovim (Neovim) import UnliftIO.STM (TVar, newTVarIO)-import Ribosome.Config.Settings (setting, settingE, updateSetting)+import Ribosome.Config.Setting (setting, settingE, updateSetting) import Ribosome.Data.Ribo (Ribo) import qualified Ribosome.Data.Ribo as Ribo (inspect) import Ribosome.Data.Ribosome (Ribosome(Ribosome))
+ lib/Proteome/PersistBuffers.hs view
@@ -0,0 +1,78 @@+{-# LANGUAGE DeriveGeneric #-}++module Proteome.PersistBuffers(+  loadBuffers,+  storeBuffers,+  PersistBuffers(PersistBuffers),+) where++import GHC.Generics+import Control.Monad (filterM)+import Control.Monad.IO.Class (liftIO)+import Data.Aeson (ToJSON(toEncoding), FromJSON, genericToEncoding, defaultOptions)+import Data.Foldable (traverse_)+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.Persist (persistStore, persistLoad)+import Proteome.Data.Proteome (Proteome)+import Proteome.Data.Project (+  Project(Project),+  ProjectMetadata(DirProject),+  ProjectName(ProjectName),+  ProjectType(ProjectType)+  )+import Proteome.Env (getMainProject)++data PersistBuffers =+  PersistBuffers {+    current :: Maybe FilePath,+    buffers :: [FilePath]+  }+  deriving (Eq, Generic, Show)++instance ToJSON PersistBuffers where+  toEncoding = genericToEncoding defaultOptions++instance FromJSON PersistBuffers++projectSubPath :: Proteome (Maybe FilePath)+projectSubPath = do+  main <- getMainProject+  return $ case main of+    Project (DirProject (ProjectName name) _ (Just (ProjectType tpe))) _ _ _ -> Just $ tpe </> name+    _ -> Nothing++storeBuffers' :: FilePath -> Proteome ()+storeBuffers' path = do+  active <- vim_get_current_buffer'+  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'+  files <- liftIO $ filterM doesFileExist all'+  persistStore (path </> "buffers") (PersistBuffers current' files)++decodePersistBuffers :: FilePath -> Proteome (Either String PersistBuffers)+decodePersistBuffers path = persistLoad (path </> "buffers")++restoreBuffers :: PersistBuffers -> Proteome ()+restoreBuffers (PersistBuffers current' buffers') = do+  traverse_ (\a -> vim_command' ("badd " ++ a)) buffers'+  mapM_ edit current'++loadBuffers' :: FilePath -> Proteome ()+loadBuffers' path = do+  pb <- decodePersistBuffers path+  mapM_ restoreBuffers pb++storeBuffers :: Proteome ()+storeBuffers = do+  sub <- projectSubPath+  mapM_ storeBuffers' sub++loadBuffers :: Proteome ()+loadBuffers = do+  sub <- projectSubPath+  mapM_ loadBuffers' sub
lib/Proteome/Settings.hs view
@@ -13,7 +13,7 @@ ) where  import Data.Default.Class (Default(def))-import Ribosome.Config.Settings+import Ribosome.Config.Setting import Proteome.Data.Project (ProjectName, ProjectType) import Proteome.Data.ProjectSpec (ProjectSpec) import Proteome.Config
lib/Proteome/Tags.hs view
@@ -12,10 +12,11 @@ import qualified Data.Map.Strict as Map (adjust) import Data.Maybe (maybeToList) import Data.String.Utils (replace)-import System.Process (readProcessWithExitCode)+import System.Process (readCreateProcessWithExitCode)+import qualified System.Process as Proc (proc, CreateProcess(cwd)) import System.FilePath ((</>))-import System.Directory (setCurrentDirectory, doesFileExist, removePathForcibly)-import Ribosome.Config.Settings (setting)+import System.Directory (doesFileExist, removePathForcibly)+import Ribosome.Config.Setting (setting) import qualified Ribosome.Data.Ribo as Ribo (inspect, modify) import Ribosome.Data.Errors (Errors(Errors), Error(Error), ComponentName(ComponentName)) import Ribosome.Internal.IO (forkNeovim)@@ -65,9 +66,8 @@  executeTags :: ProjectRoot -> String -> String -> Proteome () executeTags (ProjectRoot root) cmd args = do-  liftIO $ setCurrentDirectory root   deleteTags (ProjectRoot root)-  (exitcode, _, stderr) <- liftIO $ readProcessWithExitCode cmd [args] ""+  (exitcode, _, stderr) <- liftIO $ readCreateProcessWithExitCode ((Proc.proc cmd [args]) { Proc.cwd = (Just root) }) ""   case exitcode of     ExitSuccess -> return ()     ExitFailure _ -> notifyError stderr
+ lib/Ribosome/Api/Buffer.hs view
@@ -0,0 +1,9 @@+module Ribosome.Api.Buffer(+  edit,+) where++import Neovim (vim_command')+import Ribosome.Data.Ribo (Ribo)++edit :: FilePath -> Ribo e ()+edit path = vim_command' $ "edit " ++ path
+ lib/Ribosome/Config/Setting.hs view
@@ -0,0 +1,47 @@+module Ribosome.Config.Setting(+  Setting (..),+  setting,+  settingE,+  updateSetting,+  settingVariableName,+) where++import Neovim+import Ribosome.Data.Ribo (Ribo)+import qualified Ribosome.Data.Ribosome as R (name)++data Setting a =+  Setting {+    name :: String,+    prefix :: Bool,+    fallback :: Maybe a+  }++settingVariableName :: Setting a -> Ribo e String+settingVariableName (Setting n False _) = return n+settingVariableName (Setting n True _) = do+  pluginName <- R.name <$> ask+  return $ pluginName ++ "_" ++ n++settingE :: NvimObject a => Setting a -> Ribo e (Either String a)+settingE s@(Setting _ _ fallback') = do+  varName <- settingVariableName s+  raw <- vim_get_var varName+  case raw of+    Right o -> fromObject' o+    Left a -> return $ case fallback' of+      Just fb -> Right fb+      Nothing -> Left $ show a++setting :: NvimObject a => Setting a -> Ribo e a+setting s = do+  raw <- settingE s+  case raw of+    Right o -> return o+    Left e -> fail e++updateSetting :: NvimObject a => Setting a -> a -> Ribo e ()+updateSetting s a = do+  varName <- settingVariableName s+  _ <- vim_set_var' varName (toObject a)+  return ()
lib/Ribosome/Config/Settings.hs view
@@ -1,47 +1,8 @@ module Ribosome.Config.Settings(-  Setting (..),-  setting,-  settingE,-  updateSetting,-  settingVariableName,+  persistenceDir, ) where -import Neovim-import Ribosome.Data.Ribo (Ribo)-import qualified Ribosome.Data.Ribosome as R (name)--data Setting a =-  Setting {-    name :: String,-    prefix :: Bool,-    fallback :: Maybe a-  }--settingVariableName :: Setting a -> Ribo e String-settingVariableName (Setting n False _) = return n-settingVariableName (Setting n True _) = do-  pluginName <- R.name <$> ask-  return $ pluginName ++ "_" ++ n--settingE :: NvimObject a => Setting a -> Ribo e (Either String a)-settingE s@(Setting _ _ fallback') = do-  varName <- settingVariableName s-  raw <- vim_get_var varName-  case raw of-    Right o -> fromObject' o-    Left a -> return $ case fallback' of-      Just fb -> Right fb-      Nothing -> Left $ show a--setting :: NvimObject a => Setting a -> Ribo e a-setting s = do-  raw <- settingE s-  case raw of-    Right o -> return o-    Left e -> fail e+import Ribosome.Config.Setting (Setting(Setting)) -updateSetting :: NvimObject a => Setting a -> a -> Ribo e ()-updateSetting s a = do-  varName <- settingVariableName s-  _ <- vim_set_var' varName (toObject a)-  return ()+persistenceDir :: Setting FilePath+persistenceDir = Setting "ribosome_persistence_dir" False Nothing
lib/Ribosome/Data/Ribo.hs view
@@ -3,12 +3,13 @@   state,   inspect,   modify,+  name, ) where  import Control.Concurrent.STM.TVar (modifyTVar) import UnliftIO.STM (TVar, atomically, readTVarIO) import Neovim (Neovim, ask)-import Ribosome.Data.Ribosome+import Ribosome.Data.Ribosome (Ribosome(Ribosome))  type Ribo e = Neovim (Ribosome e) @@ -24,3 +25,8 @@ modify f = do   Ribosome _ t <- ask   atomically $ modifyTVar t f++name :: Ribo e String+name = do+  Ribosome n _ <- ask+  return n
+ lib/Ribosome/Persist.hs view
@@ -0,0 +1,45 @@+module Ribosome.Persist(+  persistStore,+  persistenceFile,+  persistencePath,+  defaultPersistencePath,+  persistLoad,+) where++import Control.Monad.IO.Class (liftIO)+import Data.Aeson (ToJSON, FromJSON, encode, eitherDecode)+import qualified Data.ByteString.Lazy as B (writeFile, readFile)+import System.FilePath (takeDirectory, (</>))+import System.Directory (getXdgDirectory, XdgDirectory(XdgCache), createDirectoryIfMissing)+import Ribosome.Data.Ribo (Ribo)+import qualified Ribosome.Data.Ribo as Ribo (name)+import Ribosome.Config.Setting (settingE)+import qualified Ribosome.Config.Settings as S (persistenceDir)++defaultPersistencePath :: FilePath -> IO FilePath+defaultPersistencePath =+  getXdgDirectory XdgCache++persistencePath :: FilePath -> Ribo e FilePath+persistencePath path = do+  name <- Ribo.name+  let prefixed = name </> path+  custom <- settingE S.persistenceDir+  either (const $ liftIO $ defaultPersistencePath prefixed) (\c -> return $ c </> prefixed) custom++persistenceFile :: FilePath -> Ribo e FilePath+persistenceFile path = do+  file <- persistencePath path+  liftIO $ createDirectoryIfMissing True (takeDirectory file)+  return $ file ++ ".json"++persistStore :: ToJSON a => FilePath -> a -> Ribo e ()+persistStore path a = do+  file <- persistenceFile path+  liftIO $ B.writeFile file (encode a)++persistLoad :: FromJSON a => FilePath -> Ribo e (Either String a)+persistLoad path = do+  file <- persistenceFile path+  json <- liftIO $ B.readFile file+  return $ eitherDecode json
lib/Ribosome/Test/File.hs view
@@ -1,10 +1,10 @@ module Ribosome.Test.File(   tempDirIO,   tempDir,+  fixture, ) where -import Control.Monad.IO.Class (liftIO)-import Neovim (Neovim)+import Control.Monad.IO.Class (liftIO, MonadIO) import System.Directory (canonicalizePath, createDirectoryIfMissing, removePathForcibly) import System.FilePath ((</>)) @@ -22,6 +22,11 @@   createDirectoryIfMissing True absPath   return absPath -tempDir :: String -> FilePath -> Neovim e FilePath+tempDir :: MonadIO m => String -> FilePath -> m FilePath tempDir prefix path =   liftIO $ tempDirIO prefix path++fixture :: MonadIO m => String -> FilePath -> m FilePath+fixture prefix path = do+  base <- liftIO $ testDir prefix+  return $ base </> "fixtures" </> path
lib/Ribosome/Test/Unit.hs view
@@ -3,13 +3,15 @@   tempDir,   tempFile,   uPrefix,+  fixture, ) where +import Control.Monad.IO.Class (MonadIO) import System.FilePath (takeDirectory, takeFileName, (</>)) import Neovim (Neovim) import Ribosome.Data.Ribo (Ribo) import Ribosome.Test.Embed (TestConfig(..), setupPluginEnv, unsafeEmbeddedSpec)-import qualified Ribosome.Test.File as F (tempDir)+import qualified Ribosome.Test.File as F (tempDir, fixture)  uPrefix :: String uPrefix = "u"@@ -30,3 +32,6 @@ tempFile file = do   absDir <- tempDir $ takeDirectory file   return $ absDir </> takeFileName file++fixture :: MonadIO m => FilePath -> m FilePath+fixture = F.fixture uPrefix
proteome.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: dfe077ab56d3e81349c7547c0773d7b18ddb5947b966f46296a738c0dbb6041b+-- hash: 09897d59e3c05f06870f694fdcdfcf22f8c37408bc05f4a1db0e706e0590a501  name:           proteome-version:        0.3.2.0+version:        0.3.3.0 synopsis:       neovim project manager description:    Please see the README on GitHub at <https://github.com/tek/proteome-hs> category:       Neovim@@ -34,8 +34,10 @@       Proteome.Data.Project       Proteome.Data.ProjectSpec       Proteome.Data.Proteome+      Proteome.Env       Proteome.Init       Proteome.Log+      Proteome.PersistBuffers       Proteome.Plugin       Proteome.Project.Resolve       Proteome.Save@@ -44,8 +46,10 @@       Proteome.Test.Config       Proteome.Test.Functional       Proteome.Test.Unit+      Ribosome.Api.Buffer       Ribosome.Api.Option       Ribosome.Api.Response+      Ribosome.Config.Setting       Ribosome.Config.Settings       Ribosome.Data.Errors       Ribosome.Data.Maybe@@ -55,6 +59,7 @@       Ribosome.Internal.IO       Ribosome.Internal.NvimObject       Ribosome.Log+      Ribosome.Persist       Ribosome.Test.Embed       Ribosome.Test.Exists       Ribosome.Test.File@@ -66,8 +71,10 @@       lib   build-depends:       MissingH+    , aeson     , ansi-terminal     , base >=4.7 && <5+    , bytestring     , containers     , data-default-class     , deepseq@@ -100,8 +107,10 @@   ghc-options: -threaded -rtsopts -with-rtsopts=-N   build-depends:       MissingH+    , aeson     , ansi-terminal     , base >=4.7 && <5+    , bytestring     , containers     , data-default-class     , deepseq@@ -140,8 +149,10 @@   build-depends:       HTF     , MissingH+    , aeson     , ansi-terminal     , base >=4.7 && <5+    , bytestring     , containers     , data-default-class     , deepseq@@ -171,9 +182,10 @@   main-is: SpecMain.hs   other-modules:       Config+      PersistLoadSpec+      PersistStoreSpec       ResolveSpec       TagsSpec-      TypeMapSpec       Paths_proteome   hs-source-dirs:       test/u@@ -181,8 +193,10 @@   build-depends:       HTF     , MissingH+    , aeson     , ansi-terminal     , base >=4.7 && <5+    , bytestring     , containers     , data-default-class     , deepseq
test/f/InitSpec.hs view
@@ -7,7 +7,7 @@ import Control.Monad.IO.Class (liftIO) import Test.Framework import Ribosome.Data.Ribo (Ribo)-import Ribosome.Config.Settings (setting)+import Ribosome.Config.Setting (setting) import qualified Proteome.Settings as S import Proteome.Data.Project (ProjectName(ProjectName), ProjectType(ProjectType)) import Proteome.Test.Functional (specWith)
+ test/u/PersistLoadSpec.hs view
@@ -0,0 +1,46 @@+{-# OPTIONS_GHC -F -pgmF htfpp #-}++module PersistLoadSpec(+  htf_thisModulesTests+) where++import Control.Monad.IO.Class (liftIO)+import Control.Lens (set)+import System.FilePath ((</>))+import Test.Framework+import Neovim (vim_get_buffers', vim_get_current_buffer', buffer_get_name')+import Ribosome.Config.Setting (updateSetting)+import Ribosome.Config.Settings (persistenceDir)+import qualified Ribosome.Data.Ribo as Ribo (modify)+import Ribosome.Test.Unit (fixture)+import Proteome.Data.Env (_mainProject)+import Proteome.Data.Proteome (Proteome)+import Proteome.Data.Project (+  ProjectName(..),+  ProjectRoot(..),+  ProjectType(..),+  ProjectMetadata(DirProject),+  _meta,+  )+import Proteome.PersistBuffers (loadBuffers)+import Proteome.Test.Unit (specWithDef)+import Config (vars)++main :: ProjectMetadata+main = DirProject (ProjectName "flagellum") (ProjectRoot "") (Just (ProjectType "haskell"))++loadBuffersSpec :: Proteome ()+loadBuffersSpec = do+  Ribo.modify $ set (_mainProject._meta) main+  persistDir <- fixture "persist/load"+  fixDir <- fixture "persist/store"+  updateSetting persistenceDir persistDir+  loadBuffers+  buffers <- vim_get_buffers'+  liftIO $ assertEqual (length buffers) 4+  active <- buffer_get_name' =<< vim_get_current_buffer'+  liftIO $ assertEqual active (fixDir </> "file2")++test_loadBuffers :: IO ()+test_loadBuffers =+  vars >>= specWithDef loadBuffersSpec
+ test/u/PersistStoreSpec.hs view
@@ -0,0 +1,62 @@+{-# OPTIONS_GHC -F -pgmF htfpp #-}++module PersistStoreSpec(+  htf_thisModulesTests+) where++import Control.Monad.IO.Class (liftIO)+import Control.Lens (set)+import Data.Aeson (decode)+import qualified Data.ByteString.Lazy as B (readFile)+import System.FilePath ((</>))+import Test.Framework+import Ribosome.Api.Buffer (edit)+import Ribosome.Config.Setting (updateSetting)+import Ribosome.Config.Settings (persistenceDir)+import qualified Ribosome.Data.Ribo as Ribo (modify)+import Ribosome.Test.Unit (fixture, tempDir)+import Proteome.Data.Env (_mainProject)+import Proteome.Data.Proteome (Proteome)+import Proteome.Data.Project (+  ProjectName(..),+  ProjectRoot(..),+  ProjectType(..),+  ProjectMetadata(DirProject),+  _meta,+  )+import Proteome.PersistBuffers (storeBuffers, PersistBuffers(PersistBuffers))+import Proteome.Test.Unit (specWithDef)+import Config (vars)++main :: ProjectMetadata+main = DirProject (ProjectName "flagellum") (ProjectRoot "") (Just (ProjectType "haskell"))++storeTarget :: FilePath -> FilePath -> FilePath -> PersistBuffers+storeTarget f1 f2 f3 = PersistBuffers (Just f2) [f1, f2, f3]++storeBuffersSpec :: Proteome ()+storeBuffersSpec = do+  let nonexistentFile = "nonexistent"+  base <- fixture "persist/store"+  let file1 = base </> "file1"+  let file2 = base </> "file2"+  let file3 = base </> "file3"+  edit file1+  edit file2+  edit file3+  edit $ base </> nonexistentFile+  edit file2+  persistDir <- tempDir "persist/store"+  Ribo.modify $ set (_mainProject._meta) main+  updateSetting persistenceDir persistDir+  storeBuffers+  let bufferFile = persistDir </> "proteome/haskell/flagellum/buffers.json"+  json <- liftIO $ B.readFile bufferFile+  pb <- case decode json of+    Just a -> return a+    _ -> fail "invalid json"+  liftIO $ assertEqual pb (storeTarget file1 file2 file3)++test_storeBuffers :: IO ()+test_storeBuffers =+  vars >>= specWithDef storeBuffersSpec
test/u/ResolveSpec.hs view
@@ -28,7 +28,6 @@ test_canonicalPaths :: IO () test_canonicalPaths = do   canon <- canonicalPaths paths-  print canon   assertNotEqual canon paths  root :: ProjectRoot
test/u/SpecMain.hs view
@@ -4,7 +4,8 @@  import {-@ HTF_TESTS @-} TagsSpec import {-@ HTF_TESTS @-} ResolveSpec-import {-@ HTF_TESTS @-} TypeMapSpec+import {-@ HTF_TESTS @-} PersistLoadSpec+import {-@ HTF_TESTS @-} PersistStoreSpec import Test.Framework import Test.Framework.BlackBoxTest () 
test/u/TagsSpec.hs view
@@ -9,7 +9,7 @@ import System.FilePath ((</>)) import System.Directory (doesFileExist) import Test.Framework-import Ribosome.Config.Settings (updateSetting)+import Ribosome.Config.Setting (updateSetting) import qualified Ribosome.Data.Ribo as Ribo (modify) import Ribosome.Test.Unit (tempDir) import Proteome.Data.Proteome (Proteome)
− test/u/TypeMapSpec.hs
@@ -1,35 +0,0 @@-{-# OPTIONS_GHC -F -pgmF htfpp #-}--module TypeMapSpec(-  htf_thisModulesTests-) where--import Control.Lens (set)-import Test.Framework-import qualified Ribosome.Data.Ribo as Ribo (modify)-import Ribosome.Test.Unit (tempDir)-import Proteome.Data.Proteome (Proteome)-import Proteome.Data.Env (_mainProject)-import Proteome.Data.Project (-  ProjectName(..),-  ProjectRoot(..),-  ProjectType(..),-  ProjectLang(..),-  ProjectMetadata(DirProject),-  _meta,-  _lang,-  )-import Proteome.Test.Unit (specWithDef)-import Config (vars)--main :: FilePath -> ProjectMetadata-main root = DirProject (ProjectName "flagellum") (ProjectRoot root) (Just (ProjectType "haskell"))--typeMapSpec :: Proteome ()-typeMapSpec = do-  root <- tempDir "projects/haskell/flagellum"-  Ribo.modify $ set (_mainProject._meta) (main root)-  Ribo.modify $ set (_mainProject._lang) (Just (ProjectLang "idris"))--test_typeMap :: IO ()-test_typeMap = vars >>= specWithDef typeMapSpec