[project @ 1999-06-25 12:26:27 by keithw]
authorkeithw <unknown>
Fri, 25 Jun 1999 12:26:27 +0000 (12:26 +0000)
committerkeithw <unknown>
Fri, 25 Jun 1999 12:26:27 +0000 (12:26 +0000)
Fix `defined but not used' warning to omit *all* identifiers beginning
with underscore, not just top-level ones, following Haskell report.

ghc/compiler/rename/Rename.lhs
ghc/compiler/rename/RnEnv.lhs

index a576923..bfb55af 100644 (file)
@@ -31,8 +31,7 @@ import RnEnv          ( availName, availNames, availsToNameSet,
 import Module           ( Module, ModuleName, pprModule, mkSearchPath, mkThisModule )
 import Name            ( Name, isLocallyDefined,
                          NamedThing(..), ImportReason(..), Provenance(..),
-                         pprOccName, nameOccName,
-                         getNameProvenance, occNameUserString, 
+                         pprOccName, getNameProvenance, 
                          maybeWiredInTyConName, maybeWiredInIdName, isWiredInName
                        )
 import Id              ( idType )
@@ -493,8 +492,7 @@ reportUnusedNames gbl_env avail_env (ExportEnv export_avails _) mentioned_names
 
 reportableUnusedName :: Name -> Bool
 reportableUnusedName name
-  = explicitlyImported (getNameProvenance name) &&
-    not (startsWithUnderscore (occNameUserString (nameOccName name)))
+  = explicitlyImported (getNameProvenance name)
   where
     explicitlyImported (LocalDef _ _)                       = True
        -- Report unused defns of local vars
@@ -503,12 +501,6 @@ reportableUnusedName name
     explicitlyImported other                                = False
        -- Don't report others
    
-       -- Haskell 98 encourages compilers to suppress warnings about
-       -- unused names in a pattern if they start with "_".
-    startsWithUnderscore ('_' : _) = True
-       -- Suppress warnings for names starting with an underscore
-    startsWithUnderscore other     = False
-
 rnStats :: [RenamedHsDecl] -> RnMG ()
 rnStats imp_decls
         | opt_D_dump_rn_trace || 
index 430a367..b2c8101 100644 (file)
@@ -24,6 +24,7 @@ import Name           ( Name, Provenance(..), ExportFlag(..), NamedThing(..),
                          mkLocalName, mkImportedLocalName, mkGlobalName, isSystemName,
                          nameOccName, setNameModule, nameModule,
                          pprOccName, isLocallyDefined, nameUnique, nameOccName,
+                          occNameUserString,
                          setNameProvenance, getNameProvenance, pprNameProvenance
                        )
 import NameSet
@@ -723,24 +724,33 @@ warnUnusedBinds warn_when_local names
 -------------------------
 
 warnUnusedGroup :: (Bool -> Bool) -> [Name] -> RnM d ()
-warnUnusedGroup _ []
-  = returnRn ()
-
 warnUnusedGroup emit_warning names
   | not (emit_warning is_local) = returnRn ()
   | otherwise
-  = pushSrcLocRn def_loc       $
-    addWarnRn                  $
-    sep [msg <> colon, nest 4 (fsep (punctuate comma (map ppr names)))]
+  = case filter isReportable names of
+      []       -> returnRn ()
+      repnames -> warn repnames
   where
-    name1 = head names
-    (is_local, def_loc, msg)
-       = case getNameProvenance name1 of
+  warn repnames = pushSrcLocRn def_loc $
+                  addWarnRn            $
+                  sep [msg <> colon, nest 4 (fsep (punctuate comma (map ppr repnames)))]
+
+  name1 = head names
+
+  (is_local, def_loc, msg)
+          = case getNameProvenance name1 of
                LocalDef loc _                       -> (True, loc, text "Defined but not used")
                NonLocalDef (UserImport mod loc _) _ ->
                 (True, loc, text "Imported from" <+> quotes (ppr mod) <+> 
                                                      text "but not used")
                other -> (False, getSrcLoc name1, text "Strangely defined but not used")
+
+  isReportable = not . startsWithUnderscore . occNameUserString  . nameOccName
+    -- Haskell 98 encourages compilers to suppress warnings about
+    -- unused names in a pattern if they start with "_".
+  startsWithUnderscore ('_' : _) = True
+    -- Suppress warnings for names starting with an underscore
+  startsWithUnderscore other     = False
 \end{code}
 
 \begin{code}