mulang-3.5.2: app/Main.hs
{-# LANGUAGE DeriveGeneric, QuasiQuotes, OverloadedStrings #-}
module Main (main) where
import Language.Mulang.Analyzer (analyse)
import Language.Mulang.Analyzer.Analysis.Json ()
import Data.Aeson (eitherDecode, encode)
import System.Environment (getArgs)
import Control.Fallible (orFail)
import Data.List (intercalate)
import Version (prettyVersion)
import Data.Text.Lazy.Encoding (encodeUtf8)
import qualified Data.ByteString.Lazy as LBS (putStrLn)
import qualified Data.Text.Lazy as T (pack)
import Data.Text (unpack)
import NeatInterpolation (text)
main :: IO ()
main = do
argsBody <- fmap parseArgs $ getArgs
streamBody <- getContents
let body = if argsBody == "-s" then streamBody else argsBody
result <- analyseJson body
LBS.putStrLn result
analyseJson = fmap encode . analyse . decode . encodeUtf8 . T.pack
parseArgs :: [String] -> String
parseArgs [jsonBody] = jsonBody
parseArgs _ = error (intercalate "\n" [prettyVersion, usage])
decode = orFail . eitherDecode
usage = unpack [text|
Wrong usage.
#read from STDIN
$ mulang -s
#read from argument
$ mulang '{
"sample" : {
"tag" : "CodeSample",
"language" : "Haskell",
"content" : "x = 1"
},
"spec" : {
"expectations" : [
{
"binding" : ":Intransitive:x",
"inspection" : "Uses:*"
}
],
"smellsSet" : { "tag" : "NoSmells" }
}
}'|]