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 +11/−11
- main/Collector.hs +33/−30
- src/IDE/Core/CTypes.hs +46/−10
- src/IDE/Metainfo/InterfaceCollector.hs +2/−2
- src/IDE/Metainfo/PackageCollector.hs +60/−67
- src/IDE/Metainfo/SourceCollectorH.hs +1/−1
- src/IDE/Metainfo/WorkspaceCollector.hs +19/−21
- src/IDE/Utils/FileUtils.hs +48/−18
- src/IDE/Utils/GHCUtils.hs +8/−7
- src/IDE/Utils/Server.hs +7/−6
- src/IDE/Utils/Tool.hs +4/−1
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