Skip to content

Commit 02c93a9

Browse files
authored
Use file-embed for default configuration
1 parent 336220c commit 02c93a9

File tree

3 files changed

+56
-65
lines changed

3 files changed

+56
-65
lines changed

lib/Language/Haskell/Stylish/Config.hs

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
--------------------------------------------------------------------------------
22
{-# LANGUAGE OverloadedStrings #-}
3+
{-# LANGUAGE TemplateHaskell #-}
34
module Language.Haskell.Stylish.Config
45
( Extensions
56
, Config (..)
6-
, defaultConfigFilePath
7+
, defaultConfigBytes
78
, configFilePath
89
, loadConfig
910
) where
@@ -14,12 +15,13 @@ import Control.Monad (forM, mzero)
1415
import Data.Aeson (FromJSON (..))
1516
import qualified Data.Aeson as A
1617
import qualified Data.Aeson.Types as A
17-
import Data.Maybe (fromMaybe)
1818
import qualified Data.ByteString as B
19+
import qualified Data.FileEmbed as FileEmbed
1920
import Data.List (inits,
2021
intercalate)
2122
import Data.Map (Map)
2223
import qualified Data.Map as M
24+
import Data.Maybe (fromMaybe)
2325
import Data.Yaml (decodeEither)
2426
import System.Directory
2527
import System.FilePath (joinPath,
@@ -38,7 +40,6 @@ import qualified Language.Haskell.Stylish.Step.Tabs as Tabs
3840
import qualified Language.Haskell.Stylish.Step.TrailingWhitespace as TrailingWhitespace
3941
import qualified Language.Haskell.Stylish.Step.UnicodeSyntax as UnicodeSyntax
4042
import Language.Haskell.Stylish.Verbose
41-
import Paths_stylish_haskell (getDataFileName)
4243

4344

4445
--------------------------------------------------------------------------------
@@ -65,27 +66,22 @@ configFileName = ".stylish-haskell.yaml"
6566

6667

6768
--------------------------------------------------------------------------------
68-
defaultConfigFilePath :: IO FilePath
69-
defaultConfigFilePath = getDataFileName "data/stylish-haskell.yaml"
69+
defaultConfigBytes :: B.ByteString
70+
defaultConfigBytes = $(FileEmbed.embedFile "data/stylish-haskell.yaml")
7071

7172

7273
--------------------------------------------------------------------------------
73-
configFilePath :: Verbose -> Maybe FilePath -> IO FilePath
74-
configFilePath _ (Just userSpecified) = return userSpecified
74+
configFilePath :: Verbose -> Maybe FilePath -> IO (Maybe FilePath)
75+
configFilePath _ (Just userSpecified) = return (Just userSpecified)
7576
configFilePath verbose Nothing = do
76-
current <- getCurrentDirectory
77-
configPath <- getXdgDirectory XdgConfig "stylish-haskell"
78-
home <- getHomeDirectory
79-
def <- defaultConfigFilePath
80-
mbConfig <- search $
77+
current <- getCurrentDirectory
78+
configPath <- getXdgDirectory XdgConfig "stylish-haskell"
79+
home <- getHomeDirectory
80+
mbConfig <- search $
8181
[d </> configFileName | d <- ancestors current] ++
82-
[configPath </> "config.yaml", home </> configFileName, def]
82+
[configPath </> "config.yaml", home </> configFileName]
8383

84-
case mbConfig of
85-
Just config -> return config
86-
Nothing -> fail $
87-
"Language.Haskell.Stylish.Config.configFilePath: " ++
88-
"could not load default configuration at: " ++ def
84+
return mbConfig
8985
where
9086
-- All ancestors of a dir (including that dir)
9187
ancestors :: FilePath -> [FilePath]
@@ -102,11 +98,11 @@ configFilePath verbose Nothing = do
10298

10399
--------------------------------------------------------------------------------
104100
loadConfig :: Verbose -> Maybe FilePath -> IO Config
105-
loadConfig verbose mfp = do
106-
fp <- configFilePath verbose mfp
107-
verbose $ "Loading configuration at " ++ fp
108-
bs <- B.readFile fp
109-
case decodeEither bs of
101+
loadConfig verbose userSpecified = do
102+
mbFp <- configFilePath verbose userSpecified
103+
verbose $ "Loading configuration at " ++ fromMaybe "<embedded>" mbFp
104+
bytes <- maybe (return defaultConfigBytes) B.readFile mbFp
105+
case decodeEither bytes of
110106
Left err -> error $
111107
"Language.Haskell.Stylish.Config.loadConfig: " ++ err
112108
Right config -> return config

src/Main.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ module Main
66

77
--------------------------------------------------------------------------------
88
import Control.Monad (forM_, unless)
9+
import qualified Data.ByteString.Char8 as BC8
910
import Data.Monoid ((<>))
1011
import Data.Version (showVersion)
1112
import qualified Options.Applicative as OA
12-
import qualified Paths_stylish_haskell
1313
import System.Exit (exitFailure)
1414
import qualified System.IO as IO
1515
import qualified System.IO.Strict as IO.Strict
@@ -70,7 +70,7 @@ parseStylishArgs = StylishArgs
7070

7171
--------------------------------------------------------------------------------
7272
stylishHaskellVersion :: String
73-
stylishHaskellVersion = "stylish-haskell " <> showVersion Paths_stylish_haskell.version
73+
stylishHaskellVersion = "stylish-haskell " <> showVersion version
7474

7575

7676
--------------------------------------------------------------------------------
@@ -94,9 +94,8 @@ stylishHaskell sa = do
9494
putStrLn stylishHaskellVersion
9595

9696
else if saDefaults sa then do
97-
fileName <- defaultConfigFilePath
98-
verbose' $ "Dumping config from " ++ fileName
99-
readUTF8File fileName >>= putStr
97+
verbose' "Dumping embedded config..."
98+
BC8.putStr defaultConfigBytes
10099

101100
else do
102101
conf <- loadConfig verbose' (saConfig sa)

stylish-haskell.cabal

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ Description:
1818

1919
<https://github.com/jaspervdj/stylish-haskell/blob/master/README.markdown>
2020

21-
Data-files:
22-
data/stylish-haskell.yaml
23-
2421
Extra-source-files:
2522
CHANGELOG,
2623
README.markdown
@@ -50,40 +47,39 @@ Library
5047
Paths_stylish_haskell
5148

5249
Build-depends:
53-
aeson >= 0.6 && < 1.3,
54-
base >= 4.8 && < 5,
55-
bytestring >= 0.9 && < 0.11,
56-
containers >= 0.3 && < 0.6,
57-
directory >= 1.1 && < 1.4,
58-
filepath >= 1.1 && < 1.5,
59-
haskell-src-exts >= 1.18 && < 1.21,
60-
mtl >= 2.0 && < 2.3,
61-
syb >= 0.3 && < 0.8,
62-
yaml >= 0.7 && < 0.9
50+
aeson >= 0.6 && < 1.3,
51+
base >= 4.8 && < 5,
52+
bytestring >= 0.9 && < 0.11,
53+
containers >= 0.3 && < 0.6,
54+
directory >= 1.1 && < 1.4,
55+
filepath >= 1.1 && < 1.5,
56+
file-embed >= 0.0.10 && < 0.1,
57+
haskell-src-exts >= 1.18 && < 1.21,
58+
mtl >= 2.0 && < 2.3,
59+
syb >= 0.3 && < 0.8,
60+
yaml >= 0.7 && < 0.9
6361

6462
Executable stylish-haskell
6563
Ghc-options: -Wall
6664
Hs-source-dirs: src
6765
Main-is: Main.hs
6866

69-
Other-modules:
70-
Paths_stylish_haskell
71-
7267
Build-depends:
7368
stylish-haskell,
7469
strict >= 0.3 && < 0.4,
7570
optparse-applicative >= 0.12 && < 0.15,
7671
-- Copied from regular dependencies...
77-
aeson >= 0.6 && < 1.3,
78-
base >= 4.8 && < 5,
79-
bytestring >= 0.9 && < 0.11,
80-
containers >= 0.3 && < 0.6,
81-
directory >= 1.1 && < 1.4,
82-
filepath >= 1.1 && < 1.5,
83-
haskell-src-exts >= 1.18 && < 1.21,
84-
mtl >= 2.0 && < 2.3,
85-
syb >= 0.3 && < 0.8,
86-
yaml >= 0.7 && < 0.9
72+
aeson >= 0.6 && < 1.3,
73+
base >= 4.8 && < 5,
74+
bytestring >= 0.9 && < 0.11,
75+
containers >= 0.3 && < 0.6,
76+
directory >= 1.1 && < 1.4,
77+
filepath >= 1.1 && < 1.5,
78+
file-embed >= 0.0.10 && < 0.1,
79+
haskell-src-exts >= 1.18 && < 1.21,
80+
mtl >= 2.0 && < 2.3,
81+
syb >= 0.3 && < 0.8,
82+
yaml >= 0.7 && < 0.9
8783

8884
Test-suite stylish-haskell-tests
8985
Ghc-options: -Wall
@@ -114,23 +110,23 @@ Test-suite stylish-haskell-tests
114110
Language.Haskell.Stylish.Tests.Util
115111
Language.Haskell.Stylish.Util
116112
Language.Haskell.Stylish.Verbose
117-
Paths_stylish_haskell
118113

119114
Build-depends:
120115
HUnit >= 1.2 && < 1.7,
121116
test-framework >= 0.4 && < 0.9,
122117
test-framework-hunit >= 0.2 && < 0.4,
123118
-- Copied from regular dependencies...
124-
aeson >= 0.6 && < 1.3,
125-
base >= 4.8 && < 5,
126-
bytestring >= 0.9 && < 0.11,
127-
containers >= 0.3 && < 0.6,
128-
directory >= 1.2.3 && < 1.4,
129-
filepath >= 1.1 && < 1.5,
130-
haskell-src-exts >= 1.18 && < 1.21,
131-
mtl >= 2.0 && < 2.3,
132-
syb >= 0.3 && < 0.8,
133-
yaml >= 0.7 && < 0.9
119+
aeson >= 0.6 && < 1.3,
120+
base >= 4.8 && < 5,
121+
bytestring >= 0.9 && < 0.11,
122+
containers >= 0.3 && < 0.6,
123+
directory >= 1.1 && < 1.4,
124+
filepath >= 1.1 && < 1.5,
125+
file-embed >= 0.0.10 && < 0.1,
126+
haskell-src-exts >= 1.18 && < 1.21,
127+
mtl >= 2.0 && < 2.3,
128+
syb >= 0.3 && < 0.8,
129+
yaml >= 0.7 && < 0.9
134130

135131
Source-repository head
136132
Type: git

0 commit comments

Comments
 (0)