zifter-hindent (empty) → 0.0.0.0
raw patch · 4 files changed
+118/−0 lines, 4 filesdep +basedep +directorydep +filepathsetup-changed
Dependencies added: base, directory, filepath, path, path-io, process, safe, zifter
Files
- LICENSE +21/−0
- Setup.hs +3/−0
- src/Zifter/Hindent.hs +64/−0
- zifter-hindent.cabal +30/−0
+ LICENSE view
@@ -0,0 +1,21 @@+MIT License++Copyright (c) 2017 Tom Sydney Kerckhove++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+SOFTWARE.
+ Setup.hs view
@@ -0,0 +1,3 @@+import Distribution.Simple++main = defaultMain
+ src/Zifter/Hindent.hs view
@@ -0,0 +1,64 @@+module Zifter.Hindent where++import Control.Monad.IO.Class+import Data.Foldable+import Path+import Path.IO+import Safe+import System.Exit (ExitCode(..))+import qualified System.FilePath as FP (splitPath)+import System.IO+import System.Process++import Zifter.Zift++hindentZift :: Zift ()+hindentZift = do+ () <- hindentCheckAndPrintVersion+ rd <- getRootDir+ fs <- liftIO $ snd <$> listDirRecur rd+ let sources = filter (not . hidden) $ filter ((== ".hs") . fileExtension) fs+ for_ sources hindentSingleSource++hindentCheckAndPrintVersion :: Zift ()+hindentCheckAndPrintVersion = do+ let cmd = "hindent --version"+ (_, mouth, _, ph) <-+ liftIO $ createProcess ((shell cmd) {std_out = CreatePipe})+ ec <- liftIO $ waitForProcess ph+ case mouth of+ Nothing -> pure ()+ Just outh -> liftIO (hGetContents outh) >>= printZift+ case ec of+ ExitFailure c -> fail $ unwords [cmd, "failed with exit code", show c]+ ExitSuccess -> pure ()++hindentSingleSource :: Path Abs File -> Zift ()+hindentSingleSource file = do+ let cmd =+ unwords+ [ "hindent"+ , "--indent-size"+ , "4"+ , "--line-length"+ , "80"+ , toFilePath file+ ]+ let cp = shell cmd+ ec <-+ liftIO $ do+ (_, _, _, ph) <- createProcess cp+ waitForProcess ph+ case ec of+ ExitSuccess ->+ printPreprocessingDone $+ unwords+ ["Formatted Haskell source file with hindent:", toFilePath file]+ ExitFailure c -> do+ printPreprocessingError $+ unwords+ ["Failed to format Haskell source file:", toFilePath file]+ fail $ unwords [cmd, "failed", "with exit code", show c]++hidden :: Path Abs t -> Bool+hidden = any ((Just '.' ==) . headMay) . FP.splitPath . toFilePath
+ zifter-hindent.cabal view
@@ -0,0 +1,30 @@+name: zifter-hindent+synopsis: zifter-hindent+description: zifter-hindent+version: 0.0.0.0+cabal-version: >=1.10+build-type: Simple+license: MIT+license-file: LICENSE+copyright: Copyright: (c) 2017 Tom Sydney Kerckhove+maintainer: syd.kerckhove@gmail.com+homepage: http://cs-syd.eu+category: Zift+author: Tom Sydney Kerckhove++library+ exposed-modules:+ Zifter.Hindent+ build-depends:+ base >=4.9 && <=5,+ process -any,+ filepath >=1.4 && <1.5,+ directory -any,+ zifter >=0.0 && <0.1,+ path >=0.5 && <0.6,+ path-io >=1.2 && <1.3,+ safe >=0.3 && <0.4+ default-language: Haskell2010+ hs-source-dirs: src/+ ghc-options: -Wall+