module Main where
import Server (run)
import System.Console.GetOpt
import System.Environment (getArgs)
import Text.Read (readMaybe)
main :: IO ()
main = do
(opts, _) <- getArgs >>= parseOpts
if optHelp opts
then putStrLn $ usageInfo usage options
else do
_ <- run (optViaTCP opts)
return ()
--------------------------------------------------------------------------------
-- | Command-line arguments
data Options = Options
{ optViaTCP :: Maybe Int,
optHelp :: Bool
}
defaultOptions :: Options
defaultOptions = Options {optViaTCP = Nothing, optHelp = False}
options :: [OptDescr (Options -> Options)]
options =
[ Option
['h']
["help"]
(NoArg (\opts -> opts {optHelp = True}))
"print this help message",
Option
['p']
["port"]
(OptArg (\port opts -> case port of
Just n -> opts {optViaTCP = readMaybe n}
Nothing -> opts {optViaTCP = Just 4096}) "PORT")
"talk with the editor via TCP port (4096 as default)"
]
usage :: String
usage = "Agda Language Server v0.0.3.0 \nUsage: als [Options...]\n"
parseOpts :: [String] -> IO (Options, [String])
parseOpts argv = case getOpt Permute options argv of
(o, n, []) -> return (foldl (flip id) defaultOptions o, n)
(_, _, errs) -> ioError $ userError $ concat errs ++ usageInfo usage options