packages feed

leksah-server 0.15.0.9 → 0.15.2.0

raw patch · 11 files changed

+239/−174 lines, 11 filesdep −attoparsec-conduitdep ~HTTPdep ~HUnitdep ~leksah-serverPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies removed: attoparsec-conduit

Dependency ranges changed: HTTP, HUnit, leksah-server, parsec

API changes (from Hackage documentation)

- IDE.Core.CTypes: dscExported' :: RealDescr -> Bool
- IDE.Core.CTypes: dscMbComment' :: RealDescr -> Maybe ByteString
- IDE.Core.CTypes: dscMbLocation' :: RealDescr -> Maybe Location
- IDE.Core.CTypes: dscMbModu' :: RealDescr -> Maybe PackModule
- IDE.Core.CTypes: dscMbTypeStr' :: RealDescr -> Maybe ByteString
- IDE.Core.CTypes: dscName' :: RealDescr -> Text
- IDE.Core.CTypes: dscTypeHint' :: RealDescr -> TypeDescr
- IDE.Core.CTypes: dsrDescr :: ReexportedDescr -> Descr
- IDE.Core.CTypes: dsrMbModu :: ReexportedDescr -> Maybe PackModule
- IDE.Core.CTypes: hcFilePath :: ServerCommand -> FilePath
- IDE.Core.CTypes: importAs :: ImportDecl -> Maybe Text
- IDE.Core.CTypes: importLoc :: ImportDecl -> Location
- IDE.Core.CTypes: importModule :: ImportDecl -> Text
- IDE.Core.CTypes: importPkg :: ImportDecl -> Maybe Text
- IDE.Core.CTypes: importQualified :: ImportDecl -> Bool
- IDE.Core.CTypes: importSpecs :: ImportDecl -> Maybe ImportSpecList
- IDE.Core.CTypes: importSrc :: ImportDecl -> Bool
- IDE.Core.CTypes: instance Bounded DescrType
- IDE.Core.CTypes: instance Bounded RetrieveStrategy
- IDE.Core.CTypes: instance Default ByteString
- IDE.Core.CTypes: instance Default DescrType
- IDE.Core.CTypes: instance Default ModuleDescr
- IDE.Core.CTypes: instance Default PackModule
- IDE.Core.CTypes: instance Default PackageDescr
- IDE.Core.CTypes: instance Default PackageIdentifier
- IDE.Core.CTypes: instance Enum DescrType
- IDE.Core.CTypes: instance Enum RetrieveStrategy
- IDE.Core.CTypes: instance Eq Descr
- IDE.Core.CTypes: instance Eq DescrType
- IDE.Core.CTypes: instance Eq ImportDecl
- IDE.Core.CTypes: instance Eq ImportSpec
- IDE.Core.CTypes: instance Eq ImportSpecList
- IDE.Core.CTypes: instance Eq Location
- IDE.Core.CTypes: instance Eq ModuleDescr
- IDE.Core.CTypes: instance Eq PackModule
- IDE.Core.CTypes: instance Eq PackageDescr
- IDE.Core.CTypes: instance Eq RealDescr
- IDE.Core.CTypes: instance Eq ReexportedDescr
- IDE.Core.CTypes: instance Eq RetrieveStrategy
- IDE.Core.CTypes: instance Eq Scope
- IDE.Core.CTypes: instance Eq ServerAnswer
- IDE.Core.CTypes: instance Eq ServerCommand
- IDE.Core.CTypes: instance Eq SimpleDescr
- IDE.Core.CTypes: instance Eq SrcSpan
- IDE.Core.CTypes: instance Eq TypeDescr
- IDE.Core.CTypes: instance NFData Descr
- IDE.Core.CTypes: instance NFData DescrType
- IDE.Core.CTypes: instance NFData Location
- IDE.Core.CTypes: instance NFData ModuleDescr
- IDE.Core.CTypes: instance NFData ModuleName
- IDE.Core.CTypes: instance NFData PackModule
- IDE.Core.CTypes: instance NFData PackageDescr
- IDE.Core.CTypes: instance NFData SimpleDescr
- IDE.Core.CTypes: instance NFData TypeDescr
- IDE.Core.CTypes: instance Ord Descr
- IDE.Core.CTypes: instance Ord DescrType
- IDE.Core.CTypes: instance Ord ImportDecl
- IDE.Core.CTypes: instance Ord ImportSpec
- IDE.Core.CTypes: instance Ord ImportSpecList
- IDE.Core.CTypes: instance Ord Location
- IDE.Core.CTypes: instance Ord ModuleDescr
- IDE.Core.CTypes: instance Ord PackModule
- IDE.Core.CTypes: instance Ord PackageDescr
- IDE.Core.CTypes: instance Ord RealDescr
- IDE.Core.CTypes: instance Ord ReexportedDescr
- IDE.Core.CTypes: instance Ord RetrieveStrategy
- IDE.Core.CTypes: instance Ord Scope
- IDE.Core.CTypes: instance Ord ServerAnswer
- IDE.Core.CTypes: instance Ord ServerCommand
- IDE.Core.CTypes: instance Ord SimpleDescr
- IDE.Core.CTypes: instance Ord SrcSpan
- IDE.Core.CTypes: instance Ord TypeDescr
- IDE.Core.CTypes: instance Pretty ImportDecl
- IDE.Core.CTypes: instance Pretty ImportSpec
- IDE.Core.CTypes: instance Pretty VName
- IDE.Core.CTypes: instance Read Descr
- IDE.Core.CTypes: instance Read DescrType
- IDE.Core.CTypes: instance Read ImportDecl
- IDE.Core.CTypes: instance Read ImportSpec
- IDE.Core.CTypes: instance Read ImportSpecList
- IDE.Core.CTypes: instance Read Location
- IDE.Core.CTypes: instance Read PackModule
- IDE.Core.CTypes: instance Read RealDescr
- IDE.Core.CTypes: instance Read ReexportedDescr
- IDE.Core.CTypes: instance Read RetrieveStrategy
- IDE.Core.CTypes: instance Read Scope
- IDE.Core.CTypes: instance Read ServerAnswer
- IDE.Core.CTypes: instance Read ServerCommand
- IDE.Core.CTypes: instance Read SimpleDescr
- IDE.Core.CTypes: instance Read TypeDescr
- IDE.Core.CTypes: instance Show (Present Descr)
- IDE.Core.CTypes: instance Show (Present ModuleDescr)
- IDE.Core.CTypes: instance Show (Present PackModule)
- IDE.Core.CTypes: instance Show (Present PackageDescr)
- IDE.Core.CTypes: instance Show Descr
- IDE.Core.CTypes: instance Show DescrType
- IDE.Core.CTypes: instance Show ImportDecl
- IDE.Core.CTypes: instance Show ImportSpec
- IDE.Core.CTypes: instance Show ImportSpecList
- IDE.Core.CTypes: instance Show Location
- IDE.Core.CTypes: instance Show ModuleDescr
- IDE.Core.CTypes: instance Show PackModule
- IDE.Core.CTypes: instance Show PackageDescr
- IDE.Core.CTypes: instance Show RealDescr
- IDE.Core.CTypes: instance Show ReexportedDescr
- IDE.Core.CTypes: instance Show RetrieveStrategy
- IDE.Core.CTypes: instance Show Scope
- IDE.Core.CTypes: instance Show ServerAnswer
- IDE.Core.CTypes: instance Show ServerCommand
- IDE.Core.CTypes: instance Show SimpleDescr
- IDE.Core.CTypes: instance Show SrcSpan
- IDE.Core.CTypes: instance Show TypeDescr
- IDE.Core.CTypes: instance SymbolTable (Map Text [Descr])
- IDE.Core.CTypes: instance Typeable Descr
- IDE.Core.CTypes: instance Typeable Location
- IDE.Core.CTypes: instance Typeable ModuleDescr
- IDE.Core.CTypes: instance Typeable PackModule
- IDE.Core.CTypes: instance Typeable PackageDescr
- IDE.Core.CTypes: instance Typeable RealDescr
- IDE.Core.CTypes: instance Typeable ReexportedDescr
- IDE.Core.CTypes: instance Typeable SimpleDescr
- IDE.Core.CTypes: instance Typeable TypeDescr
- IDE.Core.CTypes: locationECol :: Location -> Int
- IDE.Core.CTypes: locationELine :: Location -> Int
- IDE.Core.CTypes: locationFile :: Location -> FilePath
- IDE.Core.CTypes: locationSCol :: Location -> Int
- IDE.Core.CTypes: locationSLine :: Location -> Int
- IDE.Core.CTypes: mdIdDescriptions :: ModuleDescr -> [Descr]
- IDE.Core.CTypes: mdMbSourcePath :: ModuleDescr -> Maybe FilePath
- IDE.Core.CTypes: mdModuleId :: ModuleDescr -> PackModule
- IDE.Core.CTypes: mdReferences :: ModuleDescr -> Map ModuleName (Set Text)
- IDE.Core.CTypes: modu :: PackModule -> ModuleName
- IDE.Core.CTypes: pack :: PackModule -> PackageIdentifier
- IDE.Core.CTypes: packId :: PackageIdAndKey -> PackageIdentifier
- IDE.Core.CTypes: pdBuildDepends :: PackageDescr -> [PackageIdentifier]
- IDE.Core.CTypes: pdMbSourcePath :: PackageDescr -> Maybe FilePath
- IDE.Core.CTypes: pdModules :: PackageDescr -> [ModuleDescr]
- IDE.Core.CTypes: pdPackage :: PackageDescr -> PackageIdentifier
- IDE.Core.CTypes: scExtract :: ServerCommand -> Bool
- IDE.Core.CTypes: scRebuild :: ServerCommand -> Bool
- IDE.Core.CTypes: scSources :: ServerCommand -> Bool
- IDE.Core.CTypes: sdComment :: SimpleDescr -> Maybe ByteString
- IDE.Core.CTypes: sdExported :: SimpleDescr -> Bool
- IDE.Core.CTypes: sdLocation :: SimpleDescr -> Maybe Location
- IDE.Core.CTypes: sdName :: SimpleDescr -> Text
- IDE.Core.CTypes: sdType :: SimpleDescr -> Maybe ByteString
- IDE.Core.CTypes: srcSpanEndColumn :: SrcSpan -> Int
- IDE.Core.CTypes: srcSpanEndLine :: SrcSpan -> Int
- IDE.Core.CTypes: srcSpanFilename :: SrcSpan -> FilePath
- IDE.Core.CTypes: srcSpanStartColumn :: SrcSpan -> Int
- IDE.Core.CTypes: srcSpanStartLine :: SrcSpan -> Int
- IDE.Core.CTypes: wcModList :: ServerCommand -> [(Text, FilePath)]
- IDE.Core.CTypes: wcPackage :: ServerCommand -> PackageIdentifier
- IDE.Core.CTypes: wcPath :: ServerCommand -> FilePath
- IDE.Core.CTypes: wcRebuild :: ServerCommand -> Bool
- IDE.Core.Serializable: instance BinaryShared Descr
- IDE.Core.Serializable: instance BinaryShared Location
- IDE.Core.Serializable: instance BinaryShared ModuleDescr
- IDE.Core.Serializable: instance BinaryShared ModuleName
- IDE.Core.Serializable: instance BinaryShared PackModule
- IDE.Core.Serializable: instance BinaryShared PackageDescr
- IDE.Core.Serializable: instance BinaryShared PackageIdentifier
- IDE.Core.Serializable: instance BinaryShared PackageName
- IDE.Core.Serializable: instance BinaryShared SimpleDescr
- IDE.Core.Serializable: instance BinaryShared Text
- IDE.Core.Serializable: instance BinaryShared TypeDescr
- IDE.Core.Serializable: instance BinaryShared Version
- IDE.Metainfo.SourceCollectorH: instance Outputable alpha => Show (PPDoc alpha)
- IDE.Metainfo.SourceCollectorH: mbError :: PackageCollectStats -> Maybe Text
- IDE.Metainfo.SourceCollectorH: modulesTotal :: PackageCollectStats -> Maybe Int
- IDE.Metainfo.SourceCollectorH: packageString :: PackageCollectStats -> Text
- IDE.Metainfo.SourceCollectorH: retrieved :: PackageCollectStats -> Bool
- IDE.Metainfo.SourceCollectorH: withSource :: PackageCollectStats -> Bool
- IDE.StrippedPrefs: endWithLastConn :: Prefs -> Bool
- IDE.StrippedPrefs: instance Eq Prefs
- IDE.StrippedPrefs: instance Show Prefs
- IDE.StrippedPrefs: retrieveStrategy :: Prefs -> RetrieveStrategy
- IDE.StrippedPrefs: retrieveURL :: Prefs -> Text
- IDE.StrippedPrefs: serverPort :: Prefs -> Int
- IDE.StrippedPrefs: sourceDirectories :: Prefs -> [FilePath]
- IDE.StrippedPrefs: unpackDirectory :: Prefs -> Maybe FilePath
- IDE.Utils.Server: instance WaitFor (MVar a)
- IDE.Utils.Server: instance WaitFor (ThreadId, MVar ())
- IDE.Utils.Server: instance WaitFor a => WaitFor [a]
- IDE.Utils.Server: serverAddr :: Server -> SockAddr
- IDE.Utils.Server: serverRoutine :: Server -> ServerRoutine
- IDE.Utils.Server: serverTyp :: Server -> SocketType
- IDE.Utils.Tool: currentToolCommand :: ToolState -> MVar ToolCommand
- IDE.Utils.Tool: instance Eq RawToolOutput
- IDE.Utils.Tool: instance Eq ToolOutput
- IDE.Utils.Tool: instance NFData ExitCode
- IDE.Utils.Tool: instance NFData ToolOutput
- IDE.Utils.Tool: instance Show RawToolOutput
- IDE.Utils.Tool: instance Show ToolOutput
- IDE.Utils.Tool: outputClosed :: ToolState -> MVar Bool
- IDE.Utils.Tool: toolCommands :: ToolState -> Chan ToolCommand
- IDE.Utils.Tool: toolCommandsRead :: ToolState -> Chan ToolCommand
- IDE.Utils.Tool: toolProcessMVar :: ToolState -> MVar ProcessHandle
+ IDE.Core.CTypes: LibModule :: ModuleName -> ModuleKey
+ IDE.Core.CTypes: MainModule :: FilePath -> ModuleKey
+ IDE.Core.CTypes: [dscExported'] :: RealDescr -> Bool
+ IDE.Core.CTypes: [dscMbComment'] :: RealDescr -> Maybe ByteString
+ IDE.Core.CTypes: [dscMbLocation'] :: RealDescr -> Maybe Location
+ IDE.Core.CTypes: [dscMbModu'] :: RealDescr -> Maybe PackModule
+ IDE.Core.CTypes: [dscMbTypeStr'] :: RealDescr -> Maybe ByteString
+ IDE.Core.CTypes: [dscName'] :: RealDescr -> Text
+ IDE.Core.CTypes: [dscTypeHint'] :: RealDescr -> TypeDescr
+ IDE.Core.CTypes: [dsrDescr] :: ReexportedDescr -> Descr
+ IDE.Core.CTypes: [dsrMbModu] :: ReexportedDescr -> Maybe PackModule
+ IDE.Core.CTypes: [hcFilePath] :: ServerCommand -> FilePath
+ IDE.Core.CTypes: [importAs] :: ImportDecl -> Maybe Text
+ IDE.Core.CTypes: [importLoc] :: ImportDecl -> Location
+ IDE.Core.CTypes: [importModule] :: ImportDecl -> Text
+ IDE.Core.CTypes: [importPkg] :: ImportDecl -> Maybe Text
+ IDE.Core.CTypes: [importQualified] :: ImportDecl -> Bool
+ IDE.Core.CTypes: [importSpecs] :: ImportDecl -> Maybe ImportSpecList
+ IDE.Core.CTypes: [importSrc] :: ImportDecl -> Bool
+ IDE.Core.CTypes: [locationECol] :: Location -> Int
+ IDE.Core.CTypes: [locationELine] :: Location -> Int
+ IDE.Core.CTypes: [locationFile] :: Location -> FilePath
+ IDE.Core.CTypes: [locationSCol] :: Location -> Int
+ IDE.Core.CTypes: [locationSLine] :: Location -> Int
+ IDE.Core.CTypes: [mdIdDescriptions] :: ModuleDescr -> [Descr]
+ IDE.Core.CTypes: [mdMbSourcePath] :: ModuleDescr -> Maybe FilePath
+ IDE.Core.CTypes: [mdModuleId] :: ModuleDescr -> PackModule
+ IDE.Core.CTypes: [mdReferences] :: ModuleDescr -> Map ModuleName (Set Text)
+ IDE.Core.CTypes: [modu] :: PackModule -> ModuleName
+ IDE.Core.CTypes: [packId] :: PackageIdAndKey -> PackageIdentifier
+ IDE.Core.CTypes: [packKey] :: PackageIdAndKey -> PackageKey
+ IDE.Core.CTypes: [pack] :: PackModule -> PackageIdentifier
+ IDE.Core.CTypes: [pdBuildDepends] :: PackageDescr -> [PackageIdentifier]
+ IDE.Core.CTypes: [pdMbSourcePath] :: PackageDescr -> Maybe FilePath
+ IDE.Core.CTypes: [pdModules] :: PackageDescr -> [ModuleDescr]
+ IDE.Core.CTypes: [pdPackage] :: PackageDescr -> PackageIdentifier
+ IDE.Core.CTypes: [scExtract] :: ServerCommand -> Bool
+ IDE.Core.CTypes: [scPackageDBs] :: ServerCommand -> [[FilePath]]
+ IDE.Core.CTypes: [scRebuild] :: ServerCommand -> Bool
+ IDE.Core.CTypes: [scSources] :: ServerCommand -> Bool
+ IDE.Core.CTypes: [sdComment] :: SimpleDescr -> Maybe ByteString
+ IDE.Core.CTypes: [sdExported] :: SimpleDescr -> Bool
+ IDE.Core.CTypes: [sdLocation] :: SimpleDescr -> Maybe Location
+ IDE.Core.CTypes: [sdName] :: SimpleDescr -> Text
+ IDE.Core.CTypes: [sdType] :: SimpleDescr -> Maybe ByteString
+ IDE.Core.CTypes: [srcSpanEndColumn] :: SrcSpan -> Int
+ IDE.Core.CTypes: [srcSpanEndLine] :: SrcSpan -> Int
+ IDE.Core.CTypes: [srcSpanFilename] :: SrcSpan -> FilePath
+ IDE.Core.CTypes: [srcSpanStartColumn] :: SrcSpan -> Int
+ IDE.Core.CTypes: [srcSpanStartLine] :: SrcSpan -> Int
+ IDE.Core.CTypes: [wcModList] :: ServerCommand -> [(Text, FilePath)]
+ IDE.Core.CTypes: [wcPackage] :: ServerCommand -> PackageIdentifier
+ IDE.Core.CTypes: [wcPath] :: ServerCommand -> FilePath
+ IDE.Core.CTypes: [wcRebuild] :: ServerCommand -> Bool
+ IDE.Core.CTypes: data ModuleKey
+ IDE.Core.CTypes: displayModuleKey :: ModuleKey -> String
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData Distribution.ModuleName.ModuleName
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.Descr
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.Location
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.ModuleDescr
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.PackModule
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.PackageDescr
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.SimpleDescr
+ IDE.Core.CTypes: instance Control.DeepSeq.NFData IDE.Core.CTypes.TypeDescr
+ IDE.Core.CTypes: instance Default.Default Data.ByteString.Internal.ByteString
+ IDE.Core.CTypes: instance Default.Default Distribution.Package.PackageIdentifier
+ IDE.Core.CTypes: instance Default.Default IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance Default.Default IDE.Core.CTypes.ModuleDescr
+ IDE.Core.CTypes: instance Default.Default IDE.Core.CTypes.PackModule
+ IDE.Core.CTypes: instance Default.Default IDE.Core.CTypes.PackageDescr
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.Descr
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ImportDecl
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ImportSpec
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ImportSpecList
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.Location
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ModuleDescr
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ModuleKey
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.PackModule
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.PackageDescr
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.RealDescr
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ReexportedDescr
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.RetrieveStrategy
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.Scope
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ServerAnswer
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.ServerCommand
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.SimpleDescr
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.SrcSpan
+ IDE.Core.CTypes: instance GHC.Classes.Eq IDE.Core.CTypes.TypeDescr
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.Descr
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ImportDecl
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ImportSpec
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ImportSpecList
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.Location
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ModuleDescr
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ModuleKey
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.PackModule
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.PackageDescr
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.RealDescr
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ReexportedDescr
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.RetrieveStrategy
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.Scope
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ServerAnswer
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.ServerCommand
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.SimpleDescr
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.SrcSpan
+ IDE.Core.CTypes: instance GHC.Classes.Ord IDE.Core.CTypes.TypeDescr
+ IDE.Core.CTypes: instance GHC.Enum.Bounded IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance GHC.Enum.Bounded IDE.Core.CTypes.RetrieveStrategy
+ IDE.Core.CTypes: instance GHC.Enum.Enum IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance GHC.Enum.Enum IDE.Core.CTypes.RetrieveStrategy
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.Descr
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.ImportDecl
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.ImportSpec
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.ImportSpecList
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.Location
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.PackModule
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.RealDescr
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.ReexportedDescr
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.RetrieveStrategy
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.Scope
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.ServerAnswer
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.ServerCommand
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.SimpleDescr
+ IDE.Core.CTypes: instance GHC.Read.Read IDE.Core.CTypes.TypeDescr
+ IDE.Core.CTypes: instance GHC.Show.Show (IDE.Core.CTypes.Present IDE.Core.CTypes.Descr)
+ IDE.Core.CTypes: instance GHC.Show.Show (IDE.Core.CTypes.Present IDE.Core.CTypes.ModuleDescr)
+ IDE.Core.CTypes: instance GHC.Show.Show (IDE.Core.CTypes.Present IDE.Core.CTypes.PackModule)
+ IDE.Core.CTypes: instance GHC.Show.Show (IDE.Core.CTypes.Present IDE.Core.CTypes.PackageDescr)
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.Descr
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.DescrType
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ImportDecl
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ImportSpec
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ImportSpecList
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.Location
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ModuleDescr
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ModuleKey
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.PackModule
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.PackageDescr
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.RealDescr
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ReexportedDescr
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.RetrieveStrategy
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.Scope
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ServerAnswer
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.ServerCommand
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.SimpleDescr
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.SrcSpan
+ IDE.Core.CTypes: instance GHC.Show.Show IDE.Core.CTypes.TypeDescr
+ IDE.Core.CTypes: instance IDE.Core.CTypes.SymbolTable (Data.Map.Base.Map Data.Text.Internal.Text [IDE.Core.CTypes.Descr])
+ IDE.Core.CTypes: instance Text.PrinterParser.Pretty IDE.Core.CTypes.ImportDecl
+ IDE.Core.CTypes: instance Text.PrinterParser.Pretty IDE.Core.CTypes.ImportSpec
+ IDE.Core.CTypes: instance Text.PrinterParser.Pretty IDE.Core.CTypes.VName
+ IDE.Core.CTypes: moduleKeyToName :: ModuleKey -> ModuleName
+ IDE.Core.CTypes: parseModuleKey :: String -> FilePath -> Maybe ModuleKey
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared Data.Text.Internal.Text
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared Data.Version.Version
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared Distribution.ModuleName.ModuleName
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared Distribution.Package.PackageIdentifier
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared Distribution.Package.PackageName
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared IDE.Core.CTypes.Descr
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared IDE.Core.CTypes.Location
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared IDE.Core.CTypes.ModuleDescr
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared IDE.Core.CTypes.PackModule
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared IDE.Core.CTypes.PackageDescr
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared IDE.Core.CTypes.SimpleDescr
+ IDE.Core.Serializable: instance Data.Binary.Shared.BinaryShared IDE.Core.CTypes.TypeDescr
+ IDE.Metainfo.SourceCollectorH: [mbError] :: PackageCollectStats -> Maybe Text
+ IDE.Metainfo.SourceCollectorH: [modulesTotal] :: PackageCollectStats -> Maybe Int
+ IDE.Metainfo.SourceCollectorH: [packageString] :: PackageCollectStats -> Text
+ IDE.Metainfo.SourceCollectorH: [retrieved] :: PackageCollectStats -> Bool
+ IDE.Metainfo.SourceCollectorH: [withSource] :: PackageCollectStats -> Bool
+ IDE.Metainfo.SourceCollectorH: instance Outputable.Outputable alpha => GHC.Show.Show (IDE.Metainfo.SourceCollectorH.PPDoc alpha)
+ IDE.StrippedPrefs: [endWithLastConn] :: Prefs -> Bool
+ IDE.StrippedPrefs: [retrieveStrategy] :: Prefs -> RetrieveStrategy
+ IDE.StrippedPrefs: [retrieveURL] :: Prefs -> Text
+ IDE.StrippedPrefs: [serverPort] :: Prefs -> Int
+ IDE.StrippedPrefs: [sourceDirectories] :: Prefs -> [FilePath]
+ IDE.StrippedPrefs: [unpackDirectory] :: Prefs -> Maybe FilePath
+ IDE.StrippedPrefs: instance GHC.Classes.Eq IDE.StrippedPrefs.Prefs
+ IDE.StrippedPrefs: instance GHC.Show.Show IDE.StrippedPrefs.Prefs
+ IDE.Utils.FileUtils: getPackageDBs :: [FilePath] -> IO [[FilePath]]
+ IDE.Utils.FileUtils: moduleCollectorFileName :: ModuleKey -> String
+ IDE.Utils.Server: [serverAddr] :: Server -> SockAddr
+ IDE.Utils.Server: [serverRoutine] :: Server -> ServerRoutine
+ IDE.Utils.Server: [serverTyp] :: Server -> SocketType
+ IDE.Utils.Server: instance IDE.Utils.Server.WaitFor (GHC.Conc.Sync.ThreadId, GHC.MVar.MVar ())
+ IDE.Utils.Server: instance IDE.Utils.Server.WaitFor (GHC.MVar.MVar a)
+ IDE.Utils.Server: instance IDE.Utils.Server.WaitFor a => IDE.Utils.Server.WaitFor [a]
+ IDE.Utils.Tool: [currentToolCommand] :: ToolState -> MVar ToolCommand
+ IDE.Utils.Tool: [outputClosed] :: ToolState -> MVar Bool
+ IDE.Utils.Tool: [toolCommandsRead] :: ToolState -> Chan ToolCommand
+ IDE.Utils.Tool: [toolCommands] :: ToolState -> Chan ToolCommand
+ IDE.Utils.Tool: [toolProcessMVar] :: ToolState -> MVar ProcessHandle
+ IDE.Utils.Tool: instance Control.DeepSeq.NFData GHC.IO.Exception.ExitCode
+ IDE.Utils.Tool: instance Control.DeepSeq.NFData IDE.Utils.Tool.ToolOutput
+ IDE.Utils.Tool: instance GHC.Classes.Eq IDE.Utils.Tool.RawToolOutput
+ IDE.Utils.Tool: instance GHC.Classes.Eq IDE.Utils.Tool.ToolOutput
+ IDE.Utils.Tool: instance GHC.Show.Show IDE.Utils.Tool.RawToolOutput
+ IDE.Utils.Tool: instance GHC.Show.Show IDE.Utils.Tool.ToolOutput
- IDE.Core.CTypes: PackageIdAndKey :: PackageIdentifier -> PackageIdAndKey
+ IDE.Core.CTypes: PackageIdAndKey :: PackageIdentifier -> PackageKey -> PackageIdAndKey
- IDE.Core.CTypes: SystemCommand :: Bool -> Bool -> Bool -> ServerCommand
+ IDE.Core.CTypes: SystemCommand :: Bool -> Bool -> Bool -> [[FilePath]] -> ServerCommand
- IDE.Metainfo.PackageCollector: collectPackage :: Bool -> Prefs -> Int -> (PackageConfig, Int) -> IO PackageCollectStats
+ IDE.Metainfo.PackageCollector: collectPackage :: Bool -> Prefs -> Int -> ((PackageConfig, [FilePath]), Int) -> IO PackageCollectStats
- IDE.Utils.FileUtils: getInstalledPackageIds :: IO [PackageIdentifier]
+ IDE.Utils.FileUtils: getInstalledPackageIds :: [FilePath] -> IO [PackageIdentifier]
- IDE.Utils.FileUtils: getInstalledPackageIds' :: IO (Either Text [PackageIdentifier])
+ IDE.Utils.FileUtils: getInstalledPackageIds' :: [FilePath] -> IO (Either Text [PackageIdentifier])
- IDE.Utils.GHCUtils: inGhcIO :: [Text] -> [GeneralFlag] -> (DynFlags -> Ghc a) -> IO a
+ IDE.Utils.GHCUtils: inGhcIO :: [Text] -> [GeneralFlag] -> [FilePath] -> (DynFlags -> Ghc a) -> IO a
- IDE.Utils.Server: type ServerRoutine = (Handle, HostName, PortNumber) -> IO ()
+ IDE.Utils.Server: type ServerRoutine = (Handle, HostName, PortNumber) -> MVar () -> IO ()

Files

leksah-server.cabal view
@@ -1,5 +1,5 @@ name: leksah-server-version: 0.15.0.9+version: 0.15.2.0 cabal-version: >= 1.10.2 build-type: Simple license: GPL@@ -37,13 +37,13 @@                binary-shared >=0.8 && <0.9, bytestring >=0.9.0.1 && <0.11,                containers >=0.2.0.0 && <0.6, executable-path >=0.0.3 && <0.1,                directory >=1.0.0.2 && <1.3, filepath >=1.1.0.1 && <1.5, ghc >=7.0.4 && <7.11,-               ltk >=0.15.0.1 && <0.16, parsec >=2.1.0.1 && <3.2,+               ltk >=0.15.0.1 && <0.16, parsec >=3.0.0.0 && <3.2,                pretty >=1.0.1.0 && <1.2, time >=1.1 && <1.6, deepseq >=1.1 && <1.5,                hslogger >= 1.0.7 && <1.3, conduit >= 1.0.8 && <1.3,                conduit-extra >=1.0.0.1 && <1.2, resourcet,-               attoparsec-conduit >=1.0.1.2 && <1.2, attoparsec >=0.10.0.3 && <0.14,+               attoparsec >=0.10.0.3 && <0.14,                transformers >=0.2.2.0 && <0.5, strict >=0.3.2 && <0.4, text >=0.11.3.1 && <1.3,-               HTTP >=4000.1.2 && <4000.3, process >= 1.1 && <1.3+               HTTP >=4000.1.2 && <4000.4, process >= 1.1 && <1.3     if (impl(ghc >= 7.10))        build-depends: haddock-api >=2.16 && <2.17, haddock-library >=1.2.0 && <1.3, bin-package-db     else@@ -95,13 +95,13 @@                binary-shared >=0.8 && <0.9, bytestring >=0.9.0.1 && <0.11,                containers >=0.2.0.0 && <0.6, executable-path >=0.0.3 && <0.1,                directory >=1.0.0.2 && <1.3, filepath >=1.1.0.1 && <1.5, ghc >=7.0.4 && <7.11,-               ltk >=0.15.0.1 && <0.16, parsec >=2.1.0.1 && <3.2,+               ltk >=0.15.0.1 && <0.16, parsec >=3.0.0.0 && <3.2,                pretty >=1.0.1.0 && <1.2, time >=1.1 && <1.6, deepseq >=1.1 && <1.5,                hslogger >= 1.0.7 && <1.3, conduit >= 1.0.8 && <1.3,                conduit-extra >=1.0.0.1 && <1.2, resourcet,-               attoparsec-conduit >=1.0.1.2 && <1.2, attoparsec >=0.10.0.3 && <0.14,+               attoparsec >=0.10.0.3 && <0.14,                transformers >=0.2.2.0 && <0.5, strict >=0.3.2 && <0.4, text >=0.11.3.1 && <1.3,-               HTTP >=4000.1.2 && <4000.3, process >= 1.1 && <1.3, leksah-server ==0.15.0.9+               HTTP >=4000.1.2 && <4000.4, process >= 1.1 && <1.3, leksah-server ==0.15.2.0     if (impl(ghc >= 7.10))        build-depends: haddock-api >=2.16 && <2.17, haddock-library >=1.2.0 && <1.3, bin-package-db     else@@ -155,9 +155,9 @@     build-depends:  base >= 4.0.0.0 && <4.9, hslogger >= 1.0.7 && <1.3, deepseq >=1.1 && <1.5,                bytestring >=0.9.0.1 && <0.11, conduit >= 1.0.8 && <1.3,                conduit-extra >=1.0.0.1 && <1.2, resourcet,-               attoparsec-conduit >=1.0.1.2 && <1.2, attoparsec >=0.10.0.3 && <0.14,+               attoparsec >=0.10.0.3 && <0.14,                transformers >=0.2.2.0 && <0.5, text >=0.11.3.1 && <1.3,-               process >= 1.1 && <1.3, leksah-server ==0.15.0.9+               process >= 1.1 && <1.3, leksah-server ==0.15.2.0      if !os(windows)         build-depends: unix >=2.3.1.0 && <2.8@@ -183,8 +183,8 @@     hs-source-dirs: tests     main-is:    TestTool.hs     build-depends: base >= 4.0.0.0 && <4.9,  hslogger >= 1.0.7 && <1.3,-               leksah-server == 0.15.0.9,-               HUnit >=1.2 && <1.3, transformers >=0.2.2.0 && <0.5, conduit >= 1.0.8 && <1.3,+               leksah-server == 0.15.2.0,+               HUnit >=1.2 && <1.4, transformers >=0.2.2.0 && <0.5, conduit >= 1.0.8 && <1.3,                conduit-extra >=1.0.0.1 && <1.2, resourcet,                process >= 1.1 && <1.3 
main/Collector.hs view
@@ -1,5 +1,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE TupleSections #-} {-# OPTIONS_GHC -fno-warn-type-defaults #-} ----------------------------------------------------------------------------- --@@ -25,7 +27,7 @@ import System.Console.GetOpt     (ArgDescr(..), usageInfo, ArgOrder(..), getOpt, OptDescr(..)) import System.Environment (getArgs)-import Control.Monad (when)+import Control.Monad (when, forM) import Data.Version (showVersion) import IDE.Utils.FileUtils import IDE.Utils.Utils@@ -39,6 +41,7 @@ #endif import Control.Monad (liftM) import qualified Data.Set as Set (member)+import qualified Data.Map as Map (toList, fromListWith) import IDE.Core.CTypes hiding (Extension) import IDE.Metainfo.SourceDB (buildSourceForPackageDB, getDataDir, version) import Data.Time@@ -54,9 +57,8 @@ import IDE.Utils.Server import System.IO (Handle, hPutStrLn, hGetLine, hFlush, hClose) import IDE.HeaderParser(parseTheHeader)-import System.Exit (ExitCode(..)) import Data.IORef-import Control.Concurrent (throwTo, ThreadId, myThreadId)+import Control.Concurrent (MVar,putMVar) import IDE.Metainfo.PackageCollector(collectPackage) import Data.List (delete) import System.Directory@@ -67,6 +69,7 @@ import qualified Data.Text as T (strip, pack, unpack) import Data.Text (Text) import Data.Monoid ((<>))+import Distribution.Package (PackageIdentifier)  -- -------------------------------------------------------------------- -- Command line options@@ -167,7 +170,6 @@             prefs           <- readStrippedPrefs prefsPath             debugM "leksah-server" $ "prefs " ++ show prefs             connRef  <- newIORef []-            threadId <- myThreadId             localServerAddr <- inet_addr "127.0.0.1"              if elem VersionF o@@ -192,33 +194,33 @@                         if elem CollectSystem o                             then do                                 debugM "leksah-server" "collectSystem"-                                collectSystem prefs debug rebuild sources+                                collectSystem prefs debug rebuild sources []                             else                                 case servers of                                     (Nothing:_)  -> do                                         running <- serveOne Nothing (server (fromIntegral-                                            (serverPort prefs)) newPrefs connRef threadId localServerAddr)+                                            (serverPort prefs)) newPrefs connRef localServerAddr)                                         waitFor running                                         return ()                                     (Just ps:_)  -> do                                         let port = read $ T.unpack ps                                         running <- serveOne Nothing (server-                                            (fromIntegral port) newPrefs connRef threadId localServerAddr)+                                            (fromIntegral port) newPrefs connRef localServerAddr)                                         waitFor running                                         return ()                                     _ -> return () -        server port prefs connRef threadId hostAddr = Server (SockAddrInet port hostAddr) Stream-                                        (doCommands prefs connRef threadId)+        server port prefs connRef hostAddr = Server (SockAddrInet port hostAddr) Stream+                                        (doCommands prefs connRef) -doCommands :: Prefs -> IORef [Handle] -> ThreadId -> (Handle, t1, t2) -> IO ()-doCommands prefs connRef threadId (h,n,p) = do+doCommands :: Prefs -> IORef [Handle] -> (Handle, t1, t2) -> MVar ()-> IO ()+doCommands prefs connRef (h,n,p) mvar = do     atomicModifyIORef connRef (\ list -> (h : list, ()))-    doCommands' prefs connRef threadId (h,n,p)+    doCommands' prefs connRef (h,n,p) mvar  -doCommands' :: Prefs -> IORef [Handle] -> ThreadId -> (Handle, t1, t2) -> IO ()-doCommands' prefs connRef threadId (h,n,p) = do+doCommands' :: Prefs -> IORef [Handle] -> (Handle, t1, t2) -> MVar () -> IO ()+doCommands' prefs connRef (h,n,p) mvar = do     debugM "leksah-server" $ "***wait"     mbLine <- catch (liftM Just (hGetLine h))                 (\ (_e :: SomeException) -> do@@ -228,20 +230,22 @@                     handles <- readIORef connRef                     case handles of                         [] -> do-                                when (endWithLastConn prefs) $ do-                                    infoM "leksah-server" $ "***lost last connection - exiting"-                                    throwTo threadId ExitSuccess-                                    --exitSuccess-                                infoM "leksah-server" $ "***lost last connection - waiting"+                                if (endWithLastConn prefs)+                                    then do+                                       infoM "leksah-server" $ "***lost last connection - exiting"+                                       -- we're waiting on that mvar before exiting+                                       putMVar mvar ()+                                    else do+                                        infoM "leksah-server" $ "***lost last connection - waiting"                                 return Nothing                         _  -> return Nothing)     case mbLine of         Nothing -> return ()         Just line -> do             case read line of-                    SystemCommand rebuild sources _extract -> --the extract arg is not used+                    SystemCommand rebuild sources _extract dbs -> --the extract arg is not used                         catch (do-                            collectSystem prefs False rebuild sources+                            collectSystem prefs False rebuild sources dbs                             hPutStrLn h (show ServerOK)                             hFlush h)                         (\ (e :: SomeException) -> do@@ -263,10 +267,10 @@                         (\ (e :: SomeException) -> do                             hPutStrLn h (show (ServerFailed (T.pack $ show e)))                             hFlush h)-            doCommands' prefs connRef threadId (h,n,p)+            doCommands' prefs connRef (h,n,p) mvar -collectSystem :: Prefs -> Bool -> Bool -> Bool -> IO()-collectSystem prefs writeAscii forceRebuild findSources = do+collectSystem :: Prefs -> Bool -> Bool -> Bool -> [[FilePath]] -> IO()+collectSystem prefs writeAscii forceRebuild findSources dbLists = do     collectorPath       <- getCollectorPath     when forceRebuild $ do         exists           <- doesDirectoryExist collectorPath@@ -277,11 +281,10 @@         return ()     knownPackages       <-  findKnownPackages collectorPath     debugM "leksah-server" $ "collectSystem knownPackages= " ++ show knownPackages-    packageInfos        <-  inGhcIO [] [] $  \ _ -> getInstalledPackageInfos-    debugM "leksah-server" $ "collectSystem packageInfos= " ++ show (map (packId . getThisPackage) packageInfos)-    let newPackages     =   filter (\pid -> not $Set.member (packageIdentifierToString . packId $ getThisPackage pid)-                                                         knownPackages)-                                    packageInfos+    packageInfos        <-  concat <$> forM dbLists (\dbs -> inGhcIO [] [] dbs $  \ _ -> map (,dbs) <$> getInstalledPackageInfos)+    debugM "leksah-server" $ "collectSystem packageInfos= " ++ show (map (packId . getThisPackage . fst) packageInfos)+    let newPackages = filter (\pi -> not $ Set.member (packageIdentifierToString . packId . getThisPackage $ fst pi) knownPackages)+                            packageInfos     if null newPackages         then do             infoM "leksah-server" "Metadata collector has nothing to do"@@ -305,7 +308,7 @@         summary = "\nSuccess with         = " ++ T.unpack packs ++                   "\nPackages total       = " ++ show packagesTotal ++                   "\nPackages with source = " ++ show packagesWithSource ++-                  "\nPackages retreived   = " ++ show packagesRetreived +++                  "\nPackages retrieved   = " ++ show packagesRetreived ++                   "\nModules total        = " ++ show modulesTotal' ++                   "\nModules with source  = " ++ show modulesWithSource ++                   "\nPercentage source    = " ++ show percentageWithSource
src/IDE/Core/CTypes.hs view
@@ -21,6 +21,10 @@ module IDE.Core.CTypes (      PackageDescr(..)+,   ModuleKey(..)+,   displayModuleKey+,   parseModuleKey+,   moduleKeyToName ,   ModuleDescr(..) ,   Descr(..) ,   RealDescr(..)@@ -68,6 +72,8 @@  ) where +import Control.Applicative ((<$>))+import Prelude import Data.Typeable (Typeable) import Data.Map (Map) import Data.Set (Set)@@ -81,7 +87,7 @@ import Distribution.Package        (PackageIdentifier(..),PackageName(..)) #endif-import Distribution.ModuleName (components, ModuleName)+import Distribution.ModuleName (main, components, ModuleName) import Data.ByteString.Char8 (ByteString) #if !MIN_VERSION_bytestring(0,10,0) import Data.Version (Version(..))@@ -142,14 +148,15 @@  data ServerCommand =         SystemCommand {-            scRebuild :: Bool,-            scSources :: Bool,-            scExtract :: Bool}+            scRebuild    :: Bool,+            scSources    :: Bool,+            scExtract    :: Bool,+            scPackageDBs :: [[FilePath]]}     |   WorkspaceCommand {-            wcRebuild :: Bool,-            wcPackage :: PackageIdentifier,-            wcPath    :: FilePath,-            wcModList :: [(Text,FilePath)]}+            wcRebuild  :: Bool,+            wcPackage  :: PackageIdentifier,+            wcPath     :: FilePath,+            wcModList  :: [(Text,FilePath)]}     |   ParseHeaderCommand {             hcFilePath :: FilePath}     deriving (Eq,Ord,Show,Read)@@ -202,6 +209,25 @@ instance Ord PackageDescr where     (<=) a b              =   pdPackage a <=  pdPackage b +-- | Key we use to identify a module in the metadata.+-- But for "Main" modules we need to know the source file path.+data ModuleKey = LibModule ModuleName | MainModule FilePath deriving (Show, Eq, Ord)++-- | Display a the module key+displayModuleKey :: ModuleKey -> String+displayModuleKey (LibModule m) = display m+displayModuleKey (MainModule f) = "Main (" ++ f ++ ")"++-- | Parse a module key from the name of the module and the source file path.+parseModuleKey :: String -> FilePath -> Maybe ModuleKey+parseModuleKey "Main" sourcePath = Just $ MainModule sourcePath+parseModuleKey s _ = LibModule <$> simpleParse s++-- | Extract the module name from the module key+moduleKeyToName :: ModuleKey -> ModuleName+moduleKeyToName (LibModule m) = m+moduleKeyToName (MainModule _) = main+ data ModuleDescr        =   ModuleDescr {         mdModuleId          ::   PackModule     ,   mdMbSourcePath      ::   Maybe FilePath                  -- unqualified@@ -216,10 +242,20 @@     show (Present md)   =   (show . mdModuleId) md  instance Eq ModuleDescr where-    (== ) a b            =   mdModuleId a == mdModuleId b+    (== ) a b            =   let+        idEq = mdModuleId a == mdModuleId b+        -- Main modules are only the same if they use the same file+        in if idEq && ["Main"]  == components (modu (mdModuleId a))+                then mdMbSourcePath a == mdMbSourcePath b+                else idEq  instance Ord ModuleDescr where-    (<=) a b             =   mdModuleId a <=  mdModuleId b+    (<=) a b             =   let+        idEq = mdModuleId a == mdModuleId b+        -- use source files for main modules+        in if idEq && ["Main"]  == components (modu (mdModuleId a))+                then mdMbSourcePath a <= mdMbSourcePath b+                else mdModuleId a <=  mdModuleId b  data Descr =  Real RealDescr | Reexported ReexportedDescr         deriving (Show,Read,Typeable,Eq,Ord)
src/IDE/Metainfo/InterfaceCollector.hs view
@@ -87,8 +87,8 @@ showSDocUnqual _ = O.showSDocUnqual #endif -collectPackageFromHI :: PackageConfig -> IO PackageDescr-collectPackageFromHI  packageConfig = inGhcIO [] [] $ \ dflags -> do+collectPackageFromHI :: PackageConfig -> [FilePath] -> IO PackageDescr+collectPackageFromHI packageConfig dbs = inGhcIO [] [] dbs $ \ dflags -> do     let pIdAndKey = getThisPackage packageConfig     Hs.liftIO . debugM "leksah-server" $ "collectPackageFromHI"     session             <-  getSession
src/IDE/Metainfo/PackageCollector.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE LambdaCase #-} ----------------------------------------------------------------------------- -- -- Module      :  IDE.Metainfo.PackageCollector@@ -29,8 +30,8 @@ import System.Log.Logger (errorM, debugM, infoM) import IDE.Metainfo.InterfaceCollector (collectPackageFromHI) import IDE.Core.CTypes-       (metadataVersion, PackageDescr(..), leksahVersion, getThisPackage,-        PackageIdAndKey(..), packageIdentifierToString)+       (metadataVersion, PackageDescr(..), leksahVersion,+        packageIdentifierToString, getThisPackage, packId) import IDE.Utils.FileUtils (getCollectorPath) import System.Directory (doesDirectoryExist, setCurrentDirectory) import IDE.Utils.Utils@@ -43,7 +44,7 @@ import qualified Control.Exception as E (SomeException, catch) import IDE.Utils.Tool (runTool') import Data.Monoid ((<>))-import qualified Data.Text as T (unpack)+import qualified Data.Text as T (unpack, pack) import Data.Text (Text) import Network.HTTP.Proxy (Proxy(..), fetchProxy) import Network.Browser@@ -59,83 +60,52 @@ import Distribution.System (buildArch, buildOS) import Control.Monad (unless) -collectPackage :: Bool -> Prefs -> Int -> (PackageConfig,Int) -> IO PackageCollectStats-collectPackage writeAscii prefs numPackages (packageConfig, packageIndex) = do+collectPackage :: Bool -> Prefs -> Int -> ((PackageConfig, [FilePath]), Int) -> IO PackageCollectStats+collectPackage writeAscii prefs numPackages ((packageConfig, dbs), packageIndex) = do     infoM "leksah-server" ("update_toolbar " ++ show         ((fromIntegral packageIndex / fromIntegral numPackages) :: Double))-    let packageName = packageIdentifierToString (packId $ getThisPackage packageConfig)-    let stat = PackageCollectStats packageName Nothing False False Nothing-    eitherStrFp    <- findSourceForPackage prefs (packId $ getThisPackage packageConfig)+    eitherStrFp    <- findSourceForPackage prefs pid     case eitherStrFp of         Left message -> do             debugM "leksah-server" . T.unpack $ message <> " : " <> packageName-            packageDescrHi <- collectPackageFromHI packageConfig+            packageDescrHi <- collectPackageFromHI packageConfig dbs             writeExtractedPackage False packageDescrHi             return stat {packageString = message, modulesTotal = Just (length (pdModules packageDescrHi))}         Right fpSource ->             case retrieveStrategy prefs of-                RetrieveThenBuild -> do-                    success <- retrieve packageName-                    if success-                        then do-                            debugM "leksah-server" . T.unpack $ "collectPackage: retreived = " <> packageName-                            liftIO $ writePackagePath (dropFileName fpSource) packageName-                            return (stat {withSource=True, retrieved= True, mbError=Nothing})-                        else do-                            debugM "leksah-server" . T.unpack $ "collectPackage: Can't retreive = " <> packageName-                            runCabalConfigure fpSource-                            mbPackageDescrPair <- packageFromSource fpSource packageConfig-                            case mbPackageDescrPair of-                                (Just packageDescrS, bstat) ->  do-                                    writePackageDesc packageDescrS fpSource packageName-                                    return bstat{modulesTotal = Just (length (pdModules packageDescrS))}-                                (Nothing,bstat) ->  do-                                    packageDescrHi <- collectPackageFromHI packageConfig-                                    writeExtractedPackage False packageDescrHi-                                    return bstat{modulesTotal = Just (length (pdModules packageDescrHi))}+                RetrieveThenBuild ->+                    retrieve fpSource >>= \case+                        Just stats -> return stats+                        Nothing -> buildOnly fpSource                 BuildThenRetrieve -> do-                        debugM "leksah-server" $ "Build (then retrieve) " <> T.unpack packageName <> " in " <> fpSource-                        runCabalConfigure fpSource-                        mbPackageDescrPair <- packageFromSource fpSource packageConfig-                        case mbPackageDescrPair of-                            (Just packageDescrS,bstat) ->  do-                                writePackageDesc packageDescrS fpSource packageName-                                return bstat{modulesTotal = Just (length (pdModules packageDescrS))}-                            (Nothing,bstat) ->  do-                                success  <- retrieve packageName-                                if success-                                    then do-                                        debugM "leksah-server" . T.unpack $ "collectPackage: retreived = " <> packageName-                                        liftIO $ writePackagePath (dropFileName fpSource) packageName-                                        return (stat {withSource=True, retrieved= True, mbError=Nothing})-                                    else do-                                        packageDescrHi <- collectPackageFromHI packageConfig-                                        writeExtractedPackage False packageDescrHi-                                        return bstat{modulesTotal = Just (length (pdModules packageDescrHi))}-                NeverRetrieve -> do-                        debugM "leksah-server" $ "Build " <> T.unpack packageName <> " in " <> fpSource-                        runCabalConfigure fpSource-                        mbPackageDescrPair <- packageFromSource fpSource packageConfig-                        case mbPackageDescrPair of-                                (Just packageDescrS,bstat) ->  do-                                    writePackageDesc packageDescrS fpSource packageName-                                    return bstat{modulesTotal = Just (length (pdModules packageDescrS))}-                                (Nothing,bstat) ->  do-                                    packageDescrHi <- collectPackageFromHI packageConfig+                    debugM "leksah-server" $ "Build (then retrieve) " <> T.unpack packageName <> " in " <> fpSource+                    build fpSource >>= \case+                        (True, bstat) -> return bstat+                        (False, bstat) ->+                            retrieve fpSource >>= \case+                                Just stats -> return stats+                                Nothing -> do+                                    packageDescrHi <- collectPackageFromHI packageConfig dbs                                     writeExtractedPackage False packageDescrHi                                     return bstat{modulesTotal = Just (length (pdModules packageDescrHi))}+                NeverRetrieve -> do+                    debugM "leksah-server" $ "Build " <> T.unpack packageName <> " in " <> fpSource+                    buildOnly fpSource     where-        retrieve :: Text -> IO Bool-        retrieve packString = do+        pid = packId $ getThisPackage packageConfig+        packageName = packageIdentifierToString pid+        stat = PackageCollectStats packageName Nothing False False Nothing+        retrieve :: FilePath -> IO (Maybe PackageCollectStats)+        retrieve fpSource = do             collectorPath   <- liftIO getCollectorPath             setCurrentDirectory collectorPath-            let fullUrl  = T.unpack (retrieveURL prefs) <> "/metadata-" <> leksahVersion <> "/" <> T.unpack packString <> leksahMetadataSystemFileExtension-                filePath = collectorPath </> T.unpack packString <.> leksahMetadataSystemFileExtension+            let fullUrl  = T.unpack (retrieveURL prefs) <> "/metadata-" <> leksahVersion <> "/" <> T.unpack packageName <> leksahMetadataSystemFileExtension+                filePath = collectorPath </> T.unpack packageName <.> leksahMetadataSystemFileExtension              case parseURI fullUrl of                 Nothing -> do                     errorM "leksah-server" $ "collectPackage: invalid URI = " <> fullUrl-                    return False+                    return Nothing                 Just uri -> do                     debugM "leksah-server" $ "collectPackage: before retreiving = " <> fullUrl                     proxy <- filterEmptyProxy . trimProxyUri <$> fetchProxy True@@ -151,9 +121,32 @@                     if rspCode rsp == (2,0,0)                         then do                             BS.writeFile filePath $ rspBody rsp-                            return True-                        else return False+                            debugM "leksah-server" . T.unpack $ "collectPackage: retreived = " <> packageName+                            liftIO $ writePackagePath (dropFileName fpSource) packageName+                            return (Just stat {withSource=True, retrieved= True, mbError=Nothing})+                        else do+                            debugM "leksah-server" . T.unpack $ "collectPackage: Can't retreive = " <> packageName+                            return Nothing +        build :: FilePath -> IO (Bool, PackageCollectStats)+        build fpSource = do+            runCabalConfigure fpSource+            mbPackageDescrPair <- packageFromSource fpSource packageConfig+            case mbPackageDescrPair of+                (Just packageDescrS, bstat) -> do+                    writePackageDesc packageDescrS fpSource+                    return (True, bstat{modulesTotal = Just (length (pdModules packageDescrS))})+                (Nothing, bstat) -> return (False, bstat)++        buildOnly :: FilePath -> IO PackageCollectStats+        buildOnly fpSource =+            build fpSource >>= \case+                (True, bstat) -> return bstat+                (False, bstat) -> do+                    packageDescrHi <- collectPackageFromHI packageConfig dbs+                    writeExtractedPackage False packageDescrHi+                    return bstat{modulesTotal = Just (length (pdModules packageDescrHi))}+         trimProxyUri (Proxy uri auth) = Proxy (trim uri) auth         trimProxyUri p = p         filterEmptyProxy (Proxy "" _) = NoProxy@@ -162,20 +155,20 @@         userAgent = concat [ "leksah-server/", display Paths_leksah_server.version                            , " (", display buildOS, "; ", display buildArch, ")"                            ]-        writePackageDesc packageDescr fpSource packageName = do+        writePackageDesc packageDescr fpSource = do             liftIO $ writeExtractedPackage writeAscii packageDescr             liftIO $ writePackagePath (dropFileName fpSource) packageName         runCabalConfigure fpSource = do             let dirPath         = dropFileName fpSource-                packageName     = takeBaseName fpSource+                packageName'    = takeBaseName fpSource                 flagsFor "base" = ["-finteger-gmp2"]                 flagsFor _      = []-                flags           = flagsFor packageName+                flags           = flagsFor packageName'             distExists <- doesDirectoryExist $ dirPath </> "dist"             unless distExists $ do                 setCurrentDirectory dirPath                 E.catch (do runTool' "cabal" ["clean"] Nothing-                            runTool' "cabal" ("configure":"--user":flags) Nothing+                            runTool' "cabal" ("configure":flags ++ map (("--package-db"<>) .T.pack) dbs) Nothing                             return ())                         (\ (_e :: E.SomeException) -> do                             debugM "leksah-server" "Can't configure"
src/IDE/Metainfo/SourceCollectorH.hs view
@@ -151,7 +151,7 @@             warningM "leksah-server" ("Ghc failed to process: " ++ show e ++ " (" ++ cabalPath ++ ")")             return (Nothing, PackageCollectStats packageName Nothing False False                                             (Just ("Ghc failed to process: " <> T.pack (show e) <> " (" <> T.pack cabalPath <> ")")))-        inner ghcFlags = inGhcIO ghcFlags [Opt_Haddock] $ \ dflags -> do+        inner ghcFlags = inGhcIO ghcFlags [Opt_Haddock] [] $ \ dflags -> do             (interfaces,_) <- processModules verbose (exportedMods ++ hiddenMods) [] []             liftIO $ print (length interfaces)             let mods = map (interfaceToModuleDescr dflags dirPath (packId $ getThisPackage packageConfig)) interfaces
src/IDE/Metainfo/WorkspaceCollector.hs view
@@ -55,7 +55,6 @@ import System.Directory import Distribution.Package hiding (PackageId) import Distribution.ModuleName-import Distribution.Text (simpleParse) import System.FilePath import qualified Data.ByteString.Char8 as BS import Data.Binary.Shared@@ -114,7 +113,7 @@ showRdrName dflags r = T.pack . showSDoc dflags $ ppr r  -- | Test-collectWorkspace :: PackageIdentifier ->  [(Text,FilePath)] -> Bool -> Bool -> FilePath -> IO()+collectWorkspace :: PackageIdentifier -> [(Text,FilePath)] -> Bool -> Bool -> FilePath -> IO() collectWorkspace pid moduleList forceRebuild writeAscii dir = do     debugM "leksah-server" $ "collectWorkspace called with modules " ++ show moduleList ++ " in folder " ++ dir     collectorPath <- liftIO $ getCollectorPath@@ -139,31 +138,30 @@  collectModule :: FilePath -> Bool -> PackageIdentifier -> [Text] -> (Text,FilePath) -> IO() collectModule collectorPackagePath writeAscii pid opts (modId,sourcePath) = do-    existCollectorFile <- doesFileExist collectorModulePath-    existSourceFile    <- doesFileExist sourcePath-    case mbModuleName of+    case parseModuleKey (T.unpack modId) sourcePath of         Nothing -> errorM "leksah-server" (T.unpack $ "Can't parse module name " <> modId)-        Just moduleName' ->+        Just modKey -> do+            let collectorModulePath = collectorPackagePath </> (moduleCollectorFileName modKey) <.> leksahMetadataWorkspaceFileExtension+                moduleName' = moduleKeyToName modKey+            existCollectorFile <- doesFileExist collectorModulePath+            existSourceFile    <- doesFileExist sourcePath             if existSourceFile-            then do-                if not existCollectorFile-                    then collectModule' sourcePath collectorModulePath writeAscii pid opts moduleName'-                    else do-                        sourceModTime <-  getModificationTime sourcePath-                        collModTime   <-  getModificationTime collectorModulePath-                        if sourceModTime > collModTime-                            then collectModule' sourcePath collectorModulePath writeAscii pid-                                    opts moduleName'-                            else return ()-            else errorM "leksah-server" ("source file not found " ++ sourcePath)-    where-        collectorModulePath = collectorPackagePath </> T.unpack modId <.> leksahMetadataWorkspaceFileExtension-        mbModuleName = simpleParse $ T.unpack modId+                then do+                    if not existCollectorFile+                        then collectModule' sourcePath collectorModulePath writeAscii pid opts moduleName'+                        else do+                            sourceModTime <-  getModificationTime sourcePath+                            collModTime   <-  getModificationTime collectorModulePath+                            if sourceModTime > collModTime+                                then collectModule' sourcePath collectorModulePath writeAscii pid+                                        opts moduleName'+                                else return ()+                else errorM "leksah-server" ("source file not found " ++ sourcePath)   collectModule' :: FilePath -> FilePath -> Bool -> PackageIdentifier -> [Text] -> ModuleName -> IO() collectModule' sourcePath destPath writeAscii pid opts moduleName' = gcatch (-    inGhcIO (opts++["-cpp"]) [Opt_Haddock] $ \ dynFlags -> do+    inGhcIO (opts++["-cpp"]) [Opt_Haddock] [] $ \ dynFlags -> do         session         <-  getSession #if MIN_VERSION_ghc(7,2,0)         (dynFlags3,fp') <-  liftIO $ preprocess session (sourcePath,Nothing)
src/IDE/Utils/FileUtils.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE OverloadedStrings #-}@@ -31,6 +30,7 @@ ,   getSysLibDir ,   moduleNameFromFilePath ,   moduleNameFromFilePath'+,   moduleCollectorFileName ,   findKnownPackages ,   isSubPath ,   findSourceFile@@ -41,6 +41,7 @@ ,   autoExtractTarFiles ,   getInstalledPackageIds ,   getInstalledPackageIds'+,   getPackageDBs ,   figureOutGhcOpts ,   figureOutHaddockOpts ,   allFilesWithExtensions@@ -51,9 +52,9 @@ import Prelude hiding (readFile) import System.FilePath        (splitFileName, dropExtension, takeExtension,-        combine, addExtension, (</>), normalise, splitPath, takeFileName)+        combine, addExtension, (</>), normalise, splitPath, takeFileName,takeDirectory) import Distribution.ModuleName (toFilePath, ModuleName)-import Control.Monad (when, foldM, filterM)+import Control.Monad (when, foldM, filterM, forM) import Data.Maybe (mapMaybe, catMaybes) import Distribution.Simple.PreProcess.Unlit (unlit) import System.Directory@@ -61,26 +62,21 @@         setCurrentDirectory, getCurrentDirectory, getDirectoryContents,         createDirectory, getHomeDirectory) import Text.ParserCombinators.Parsec.Language (haskellDef, haskell)-#if MIN_VERSION_parsec(3,0,0) import qualified Text.ParserCombinators.Parsec.Token as P        (GenTokenParser(..), TokenParser, identStart)-#else-import qualified Text.ParserCombinators.Parsec.Token as P-       (TokenParser(..), identStart)-#endif import Text.ParserCombinators.Parsec        (GenParser, parse, oneOf, alphaNum, noneOf, char, try,         (<?>), CharParser) import Data.Set (Set) import Data.List-    (isPrefixOf, isSuffixOf, stripPrefix)+    (isPrefixOf, isSuffixOf, stripPrefix, nub) import qualified Data.Set as  Set (empty, fromList) import Distribution.Package (PackageIdentifier) import Data.Char (ord)-import Distribution.Text (simpleParse)+import Distribution.Text (simpleParse, display)  import IDE.Utils.Utils-import IDE.Core.CTypes(configDirName)+import IDE.Core.CTypes(configDirName, ModuleKey(..)) import qualified Distribution.Text as  T (simpleParse) import System.Log.Logger(errorM,warningM,debugM) import IDE.Utils.Tool@@ -89,7 +85,7 @@ import System.IO.Strict (readFile) import qualified Data.Text as T        (pack, stripPrefix, isSuffixOf, take, length, unpack, init,-        last, words)+        last, words, splitOn) import Data.Monoid ((<>)) import Data.Text (Text) import Control.DeepSeq (deepseq)@@ -138,7 +134,7 @@ find' (h:t)         =   E.catch (do     exists <- doesFileExist h     if exists-        then return (Just h)+        then Just <$> canonicalizePath h         else find' t)         $ \ (_ :: SomeException) -> return Nothing @@ -268,6 +264,15 @@                 Left _ -> return Nothing                 Right str'' -> return (Just str'') +-- | Get the file name to use for the module collector results+-- we want to store the file name for Main module since there can be several in one package+moduleCollectorFileName+    :: ModuleKey -- ^ The module key+    -> String -- ^ The name to use for the collector file (without extension)+moduleCollectorFileName (LibModule name) = display name+moduleCollectorFileName (MainModule sourcePath) =+    "Main_" ++ "_" ++ takeFileName (takeDirectory sourcePath) ++ dropExtension (takeFileName sourcePath)+ lexer :: P.TokenParser st lexer = haskell @@ -404,17 +409,42 @@     output `deepseq` return $ normalise $ T.unpack libDir2     ) $ \ (e :: SomeException) -> error ("FileUtils>>getSysLibDir failed with " ++ show e) -getInstalledPackageIds :: IO [PackageIdentifier]-getInstalledPackageIds = either (const []) id <$> getInstalledPackageIds'+getInstalledPackageIds :: [FilePath] -> IO [PackageIdentifier]+getInstalledPackageIds dirs = either (const []) id <$> getInstalledPackageIds' dirs -getInstalledPackageIds' :: IO (Either Text [PackageIdentifier])-getInstalledPackageIds' = E.catch (do+getInstalledPackageIds' :: [FilePath] -> IO (Either Text [PackageIdentifier])+getInstalledPackageIds' dirs = E.catch (do     (!output, _) <- runTool' "ghc-pkg" ["list", "--simple-output"] Nothing-    output `deepseq` return $ Right $ concatMap names output+    pids <- output `deepseq` return $ concatMap names output+    -- Do our best to get the stack package ids+    stackPids <- forM dirs $ \dir -> E.catch (do+                    useStack <- liftIO . doesFileExist $ dir </> "stack.yaml"+                    if useStack+                        then do+                            (!output', _) <- runTool' "stack" ["--stack-yaml", T.pack (dir </> "stack.yaml"), "exec", "ghc-pkg", "--", "list", "--simple-output"] Nothing+                            output' `deepseq` return $ concatMap names output'+                        else return []+                 ) $ \ (_ :: SomeException) -> return []+    return . Right . nub $ pids ++ concat stackPids     ) $ \ (e :: SomeException) -> return . Left . T.pack $ show e   where     names (ToolOutput n) = mapMaybe (T.simpleParse . T.unpack) (T.words n)     names _ = []++getPackageDBs :: [FilePath] -> IO [[FilePath]]+getPackageDBs dirs = do+    dbs <- forM dirs $ \dir -> E.catch (do+                    useStack <- liftIO . doesFileExist $ dir </> "stack.yaml"+                    if useStack+                        then do+                            (!output, _) <- runTool' "stack" ["--stack-yaml", T.pack (dir </> "stack.yaml"), "path", "--ghc-package-path"] Nothing+                            filterM doesDirectoryExist $ concatMap paths output+                        else return []+                 ) $ \ (_ :: SomeException) -> return []+    return $ nub dbs+  where+    paths (ToolOutput n) = map T.unpack (T.splitOn ":" n)+    paths _ = []  figureOutHaddockOpts :: IO [Text] figureOutHaddockOpts = do
src/IDE/Utils/GHCUtils.hs view
@@ -61,9 +61,9 @@ #endif import IDE.Utils.FileUtils (getSysLibDir) #if MIN_VERSION_ghc(7,7,0)-import DynFlags (DumpFlag(..), gopt_set)+import DynFlags (DumpFlag(..), gopt_set, PkgConfRef(..)) #else-import DynFlags (dopt_set)+import DynFlags (dopt_set, PkgConfRef(..)) #endif import System.Log.Logger(debugM) import Control.Monad.IO.Class (MonadIO(..))@@ -79,11 +79,11 @@ #endif  #if MIN_VERSION_ghc(7,7,0)-inGhcIO :: [Text] -> [GeneralFlag] -> (DynFlags -> Ghc a) -> IO a+inGhcIO :: [Text] -> [GeneralFlag] -> [FilePath] -> (DynFlags -> Ghc a) -> IO a #else-inGhcIO :: [Text] -> [DynFlag] -> (DynFlags -> Ghc a) -> IO a+inGhcIO :: [Text] -> [DynFlag] -> [FilePath] -> (DynFlags -> Ghc a) -> IO a #endif-inGhcIO flags' udynFlags ghcAct = do+inGhcIO flags' udynFlags dbs ghcAct = do     debugM "leksah-server" $ "inGhcIO called with: " ++ show flags'     libDir         <-   getSysLibDir --    (restFlags, _) <-   parseStaticFlags (map noLoc flags')@@ -97,7 +97,8 @@         let dynflags'' = dynflags' {             hscTarget = HscNothing,             ghcMode   = CompManager,-            ghcLink   = NoLink+            ghcLink   = NoLink,+            extraPkgConfs = (map PkgConfFile dbs++) . extraPkgConfs dynflags'             }         dynflags''' <- parseGhcFlags dynflags'' (map (noLoc . T.unpack) flags') flags'         res <- defaultCleanupHandler dynflags''' $ do@@ -212,7 +213,7 @@       }}  myParseHeader :: FilePath -> String -> [Text] -> IO (Either Text (DynFlags, HsModule RdrName))-myParseHeader fp _str opts = inGhcIO (opts++["-cpp"]) [] $ \ _dynFlags -> do+myParseHeader fp _str opts = inGhcIO (opts++["-cpp"]) [] [] $ \ _dynFlags -> do     session   <- getSession #if MIN_VERSION_ghc(7,2,0)     (dynFlags',fp')    <-  liftIO $ preprocess session (fp,Nothing)
src/IDE/Utils/Server.hs view
@@ -47,7 +47,7 @@ ipAddress (a, b, c, d) = fromIntegral a + 0x100 * fromIntegral b + 0x10000 * fromIntegral c + 0x1000000 * fromIntegral d  -- | the functionality of a server-type ServerRoutine = (Handle, HostName, PortNumber) -> IO ()+type ServerRoutine = (Handle, HostName, PortNumber) -> MVar () -> IO ()  serverSocket' :: Server -> IO Socket serverSocket' (Server (SockAddrInet _ _) t _) = socket AF_INET t defaultProtocol@@ -71,7 +71,7 @@ startAccepting :: (Socket, Server) -> IO (ThreadId, MVar ()) startAccepting (sock, server) = do         mvar <- newEmptyMVar-        threadId <- forkIO (acceptance sock (serverRoutine server) `finally` putMVar mvar ())+        threadId <- forkIO (acceptance sock mvar (serverRoutine server) `finally` putMVar mvar ())         return (threadId, mvar)  serveMany :: Maybe UserAndGroup -> [Server] -> IO [(ThreadId, MVar ())]@@ -98,12 +98,13 @@ instance WaitFor (ThreadId, MVar ()) where         waitFor (_, mvar) = waitFor mvar -acceptance :: Socket -> ServerRoutine -> IO ()-acceptance sock action = E.catch (do+acceptance :: Socket -> MVar () -> ServerRoutine -> IO ()+acceptance sock mvar action = E.catch (do                 dta <- accept sock-                void . forkIO $ action dta)+                void . forkIO $ action dta mvar)                 (\(e :: SomeException) -> print e) >>-                acceptance sock action+                acceptance sock mvar action+   
src/IDE/Utils/Tool.hs view
@@ -70,6 +70,8 @@ import System.Exit (ExitCode(..)) import System.IO        (hClose, hFlush, Handle, hSetBuffering, BufferMode(..))+import System.Directory (doesFileExist)+import System.FilePath ((</>)) import Data.Conduit as C        ((=$), ($$), ($=)) import qualified Data.Conduit as C@@ -511,7 +513,8 @@         tool <- newToolState         writeChan (toolCommands tool) $             ToolCommand (":set " <> T.unwords interactiveFlags <> "\n:set prompt " <> ghciPrompt) "" startupOutputHandler-        runInteractiveTool tool ghciCommandLineReader "cabal"+        useStack <- doesFileExist $ dir </> "stack.yaml"+        runInteractiveTool tool ghciCommandLineReader (if useStack then "stack" else "cabal")             ("repl" : maybeToList mbExe) (Just dir)         return tool