@@ -11,6 +11,7 @@ import Development.IDE.State.Service
1111import Development.IDE.State.Rules
1212import Development.IDE.State.Shake
1313import Development.IDE.State.RuleTypes
14+import Data.String
1415import Development.IDE.Types.Diagnostics
1516import Development.IDE.Types.Options
1617import Development.IDE.Logger
@@ -39,6 +40,9 @@ getLibdir = fromMaybe GHC.Paths.libdir <$> lookupEnv "NIX_GHC_LIBDIR"
3940
4041main :: IO ()
4142main = do
43+ -- WARNING: If you write to stdout before runLanguageServer
44+ -- then the language server will not work
45+ hPutStrLn stderr "Starting haskell-ide-core Demo"
4246 (ghcOptions, map toNormalizedFilePath -> files, isIde) <- getCmdLine
4347
4448 -- lock to avoid overlapping output on stdout
@@ -56,21 +60,26 @@ main = do
5660 }
5761
5862 if isIde then do
59− putStrLn "Starting IDE server"
63+ hPutStrLn stderr "Starting running the IDE server"
6064 runLanguageServer logger $ \event vfs -> do
61− putStrLn "Server started"
62− initialise mainRule event logger options vfs
65+ hPutStrLn stderr "Server started"
66+ initialise (mainRule >> action kick) event logger options vfs
6367 else do
6468 vfs <- makeVFSHandle
6569 ide <- initialise mainRule (showEvent lock) logger options vfs
6670 setFilesOfInterest ide $ Set.fromList files
67− _ <- runAction ide $ uses_ TypeCheck files
71+ runAction ide kick
6872 -- shake now writes an async message that it is completed with timing info,
6973 -- so we sleep briefly to wait for it to have been written
7074 sleep 0.01
7175 putStrLn "Done"
7276
7377
78+kick :: Action ()
79+kick = do
80+ files <- use_ GetFilesOfInterest $ fromString ""
81+ void $ uses TypeCheck $ Set.toList files
82+
7483-- | Print an LSP event.
7584showEvent :: Lock -> FromServerMessage -> IO ()
7685showEvent _ (EventFileDiagnostics _ []) = return ()