@@ -20,7 +20,7 @@ import Data.Aeson ((.=))
2020import Data.Bifunctor (first , second , bimap )
2121import qualified Data.ByteString.Lazy as BL
2222import Data.Default (def )
23- import Data.Function (on )
23+ import Data.Function (on , fix )
2424import qualified Data.IORef as IORef
2525import Data.List (nubBy )
2626import qualified Data.List.NonEmpty as NE
@@ -43,10 +43,12 @@ import qualified Language.PureScript.Make as Make
4343import qualified Language.PureScript.Make.Cache as Cache
4444import qualified Language.PureScript.TypeChecker.TypeSearch as TS
4545import qualified Network.Wai.Handler.Warp as Warp
46+ import qualified System.Directory as Directory
4647import System.Environment (getArgs )
4748import System.Exit (exitFailure )
4849import System.FilePath.Glob (glob )
4950import qualified System.IO as IO
51+ import qualified System.Process as Process
5052import Web.Scotty
5153import qualified Web.Scotty as Scotty
5254
@@ -113,6 +115,54 @@ buildMakeActions codegenRef =
113115 outputPrimDocs :: Make. Make ()
114116 outputPrimDocs = pure ()
115117
118+ exampleQuery str = " \
119+ \{ \" command\" : \" complete\" ,\
120+ \\" currentModule\" : \" Main\" ,\
121+ \\" matcher\" : {\
122+ \\" matcher\" : \" flex\" ,\
123+ \\" params\" : {\
124+ \\" search\" : \" " <> str <> " \" ,\
125+ \\" maxResults\" : 10\
126+ \}\
127+ \},\
128+ \\" params\" : {\
129+ \\" filters\" : [{\
130+ \\" filter\" : \" prefix\" ,\
131+ \\" params\" : {\
132+ \\" search\" : \" " <> str <> " \" \
133+ \}\
134+ \}],\
135+ \\" options\" : {\
136+ \\" maxResults\" : 20,\
137+ \\" groupReexports\" : true\
138+ \}\
139+ \}\
140+ \}\
141+ \"
142+
143+ ideProcess :: IO ()
144+ ideProcess = do
145+ currentDirectory <- Directory. getCurrentDirectory
146+ let ideServer =
147+ (Process. proc " purs" [" ide" , " server" ])
148+ { Process. cwd = Just (currentDirectory <> " /staging" )
149+ }
150+ ideClient =
151+ Process. createProcess_ " purs-ide-client"
152+ (Process. proc " purs" [" ide" , " client" ])
153+ { Process. std_in = Process. CreatePipe
154+ , Process. std_out = Process. CreatePipe
155+ }
156+ Process. withCreateProcess ideServer $
157+ \ _ _ _ _ -> fix $ \ loop -> do
158+ getLine >>= \ case
159+ " STOP" -> pure ()
160+ arg -> do
161+ (Just handleIn, Just handleOut, _, _) <- ideClient
162+ IO. hPutStrLn handleIn (exampleQuery arg)
163+ IO. hGetContents handleOut >>= putStrLn
164+ loop
165+
116166server :: [P. ExternsFile ] -> P. Env -> P. Environment -> Int -> IO ()
117167server externs initNamesEnv initEnv port = do
118168 codegenRef <- IORef. newIORef Nothing
0 commit comments