module Main ( main ) where import Control.Exception import Data.List import Network.Socket (withSocketsDo) import Options.Applicative import System.Environment (getArgs) import System.IO import HsDev.Server.Commands (runServerCommand) import HsDev.Server.Types import HsDev.Util main :: IO () main = handle logErr' $ withSocketsDo $ do hSetBuffering stdout LineBuffering hSetEncoding stdout utf8 as <- prepareArgs case parseArgs "hsdev" (info cmdP (progDesc "hsdev tool")) as of Left e -> putStrLn e Right scmd -> runServerCommand scmd where logErr' (SomeException e) = putStrLn $ "exception " ++ show e -- | Get args with '--stdin' flag replaced and 'help' command changed to flag prepareArgs :: IO [String] prepareArgs = getArgs >>= prepare where prepare [] = return [] prepare ("help" : as) = prepare $ as ++ ["-?"] prepare as | "--stdin" `elem` as = do input <- getContents return $ delete "--stdin" as ++ ["--data", input] | otherwise = return as