git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #1655 from purescript/unused-classes
5241a99Gary Burgess
src/Language/PureScript/Linter/Imports.hs+9−2
@@ -25,7 +25,11 @@ import Language.PureScript.Sugar.Names.Imports
25import qualified Language.PureScript.Constants as C
25import qualified Language.PureScript.Constants as C
26
26
27-- | Imported name used in some type or expression.
27-- | Imported name used in some type or expression.
28+data Name
29+ = IdentName (Qualified Ident)
30+ | TypeName (Qualified ProperName)
28−data Name = IdentName (Qualified Ident) | IsProperName (Qualified ProperName) | DctorName (Qualified ProperName)
31+ | DctorName (Qualified ProperName)
32+ | ClassName (Qualified ProperName)
29
33
30-- | Map of module name to list of imported names from that module which have been used.
34-- | Map of module name to list of imported names from that module which have been used.
31type UsedImports = M.Map ModuleName [Name]
35type UsedImports = M.Map ModuleName [Name]
@@ -63,6 +67,7 @@ findUnusedImports (Module _ _ _ mdecls mexports) env usedImps = do
63 let ddiff = ctors \\ usedDctors
67 let ddiff = ctors \\ usedDctors
64 in unless (null ddiff) $ tell $ errorMessage $ UnusedDctorExplicitImport tn ddiff
68 in unless (null ddiff) $ tell $ errorMessage $ UnusedDctorExplicitImport tn ddiff
65 _ -> return ()
69 _ -> return ()
70+
66 return ()
71 return ()
67
72
68 _ -> return ()
73 _ -> return ()
@@ -102,7 +107,8 @@ findUnusedImports (Module _ _ _ mdecls mexports) env usedImps = do
102
107
103matchName :: (ProperName -> Maybe ProperName) -> Maybe ModuleName -> Name -> Maybe String
108matchName :: (ProperName -> Maybe ProperName) -> Maybe ModuleName -> Name -> Maybe String
104matchName _ qual (IdentName (Qualified q x)) | q == qual = Just $ showIdent x
109matchName _ qual (IdentName (Qualified q x)) | q == qual = Just $ showIdent x
110+matchName _ qual (TypeName (Qualified q x)) | q == qual = Just $ runProperName x
105−matchName _ qual (IsProperName (Qualified q x)) | q == qual = Just $ runProperName x
111+matchName _ qual (ClassName (Qualified q x)) | q == qual = Just $ runProperName x
106matchName lookupDc qual (DctorName (Qualified q x)) | q == qual = runProperName <$> lookupDc x
112matchName lookupDc qual (DctorName (Qualified q x)) | q == qual = runProperName <$> lookupDc x
107matchName _ _ _ = Nothing
113matchName _ _ _ = Nothing
108
114
@@ -114,6 +120,7 @@ runDeclRef :: DeclarationRef -> Maybe String
114runDeclRef (PositionedDeclarationRef _ _ ref) = runDeclRef ref
120runDeclRef (PositionedDeclarationRef _ _ ref) = runDeclRef ref
115runDeclRef (ValueRef ident) = Just $ showIdent ident
121runDeclRef (ValueRef ident) = Just $ showIdent ident
116runDeclRef (TypeRef pn _) = Just $ runProperName pn
122runDeclRef (TypeRef pn _) = Just $ runProperName pn
123+runDeclRef (TypeClassRef pn) = Just $ runProperName pn
117runDeclRef _ = Nothing
124runDeclRef _ = Nothing
118
125
119getTypeRef :: DeclarationRef -> Maybe (ProperName, Maybe [ProperName])
126getTypeRef :: DeclarationRef -> Maybe (ProperName, Maybe [ProperName])
src/Language/PureScript/Sugar/Names.hs+2−2
@@ -226,13 +226,13 @@ renameInModule env imports (Module ss coms mn decls exps) =
226 updateConstraints pos = traverse (\(name, ts) -> (,) <$> updateClassName name pos <*> traverse (updateTypesEverywhere pos) ts)
226 updateConstraints pos = traverse (\(name, ts) -> (,) <$> updateClassName name pos <*> traverse (updateTypesEverywhere pos) ts)
227
227
228 updateTypeName :: Qualified ProperName -> Maybe SourceSpan -> m (Qualified ProperName)
228 updateTypeName :: Qualified ProperName -> Maybe SourceSpan -> m (Qualified ProperName)
229− updateTypeName = update UnknownType (importedTypes imports) (resolveType . exportedTypes) IsProperName
229+ updateTypeName = update UnknownType (importedTypes imports) (resolveType . exportedTypes) TypeName
230
230
231 updateDataConstructorName :: Qualified ProperName -> Maybe SourceSpan -> m (Qualified ProperName)
231 updateDataConstructorName :: Qualified ProperName -> Maybe SourceSpan -> m (Qualified ProperName)
232 updateDataConstructorName = update (flip UnknownDataConstructor Nothing) (importedDataConstructors imports) (resolveDctor . exportedTypes) DctorName
232 updateDataConstructorName = update (flip UnknownDataConstructor Nothing) (importedDataConstructors imports) (resolveDctor . exportedTypes) DctorName
233
233
234 updateClassName :: Qualified ProperName -> Maybe SourceSpan -> m (Qualified ProperName)
234 updateClassName :: Qualified ProperName -> Maybe SourceSpan -> m (Qualified ProperName)
235− updateClassName = update UnknownTypeClass (importedTypeClasses imports) (resolve . exportedTypeClasses) IsProperName
235+ updateClassName = update UnknownTypeClass (importedTypeClasses imports) (resolve . exportedTypeClasses) ClassName
236
236
237 updateValueName :: Qualified Ident -> Maybe SourceSpan -> m (Qualified Ident)
237 updateValueName :: Qualified Ident -> Maybe SourceSpan -> m (Qualified Ident)
238 updateValueName = update UnknownValue (importedValues imports) (resolve . exportedValues) IdentName
238 updateValueName = update UnknownValue (importedValues imports) (resolve . exportedValues) IdentName