trac #1789 (warnings for missing import lists)
[ghc-hetmet.git] / compiler / rename / RnNames.lhs
index 9e16373..21731ad 100644 (file)
@@ -70,8 +70,8 @@ rnImports imports
             when (notNull prel_imports) $ addWarn (implicitPreludeWarn)
           )
 
-         stuff1 <- mapM (rnImportDecl this_mod) (prel_imports ++ ordinary)
-         stuff2 <- mapM (rnImportDecl this_mod) source
+         stuff1 <- mapM (rnImportDecl this_mod implicit_prelude) (prel_imports ++ ordinary)
+         stuff2 <- mapM (rnImportDecl this_mod implicit_prelude) source
          let (decls, rdr_env, imp_avails,hpc_usage) = combine (stuff1 ++ stuff2)
          return (decls, rdr_env, imp_avails,hpc_usage) 
 
@@ -86,11 +86,11 @@ rnImports imports
                    imp_avails1 `plusImportAvails` imp_avails2,
                   hpc_usage1 || hpc_usage2)
 
-rnImportDecl  :: Module
+rnImportDecl  :: Module -> Bool
              -> LImportDecl RdrName
              -> RnM (LImportDecl Name, GlobalRdrEnv, ImportAvails,AnyHpcUsage)
 
-rnImportDecl this_mod (L loc (ImportDecl loc_imp_mod_name mb_pkg want_boot
+rnImportDecl this_mod implicit_prelude (L loc (ImportDecl loc_imp_mod_name mb_pkg want_boot
                                          qual_only as_mod imp_details))
   = setSrcSpan loc $ do
 
@@ -104,6 +104,11 @@ rnImportDecl this_mod (L loc (ImportDecl loc_imp_mod_name mb_pkg want_boot
        imp_mod_name = unLoc loc_imp_mod_name
        doc = ppr imp_mod_name <+> ptext (sLit "is directly imported")
 
+    case imp_details of
+        (Just _) -> return ()
+        Nothing -> when (not (implicit_prelude && imp_mod_name == pRELUDE_NAME)) $
+            ifOptM Opt_WarnMissingImportList (addWarn (missingImportListWarn imp_mod_name))
+
     iface <- loadSrcInterface doc imp_mod_name want_boot mb_pkg
 
        -- Compiler sanity check: if the import didn't say
@@ -1447,6 +1452,10 @@ nullModuleExport :: ModuleName -> SDoc
 nullModuleExport mod
   = ptext (sLit "The export item `module") <+> ppr mod <> ptext (sLit "' exports nothing")
 
+missingImportListWarn :: ModuleName -> SDoc
+missingImportListWarn mod
+  = ptext (sLit "The module") <+> quotes (ppr mod) <+> ptext (sLit "is missing an import list")
+
 moduleWarn :: ModuleName -> WarningTxt -> SDoc
 moduleWarn mod (WarningTxt txt)
   = sep [ ptext (sLit "Module") <+> quotes (ppr mod) <> ptext (sLit ":"),