@@ -11,6 +11,7 @@ import Development.IDE.State.Service
11import Development.IDE.State.Rules
11import Development.IDE.State.Rules
12import Development.IDE.State.Shake
12import Development.IDE.State.Shake
13import Development.IDE.State.RuleTypes
13import Development.IDE.State.RuleTypes
14import Development.IDE.Types.Diagnostics
15import Development.IDE.Types.Diagnostics
15import Development.IDE.Types.Options
16import Development.IDE.Types.Options
16import Development.IDE.Logger
17import Development.IDE.Logger
@@ -39,6 +40,9 @@ getLibdir = fromMaybe GHC.Paths.libdir <$> lookupEnv "NIX_GHC_LIBDIR"
40main :: IO ()
41main :: IO ()
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"
42 (ghcOptions, map toNormalizedFilePath -> files, isIde) <- getCmdLine
46 (ghcOptions, map toNormalizedFilePath -> files, isIde) <- getCmdLine
44 -- lock to avoid overlapping output on stdout
48 -- lock to avoid overlapping output on stdout
@@ -56,21 +60,26 @@ main = do
58 if isIde then do
62 if isIde then do
59− putStrLn "Starting IDE server"
63+ hPutStrLn stderr "Starting running the IDE server"
60 runLanguageServer logger $ \event vfs -> do
64 runLanguageServer logger $ \event vfs -> do
61− putStrLn "Server started"
65+ hPutStrLn stderr "Server started"
62− initialise mainRule event logger options vfs
66+ initialise (mainRule >> action kick) event logger options vfs
64 vfs <- makeVFSHandle
68 vfs <- makeVFSHandle
65 ide <- initialise mainRule (showEvent lock) logger options vfs
69 ide <- initialise mainRule (showEvent lock) logger options vfs
66 setFilesOfInterest ide $ Set.fromList files
70 setFilesOfInterest ide $ Set.fromList files
67− _ <- runAction ide $ uses_ TypeCheck files
71+ runAction ide kick
68 -- shake now writes an async message that it is completed with timing info,
72 -- shake now writes an async message that it is completed with timing info,
69 -- so we sleep briefly to wait for it to have been written
73 -- so we sleep briefly to wait for it to have been written
70 sleep 0.01
74 sleep 0.01
71 putStrLn "Done"
75 putStrLn "Done"
80+ files <- use_ GetFilesOfInterest $ fromString ""
81+ void $ uses TypeCheck $ Set.toList files
74-- | Print an LSP event.
83-- | Print an LSP event.
75showEvent :: Lock -> FromServerMessage -> IO ()
84showEvent :: Lock -> FromServerMessage -> IO ()
76showEvent _ (EventFileDiagnostics _ []) = return ()
85showEvent _ (EventFileDiagnostics _ []) = return ()