Commit b23e6e00 authored by sof's avatar sof

[project @ 2003-09-23 16:52:44 by sof]

If the user explicitly did an instances-only import, i.e.,
"import Foo ()", don't emit an unused-import warning.
parent 9c9c4ea9
......@@ -519,8 +519,8 @@ mkUsageInfo hsc_env eps
pit = eps_PIT eps
import_all mod = case lookupModuleEnv dir_imp_mods mod of
Just (_,imp_all) -> imp_all
Nothing -> False
Just (_, Nothing) -> True
_ -> False
-- ent_map groups together all the things imported and used
-- from a particular module in this package
......
......@@ -193,9 +193,10 @@ importsFromImportDecl this_mod
not_self (m, _) = m /= this_mod_name
import_all = case imp_spec of
(Just (False, _)) -> False -- Imports are spec'd explicitly
other -> True -- Everything is imported,
-- (or almost everything [hiding])
Just (isHid, ls) -- Imports are spec'd explicitly
| not isHid -> Just (not (null ls))
_ -> Nothing -- Everything is imported,
-- (or almost everything [hiding])
qual_mod_name = case as_mod of
Nothing -> imp_mod_name
......@@ -788,14 +789,21 @@ reportUnusedNames gbl_env dus
direct_import_mods = map (moduleName . fst)
(moduleEnvElts (imp_mods imports))
hasEmptyImpList :: ModuleName -> Bool
hasEmptyImpList m =
case lookupModuleEnvByName (imp_mods imports) m of
Just (_,Just x) -> not x
_ -> False
-- unused_imp_mods are the directly-imported modules
-- that are not mentioned in minimal_imports1
-- [Note: not 'minimal_imports', because that includes direcly-imported
-- modules even if we use nothing from them; see notes above]
unused_imp_mods = [m | m <- direct_import_mods,
isNothing (lookupFM minimal_imports1 m),
m /= pRELUDE_Name]
m /= pRELUDE_Name,
not (hasEmptyImpList m)]
module_unused :: Module -> Bool
module_unused mod = moduleName mod `elem` unused_imp_mods
......
......@@ -595,10 +595,16 @@ data ImportAvails
-- combine stuff coming from different (unqualified)
-- imports of the same module
imp_mods :: ModuleEnv (Module, Bool),
imp_mods :: ModuleEnv (Module, Maybe Bool),
-- Domain is all directly-imported modules
-- Bool is True if there was an unrestricted import
-- (i.e. not a selective list)
-- Maybe value answers the question "is the import restricted?"
-- Nothing => unrestricted import (e.g., "import Foo")
-- Just True => restricted import, at least one entity (e.g., "import Foo(x)")
-- Just False => fully restricted import (e.g., "import Foo ()")
--
-- A distinction is made between the first and the third in order
-- to more precisely emit warnings about unused imports.
--
-- We need the Module in the range because we can't get
-- the keys of a ModuleEnv
-- Used
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment