@@ -56,7 +56,6 @@ import Data.Either
5656import Data.List.Extra
5757import qualified Data.Text as T
5858import Development.IDE.Logger as Logger
59−import Development.IDE.Types.LSP
6059import Development.IDE.Types.Diagnostics hiding (getAllDiagnostics)
6160import qualified Development.IDE.Types.Diagnostics as D
6261import Control.Concurrent.Extra
@@ -64,6 +63,8 @@ import Control.Exception
6463import Control.DeepSeq
6564import System.Time.Extra
6665import Data.Typeable
66+import qualified Language.Haskell.LSP.Messages as LSP
67+import qualified Language.Haskell.LSP.Types as LSP
6768import System.FilePath hiding (makeRelative)
6869import qualified Development.Shake as Shake
6970import Control.Monad.Extra
@@ -76,7 +77,7 @@ import Numeric.Extra
7677
7778-- information we stash inside the shakeExtra field
7879data ShakeExtras = ShakeExtras
79− {eventer :: Event -> IO ()
80+ {eventer :: LSP.FromServerMessage -> IO ()
8081 ,logger :: Logger.Handle
8182 ,globals :: Var (Map.HashMap TypeRep Dynamic)
8283 ,state :: Var Values
@@ -211,7 +212,7 @@ getValues state key file = do
211212 pure $ fmap (fromJust . fromDynamic @v) v
212213
213214-- | Open a 'IdeState', should be shut using 'shakeShut'.
214−shakeOpen :: (Event -> IO ()) -- ^ diagnostic handler
215+shakeOpen :: (LSP.FromServerMessage -> IO ()) -- ^ diagnostic handler
215216 -> Logger.Handle
216217 -> ShakeOptions
217218 -> Rules ()
@@ -396,14 +397,19 @@ updateFileDiagnostics fp k ShakeExtras{diagnostics, state} current = do
396397 let newDiags = getFileDiagnostics fp newDiagsStore
397398 pure (newDiagsStore, (newDiags, oldDiags))
398399 when (newDiags /= oldDiags) $
399− sendEvent $ EventFileDiagnostics (fp, newDiags)
400+ sendEvent $ publishDiagnosticsNotification fp newDiags
400401
402+publishDiagnosticsNotification :: FilePath -> [Diagnostic] -> LSP.FromServerMessage
403+publishDiagnosticsNotification fp diags =
404+ LSP.NotPublishDiagnostics $
405+ LSP.NotificationMessage "2.0" LSP.TextDocumentPublishDiagnostics $
406+ LSP.PublishDiagnosticsParams (filePathToUri' fp) (List diags)
401407
402408setPriority :: (Enum a) => a -> Action ()
403409setPriority p =
404410 deprioritize (fromIntegral . negate $ fromEnum p)
405411
406−sendEvent :: Event -> Action ()
412+sendEvent :: LSP.FromServerMessage -> Action ()
407413sendEvent e = do
408414 ShakeExtras{eventer} <- getShakeExtras
409415 liftIO $ eventer e