@@ -7,13 +7,19 @@ module Terminal.Args.Helpers
10+import qualified Data.ByteString.UTF8 as BS_UTF8
10import qualified Data.Char as Char
11import qualified Data.Char as Char
12+import qualified Data.List as List
13+import qualified Data.Map as Map
11import qualified Data.Utf8 as Utf8
14import qualified Data.Utf8 as Utf8
12import qualified System.FilePath as FP
15import qualified System.FilePath as FP
14import Terminal.Args (Parser(..))
17import Terminal.Args (Parser(..))
18+import qualified Deps.Registry as Registry
15import qualified Elm.Package as Pkg
19import qualified Elm.Package as Pkg
16import qualified Elm.Version as V
20import qualified Elm.Version as V
21+import qualified Parse.Primitives as P
22+import qualified Stuff
@@ -33,7 +39,9 @@ version =
34parseVersion :: String -> Maybe V.Version
40parseVersion :: String -> Maybe V.Version
35parseVersion chars =
41parseVersion chars =
36− V.fromString (Utf8.fromChars chars)
42+ case P.fromByteString V.parser (,) (BS_UTF8.fromString chars) of
43+ Right vsn -> Just vsn
39suggestVersion :: String -> IO [String]
47suggestVersion :: String -> IO [String]
@@ -102,9 +110,10 @@ package =
104parsePackage :: String -> Maybe Pkg.Name
112parsePackage :: String -> Maybe Pkg.Name
105−parsePackage string =
113+parsePackage chars =
106− either (const Nothing) Just $
114+ case P.fromByteString Pkg.parser (,) (BS_UTF8.fromString chars) of
107− Pkg.fromString (Utf8.fromChars string)
115+ Right pkg -> Just pkg
110suggestPackages :: String -> IO [String]
119suggestPackages :: String -> IO [String]
@@ -113,14 +122,14 @@ suggestPackages _ =
115examplePackages :: String -> IO [String]
124examplePackages :: String -> IO [String]
116−examplePackages string =
125+examplePackages given =
117− case Pkg.fromString (Utf8.fromChars string) of
126+ do cache <- Stuff.getPackageCache
118− Left _ ->
127+ maybeRegistry <- Registry.read cache
119− return (error "TODO need to make suggestions")
128+ return $
120−
129+ case maybeRegistry of
125− , "elm-community/random-extra"
133+ Just (Registry.Registry _ versions) ->
134+ filter (List.isPrefixOf given) $
135+ map Pkg.toChars (Map.keys versions)