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
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
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
-- 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