orgstat 0.1.2 → 0.1.3
raw patch · 19 files changed
+162/−170 lines, 19 filesdep ~basedep ~log-warperdep ~universum
Dependency ranges changed: base, log-warper, universum
Files
- CHANGES.md +6/−0
- orgstat.cabal +8/−6
- src/OrgStat/Ast.hs +3/−4
- src/OrgStat/CLI.hs +2/−3
- src/OrgStat/Config.hs +13/−14
- src/OrgStat/Helpers.hs +13/−17
- src/OrgStat/IO.hs +14/−14
- src/OrgStat/Logic.hs +13/−15
- src/OrgStat/Outputs.hs +5/−5
- src/OrgStat/Outputs/Block.hs +7/−8
- src/OrgStat/Outputs/Class.hs +6/−7
- src/OrgStat/Outputs/Summary.hs +8/−8
- src/OrgStat/Outputs/Timeline.hs +12/−14
- src/OrgStat/Outputs/Types.hs +5/−5
- src/OrgStat/Parser.hs +8/−8
- src/OrgStat/Scope.hs +6/−7
- src/OrgStat/Util.hs +12/−13
- src/OrgStat/WorkMonad.hs +8/−8
- src/cli/Main.hs +13/−14
CHANGES.md view
@@ -1,3 +1,9 @@+0.1.3+=====++* Updated universum to 1.7.1, universum to 0.8.0. Switched to nightly/ghc-8.2.1.++ 0.1.2 =====
orgstat.cabal view
@@ -1,5 +1,5 @@ name: orgstat-version: 0.1.2+version: 0.1.3 synopsis: Statistics visualizer for org-mode license: GPL-3 license-file: LICENSE@@ -27,9 +27,10 @@ , OrgStat.Outputs.Types , OrgStat.Util , OrgStat.WorkMonad+ , Paths_orgstat build-depends: aeson >= 0.11.2.0 , attoparsec- , base >=4.9 && <4.10+ , base >=4.9 && <4.11 , boxes >= 0.1.4 , bytestring , colour >= 2.3.3@@ -44,14 +45,14 @@ , hashable >= 1.2.4.0 , lens >= 4.14 , linear- , log-warper >= 1.3.1+ , log-warper >= 1.7.1 , mtl >= 2.2.1 , optparse-simple , orgmode-parse >= 0.2.0 , text >= 1.2.2.1 , time >= 1.6.0.1 , turtle >= 1.2.8- , universum >= 0.6.1+ , universum >= 0.8.0 , yaml >= 0.8.21.1 hs-source-dirs: src default-language: Haskell2010@@ -74,7 +75,8 @@ executable orgstat main-is: Main.hs- build-depends: base >=4.9 && <4.10+ other-modules: Paths_orgstat+ build-depends: base >=4.9 && <4.11 , bytestring , directory , exceptions@@ -99,7 +101,7 @@ , GlobalSpec build-depends: HUnit >= 1.3.1.2 , QuickCheck- , base >=4.9 && <4.10+ , base >=4.9 && <4.11 , colour >= 2.3.3 , hspec , orgstat
src/OrgStat/Ast.hs view
@@ -21,11 +21,10 @@ , mergeClocks ) where -import Control.Lens (ASetter', makeLenses)-import Data.Time (LocalTime, NominalDiffTime, diffUTCTime, localTimeToUTC,- localTimeToUTC, utc)+import Control.Lens (ASetter', makeLenses)+import Data.Time (LocalTime, NominalDiffTime, diffUTCTime, localTimeToUTC, localTimeToUTC, utc) -import Universum+import Universum ---------------------------------------------------------------------------- -- Types
src/OrgStat/CLI.hs view
@@ -5,10 +5,9 @@ , parseCommonArgs ) where -import Universum+import Universum -import Options.Applicative.Simple (Parser, help, long, metavar, strOption,- switch)+import Options.Applicative.Simple (Parser, help, long, metavar, strOption, switch) -- | Read-only arguments that inner application needs (in contrast to, -- say, logging severity).
src/OrgStat/Config.hs view
@@ -16,21 +16,20 @@ , OrgStatConfig (..) ) where -import Data.Aeson (FromJSON (..), Value (Object, String), withObject,- withText, (.!=), (.:), (.:?))-import Data.Aeson.Types (typeMismatch)-import Data.Default (def)-import Data.List.NonEmpty (NonEmpty)-import qualified Data.Text as T-import Data.Time (LocalTime)-import Data.Time.Format (defaultTimeLocale, parseTimeM)-import Universum+import Data.Aeson (FromJSON (..), Value (Object, String), withObject, withText, (.!=), (.:), (.:?))+import Data.Aeson.Types (typeMismatch)+import Data.Default (def)+import Data.List.NonEmpty (NonEmpty)+import qualified Data.Text as T+import Data.Time (LocalTime)+import Data.Time.Format (defaultTimeLocale, parseTimeM)+import Universum -import OrgStat.Outputs.Types (BlockParams, SummaryParams (..), TimelineParams,- bpMaxLength, bpUnicode, tpBackground,- tpColumnHeight, tpColumnWidth, tpLegend, tpTopDay)-import OrgStat.Scope (AstPath (..), ScopeModifier (..))-import OrgStat.Util (parseColour, (??~))+import OrgStat.Outputs.Types (BlockParams, SummaryParams (..), TimelineParams, bpMaxLength,+ bpUnicode, tpBackground, tpColumnHeight, tpColumnWidth, tpLegend,+ tpTopDay)+import OrgStat.Scope (AstPath (..), ScopeModifier (..))+import OrgStat.Util (parseColour, (??~)) -- | Exception type for everything bad that happens with config, -- starting from parsing to logic errors.
src/OrgStat/Helpers.hs view
@@ -8,25 +8,21 @@ , resolveOutput ) where -import Universum+import Universum -import Control.Lens (at, views, (.=))-import qualified Data.List.NonEmpty as NE-import Data.Time (LocalTime (..), TimeOfDay (..), addDays,- getZonedTime, toGregorian,- zonedTimeToLocalTime)-import Data.Time.Calendar (addGregorianMonthsRollOver)-import Data.Time.Calendar.WeekDate (toWeekDate)+import Control.Lens (at, views, (.=))+import qualified Data.List.NonEmpty as NE+import Data.Time (LocalTime (..), TimeOfDay (..), addDays, getZonedTime, toGregorian,+ zonedTimeToLocalTime)+import Data.Time.Calendar (addGregorianMonthsRollOver)+import Data.Time.Calendar.WeekDate (toWeekDate) -import OrgStat.Ast (Org (..), cutFromTo, mergeClocks, orgTitle)-import OrgStat.Config (ConfDate (..), ConfOutput (..),- ConfRange (..), ConfReport (..),- ConfScope (..), ConfigException (..),- OrgStatConfig (..))-import OrgStat.IO (readOrgFile)-import OrgStat.Scope (applyModifiers)-import OrgStat.WorkMonad (WorkM, wcConfig, wdReadFiles,- wdResolvedReports, wdResolvedScopes)+import OrgStat.Ast (Org (..), cutFromTo, mergeClocks, orgTitle)+import OrgStat.Config (ConfDate (..), ConfOutput (..), ConfRange (..), ConfReport (..),+ ConfScope (..), ConfigException (..), OrgStatConfig (..))+import OrgStat.IO (readOrgFile)+import OrgStat.Scope (applyModifiers)+import OrgStat.WorkMonad (WorkM, wcConfig, wdReadFiles, wdResolvedReports, wdResolvedScopes) -- | Converts config range to a pair of 'UTCTime', right bound not inclusive.
src/OrgStat/IO.hs view
@@ -7,21 +7,21 @@ , readConfig ) where -import qualified Base as Base-import qualified Data.ByteString as BS-import qualified Data.Text as T-import qualified Data.Text.IO as TIO-import Data.Yaml (decodeEither)-import System.Directory (doesFileExist)-import System.FilePath (takeBaseName, takeExtension)-import System.Wlog (WithLogger, logDebug)-import Turtle (ExitCode (..), procStrict)-import Universum+import qualified Base as Base+import qualified Data.ByteString as BS+import qualified Data.Text as T+import qualified Data.Text.IO as TIO+import Data.Yaml (decodeEither)+import System.Directory (doesFileExist)+import System.FilePath (takeBaseName, takeExtension)+import System.Wlog (WithLogger, logDebug)+import Turtle (ExitCode (..), procStrict)+import Universum -import OrgStat.Ast (Org)-import OrgStat.Config (ConfigException (ConfigParseException), OrgStatConfig)-import OrgStat.Parser (runParser)-import OrgStat.Util (dropEnd)+import OrgStat.Ast (Org)+import OrgStat.Config (ConfigException (ConfigParseException), OrgStatConfig)+import OrgStat.Parser (runParser)+import OrgStat.Util (dropEnd) data OrgIOException = OrgIOException Text
src/OrgStat/Logic.hs view
@@ -6,23 +6,21 @@ ( runOrgStat ) where -import Universum+import Universum -import Control.Lens (views)-import qualified Data.Text as T-import Data.Time (defaultTimeLocale, formatTime, getZonedTime)-import System.Directory (createDirectoryIfMissing)-import System.FilePath ((</>))-import System.Wlog (logDebug, logInfo)-import Turtle (shell)+import Control.Lens (views)+import qualified Data.Text as T+import Data.Time (defaultTimeLocale, formatTime, getZonedTime)+import System.Directory (createDirectoryIfMissing)+import System.FilePath ((</>))+import System.Wlog (logDebug, logInfo)+import Turtle (shell) -import OrgStat.CLI (CommonArgs (..))-import OrgStat.Config (ConfOutput (..), ConfOutputType (..),- OrgStatConfig (..))-import OrgStat.Helpers (resolveOutput, resolveReport)-import OrgStat.Outputs (genBlockOutput, genSummaryOutput, processTimeline,- tpColorSalt, writeReport)-import OrgStat.WorkMonad (WorkM, wcCommonArgs, wcConfig)+import OrgStat.CLI (CommonArgs (..))+import OrgStat.Config (ConfOutput (..), ConfOutputType (..), OrgStatConfig (..))+import OrgStat.Helpers (resolveOutput, resolveReport)+import OrgStat.Outputs (genBlockOutput, genSummaryOutput, processTimeline, tpColorSalt, writeReport)+import OrgStat.WorkMonad (WorkM, wcCommonArgs, wcConfig) -- | Main application logic. runOrgStat :: WorkM ()
src/OrgStat/Outputs.hs view
@@ -4,8 +4,8 @@ ( module Exports ) where -import OrgStat.Outputs.Block as Exports-import OrgStat.Outputs.Class as Exports-import OrgStat.Outputs.Summary as Exports-import OrgStat.Outputs.Timeline as Exports-import OrgStat.Outputs.Types as Exports+import OrgStat.Outputs.Block as Exports+import OrgStat.Outputs.Class as Exports+import OrgStat.Outputs.Summary as Exports+import OrgStat.Outputs.Timeline as Exports+import OrgStat.Outputs.Types as Exports
src/OrgStat/Outputs/Block.hs view
@@ -5,16 +5,15 @@ ( genBlockOutput ) where -import Universum-import Unsafe (unsafeLast)+import Universum+import Unsafe (unsafeLast) -import qualified Data.Text as T-import Text.PrettyPrint.Boxes (center1, hsep, left, render, right, text, vcat)+import qualified Data.Text as T+import Text.PrettyPrint.Boxes (center1, hsep, left, render, right, text, vcat) -import OrgStat.Ast (Org, filterHasClock, orgSubtrees, orgTitle,- orgTotalDuration)-import OrgStat.Outputs.Types (BlockOutput (..), BlockParams (..))-import OrgStat.Util (dropEnd, timeF)+import OrgStat.Ast (Org, filterHasClock, orgSubtrees, orgTitle, orgTotalDuration)+import OrgStat.Outputs.Types (BlockOutput (..), BlockParams (..))+import OrgStat.Util (dropEnd, timeF) data BlockFrames = BlockFrames { bfAngle1 :: Text
src/OrgStat/Outputs/Class.hs view
@@ -4,15 +4,14 @@ ( ReportOutput (..) ) where -import Universum+import Universum -import qualified Data.Text.IO as T-import qualified Diagrams.Backend.SVG as DB-import qualified Diagrams.Prelude as D-import System.FilePath (replaceExtension)+import qualified Data.Text.IO as T+import qualified Diagrams.Backend.SVG as DB+import qualified Diagrams.Prelude as D+import System.FilePath (replaceExtension) -import OrgStat.Outputs.Types (BlockOutput (..), SummaryOutput (..),- TimelineOutput (..))+import OrgStat.Outputs.Types (BlockOutput (..), SummaryOutput (..), TimelineOutput (..)) -- | Things that reporters output an what we can do with them. class ReportOutput a where
src/OrgStat/Outputs/Summary.hs view
@@ -4,17 +4,17 @@ ( genSummaryOutput ) where -import Universum+import Universum -import Control.Lens (views)+import Control.Lens (views) import qualified Data.Attoparsec.ByteString.Char8 as A -import OrgStat.Ast (filterHasClock, orgTotalDuration)-import OrgStat.Config (confReports, crName)-import OrgStat.Helpers (resolveReport)-import OrgStat.Outputs.Types (SummaryOutput (..), SummaryParams (..))-import OrgStat.Util (timeF)-import OrgStat.WorkMonad (WorkM, wcConfig)+import OrgStat.Ast (filterHasClock, orgTotalDuration)+import OrgStat.Config (confReports, crName)+import OrgStat.Helpers (resolveReport)+import OrgStat.Outputs.Types (SummaryOutput (..), SummaryParams (..))+import OrgStat.Util (timeF)+import OrgStat.WorkMonad (WorkM, wcConfig) -- | Tokenizes summary template string.
src/OrgStat/Outputs/Timeline.hs view
@@ -8,22 +8,20 @@ ( processTimeline ) where -import Data.Colour.CIE (luminance)-import Data.List (lookup, nub)-import qualified Data.Text as T-import Data.Time (Day, DiffTime, LocalTime (..), defaultTimeLocale,- formatTime, timeOfDayToTime)-import Diagrams.Backend.SVG (B)-import qualified Diagrams.Prelude as D+import Data.Colour.CIE (luminance)+import Data.List (lookup, nub)+import qualified Data.Text as T+import Data.Time (Day, DiffTime, LocalTime (..), defaultTimeLocale, formatTime, timeOfDayToTime)+import Diagrams.Backend.SVG (B)+import qualified Diagrams.Prelude as D import qualified Prelude-import Text.Printf (printf)-import Universum+import Text.Printf (printf)+import Universum -import OrgStat.Ast (Clock (..), Org (..), orgClocks, traverseTree)-import OrgStat.Outputs.Types (TimelineOutput (..), TimelineParams, tpBackground,- tpColorSalt, tpColumnHeight, tpColumnWidth,- tpLegend, tpTopDay)-import OrgStat.Util (addLocalTime, hashColour)+import OrgStat.Ast (Clock (..), Org (..), orgClocks, traverseTree)+import OrgStat.Outputs.Types (TimelineOutput (..), TimelineParams, tpBackground, tpColorSalt,+ tpColumnHeight, tpColumnWidth, tpLegend, tpTopDay)+import OrgStat.Util (addLocalTime, hashColour)
src/OrgStat/Outputs/Types.hs view
@@ -21,13 +21,13 @@ , BlockOutput (..) ) where -import Universum+import Universum -import Control.Lens (makeLenses)+import Control.Lens (makeLenses) -import Data.Default (Default (..))-import Diagrams.Backend.SVG (B)-import qualified Diagrams.Prelude as D+import Data.Default (Default (..))+import Diagrams.Backend.SVG (B)+import qualified Diagrams.Prelude as D ---------------------------------------------------------------------------- -- Timeline
src/OrgStat/Parser.hs view
@@ -6,17 +6,17 @@ , runParser ) where -import Universum+import Universum -import Control.Exception (Exception)+import Control.Exception (Exception) import qualified Data.Attoparsec.Text as A-import qualified Data.OrgMode.Parse as O-import qualified Data.OrgMode.Types as O-import qualified Data.Text as T-import Data.Time (LocalTime (..), TimeOfDay (..), fromGregorian)-import Data.Time.Calendar ()+import qualified Data.OrgMode.Parse as O+import qualified Data.OrgMode.Types as O+import qualified Data.Text as T+import Data.Time (LocalTime (..), TimeOfDay (..), fromGregorian)+import Data.Time.Calendar () -import OrgStat.Ast (Clock (..), Org (..))+import OrgStat.Ast (Clock (..), Org (..)) ---------------------------------------------------------------------------- -- Exceptions
src/OrgStat/Scope.hs view
@@ -13,14 +13,13 @@ , applyModifiers ) where -import qualified Base as Base-import Control.Lens (to)-import Control.Monad.Except (throwError)-import qualified Data.Text as T-import Universum+import qualified Base as Base+import Control.Lens (to)+import Control.Monad.Except (throwError)+import qualified Data.Text as T+import Universum -import OrgStat.Ast (Org, atDepth, orgClocks, orgSubtrees, orgTags,- orgTitle, traverseTree)+import OrgStat.Ast (Org, atDepth, orgClocks, orgSubtrees, orgTags, orgTitle, traverseTree) -- | Path in org AST is just a list of paths, head ~ closer to tree -- root.
src/OrgStat/Util.hs view
@@ -12,19 +12,18 @@ , timeF ) where -import Control.Lens (ASetter, ix)-import Data.Aeson.TH (defaultOptions)-import Data.Aeson.Types (Options, fieldLabelModifier)-import Data.Char (isLower, toLower)-import Data.Colour (Colour)-import Data.Colour.CIE (luminance)-import Data.Colour.SRGB (RGB (..), sRGB24, toSRGBBounded)-import Data.Hashable (hashWithSalt)-import Data.List (nub)-import Data.List ((!!))-import Data.Time (LocalTime (..), NominalDiffTime, addUTCTime,- localTimeToUTC, utc, utcToLocalTime)-import Universum+import Control.Lens (ASetter, ix)+import Data.Aeson.TH (defaultOptions)+import Data.Aeson.Types (Options, fieldLabelModifier)+import Data.Char (isLower, toLower)+import Data.Colour (Colour)+import Data.Colour.CIE (luminance)+import Data.Colour.SRGB (RGB (..), sRGB24, toSRGBBounded)+import Data.Hashable (hashWithSalt)+import Data.List (nub)+import Data.List ((!!))+import Data.Time (LocalTime (..), NominalDiffTime, addUTCTime, localTimeToUTC, utc, utcToLocalTime)+import Universum -- | JSON/Yaml TH modifier. Each field of type "aoeuKek" turns into -- "kek". Placed here because it can't be defined near json TH
src/OrgStat/WorkMonad.hs view
@@ -14,15 +14,15 @@ , runWorkM ) where -import Universum+import Universum -import Control.Lens (makeLenses)-import Data.Default (Default (def))-import qualified System.Wlog as W+import Control.Lens (makeLenses)+import Data.Default (Default (def))+import qualified System.Wlog as W -import OrgStat.Ast (Org)-import OrgStat.CLI (CommonArgs)-import OrgStat.Config (OrgStatConfig)+import OrgStat.Ast (Org)+import OrgStat.CLI (CommonArgs)+import OrgStat.Config (OrgStatConfig) -- | Read-only app configuration. data WorkConfig = WorkConfig@@ -63,7 +63,7 @@ ) instance W.HasLoggerName WorkM where- getLoggerName = pure $ W.LoggerName "OrgStat"+ askLoggerName = pure $ W.LoggerName "OrgStat" modifyLoggerName _ = identity runWorkM :: MonadIO m => WorkConfig -> WorkM a -> m a
src/cli/Main.hs view
@@ -3,20 +3,19 @@ module Main where -import Data.Version (showVersion)-import Options.Applicative.Simple (Parser, help, long, metavar, simpleOptions,- strOption, switch, value)-import Paths_orgstat (version)-import System.Directory (getHomeDirectory)-import System.FilePath ((</>))-import System.Wlog (Severity (..), consoleOutB, lcTermSeverity,- logDebug, logError, setupLogging)-import Universum+import Data.Version (showVersion)+import Options.Applicative.Simple (Parser, help, long, metavar, simpleOptions, strOption, switch,+ value)+import Paths_orgstat (version)+import System.Directory (getHomeDirectory)+import System.FilePath ((</>))+import System.Wlog (Severity (..), logDebug, logError, setupLogging, termSeveritiesOutB)+import Universum -import OrgStat.CLI (CommonArgs, parseCommonArgs)-import OrgStat.IO (readConfig)-import OrgStat.Logic (runOrgStat)-import OrgStat.WorkMonad (WorkConfig (..), runWorkM)+import OrgStat.CLI (CommonArgs, parseCommonArgs)+import OrgStat.IO (readConfig)+import OrgStat.Logic (runOrgStat)+import OrgStat.WorkMonad (WorkConfig (..), runWorkM) data Args = Args { configPath :: !FilePath@@ -52,7 +51,7 @@ main = do args@Args{..} <- getNodeOptions =<< getHomeDirectory let sev = if debug then Debug else Info- setupLogging Nothing $ consoleOutB & lcTermSeverity .~ Just sev+ setupLogging Nothing $ termSeveritiesOutB (one sev) config <- readConfig configPath runWorkM (WorkConfig config commonArgs) $ do logDebug $ "Just started with options: " <> show args