@@ -69,7 +69,7 @@ makeEnv :: Reporting.BKey -> FilePath -> Details.Details -> Env
69makeEnv key root (Details.Details _ validOutline locals foreigns _) =
69makeEnv key root (Details.Details _ validOutline locals foreigns _) =
70 case validOutline of
70 case validOutline of
71 Details.ValidApp (Outline.AppOutline _ srcDirs _ _ _ _) ->
71 Details.ValidApp (Outline.AppOutline _ srcDirs _ _ _ _) ->
72− Env key root Pkg.dummyName srcDirs locals foreigns
72+ Env key root Pkg.dummyName (NE.toList srcDirs) locals foreigns
74 Details.ValidPkg (Outline.PkgOutline pkg _ _ _ _ _ _ _) _ ->
74 Details.ValidPkg (Outline.PkgOutline pkg _ _ _ _ _ _ _) _ ->
75 Env key root pkg ["src"] locals foreigns
75 Env key root pkg ["src"] locals foreigns
@@ -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)
124+ return (detectProblems results) -- TODO error if "exposed-modules" are not found
@@ -174,7 +174,7 @@ fromMains style root details paths =
174 rmvar <- newEmptyMVar
174 rmvar <- newEmptyMVar
175 resultsMVars <- forkWithKey (checkModule env foreigns rmvar) statuses
175 resultsMVars <- forkWithKey (checkModule env foreigns rmvar) statuses
176 putMVar rmvar resultsMVars
176 putMVar rmvar resultsMVars
177− rmainMVars <- traverse (fork . checkMain env foreigns resultsMVars) smains
177+ rmainMVars <- traverse (fork . checkMain env resultsMVars) smains
178 results <- traverse readMVar resultsMVars
178 results <- traverse readMVar resultsMVars
179 writeDetails root details results
179 writeDetails root details results
180 toArtifacts env foreigns results <$> traverse readMVar rmainMVars
180 toArtifacts env foreigns results <$> traverse readMVar rmainMVars
@@ -340,7 +340,7 @@ checkModule env@(Env _ root pkg _ _ _) foreigns resultsMVar name status =
340 return $ RProblem $ Error.Module name path time source $
340 return $ RProblem $ Error.Module name path time source $
341 case Parse.fromByteString pkg source of
341 case Parse.fromByteString pkg source of
342 Right (Src.Module _ _ imports _ _ _ _ _) ->
342 Right (Src.Module _ _ imports _ _ _ _ _) ->
343− Error.BadImports (toImportErrors foreigns results imports problems)
343+ Error.BadImports (toImportErrors env results imports problems)
345 Left err ->
345 Left err ->
346 Error.BadSyntax err
346 Error.BadSyntax err
@@ -367,7 +367,7 @@ checkModule env@(Env _ root pkg _ _ _) foreigns resultsMVar name status =
368 DepsNotFound problems ->
368 DepsNotFound problems ->
369 return $ RProblem $ Error.Module name path time source $
369 return $ RProblem $ Error.Module name path time source $
370− Error.BadImports (toImportErrors foreigns results imports problems)
370+ Error.BadImports (toImportErrors env results imports problems)
372 SBadImport importProblem ->
372 SBadImport importProblem ->
373 return (RNotFound importProblem)
373 return (RNotFound importProblem)
@@ -447,19 +447,24 @@ checkDepsHelp root results deps new same cached importProblems isBlocked =
447-- TO IMPORT ERROR
447-- TO IMPORT ERROR
450−toImportErrors :: Dependencies -> ResultDict -> [Src.Import] -> NE.List (ModuleName.Raw, Import.Problem) -> NE.List Import.Error
450+toImportErrors :: Env -> ResultDict -> [Src.Import] -> NE.List (ModuleName.Raw, Import.Problem) -> NE.List Import.Error
451−toImportErrors foreigns results imports problems =
451+toImportErrors (Env _ _ _ _ locals foreigns) results imports problems =
453 knownModules =
453 knownModules =
454− Set.union
454+ Set.unions
455− (Set.fromList (map ModuleName._module (Map.keys foreigns)))
455+ [ Map.keysSet foreigns
456− (Map.keysSet results)
456+ , Map.keysSet locals
457+ , Map.keysSet results
461+ Set.difference knownModules (Set.fromList (map Src.getImportName imports))
458 regionDict =
463 regionDict =
459 Map.fromList (map (\(Src.Import (A.At region name) _ _) -> (name, region)) imports)
464 Map.fromList (map (\(Src.Import (A.At region name) _ _) -> (name, region)) imports)
461 toError (name, problem) =
466 toError (name, problem) =
462− Import.Error (regionDict ! name) name knownModules problem
467+ Import.Error (regionDict ! name) name unimportedModules problem
464 fmap toError problems
469 fmap toError problems
@@ -788,6 +793,7 @@ isInsideSrcDirs (Env _ root _ srcDirs _ _) path absolutePath =
788 (exits, maybes) =
793 (exits, maybes) =
789 Either.partitionEithers (map (isInsideSrcDirsHelp relativeSegments) srcDirs)
794 Either.partitionEithers (map (isInsideSrcDirsHelp relativeSegments) srcDirs)
796+ -- TODO make sure this is all correct
791 case (exits, Maybe.catMaybes maybes) of
797 case (exits, Maybe.catMaybes maybes) of
792 (_, [(_,name)]) -> Right (Location absolutePath path (LInside name))
798 (_, [(_,name)]) -> Right (Location absolutePath path (LInside name))
793 ([], []) -> Right (Location absolutePath path (LOutside path))
799 ([], []) -> Right (Location absolutePath path (LOutside path))
@@ -874,8 +880,8 @@ data MainResult
874 | ROutsideBlocked
880 | ROutsideBlocked
877−checkMain :: Env -> Dependencies -> ResultDict -> MainStatus -> IO MainResult
883+checkMain :: Env -> ResultDict -> MainStatus -> IO MainResult
878−checkMain env@(Env _ root _ _ _ _) foreigns results pendingMain =
884+checkMain env@(Env _ root _ _ _ _) results pendingMain =
879 case pendingMain of
885 case pendingMain of
880 SInside name ->
886 SInside name ->
881 return (RInside name)
887 return (RInside name)
@@ -904,7 +910,7 @@ checkMain env@(Env _ root _ _ _ _) foreigns results pendingMain =
905 DepsNotFound problems ->
911 DepsNotFound problems ->
906 return $ ROutsideErr $ Error.Module (Src.getName modul) path time source $
912 return $ ROutsideErr $ Error.Module (Src.getName modul) path time source $
907− Error.BadImports (toImportErrors foreigns results imports problems)
913+ Error.BadImports (toImportErrors env results imports problems)
910compileOutside :: Env -> Details.Local -> B.ByteString -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> MainResult
916compileOutside :: Env -> Details.Local -> B.ByteString -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> MainResult