Add ignoreLogNotifications config option
authorLuke Lau <luke_lau@icloud.com>
Tue, 26 Nov 2019 19:05:14 +0000 (19:05 +0000)
committerLuke Lau <luke_lau@icloud.com>
Tue, 26 Nov 2019 19:05:14 +0000 (19:05 +0000)
ChangeLog.md
src/Language/Haskell/LSP/Test/Session.hs
test/Test.hs

index c75f2c6834648570689b339c5a1966358fe0e67d..2d4f6115cdd07b5a02b91dd31f99bf2ac68071cf 100644 (file)
@@ -1,5 +1,9 @@
 # Revision history for lsp-test
 
+## 0.9.0.0 -- ???
+
+* Add `ignoreLogNotifications` config option
+
 ## 0.8.2.0 -- 2019-11-17
 
 * Expose `satisfyMaybe` (@cocreature)
index 07b588666772f10a2369f92a37a5a96cb89aca67..2b6da8e5086ac5770e5c89196a9bd5e742cb916a 100644 (file)
@@ -95,11 +95,14 @@ data SessionConfig = SessionConfig
   , logMessages    :: Bool -- ^ Trace the messages sent and received to stdout, defaults to False.
   , logColor       :: Bool -- ^ Add ANSI color to the logged messages, defaults to True.
   , lspConfig      :: Maybe Value -- ^ The initial LSP config as JSON value, defaults to Nothing.
+  -- ^ Whether or not to ignore 'ShowMessageNotification' and 'LogMessageNotification', defaults to False.
+  -- @since 0.9.0.0
+  , ignoreLogNotifications :: Bool
   }
 
 -- | The configuration used in 'Language.Haskell.LSP.Test.runSession'.
 defaultConfig :: SessionConfig
-defaultConfig = SessionConfig 60 False False True Nothing
+defaultConfig = SessionConfig 60 False False True Nothing False
 
 instance Default SessionConfig where
   def = defaultConfig
@@ -181,9 +184,14 @@ runSession context state (Session session) = runReaderT (runStateT conduit state
 
     chanSource = do
       msg <- liftIO $ readChan (messageChan context)
+      unless (ignoreLogNotifications (config context) && isLogNotification msg) $
         yield msg
       chanSource
 
+    isLogNotification (ServerMessage (NotShowMessage _)) = True
+    isLogNotification (ServerMessage (NotLogMessage _)) = True
+    isLogNotification _ = False
+
     watchdog :: ConduitM SessionMessage FromServerMessage (StateT SessionState (ReaderT SessionContext IO)) ()
     watchdog = Conduit.awaitForever $ \msg -> do
       curId <- curTimeoutId <$> get
@@ -362,3 +370,4 @@ logMsg t msg = do
 
         showPretty = B.unpack . encodePretty
 
+
index a0d4d0d4c210472ab2b62fdf4d6c356e6a5de917..dc770d9205efc21e22147660380470316ed371a1 100644 (file)
@@ -333,6 +333,12 @@ main = hspec $ do
           pred _ = False
       void $ satisfy pred
 
+  describe "ignoreLogNotifications" $
+    it "works" $
+      runSessionWithConfig (defaultConfig { ignoreLogNotifications = True }) "hie"  fullCaps "test/data" $ do
+        openDoc "Format.hs" "haskell"
+        void publishDiagnosticsNotification
+
 mkRange sl sc el ec = Range (Position sl sc) (Position el ec)
 
 didChangeCaps :: ClientCapabilities