on master help sign in
provide suggestions for package autocomplete based on all known names
9acff26Evan Czaplicki
terminal/src/Terminal/Args/Helpers.hs+24−15
@@ -7,13 +7,19 @@ module Terminal.Args.Helpers
7 where
7 where
8
8
9
9
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
13
16
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
17
23
18
24
19
25
@@ -33,7 +39,9 @@ version =
33
39
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
44+ Left _ -> Nothing
37
45
38
46
39suggestVersion :: String -> IO [String]
47suggestVersion :: String -> IO [String]
@@ -102,9 +110,10 @@ package =
102
110
103
111
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
116+ Left _ -> Nothing
108
117
109
118
110suggestPackages :: String -> IO [String]
119suggestPackages :: String -> IO [String]
@@ -113,14 +122,14 @@ suggestPackages _ =
113
122
114
123
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
121− _ ->
130+ Nothing ->
122− return
123− [ "elm/http"
124− , "elm/json"
125− , "elm-community/random-extra"
126− ]
131+ []
132+
133+ Just (Registry.Registry _ versions) ->
134+ filter (List.isPrefixOf given) $
135+ map Pkg.toChars (Map.keys versions)