7
7
{-# LANGUAGE RankNTypes #-}
8
8
9
9
module Development.IDE.LSP.Notifications
10
- ( whenUriFile
10
+ ( whenUriHaskellFile
11
11
, descriptor
12
12
) where
13
13
@@ -38,16 +38,21 @@ import Development.IDE.Core.RuleTypes (GetClientSettings (..))
38
38
import Development.IDE.Types.Shake (toKey )
39
39
import Ide.Plugin.Config (CheckParents (CheckOnClose ))
40
40
import Ide.Types
41
+ import System.FilePath (takeExtension )
41
42
42
- whenUriFile :: Uri -> (NormalizedFilePath -> IO () ) -> IO ()
43
- whenUriFile uri act = whenJust (LSP. uriToFilePath uri) $ act . toNormalizedFilePath'
43
+ whenUriHaskellFile :: Uri -> (NormalizedFilePath -> IO () ) -> IO ()
44
+ whenUriHaskellFile uri act = whenJust maybeHaskellFile $ act . toNormalizedFilePath'
45
+ where
46
+ maybeHaskellFile = do
47
+ fp <- LSP. uriToFilePath uri
48
+ if takeExtension fp `elem` [" .hs" , " .lhs" ] then Just fp else Nothing
44
49
45
50
descriptor :: PluginId -> PluginDescriptor IdeState
46
51
descriptor plId = (defaultPluginDescriptor plId) { pluginNotificationHandlers = mconcat
47
52
[ mkPluginNotificationHandler LSP. STextDocumentDidOpen $
48
53
\ ide _ (DidOpenTextDocumentParams TextDocumentItem {_uri,_version}) -> liftIO $ do
49
54
updatePositionMapping ide (VersionedTextDocumentIdentifier _uri (Just _version)) (List [] )
50
- whenUriFile _uri $ \ file -> do
55
+ whenUriHaskellFile _uri $ \ file -> do
51
56
-- We don't know if the file actually exists, or if the contents match those on disk
52
57
-- For example, vscode restores previously unsaved contents on open
53
58
addFileOfInterest ide file Modified {firstOpen= True }
@@ -57,21 +62,21 @@ descriptor plId = (defaultPluginDescriptor plId) { pluginNotificationHandlers =
57
62
, mkPluginNotificationHandler LSP. STextDocumentDidChange $
58
63
\ ide _ (DidChangeTextDocumentParams identifier@ VersionedTextDocumentIdentifier {_uri} changes) -> liftIO $ do
59
64
updatePositionMapping ide identifier changes
60
- whenUriFile _uri $ \ file -> do
65
+ whenUriHaskellFile _uri $ \ file -> do
61
66
addFileOfInterest ide file Modified {firstOpen= False }
62
67
setFileModified ide False file
63
68
logDebug (ideLogger ide) $ " Modified text document: " <> getUri _uri
64
69
65
70
, mkPluginNotificationHandler LSP. STextDocumentDidSave $
66
71
\ ide _ (DidSaveTextDocumentParams TextDocumentIdentifier {_uri} _) -> liftIO $ do
67
- whenUriFile _uri $ \ file -> do
72
+ whenUriHaskellFile _uri $ \ file -> do
68
73
addFileOfInterest ide file OnDisk
69
74
setFileModified ide True file
70
75
logDebug (ideLogger ide) $ " Saved text document: " <> getUri _uri
71
76
72
77
, mkPluginNotificationHandler LSP. STextDocumentDidClose $
73
78
\ ide _ (DidCloseTextDocumentParams TextDocumentIdentifier {_uri}) -> liftIO $ do
74
- whenUriFile _uri $ \ file -> do
79
+ whenUriHaskellFile _uri $ \ file -> do
75
80
deleteFileOfInterest ide file
76
81
-- Refresh all the files that depended on this
77
82
checkParents <- optCheckParents =<< getIdeOptionsIO (shakeExtras ide)
@@ -120,3 +125,4 @@ descriptor plId = (defaultPluginDescriptor plId) { pluginNotificationHandlers =
120
125
liftIO $ logDebug (ideLogger ide) " Warning: Client does not support watched files. Falling back to OS polling"
121
126
]
122
127
}
128
+
0 commit comments