@@ -7,13 +7,19 @@ module Terminal.Args.Helpers
77 where
88
99
10+import qualified Data.ByteString.UTF8 as BS_UTF8
1011import qualified Data.Char as Char
12+import qualified Data.List as List
13+import qualified Data.Map as Map
1114import qualified Data.Utf8 as Utf8
1215import qualified System.FilePath as FP
1316
1417import Terminal.Args (Parser(..))
18+import qualified Deps.Registry as Registry
1519import qualified Elm.Package as Pkg
1620import qualified Elm.Version as V
21+import qualified Parse.Primitives as P
22+import qualified Stuff
1723
1824
1925
@@ -33,7 +39,9 @@ version =
3339
3440parseVersion :: String -> Maybe V.Version
3541parseVersion chars =
36− V.fromString (Utf8.fromChars chars)
42+ case P.fromByteString V.parser (,) (BS_UTF8.fromString chars) of
43+ Right vsn -> Just vsn
44+ Left _ -> Nothing
3745
3846
3947suggestVersion :: String -> IO [String]
@@ -102,9 +110,10 @@ package =
102110
103111
104112parsePackage :: String -> Maybe Pkg.Name
105−parsePackage string =
106− either (const Nothing) Just $
107− Pkg.fromString (Utf8.fromChars string)
113+parsePackage chars =
114+ case P.fromByteString Pkg.parser (,) (BS_UTF8.fromString chars) of
115+ Right pkg -> Just pkg
116+ Left _ -> Nothing
108117
109118
110119suggestPackages :: String -> IO [String]
@@ -113,14 +122,14 @@ suggestPackages _ =
113122
114123
115124examplePackages :: String -> IO [String]
116−examplePackages string =
117− case Pkg.fromString (Utf8.fromChars string) of
118− Left _ ->
119− return (error "TODO need to make suggestions")
120−
121− _ ->
122− return
123− [ "elm/http"
124− , "elm/json"
125− , "elm-community/random-extra"
126− ]
125+examplePackages given =
126+ do cache <- Stuff.getPackageCache
127+ maybeRegistry <- Registry.read cache
128+ return $
129+ case maybeRegistry of
130+ Nothing ->
131+ []
132+
133+ Just (Registry.Registry _ versions) ->
134+ filter (List.isPrefixOf given) $
135+ map Pkg.toChars (Map.keys versions)