1
- {-# LANGUAGE TupleSections, BangPatterns #-}
1
+ {-# LANGUAGE TupleSections #-}
2
2
3
3
-- TODO change the module name probably Distribution.Server.Features.PackageList.PackageRank
4
4
@@ -43,7 +43,7 @@ import qualified System.IO as SIO
43
43
44
44
data Scorer = Scorer
45
45
{ maximumS :: ! Float
46
- , score :: ! Float
46
+ , score :: ! Float
47
47
}
48
48
deriving Show
49
49
@@ -112,17 +112,18 @@ rankIO
112
112
-> ServerEnv
113
113
-> TarIndexCacheFeature
114
114
-> [PkgInfo ]
115
- -> PkgInfo
115
+ -> Maybe PkgInfo
116
116
-> IO Scorer
117
117
118
118
rankIO _ _ _ _ _ _ _ Nothing = return (Scorer (118 + 16 + 4 + 1 ) 0 )
119
- rankIO vers recentDownloads maintainers docs env tarCache pkgs pkg = do
119
+ rankIO vers recentDownloads maintainers docs env tarCache pkgs ( Just pkgI) = do
120
120
temp <- temporalScore pkg lastUploads versionList recentDownloads
121
121
versS <- versionScore versionList vers lastUploads pkg
122
122
codeS <- codeScore documentLines srcLines
123
123
return (temp <> versS <> codeS <> authorScore maintainers pkg)
124
124
125
125
where
126
+ pkg = packageDescription $ pkgDesc pkgI
126
127
pkgId = package pkg
127
128
lastUploads =
128
129
sortBy (flip compare )
@@ -132,7 +133,7 @@ rankIO vers recentDownloads maintainers docs env tarCache pkgs pkg = do
132
133
versionList = sortBy (flip compare )
133
134
$ map (pkgVersion . package . packageDescription) (pkgDesc <$> pkgs)
134
135
packageEntr = do
135
- tarB <- packageTarball tarCache $ pkg
136
+ tarB <- packageTarball tarCache pkgI
136
137
return
137
138
$ (\ (path, _, index) -> (path, ) <$> T. lookup index path)
138
139
=<< rightToMaybe tarB
@@ -245,16 +246,16 @@ temporalScore p lastUploads versionList recentDownloads = do
245
246
)
246
247
5
247
248
packageFreshness = case safeHead lastUploads of
248
- Nothing -> return 0
249
- (Just l) -> freshness versionList l isApp
249
+ Nothing -> return 0
250
+ (Just l) -> freshness versionList l isApp
250
251
freshnessScore = fracScor 10 <$> packageFreshness
251
252
-- Missing dependencyFreshnessScore for reasonable effectivity needs caching
252
253
tractionScore = do
253
254
fresh <- packageFreshness
254
255
return $ boolScor 1 (fresh * int2Float recentDownloads > 1000 )
255
256
256
257
rankPackagePage :: Maybe PackageDescription -> Scorer
257
- rankPackagePage Nothing = Scorer 233 0
258
+ rankPackagePage Nothing = Scorer 233 0
258
259
rankPackagePage (Just p) = tests <> benchs <> desc <> homeP <> sourceRp <> cats
259
260
where
260
261
tests = boolScor 50 (hasTests p)
@@ -277,7 +278,12 @@ rankPackage
277
278
-> [PkgInfo ]
278
279
-> IO Float
279
280
rankPackage versions recentDownloads maintainers docs tarCache env pkgs =
280
- total
281
- . (<>) (rankPackagePage pkgD)
282
- <$> rankIO versions recentDownloads maintainers docs env tarCache pkgs (safeLast pkgs)
281
+ total . (<>) (rankPackagePage pkgD) <$> rankIO versions
282
+ recentDownloads
283
+ maintainers
284
+ docs
285
+ env
286
+ tarCache
287
+ pkgs
288
+ (safeLast pkgs)
283
289
where pkgD = packageDescription . pkgDesc <$> safeLast pkgs
0 commit comments