@@ -43,8 +43,8 @@ import CodeGen.IL.Printer
44import Tests
44import Tests
46−data Command = Build | Run
46+data Command = Build | Run (Maybe String)
48parseJson :: Text -> Value
48parseJson :: Text -> Value
49parseJson text
49parseJson text
50 | Just fileJson <- decode . L.encodeUtf8 $ L.fromStrict text = fileJson
50 | Just fileJson <- decode . L.encodeUtf8 $ L.fromStrict text = fileJson
@@ -56,10 +56,30 @@ jsonToModule value =
56 Success (_, r) -> r
56 Success (_, r) -> r
57 _ -> error "failed"
57 _ -> error "failed"
59+splitArgs :: [String] -> ([String], Maybe String, [String])
61+ let (opts, files) = partition (isPrefixOf "--") args
62+ opts' = (map . map) toLower opts
63+ (moduleName, files') =
65+ then (Nothing, files)
67+ if "--run" `elem` opts' && length (files) >= 1
69+ let file0 = head files
72+ "Main.main" -> (Just "Main", files')
73+ "Test.Main.main" -> (Just "Test.Main", files')
74+ _ -> (Nothing, files)
75+ else (Nothing, files)
76+ in (opts, moduleName, files')
59main :: IO ()
78main :: IO ()
61 args <- getArgs
80 args <- getArgs
62− let (opts, files) = partition (isPrefixOf "--") args
81+ -- let (opts, files) = partition (isPrefixOf "--") args
82+ let (opts, moduleName, files) = splitArgs args
63 opts' = (map . map) toLower opts
83 opts' = (map . map) toLower opts
64 if "--tests" `elem` opts'
84 if "--tests" `elem` opts'
65 then runTests
85 then runTests
@@ -81,7 +101,7 @@ main = do
82 processFiles opts' files
102 processFiles opts' files
83 if "--run" `elem` opts
103 if "--run" `elem` opts
84− then runBuildTool Run
104+ then runBuildTool $ Run moduleName
85 else when ("--no-build" `notElem` opts) $
105 else when ("--no-build" `notElem` opts) $
86 runBuildTool Build
106 runBuildTool Build
87 return ()
107 return ()
@@ -109,11 +129,12 @@ main = do
109 return ()
129 return ()
110 runBuildTool :: Command -> IO ()
130 runBuildTool :: Command -> IO ()
111 runBuildTool cmd = do
131 runBuildTool cmd = do
112− let command = case cmd of
115 project <- projectEnv
132 project <- projectEnv
135+ callProcess "go" ["build", T.unpack project </> modPrefix' </> "Main"]
136+ Run moduleName -> do
116− callProcess "go" [command, T.unpack project </> modPrefix' </> "Main"]
137+ callProcess "go" ["run", T.unpack project </> modPrefix' </> fromMaybe "Main" moduleName]
117 return ()
138 return ()
119generateCode :: [String] -> FilePath -> FilePath -> IO ()
140generateCode :: [String] -> FilePath -> FilePath -> IO ()