@@ -34,18 +34,21 @@ import qualified Reporting.Result as Result
3434import qualified Text.JSON
3535
3636
37- resolveFile :: FileStore f => FilePath -> Free f (Either InputFileMessage [FilePath ])
37+ resolveFile :: FileStore f => FilePath -> Free f (Either InputFileMessage [ElmFile ])
3838resolveFile path =
3939 do
4040 fileType <- FileStore. stat path
4141
4242 case fileType of
4343 FileStore. IsFile ->
44- return $ Right [path]
44+ do
45+ elmFile <- FS. addElmVersion path
46+ return $ Right [elmFile]
4547
4648 FileStore. IsDirectory ->
4749 do
48- elmFiles <- FS. findAllElmFiles path
50+ files <- FS. findAllElmFiles path
51+ elmFiles <- sequence $ fmap FS. addElmVersion files
4952 case elmFiles of
5053 [] -> return $ Left $ NoElmFiles path
5154 _ -> return $ Right elmFiles
@@ -74,7 +77,7 @@ collectErrors list =
7477 foldl step (Right [] ) list
7578
7679
77- resolveFiles :: FileStore f => [FilePath ] -> Free f (Either [InputFileMessage ] [FilePath ])
80+ resolveFiles :: FileStore f => [FilePath ] -> Free f (Either [InputFileMessage ] [ElmFile ])
7881resolveFiles inputFiles =
7982 do
8083 result <- collectErrors <$> mapM resolveFile inputFiles
@@ -83,23 +86,26 @@ resolveFiles inputFiles =
8386 return $ Left ls
8487
8588 Right files ->
86- return $ Right $ concat files
89+ return $ Right $ concat $ files
90+
8791
92+ type ElmFile
93+ = (FilePath , ElmVersion )
8894
8995data WhatToDo
90- = FormatToFile FilePath FilePath
96+ = FormatToFile ElmFile FilePath
9197 | StdinToFile FilePath
92- | FormatInPlace FilePath [ FilePath ]
98+ | FormatInPlace ElmFile [ ElmFile ]
9399 | StdinToStdout
94100 | ValidateStdin
95- | ValidateFiles FilePath [ FilePath ]
96- | FileToJson FilePath
101+ | ValidateFiles ElmFile [ ElmFile ]
102+ | FileToJson ElmFile
97103 | StdinToJson
98104
99105
100106data Source
101107 = Stdin
102- | FromFiles FilePath [ FilePath ]
108+ | FromFiles ElmFile [ ElmFile ]
103109
104110
105111data Destination
@@ -109,7 +115,7 @@ data Destination
109115 | ToJson
110116
111117
112- determineSource :: Bool -> Either [InputFileMessage ] [FilePath ] -> Either ErrorMessage Source
118+ determineSource :: Bool -> Either [InputFileMessage ] [ElmFile ] -> Either ErrorMessage Source
113119determineSource stdin inputFiles =
114120 case ( stdin, inputFiles ) of
115121 ( _, Left fileErrors ) -> Left $ BadInputFiles fileErrors
@@ -145,7 +151,7 @@ determineWhatToDo source destination =
145151 ( FromFiles _ _, ToJson ) -> Left SingleOutputWithMultipleInputs
146152
147153
148- determineWhatToDoFromConfig :: Flags. Config -> Either [InputFileMessage ] [FilePath ] -> Either ErrorMessage WhatToDo
154+ determineWhatToDoFromConfig :: Flags. Config -> Either [InputFileMessage ] [( FilePath , ElmVersion ) ] -> Either ErrorMessage WhatToDo
149155determineWhatToDoFromConfig config resolvedInputFiles =
150156 do
151157 source <- determineSource (Flags. _stdin config) resolvedInputFiles
@@ -223,6 +229,7 @@ main'' elmFormatVersion_ experimental_ args =
223229 do
224230 let autoYes = Flags. _yes config
225231 resolvedInputFiles <- Execute. run (Execute. forHuman autoYes) $ resolveFiles (Flags. _input config)
232+ detectedElmVersion <- Execute. run (Execute. forHuman autoYes) $ ElmVersion. fromFile " ."
226233
227234 case determineWhatToDoFromConfig config resolvedInputFiles of
228235 Left NoInputs ->
@@ -234,44 +241,24 @@ main'' elmFormatVersion_ experimental_ args =
234241 exitWithError message
235242
236243 Right whatToDo -> do
237- elmVersionChoice <- case Flags. _elmVersion config of
238- Just v -> return $ Right v
239- Nothing -> autoDetectElmVersion
244+ let elmVersionChoice = case Flags. _elmVersion config of
245+ Just v -> v
246+ Nothing -> detectedElmVersion
240247
241- case elmVersionChoice of
248+ let elmVersionResult = determineVersion elmVersionChoice (Flags. _upgrade config)
249+ case elmVersionResult of
242250 Left message ->
243- putStr message *> exitFailure
244-
245- Right elmVersionChoice' -> do
246- let elmVersionResult = determineVersion elmVersionChoice' (Flags. _upgrade config)
251+ exitWithError message
247252
248- case elmVersionResult of
249- Left message ->
250- exitWithError message
251-
252- Right elmVersion ->
253- do
254- let run = case (Flags. _validate config) of
255- True -> Execute. run $ Execute. forMachine elmVersion True
256- False -> Execute. run $ Execute. forHuman autoYes
257- result <- run $ doIt elmVersion whatToDo
258- if result
259- then exitSuccess
260- else exitFailure
261-
262-
263- autoDetectElmVersion :: World m => m (Either String ElmVersion )
264- autoDetectElmVersion =
265- do
266- hasElmPackageJson <- doesFileExist " elm-package.json"
267- if hasElmPackageJson
268- then
269- do
270- hasElmJson <- doesFileExist " elm.json"
271- if hasElmJson
272- then return $ Right Elm_0_19
273- else return $ Right Elm_0_18
274- else return $ Right Elm_0_19
253+ Right elmVersion ->
254+ do
255+ let run = case (Flags. _validate config) of
256+ True -> Execute. run $ Execute. forMachine elmVersion True
257+ False -> Execute. run $ Execute. forHuman autoYes
258+ result <- run $ doIt elmVersion config whatToDo
259+ if result
260+ then exitSuccess
261+ else exitFailure
275262
276263
277264validate :: ElmVersion -> (FilePath , Text. Text ) -> Either InfoMessage ()
@@ -363,33 +350,41 @@ logErrorOr fn result =
363350 fn value *> return True
364351
365352
366- doIt :: (InputConsole f , OutputConsole f , InfoFormatter f , FileStore f , FileWriter f ) => ElmVersion -> WhatToDo -> Free f Bool
367- doIt elmVersion whatToDo =
353+
354+ doIt :: (InputConsole f , OutputConsole f , InfoFormatter f , FileStore f , FileWriter f ) => ElmVersion -> Flags. Config -> WhatToDo -> Free f Bool
355+ doIt elmVersion config whatToDo =
356+ let
357+ getVersion fileDetectedElmVersion =
358+ case (Flags. _upgrade config, Flags. _elmVersion config) of
359+ (True , _) -> elmVersion
360+ (False , Just v) -> v
361+ (False , Nothing ) -> fileDetectedElmVersion
362+ in
368363 case whatToDo of
369364 ValidateStdin ->
370365 (validate elmVersion <$> readStdin) >>= logError
371366
372367 ValidateFiles first rest ->
373368 all id <$> mapM validateFile (first: rest)
374- where validateFile file = (validate elmVersion <$> ElmFormat. readFile file) >>= logError
369+ where validateFile ( file, fileElmVersion) = (validate (getVersion fileElmVersion) <$> ElmFormat. readFile file) >>= logError
375370
376371 StdinToStdout ->
377372 (fmap getOutputText <$> format elmVersion <$> readStdin) >>= logErrorOr OutputConsole. writeStdout
378373
379374 StdinToFile outputFile ->
380375 (fmap getOutputText <$> format elmVersion <$> readStdin) >>= logErrorOr (FileWriter. overwriteFile outputFile)
381376
382- FormatToFile inputFile outputFile ->
383- (fmap getOutputText <$> format elmVersion <$> ElmFormat. readFile inputFile) >>= logErrorOr (FileWriter. overwriteFile outputFile)
377+ FormatToFile ( inputFile, fileElmVersion) outputFile ->
378+ (fmap getOutputText <$> format (getVersion fileElmVersion) <$> ElmFormat. readFile inputFile) >>= logErrorOr (FileWriter. overwriteFile outputFile)
384379
385380 FormatInPlace first rest ->
386381 do
387- canOverwrite <- approve $ FilesWillBeOverwritten (first: rest)
382+ canOverwrite <- approve $ FilesWillBeOverwritten $ fmap fst $ (first: rest)
388383 if canOverwrite
389384 then all id <$> mapM formatFile (first: rest)
390385 else return True
391386 where
392- formatFile file = (format elmVersion <$> ElmFormat. readFile file) >>= logErrorOr ElmFormat. updateFile
387+ formatFile ( file, fileElmVersion) = (format (getVersion fileElmVersion) <$> ElmFormat. readFile file) >>= logErrorOr ElmFormat. updateFile
393388
394389 StdinToJson ->
395390 (fmap (Text. pack . Text.JSON. encode . AST.Json. showModule) <$> parseModule elmVersion <$> readStdin) >>= logErrorOr OutputConsole. writeStdout
0 commit comments