on master help sign in
Detect when "exposed-modules" are not all found in `elm make`
03296b2Evan Czaplicki
builder/src/Build.hs+26−8
@@ -97,7 +97,7 @@ forkWithKey func dict =
97
97
98
98
99fromExposed :: Reporting.Style -> FilePath -> Details.Details -> NE.List ModuleName.Raw -> IO (Either Exit.BuildProblem ())
99fromExposed :: Reporting.Style -> FilePath -> Details.Details -> NE.List ModuleName.Raw -> IO (Either Exit.BuildProblem ())
100−fromExposed style root details (NE.List e es) =
100+fromExposed style root details exposed@(NE.List e es) =
101 Reporting.trackBuild style $ \key ->
101 Reporting.trackBuild style $ \key ->
102 do let env = makeEnv key root details
102 do let env = makeEnv key root details
103 dmvar <- Details.loadInterfaces root details
103 dmvar <- Details.loadInterfaces root details
@@ -121,7 +121,7 @@ fromExposed style root details (NE.List e es) =
121 putMVar rmvar resultMVars
121 putMVar rmvar resultMVars
122 results <- traverse readMVar resultMVars
122 results <- traverse readMVar resultMVars
123 writeDetails root details results
123 writeDetails root details results
124− return (detectProblems results) -- TODO error if "exposed-modules" are not found
124+ return (detectExposedProblems exposed results)
125
125
126
126
127
127
@@ -688,14 +688,19 @@ addNewLocal name result locals =
688
688
689
689
690
690
691−-- DETECT PROBLEMS
691+-- DETECT EXPOSED PROBLEMS
692
692
693
693
694−detectProblems :: Map.Map ModuleName.Raw Result -> Either Exit.BuildProblem ()
694+detectExposedProblems :: NE.List ModuleName.Raw -> Map.Map ModuleName.Raw Result -> Either Exit.BuildProblem ()
695−detectProblems results =
695+detectExposedProblems exposed results =
696+ case foldr addImportProblems [] exposed of
697+ p:ps ->
698+ Left (Exit.BuildProjectProblem (Exit.BP_MissingExposed (NE.List p ps)))
699+
700+ [] ->
696− case Map.foldr addErrors [] results of
701+ case Map.foldr addErrors [] results of
697− [] -> Right ()
702+ [] -> Right ()
698− e:es -> Left (Exit.BuildModuleProblems e es)
703+ e:es -> Left (Exit.BuildModuleProblems e es)
699
704
700
705
701addErrors :: Result -> [Error.Module] -> [Error.Module]
706addErrors :: Result -> [Error.Module] -> [Error.Module]
@@ -711,6 +716,19 @@ addErrors result errors =
711 RKernel -> errors
716 RKernel -> errors
712
717
713
718
719+addImportProblems :: Map.Map ModuleName.Raw Result -> ModuleName.Raw -> [(ModuleName.Raw, Import.Problem)] -> [(ModuleName.Raw, Import.Problem)]
720+addImportProblems results name problems =
721+ case results ! name of
722+ RNew _ _ _ -> problems
723+ RSame _ _ _ -> problems
724+ RCached _ _ -> problems
725+ RNotFound p -> (name, p) : problems
726+ RProblem _ -> problems
727+ RBlocked -> problems
728+ RForeign _ -> problems
729+ RKernel -> problems
730+
731+
714
732
715--------------------------------------------------------------------------------
733--------------------------------------------------------------------------------
716--------------------------------------------------------------------------------
734--------------------------------------------------------------------------------
builder/src/Reporting/Exit.hs+3
@@ -34,6 +34,7 @@ module Reporting.Exit
34
34
35
35
36import qualified Data.List as List
36import qualified Data.List as List
37+import qualified Data.NonEmptyList as NE
37import qualified Data.Utf8 as Utf8
38import qualified Data.Utf8 as Utf8
38
39
39import qualified Elm.Constraint as C
40import qualified Elm.Constraint as C
@@ -45,6 +46,7 @@ import qualified Http
45import qualified Json.Encode as Encode
46import qualified Json.Encode as Encode
46import Reporting.Doc ((<>))
47import Reporting.Doc ((<>))
47import qualified Reporting.Doc as D
48import qualified Reporting.Doc as D
49+import qualified Reporting.Error.Import as Import
48import qualified Reporting.Error.Json as Json
50import qualified Reporting.Error.Json as Json
49import qualified Reporting.Exit.Help as Help
51import qualified Reporting.Exit.Help as Help
50import qualified Reporting.Error as Error
52import qualified Reporting.Error as Error
@@ -386,6 +388,7 @@ data BuildProjectProblem
386 | BP_MainNameDuplicate ModuleName.Raw FilePath FilePath
388 | BP_MainNameDuplicate ModuleName.Raw FilePath FilePath
387 | BP_CannotLoadDependencies
389 | BP_CannotLoadDependencies
388 | BP_Cycle ModuleName.Raw [ModuleName.Raw]
390 | BP_Cycle ModuleName.Raw [ModuleName.Raw]
391+ | BP_MissingExposed (NE.List (ModuleName.Raw, Import.Problem))
389
392
390
393
391
394