@@ -20,7 +20,7 @@ import Data.Aeson ((.=))
20
20
import Data.Bifunctor (first , second , bimap )
21
21
import qualified Data.ByteString.Lazy as BL
22
22
import Data.Default (def )
23
- import Data.Function (on )
23
+ import Data.Function (on , fix )
24
24
import qualified Data.IORef as IORef
25
25
import Data.List (nubBy )
26
26
import qualified Data.List.NonEmpty as NE
@@ -43,10 +43,12 @@ import qualified Language.PureScript.Make as Make
43
43
import qualified Language.PureScript.Make.Cache as Cache
44
44
import qualified Language.PureScript.TypeChecker.TypeSearch as TS
45
45
import qualified Network.Wai.Handler.Warp as Warp
46
+ import qualified System.Directory as Directory
46
47
import System.Environment (getArgs )
47
48
import System.Exit (exitFailure )
48
49
import System.FilePath.Glob (glob )
49
50
import qualified System.IO as IO
51
+ import qualified System.Process as Process
50
52
import Web.Scotty
51
53
import qualified Web.Scotty as Scotty
52
54
@@ -113,6 +115,54 @@ buildMakeActions codegenRef =
113
115
outputPrimDocs :: Make. Make ()
114
116
outputPrimDocs = pure ()
115
117
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
+
116
166
server :: [P. ExternsFile ] -> P. Env -> P. Environment -> Int -> IO ()
117
167
server externs initNamesEnv initEnv port = do
118
168
codegenRef <- IORef. newIORef Nothing
0 commit comments