packages feed

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" }
             }
          }'|]