git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Add warning for no prelude
commit20cf75a45747c14fadc8c903d37192bc22567da7 authorPhil Freeman <paf31@cantab.net> dateSat 18 Apr 2015, 15:31 (12 years ago) parentddc749a
2 files changed+17−1
src/Language/PureScript.hs+12−1 src/Language/PureScript/Errors.hs+5
src/Language/PureScript.hs+12−1
@@ -97,6 +97,7 @@ compile' :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadWriter
9797 => Environment -> [Module] -> [String] -> m (String, String, Environment)
9898compile' env ms prefix = do
9999 noPrelude <- asks optionsNoPrelude
100+ unless noPrelude (checkPreludeIsDefined ms)
100101 additional <- asks optionsAdditional
101102 mainModuleIdent <- asks (fmap moduleNameFromString . optionsMain)
102103 (sorted, _) <- sortModules $ map importPrim $ if noPrelude then ms else map importPrelude ms
@@ -175,6 +176,7 @@ make :: forall m. (Functor m, Applicative m, Monad m, MonadMake m)
175176 => FilePath -> [(Either RebuildPolicy FilePath, Module)] -> [String] -> m Environment
176177make outputDir ms prefix = do
177178 noPrelude <- asks optionsNoPrelude
179+ unless noPrelude (checkPreludeIsDefined (map snd ms))
178180 let filePathMap = M.fromList (map (\(fp, Module _ mn _ _) -> (mn, fp)) ms)
179181
180182 (sorted, graph) <- sortModules $ map importPrim $ if noPrelude then map snd ms else map (importPrelude . snd) ms
@@ -248,6 +250,12 @@ make outputDir ms prefix = do
248250 [m'@(Module _ moduleName'' _ _)] | moduleName'' == moduleName' -> (:) (False, m') <$> rebuildIfNecessary graph toRebuild ms'
249251 _ -> throwError . errorMessage . InvalidExternsFile $ externsFile
250252
253+checkPreludeIsDefined :: (MonadWriter MultipleErrors m) => [Module] -> m ()
254+checkPreludeIsDefined ms = do
255+ let mns = map getModuleName ms
256+ unless (preludeModuleName `elem` mns) $
257+ tell (errorMessage PreludeNotPresent)
258+
251259reverseDependencies :: ModuleGraph -> M.Map ModuleName [ModuleName]
252260reverseDependencies g = combine [ (dep, mn) | (mn, deps) <- g, dep <- deps ]
253261 where
@@ -269,8 +277,11 @@ addDefaultImport toImport m@(Module coms mn decls exps) =
269277importPrim :: Module -> Module
270278importPrim = addDefaultImport (ModuleName [ProperName C.prim])
271279
280+preludeModuleName :: ModuleName
281+preludeModuleName = ModuleName [ProperName C.prelude]
282+
272283importPrelude :: Module -> Module
273−importPrelude = addDefaultImport (ModuleName [ProperName C.prelude])
284+importPrelude = addDefaultImport preludeModuleName
274285
275286version :: Version
276287version = Paths.version
src/Language/PureScript/Errors.hs+5
@@ -109,6 +109,7 @@ data ErrorMessage
109109 | InvalidInstanceHead Type
110110 | TransitiveExportError DeclarationRef [DeclarationRef]
111111 | ShadowedName Ident
112+ | PreludeNotPresent
112113 | ErrorInExpression Expr ErrorMessage
113114 | ErrorInModule ModuleName ErrorMessage
114115 | ErrorInInstance (Qualified ProperName) [Type] ErrorMessage
@@ -201,6 +202,7 @@ errorCode InvalidNewtype = "InvalidNewtype"
201202errorCode (InvalidInstanceHead _) = "InvalidInstanceHead"
202203errorCode (TransitiveExportError _ _) = "TransitiveExportError"
203204errorCode (ShadowedName _) = "ShadowedName"
205+errorCode PreludeNotPresent = "PreludeNotPresent"
204206errorCode (NotYetDefined _ e) = errorCode e
205207errorCode (ErrorUnifyingTypes _ _ e) = errorCode e
206208errorCode (ErrorInExpression _ e) = errorCode e
@@ -382,6 +384,9 @@ prettyPrintSingleError full e = prettyPrintErrorMessage (if full then e else sim
382384 go (TransitiveExportError x ys) = paras $ (line $ "An export for " ++ prettyPrintExport x ++ " requires the following to also be exported: ")
383385 : map (line . prettyPrintExport) ys
384386 go (ShadowedName nm) = line $ "Name '" ++ show nm ++ "' was shadowed."
387+ go PreludeNotPresent = paras [ line $ "There is no Prelude module loaded, and the --no-prelude option was not specified."
388+ , line $ "You probably need to install the Prelude and other dependencies using Bower."
389+ ]
385390 go (ErrorUnifyingTypes t1 t2 err) = paras [ line "Error unifying type "
386391 , indent $ line $ prettyPrintType t1
387392 , line "with type"