hsdev 0.1.6.4 → 0.1.6.5
raw patch · 2 files changed
+15/−11 lines, 2 files
Files
- hsdev.cabal +1/−1
- src/HsDev/Symbols/Resolve.hs +14/−10
hsdev.cabal view
@@ -2,7 +2,7 @@ -- see http://haskell.org/cabal/users-guide/ name: hsdev -version: 0.1.6.4 +version: 0.1.6.5 synopsis: Haskell development library and tool with support of autocompletion, symbol info, go to declaration, find references etc. description: Haskell development library and tool with support of autocompletion, symbol info, go to declaration, find references, hayoo search etc.
src/HsDev/Symbols/Resolve.hs view
@@ -8,11 +8,11 @@ ) where import Control.Arrow -import Control.Lens (makeLenses, view, preview, set, over, _Just) +import Control.Lens (makeLenses, view, preview, set, _Just) import Control.Monad.Reader import Control.Monad.State import Data.Function (on) -import Data.List (sortBy, groupBy) +import Data.List (sortBy, groupBy, delete, nubBy) import qualified Data.Map as M import Data.Maybe (fromMaybe, listToMaybe, catMaybes) import Data.Maybe.JustIf @@ -78,7 +78,7 @@ let exported' = case view moduleExports m of Nothing -> thisDecls - Just exports' -> catMaybes $ exported <$> scope' <*> exports' + Just exports' -> unique $ catMaybes $ exported <$> scope' <*> exports' return $ ResolvedModule m (sortDeclarations scope') (sortDeclarations exported') thisDecls :: [Declaration] thisDecls = map (selfDefined . selfImport) $ view moduleDeclarations m @@ -91,6 +91,10 @@ rm <- act modify $ M.insert (view (resolvedModule . moduleId) rm) rm return rm + unique :: [Declaration] -> [Declaration] + unique = nubBy ((==) `on` declId) . sortBy (comparing declId) + declId :: Declaration -> (Text, Maybe ModuleId) + declId = view declarationName &&& view declarationDefined exported :: Declaration -> Export -> Maybe Declaration exported decl' (ExportName q n p) @@ -127,25 +131,25 @@ inDepsOf' file p] CabalModule cabal _ _ -> selectImport i [inCabal cabal] ModuleSource _ -> selectImport i [byCabal] - liftM (filterImportList . concatMap (view resolvedExports)) $ mapM resolveModule ms + fromMaybe [] <$> traverse (liftM (filterImportList . view resolvedExports) . resolveModule) ms setImport :: Import -> Declaration -> Declaration - setImport i' = over declarationImported (Just [i'] `mappend`) - selectImport :: Import -> [ModuleId -> Bool] -> ResolveM [Module] + setImport i' = set declarationImported (Just [i']) + selectImport :: Import -> [ModuleId -> Bool] -> ResolveM (Maybe Module) selectImport i' fs = do db <- ask return $ + listToMaybe $ + newestPackage $ fromMaybe [] $ listToMaybe $ dropWhile null - [selectModules (select' f) db | f <- byImport i' : fs] + [selectModules (select' f) db | f <- fs] where select' f md = view moduleName md == view importModuleName i' && f (view moduleId md) filterImportList :: [Declaration] -> [Declaration] filterImportList = case view importList i of Nothing -> id Just il -> filter (passImportList il . view declarationName) - byImport :: Import -> ModuleId -> Bool - byImport i' m' = view importModuleName i' == view moduleIdName m' - deps f p = concatMap (view infoDepends) $ fileTargets p f + deps f p = delete (view projectName p) $ concatMap (view infoDepends) $ fileTargets p f inDepsOf' f p m' = any (`inPackage` m') (deps f p) -- | Merge imported declarations