packages feed

hsdev 0.3.2.0 → 0.3.2.1

raw patch · 5 files changed

+42/−26 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ HsDev.Scan.Browse: uniqueModuleLocations :: [ModuleLocation] -> [ModuleLocation]
+ System.Directory.Paths: normalize :: Paths a => a -> a
- HsDev.Project.Types: entity :: forall a_a1hOG a_a1jc6. Lens (Extensions a_a1hOG) (Extensions a_a1jc6) a_a1hOG a_a1jc6
+ HsDev.Project.Types: entity :: forall a_a1hUl a_a1jhL. Lens (Extensions a_a1hUl) (Extensions a_a1jhL) a_a1hUl a_a1jhL
- HsDev.Project.Types: extensions :: forall a_a1hOG. Lens' (Extensions a_a1hOG) [Extension]
+ HsDev.Project.Types: extensions :: forall a_a1hUl. Lens' (Extensions a_a1hUl) [Extension]
- HsDev.Project.Types: ghcOptions :: forall a_a1hOG. Lens' (Extensions a_a1hOG) [Text]
+ HsDev.Project.Types: ghcOptions :: forall a_a1hUl. Lens' (Extensions a_a1hUl) [Text]
- HsDev.Scan.Browse: ghcModuleLocation :: MonadIO m => PackageConfig -> Module -> Bool -> m ModuleLocation
+ HsDev.Scan.Browse: ghcModuleLocation :: PackageConfig -> Module -> Bool -> ModuleLocation
- HsDev.Server.Message: message :: forall a_a1HpJ a_a1HuY. Lens (Message a_a1HpJ) (Message a_a1HuY) a_a1HpJ a_a1HuY
+ HsDev.Server.Message: message :: forall a_a1Hvo a_a1HAD. Lens (Message a_a1Hvo) (Message a_a1HAD) a_a1Hvo a_a1HAD
- HsDev.Server.Message: messageId :: forall a_a1HpJ. Lens' (Message a_a1HpJ) (Maybe String)
+ HsDev.Server.Message: messageId :: forall a_a1Hvo. Lens' (Message a_a1Hvo) (Maybe String)
- HsDev.Symbols.Types: inspectedKey :: forall k_a2hPF t_a2hPG a_a2hPH k_a2kOc. Lens (Inspected k_a2hPF t_a2hPG a_a2hPH) (Inspected k_a2kOc t_a2hPG a_a2hPH) k_a2hPF k_a2kOc
+ HsDev.Symbols.Types: inspectedKey :: forall k_a2hVk t_a2hVl a_a2hVm k_a2kTR. Lens (Inspected k_a2hVk t_a2hVl a_a2hVm) (Inspected k_a2kTR t_a2hVl a_a2hVm) k_a2hVk k_a2kTR
- HsDev.Symbols.Types: inspection :: forall k_a2hPF t_a2hPG a_a2hPH. Lens' (Inspected k_a2hPF t_a2hPG a_a2hPH) Inspection
+ HsDev.Symbols.Types: inspection :: forall k_a2hVk t_a2hVl a_a2hVm. Lens' (Inspected k_a2hVk t_a2hVl a_a2hVm) Inspection
- HsDev.Symbols.Types: inspectionResult :: forall k_a2hPF t_a2hPG a_a2hPH a_a2kOd. Lens (Inspected k_a2hPF t_a2hPG a_a2hPH) (Inspected k_a2hPF t_a2hPG a_a2kOd) (Either HsDevError a_a2hPH) (Either HsDevError a_a2kOd)
+ HsDev.Symbols.Types: inspectionResult :: forall k_a2hVk t_a2hVl a_a2hVm a_a2kTS. Lens (Inspected k_a2hVk t_a2hVl a_a2hVm) (Inspected k_a2hVk t_a2hVl a_a2kTS) (Either HsDevError a_a2hVm) (Either HsDevError a_a2kTS)
- HsDev.Symbols.Types: inspectionTags :: forall k_a2hPF t_a2hPG a_a2hPH t_a2kOe. Lens (Inspected k_a2hPF t_a2hPG a_a2hPH) (Inspected k_a2hPF t_a2kOe a_a2hPH) (Set t_a2hPG) (Set t_a2kOe)
+ HsDev.Symbols.Types: inspectionTags :: forall k_a2hVk t_a2hVl a_a2hVm t_a2kTT. Lens (Inspected k_a2hVk t_a2hVl a_a2hVm) (Inspected k_a2hVk t_a2kTT a_a2hVm) (Set t_a2hVl) (Set t_a2kTT)
- HsDev.Symbols.Types: scopeQualifier :: forall a_a2hPI. Lens' (Scoped a_a2hPI) (Maybe Text)
+ HsDev.Symbols.Types: scopeQualifier :: forall a_a2hVn. Lens' (Scoped a_a2hVn) (Maybe Text)
- HsDev.Symbols.Types: scoped :: forall a_a2hPI a_a2kJk. Lens (Scoped a_a2hPI) (Scoped a_a2kJk) a_a2hPI a_a2kJk
+ HsDev.Symbols.Types: scoped :: forall a_a2hVn a_a2kOZ. Lens (Scoped a_a2hVn) (Scoped a_a2kOZ) a_a2hVn a_a2kOZ
- HsDev.Tools.Types: note :: forall a_a1Kx0 a_a1KIi. Lens (Note a_a1Kx0) (Note a_a1KIi) a_a1Kx0 a_a1KIi
+ HsDev.Tools.Types: note :: forall a_a1KCF a_a1KNX. Lens (Note a_a1KCF) (Note a_a1KNX) a_a1KCF a_a1KNX
- HsDev.Tools.Types: noteLevel :: forall a_a1Kx0. Lens' (Note a_a1Kx0) (Maybe Severity)
+ HsDev.Tools.Types: noteLevel :: forall a_a1KCF. Lens' (Note a_a1KCF) (Maybe Severity)
- HsDev.Tools.Types: noteRegion :: forall a_a1Kx0. Lens' (Note a_a1Kx0) Region
+ HsDev.Tools.Types: noteRegion :: forall a_a1KCF. Lens' (Note a_a1KCF) Region
- HsDev.Tools.Types: noteSource :: forall a_a1Kx0. Lens' (Note a_a1Kx0) ModuleLocation
+ HsDev.Tools.Types: noteSource :: forall a_a1KCF. Lens' (Note a_a1KCF) ModuleLocation

Files

hsdev.cabal view
@@ -1,5 +1,5 @@ name:                hsdev-version:             0.3.2.0+version:             0.3.2.1 synopsis:            Haskell development library description:   Haskell development library and tool with support of autocompletion, symbol info, go to declaration, find references, hayoo search etc.
src/HsDev/Database/Update.hs view
@@ -344,10 +344,12 @@ 			mlocs <- liftM 				(filter (`S.member` packageDbMods)) $ 				(inSessionGhc $ listModules opts pdbs packages')-			Log.sendLog Log.Trace $ "{} modules found" ~~ length mlocs 			let+				umlocs = uniqueModuleLocations mlocs+			Log.sendLog Log.Trace $ "{} modules found, {} unique" ~~ length mlocs ~~ length umlocs+			let 				packageDbMods' = SQLite.query "select m.id, m.file, m.cabal, m.install_dirs, m.package_name, m.package_version, m.installed_name, m.exposed, m.other_location, m.inspection_time, m.inspection_opts from modules as m, package_dbs as ps where m.package_name == ps.package_name and m.package_version == ps.package_version and ps.package_db == ?;" (SQLite.Only (topPackageDb pdbs))-			scan packageDbMods' ((,,) <$> mlocs <*> pure [] <*> pure Nothing) opts $ \mlocs' -> do+			scan packageDbMods' ((,,) <$> umlocs <*> pure [] <*> pure Nothing) opts $ \mlocs' -> do 				ms <- inSessionGhc $ browseModules opts pdbs (mlocs' ^.. each . _1) 				Log.sendLog Log.Trace $ "scanned {} modules" ~~ length ms 				sendUpdateAction $ timer "updated package-db modules" $ do@@ -375,10 +377,12 @@ 			mlocs <- liftM 				(filter (`S.member` packageDbMods)) $ 				(inSessionGhc $ listModules opts pdbs packages')-			Log.sendLog Log.Trace $ "{} modules found" ~~ length mlocs 			let+				umlocs = uniqueModuleLocations mlocs+			Log.sendLog Log.Trace $ "{} modules found, {} unique" ~~ length mlocs ~~ length umlocs+			let 				packageDbStackMods = liftM concat $ forM (packageDbs pdbs) $ \pdb -> SQLite.query "select m.id, m.file, m.cabal, m.install_dirs, m.package_name, m.package_version, m.installed_name, m.exposed, m.other_location, m.inspection_time, m.inspection_opts from modules as m, package_dbs as ps where m.package_name == ps.package_name and m.package_version == ps.package_version and ps.package_db == ?;" (SQLite.Only pdb)-			scan packageDbStackMods ((,,) <$> mlocs <*> pure [] <*> pure Nothing) opts $ \mlocs' -> do+			scan packageDbStackMods ((,,) <$> umlocs <*> pure [] <*> pure Nothing) opts $ \mlocs' -> do 				ms <- inSessionGhc $ browseModules opts pdbs (mlocs' ^.. each . _1) 				Log.sendLog Log.Trace $ "scanned {} modules" ~~ length ms 				sendUpdateAction $ timer "updated package-db-stack modules" $ do
src/HsDev/Scan/Browse.hs view
@@ -5,6 +5,7 @@ 	listModules, 	browseModules, browseModules', 	-- * Helpers+	uniqueModuleLocations, 	readPackage, readPackageConfig, ghcModuleLocation, 	packageConfigs, packageDbModules, lookupModule_, 	modulesPackages, modulesPackagesGroups, withEachPackage,@@ -32,8 +33,8 @@ import HsDev.Error import HsDev.Tools.Ghc.Worker (GhcM, tmpSession, formatType) import HsDev.Tools.Ghc.Compat as Compat-import HsDev.Util (ordNub)-import System.Directory.Paths (canonicalize)+import HsDev.Util (ordNub, uniqueBy)+import System.Directory.Paths (fromFilePath, normalize)  import qualified ConLike as GHC import qualified DataCon as GHC@@ -72,7 +73,7 @@ listModules opts dbs pkgs = do 	tmpSession dbs (opts ++ packagesOpts) 	ms <- packageDbModules-	sequence [ghcModuleLocation p m e | (p, m, e) <- ms]+	return $ ordNub [ghcModuleLocation p m e | (p, m, e) <- ms] 	where 		packagesOpts = ["-package " ++ show p | p <- pkgs] @@ -82,24 +83,20 @@ browseModules :: [String] -> PackageDbStack -> [ModuleLocation] -> GhcM [InspectedModule] browseModules opts dbs mlocs = do 	tmpSession dbs opts-	liftM concat . withEachPackage (const $ browseModules' opts) $ mlocs+	liftM concat . withEachPackage (const $ browseModules' opts) $ ordNub mlocs  -- | Inspect installed modules, doesn't set session and package flags! browseModules' :: [String] -> [ModuleLocation] -> GhcM [InspectedModule] browseModules' opts mlocs = do 	ms <- packageDbModules-	mlocsDb <- sequence [ghcModuleLocation p m e | (p, m, e) <- ms] 	midTbl <- newLookupTable 	sidTbl <- newLookupTable 	let-		lookupModuleId p' m' e' = do-			mloc' <- ghcModuleLocation p' m' e'-			modId' <- ghcModuleId p' m' e'-			lookupTable mloc' modId' midTbl-	liftM catMaybes $ sequence [browseModule' mloc lookupModuleId (cacheInTableM sidTbl) p m e | ((p, m, e), mloc) <- zip ms mlocsDb, mloc `S.member` mlocs']+		lookupModuleId p' m' e' = lookupTable (ghcModuleLocation p' m' e') (ghcModuleId p' m' e') midTbl+	liftM catMaybes $ sequence [browseModule' lookupModuleId (cacheInTableM sidTbl) p m e | (p, m, e) <- ms, ghcModuleLocation p m e `S.member` mlocs'] 	where-		browseModule' :: ModuleLocation -> (GHC.PackageConfig -> GHC.Module -> Bool -> GhcM ModuleId) -> (GHC.Name -> GhcM Symbol -> GhcM Symbol) -> GHC.PackageConfig -> GHC.Module -> Bool -> GhcM (Maybe InspectedModule)-		browseModule' mloc modId' sym' p m e = tryT $ runInspect mloc $ inspect_ (return $ InspectionAt 0 (map fromString opts)) (browseModule modId' sym' p m e)+		browseModule' :: (GHC.PackageConfig -> GHC.Module -> Bool -> GhcM ModuleId) -> (GHC.Name -> GhcM Symbol -> GhcM Symbol) -> GHC.PackageConfig -> GHC.Module -> Bool -> GhcM (Maybe InspectedModule)+		browseModule' modId' sym' p m e = tryT $ runInspect (ghcModuleLocation p m e) $ inspect_ (return $ InspectionAt 0 (map fromString opts)) (browseModule modId' sym' p m e) 		mlocs' = S.fromList mlocs  browseModule :: (GHC.PackageConfig -> GHC.Module -> Bool -> GhcM ModuleId) -> (GHC.Name -> GhcM Symbol -> GhcM Symbol) -> GHC.PackageConfig -> GHC.Module -> Bool -> GhcM Module@@ -170,6 +167,12 @@ tryT :: MonadCatch m => m a -> m (Maybe a) tryT act = catch (fmap Just act) (const (return Nothing) . (id :: SomeException -> SomeException)) +-- | There can be same modules (same package name, version and module name) installed in different locations+-- Select first one of such modules+uniqueModuleLocations :: [ModuleLocation] -> [ModuleLocation]+uniqueModuleLocations = uniqueBy nameId' where+	nameId' mloc = (,) <$> (preview modulePackage mloc) <*> (preview installedModuleName mloc)+ readPackage :: GHC.PackageConfig -> ModulePackage readPackage pc = ModulePackage (fromString $ GHC.packageNameString pc) (fromString $ showVersion (GHC.packageVersion pc)) @@ -179,11 +182,11 @@ 	(map (fromString . GHC.moduleNameString . Compat.exposedModuleName) $ GHC.exposedModules pc) 	(GHC.exposed pc) -ghcModuleLocation :: MonadIO m => GHC.PackageConfig -> GHC.Module -> Bool -> m ModuleLocation-ghcModuleLocation p m = liftIO . canonicalize . InstalledModule (map fromString $ GHC.libraryDirs p) (readPackage p) (fromString $ GHC.moduleNameString $ GHC.moduleName m)+ghcModuleLocation :: GHC.PackageConfig -> GHC.Module -> Bool -> ModuleLocation+ghcModuleLocation p m = InstalledModule (map (normalize . fromFilePath) $ GHC.libraryDirs p) (readPackage p) (fromString $ GHC.moduleNameString $ GHC.moduleName m) -ghcModuleId :: MonadIO m => GHC.PackageConfig -> GHC.Module -> Bool -> m ModuleId-ghcModuleId p m e = ModuleId (fromString mname') <$> (ghcModuleLocation p m e) where+ghcModuleId :: GHC.PackageConfig -> GHC.Module -> Bool -> ModuleId+ghcModuleId p m e = ModuleId (fromString mname') (ghcModuleLocation p m e) where 	mname' = GHC.moduleNameString $ GHC.moduleName m  packageConfigs :: GhcM [GHC.PackageConfig]
src/HsDev/Symbols/Location.hs view
@@ -119,12 +119,12 @@ instance Ord ModuleLocation where 	compare l r = compare (locType l, locNames l) (locType r, locNames r) where 		locType :: ModuleLocation -> Int-		locType (FileModule _ _) = 0-		locType (InstalledModule _ _ _ _) = 1-		locType (OtherLocation _) = 2+		locType FileModule{} = 0+		locType InstalledModule{} = 1+		locType OtherLocation{} = 2 		locType NoLocation = 3 		locNames (FileModule f _) = [f]-		locNames (InstalledModule dirs _ nm _) = nm : dirs+		locNames (InstalledModule dirs _ nm _) = nm : dirs  -- dirs already includes name of package 		locNames (OtherLocation n) = [n] 		locNames NoLocation = [] 
src/System/Directory/Paths.hs view
@@ -8,7 +8,8 @@ 	Paths(..), 	canonicalize, 	absolutise,-	relativise+	relativise,+	normalize 	) where  import Control.Lens@@ -83,3 +84,11 @@ -- | Relativise paths relativise :: Paths a => Path -> a -> a relativise parent = over paths (makeRelative (parent ^. path))++-- | Normalize paths, with workaround for Windows drives+normalize :: Paths a => a -> a+normalize = over paths normalizePath' where+	normalizePath' :: FilePath -> FilePath+	normalizePath' = fixDrive . normalise+	fixDrive :: FilePath -> FilePath+	fixDrive = uncurry joinDrive . over _1 (addTrailingPathSeparator . dropWhileEnd isPathSeparator) . splitDrive