@@ -14,15 +14,18 @@ module Deps.Get
14import Prelude hiding (all)
14import Prelude hiding (all)
15import Control.Monad.Except (catchError, liftIO)
15import Control.Monad.Except (catchError, liftIO)
16import qualified Data.ByteString as BS
16import qualified Data.ByteString as BS
17+import Data.Function (on)
17import qualified Data.List as List
18import qualified Data.List as List
18import qualified Data.Map as Map
19import qualified Data.Map as Map
19import Data.Map (Map)
20import Data.Map (Map)
21+import qualified Data.Text as Text
20import qualified System.Directory as Dir
22import qualified System.Directory as Dir
21import System.FilePath ((</>))
23import System.FilePath ((</>))
22import qualified Text.PrettyPrint.ANSI.Leijen as P
24import qualified Text.PrettyPrint.ANSI.Leijen as P
24import qualified Elm.Docs as Docs
26import qualified Elm.Docs as Docs
25import qualified Elm.Package as Pkg
27import qualified Elm.Package as Pkg
28+import qualified Elm.Utils as Utils
27import qualified Deps.Website as Website
30import qualified Deps.Website as Website
28import qualified Elm.Project.Json as Project
31import qualified Elm.Project.Json as Project
@@ -100,7 +103,34 @@ versions name (AllPackages pkgs) =
100 Right vsns
103 Right vsns
102 Nothing ->
105 Nothing ->
103− Left (Map.keys pkgs)
106+ Left (nearbyNames name (Map.keys pkgs))
109+nearbyNames :: Pkg.Name -> [Pkg.Name] -> [Pkg.Name]
110+nearbyNames (Pkg.Name author1 project1) possibleNames =
112+ authorDist = authorDistance (Text.unpack author1)
113+ projectDist = projectDistance (Text.unpack project1)
115+ addDistance name@(Pkg.Name author2 project2) =
116+ ( authorDist author2 + projectDist project2, name )
119+ List.sortBy (compare `on` fst) $
120+ map addDistance possibleNames
123+authorDistance :: String -> Text.Text -> Int
124+authorDistance bad possibility =
125+ abs (Utils.distance bad (Text.unpack possibility))
128+projectDistance :: String -> Text.Text -> Int
129+projectDistance bad possibility =
130+ if possibility == "elm-lang" || possibility == "elm-explorations" then
133+ abs (Utils.distance bad (Text.unpack possibility))