on de7295a help sign in
ghcide/src/Development/IDE/LSP/Notifications.hs
55 lines 2.6 kB history raw
1-- Copyright (c) 2019 The DAML Authors. All rights reserved.
2-- SPDX-License-Identifier: Apache-2.0
4{-# LANGUAGE DuplicateRecordFields #-}
5{-# LANGUAGE RankNTypes #-}
7module Development.IDE.LSP.Notifications
8 ( setHandlersNotifications
9 ) where
11import Language.Haskell.LSP.Types
12import Development.IDE.LSP.Server
13import qualified Language.Haskell.LSP.Core as LSP
14import qualified Language.Haskell.LSP.Types as LSP
16import Development.IDE.Types.Logger
17import Development.IDE.Core.Service
18import Development.IDE.Types.Location
20import Control.Monad.Extra
21import qualified Data.Set as S
23import Development.IDE.Core.FileStore
24import Development.IDE.Core.OfInterest
27whenUriFile :: Uri -> (NormalizedFilePath -> IO ()) -> IO ()
28whenUriFile uri act = whenJust (LSP.uriToFilePath uri) $ act . toNormalizedFilePath
30setHandlersNotifications :: PartialHandlers
31setHandlersNotifications = PartialHandlers $ \WithMessage{..} x -> return x
32 {LSP.didOpenTextDocumentNotificationHandler = withNotification (LSP.didOpenTextDocumentNotificationHandler x) $
33 \_ ide (DidOpenTextDocumentParams TextDocumentItem{_uri,_version}) -> do
34 updatePositionMapping ide (VersionedTextDocumentIdentifier _uri (Just _version)) (List [])
35 whenUriFile _uri $ \file -> do
36 modifyFilesOfInterest ide (S.insert file)
37 logInfo (ideLogger ide) $ "Opened text document: " <> getUri _uri
39 ,LSP.didChangeTextDocumentNotificationHandler = withNotification (LSP.didChangeTextDocumentNotificationHandler x) $
40 \_ ide (DidChangeTextDocumentParams identifier@VersionedTextDocumentIdentifier{_uri} changes) -> do
41 updatePositionMapping ide identifier changes
42 setSomethingModified ide
43 logInfo (ideLogger ide) $ "Modified text document: " <> getUri _uri
45 ,LSP.didSaveTextDocumentNotificationHandler = withNotification (LSP.didSaveTextDocumentNotificationHandler x) $
46 \_ ide (DidSaveTextDocumentParams TextDocumentIdentifier{_uri}) -> do
47 setSomethingModified ide
48 logInfo (ideLogger ide) $ "Saved text document: " <> getUri _uri
50 ,LSP.didCloseTextDocumentNotificationHandler = withNotification (LSP.didCloseTextDocumentNotificationHandler x) $
51 \_ ide (DidCloseTextDocumentParams TextDocumentIdentifier{_uri}) -> do
52 whenUriFile _uri $ \file -> do
53 modifyFilesOfInterest ide (S.delete file)
54 logInfo (ideLogger ide) $ "Closed text document: " <> getUri _uri
55 }