on master help sign in
Get rid of some Data.List.NonEmpty uses
684ec7aEvan Czaplicki
builder/src/File/Args.hs+3−4
@@ -7,7 +7,6 @@ module File.Args
7 where
7 where
8
8
9
9
10−import Data.List.NonEmpty (NonEmpty((:|)))
11import qualified Elm.Compiler.Module as Module
10import qualified Elm.Compiler.Module as Module
12import qualified Elm.Project.Json as Project
11import qualified Elm.Project.Json as Project
13import qualified Elm.Project.Summary as Summary
12import qualified Elm.Project.Summary as Summary
@@ -15,9 +14,9 @@ import qualified Reporting.Exit as Exit
15import qualified Reporting.Task as Task
14import qualified Reporting.Task as Task
16
15
17
16
18−data Args roots
17+data Args root
19 = Pkg [Module.Raw]
18 = Pkg [Module.Raw]
20− | Roots (NonEmpty roots)
19+ | Roots root [root]
21
20
22
21
23fromPaths :: Summary.Summary -> [FilePath] -> Task.Task (Args FilePath)
22fromPaths :: Summary.Summary -> [FilePath] -> Task.Task (Args FilePath)
@@ -27,7 +26,7 @@ fromPaths summary paths =
27 fromSummary summary
26 fromSummary summary
28
27
29 first : rest ->
28 first : rest ->
30− return $ Roots (first :| rest)
29+ return $ Roots first rest
31
30
32
31
33fromSummary :: Summary.Summary -> Task.Task (Args a)
32fromSummary :: Summary.Summary -> Task.Task (Args a)
builder/src/File/Crawl.hs+6−10
@@ -13,8 +13,6 @@ import Control.Monad (foldM)
13import Control.Monad.Except (liftIO)
13import Control.Monad.Except (liftIO)
14import qualified Data.ByteString as BS
14import qualified Data.ByteString as BS
15import qualified Data.Graph as Graph
15import qualified Data.Graph as Graph
16−import qualified Data.List.NonEmpty as NonEmpty
17−import Data.List.NonEmpty (NonEmpty((:|)))
18import qualified Data.Map as Map
16import qualified Data.Map as Map
19import qualified Data.Set as Set
17import qualified Data.Set as Set
20
18
@@ -73,14 +71,13 @@ crawl summary args =
73 let graph = initWorkGraph (Args.Pkg names) Map.empty
71 let graph = initWorkGraph (Args.Pkg names) Map.empty
74 depthFirstSearch summary roots graph
72 depthFirstSearch summary roots graph
75
73
76− Args.Roots (path :| []) ->
74+ Args.Roots path [] ->
77 crawlHelp summary =<< Header.readOneFile summary path
75 crawlHelp summary =<< Header.readOneFile summary path
78
76
79− Args.Roots paths ->
77+ Args.Roots path paths ->
80− do headers <- Header.readManyFiles summary paths
78+ do (h,hs) <- Header.readManyFiles summary path paths
81− let names = NonEmpty.map fst headers
82− let unvisited = concatMap toUnvisited (NonEmpty.toList headers)
79+ let unvisited = concatMap toUnvisited (h:hs)
83− let graph = initWorkGraph (Args.Roots names) (Map.fromList (NonEmpty.toList headers))
80+ let graph = initWorkGraph (Args.Roots (fst h) (map fst hs)) (Map.fromList (h:hs))
84 depthFirstSearch summary unvisited graph
81 depthFirstSearch summary unvisited graph
85 where
82 where
86 toUnvisited (name, Header.Info path _ _ deps) =
83 toUnvisited (name, Header.Info path _ _ deps) =
@@ -96,10 +93,9 @@ crawlFromSource summary@(Summary _ project _ _ _) source =
96crawlHelp :: Summary -> ( Maybe Module.Raw, Header.Info ) -> Task.Task Result
93crawlHelp :: Summary -> ( Maybe Module.Raw, Header.Info ) -> Task.Task Result
97crawlHelp summary ( maybeName, info@(Header.Info path _ _ deps) ) =
94crawlHelp summary ( maybeName, info@(Header.Info path _ _ deps) ) =
98 do let name = maybe "Main" id maybeName
95 do let name = maybe "Main" id maybeName
99− let args = Args.Roots (name :| [])
100 let toUnvisited dep = Unvisited (maybe (E.File path) (E.Module path) maybeName) dep
96 let toUnvisited dep = Unvisited (maybe (E.File path) (E.Module path) maybeName) dep
101 let roots = map toUnvisited deps
97 let roots = map toUnvisited deps
102− let graph = initWorkGraph args (Map.singleton name info)
98+ let graph = initWorkGraph (Args.Roots name []) (Map.singleton name info)
103 depthFirstSearch summary roots graph
99 depthFirstSearch summary roots graph
104
100
105
101
builder/src/File/Header.hs+6−5
@@ -95,14 +95,15 @@ readOneHelp path =
95-- READ MANY FILES
95-- READ MANY FILES
96
96
97
97
98−readManyFiles :: Summary -> NonEmpty FilePath -> Task.Task (NonEmpty (Module.Raw, Info))
98+readManyFiles :: Summary -> FilePath -> [FilePath] -> Task.Task ((Module.Raw, Info), [(Module.Raw, Info)])
99−readManyFiles summary files =
99+readManyFiles summary file files =
100 Task.mapError Exit.Crawl $
100 Task.mapError Exit.Crawl $
101+ do info <- readManyFilesHelp summary file
101− do infos <- traverse (readManyFilesHelp summary) files
102+ infos <- traverse (readManyFilesHelp summary) files
102 let insert (name, info) dict = Map.insertWith (<>) name (info :| []) dict
103 let insert (name, info) dict = Map.insertWith (<>) name (info :| []) dict
103− let nameTable = foldr insert Map.empty infos
104+ let nameTable = foldr insert Map.empty (info:infos)
104 _ <- Map.traverseWithKey detectDuplicateNames nameTable
105 _ <- Map.traverseWithKey detectDuplicateNames nameTable
105− return infos
106+ return (info, infos)
106
107
107
108
108readManyFilesHelp :: Summary -> FilePath -> Task.Task_ E.Exit (Module.Raw, Info)
109readManyFilesHelp :: Summary -> FilePath -> Task.Task_ E.Exit (Module.Raw, Info)
builder/src/Generate/Output.hs+4−5
@@ -12,7 +12,6 @@ module Generate.Output
12
12
13import Control.Monad.Trans (liftIO)
13import Control.Monad.Trans (liftIO)
14import qualified Data.ByteString.Builder as B
14import qualified Data.ByteString.Builder as B
15−import qualified Data.List.NonEmpty as NonEmpty
16import qualified Data.Map as Map
15import qualified Data.Map as Map
17import Data.Monoid ((<>))
16import Data.Monoid ((<>))
18import qualified System.Directory as Dir
17import qualified System.Directory as Dir
@@ -55,8 +54,8 @@ generate options summary graph@(Crawl.Graph args _ _ _ _) =
55 Args.Pkg _ ->
54 Args.Pkg _ ->
56 return ()
55 return ()
57
56
58− Args.Roots names ->
57+ Args.Roots name names ->
59− generateMonolith options summary graph (NonEmpty.toList names)
58+ generateMonolith options summary graph (name:names)
60
59
61
60
62
61
@@ -64,11 +63,11 @@ generate options summary graph@(Crawl.Graph args _ _ _ _) =
64
63
65
64
66generateMonolith :: Options -> Summary.Summary -> Crawl.Result -> [Module.Raw] -> Task.Task ()
65generateMonolith :: Options -> Summary.Summary -> Crawl.Result -> [Module.Raw] -> Task.Task ()
67−generateMonolith (Options debug target maybeOutput) summary@(Summary.Summary _ project _ ifaces _) graph rootNames =
66+generateMonolith (Options mode target maybeOutput) summary@(Summary.Summary _ project _ ifaces _) graph rootNames =
68 do let pkg = Project.getName project
67 do let pkg = Project.getName project
69 let roots = map (Module.Canonical pkg) rootNames
68 let roots = map (Module.Canonical pkg) rootNames
70 objectGraph <- organize summary graph
69 objectGraph <- organize summary graph
71− case Obj.generate debug target ifaces objectGraph roots of
70+ case Obj.generate mode target ifaces objectGraph roots of
72 Obj.None ->
71 Obj.None ->
73 return ()
72 return ()
74
73