@@ -19,11 +19,10 @@ import qualified Data.Aeson as A
19
19
import Data.Aeson ((.=) )
20
20
import Data.Bifunctor (first , second , bimap )
21
21
import qualified Data.ByteString as BS
22
- import qualified Data.ByteString.Char8 as BS.Char8
23
22
import qualified Data.ByteString.Lazy as BL
24
23
import qualified Data.ByteString.Lazy.Char8 as BL.Char8
25
24
import Data.Default (def )
26
- import Data.Function (on , fix )
25
+ import Data.Function (on )
27
26
import qualified Data.IORef as IORef
28
27
import Data.List (nubBy )
29
28
import qualified Data.List.NonEmpty as NE
@@ -52,7 +51,6 @@ import System.Environment (getArgs)
52
51
import System.Exit (exitFailure )
53
52
import System.FilePath.Glob (glob )
54
53
import qualified System.IO as IO
55
- import System.IO (BufferMode (NoBuffering ))
56
54
import qualified System.Process as Process
57
55
import Web.Scotty
58
56
import qualified Web.Scotty as Scotty
@@ -120,7 +118,6 @@ buildMakeActions codegenRef =
120
118
outputPrimDocs :: Make. Make ()
121
119
outputPrimDocs = pure ()
122
120
123
-
124
121
server :: [P. ExternsFile ] -> P. Env -> P. Environment -> Int -> String -> IO ()
125
122
server externs initNamesEnv initEnv port pursIDEPortString = do
126
123
codegenRef <- IORef. newIORef Nothing
@@ -166,19 +163,33 @@ server externs initNamesEnv initEnv port pursIDEPortString = do
166
163
Right (warnings, comp) ->
167
164
Scotty. json $ A. object [ " js" .= comp, " warnings" .= warnings ]
168
165
169
- post " /complete" $ do
166
+ get " /complete" $ do
167
+ query <- param " q"
170
168
Scotty. setHeader " Access-Control-Allow-Origin" " *"
171
169
Scotty. setHeader " Content-Type" " application/json"
170
+ let mkCommand q = A. encode $ A. object
171
+ [ " command" .= (" complete" :: Text )
172
+ , " params" .= A. object
173
+ [ " filters" .= A. Array
174
+ ( V. fromList
175
+ [ A. object
176
+ [ " filter" .= (" prefix" :: Text )
177
+ , " params" .= A. object
178
+ [ " search" .= q ]
179
+ ]
180
+ ]
181
+ )
182
+ ]
183
+ ]
172
184
(Just handleIn, Just handleOut, _, _) <- liftIO $
173
185
Process. createProcess_
174
186
" purs-ide-client"
175
187
(Process. proc " purs" [" ide" , " client" , " -p" , pursIDEPortString])
176
188
{ Process. std_in = Process. CreatePipe
177
189
, Process. std_out = Process. CreatePipe
178
190
}
179
- liftIO (IO. hSetBuffering handleIn NoBuffering )
180
- command <- BL.Char8. toStrict <$> body
181
- liftIO (BS.Char8. hPutStrLn handleIn command)
191
+ liftIO (IO. hSetBuffering handleIn IO. NoBuffering )
192
+ liftIO (BL.Char8. hPutStrLn handleIn (mkCommand (query :: Text )))
182
193
result <- liftIO (BS. hGetContents handleOut)
183
194
Scotty. text (TL. fromStrict (T. decodeUtf8 result))
184
195
@@ -265,6 +276,6 @@ main = do
265
276
case e of
266
277
Left err -> print err >> exitFailure
267
278
Right (exts, namesEnv, env) -> do
268
- let ideServer = Process. proc " purs" (" ide" : " server" : " -p" : pursIDEPortString: inputGlobs)
269
- Process. withCreateProcess ideServer $
279
+ let pursIDEServer = Process. proc " purs" (" ide" : " server" : " -p" : pursIDEPortString: inputGlobs)
280
+ Process. withCreateProcess pursIDEServer $
270
281
\ _ _ _ _ -> server exts namesEnv env port pursIDEPortString
0 commit comments