packages feed

tokstyle-0.0.6: tools/check-cimple.hs

{-# LANGUAGE LambdaCase        #-}
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where

import           Data.Text                (Text)
import qualified Data.Text.IO             as Text
import           Language.Cimple          (Lexeme, Node)
import           Language.Cimple.IO       (parseFiles)
import           System.Environment       (getArgs)

import           Tokstyle.Cimple.Analysis (analyse, analyseGlobal)


processAst :: [(FilePath, [Node () (Lexeme Text)])] -> IO ()
processAst tus = do
    report $ analyseGlobal tus
    mapM_ (report . analyse) tus
  where
    report = \case
        [] -> return ()
        diags -> do
            mapM_ Text.putStrLn diags
            fail "tokstyle violations detected"


main :: IO ()
main =
    getArgs
    >>= parseFiles
    >>= getRight
    >>= processAst
  where
    getRight (Left err) = fail err
    getRight (Right ok) = return ok