From 2ee130cd71d175dfad4120e8ddf2db0588043696 Mon Sep 17 00:00:00 2001 From: "amsay@amsay.net" Date: Fri, 18 Jun 2010 15:06:49 +0000 Subject: [PATCH] trac #1789 (warnings for missing import lists) --- compiler/main/DynFlags.hs | 2 ++ compiler/rename/RnNames.lhs | 17 +++++++++++++---- docs/users_guide/flags.xml | 7 +++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 0083ca3..6cde987 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -164,6 +164,7 @@ data DynFlag | Opt_WarnIncompletePatterns | Opt_WarnIncompletePatternsRecUpd | Opt_WarnMissingFields + | Opt_WarnMissingImportList | Opt_WarnMissingMethods | Opt_WarnMissingSigs | Opt_WarnNameShadowing @@ -1493,6 +1494,7 @@ fFlags = [ ( "warn-incomplete-patterns", Opt_WarnIncompletePatterns, const Supported ), ( "warn-incomplete-record-updates", Opt_WarnIncompletePatternsRecUpd, const Supported ), ( "warn-missing-fields", Opt_WarnMissingFields, const Supported ), + ( "warn-missing-import-lists", Opt_WarnMissingImportList, const Supported ), ( "warn-missing-methods", Opt_WarnMissingMethods, const Supported ), ( "warn-missing-signatures", Opt_WarnMissingSigs, const Supported ), ( "warn-name-shadowing", Opt_WarnNameShadowing, const Supported ), diff --git a/compiler/rename/RnNames.lhs b/compiler/rename/RnNames.lhs index 9e16373..21731ad 100644 --- a/compiler/rename/RnNames.lhs +++ b/compiler/rename/RnNames.lhs @@ -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 ":"), diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml index 1aec575..389a445 100644 --- a/docs/users_guide/flags.xml +++ b/docs/users_guide/flags.xml @@ -1129,6 +1129,13 @@ + + warn when explicit imports lack an import list + dynamic + + + + warn when class methods are undefined dynamic -- 1.7.10.4