@@ -211,6 +211,7 @@ diagnosticTests = testGroup "diagnostics"
211
211
codeActionTests :: TestTree
212
212
codeActionTests = testGroup " code actions"
213
213
[ renameActionTests
214
+ , typeWildCardActionTests
214
215
]
215
216
216
217
renameActionTests :: TestTree
@@ -289,6 +290,76 @@ renameActionTests = testGroup "rename actions"
289
290
liftIO $ expectedContentAfterAction @=? contentAfterAction
290
291
]
291
292
293
+ typeWildCardActionTests :: TestTree
294
+ typeWildCardActionTests = testGroup " type wildcard actions"
295
+ [ testSession " global signature" $ do
296
+ let content = T. unlines
297
+ [ " module Testing where"
298
+ , " func :: _"
299
+ , " func x = x"
300
+ ]
301
+ doc <- openDoc' " Testing.hs" " haskell" content
302
+ _ <- waitForDiagnostics
303
+ actionsOrCommands <- getCodeActions doc (Range (Position 2 1 ) (Position 2 10 ))
304
+ let [addSignature] = [action | CACodeAction action@ CodeAction { _title = actionTitle } <- actionsOrCommands
305
+ , " Use type signature" `T.isInfixOf` actionTitle
306
+ ]
307
+ executeCodeAction addSignature
308
+ contentAfterAction <- documentContents doc
309
+ let expectedContentAfterAction = T. unlines
310
+ [ " module Testing where"
311
+ , " func :: (p -> p)"
312
+ , " func x = x"
313
+ ]
314
+ liftIO $ expectedContentAfterAction @=? contentAfterAction
315
+ , testSession " multi-line message" $ do
316
+ let content = T. unlines
317
+ [ " module Testing where"
318
+ , " func :: _"
319
+ , " func x y = x + y"
320
+ ]
321
+ doc <- openDoc' " Testing.hs" " haskell" content
322
+ _ <- waitForDiagnostics
323
+ actionsOrCommands <- getCodeActions doc (Range (Position 2 1 ) (Position 2 10 ))
324
+ let [addSignature] = [action | CACodeAction action@ CodeAction { _title = actionTitle } <- actionsOrCommands
325
+ , " Use type signature" `T.isInfixOf` actionTitle
326
+ ]
327
+ executeCodeAction addSignature
328
+ contentAfterAction <- documentContents doc
329
+ let expectedContentAfterAction = T. unlines
330
+ [ " module Testing where"
331
+ , " func :: (Integer -> Integer -> Integer)"
332
+ , " func x y = x + y"
333
+ ]
334
+ liftIO $ expectedContentAfterAction @=? contentAfterAction
335
+ , testSession " local signature" $ do
336
+ let content = T. unlines
337
+ [ " module Testing where"
338
+ , " func :: Int -> Int"
339
+ , " func x ="
340
+ , " let y :: _"
341
+ , " y = x * 2"
342
+ , " in y"
343
+ ]
344
+ doc <- openDoc' " Testing.hs" " haskell" content
345
+ _ <- waitForDiagnostics
346
+ actionsOrCommands <- getCodeActions doc (Range (Position 4 1 ) (Position 4 10 ))
347
+ let [addSignature] = [action | CACodeAction action@ CodeAction { _title = actionTitle } <- actionsOrCommands
348
+ , " Use type signature" `T.isInfixOf` actionTitle
349
+ ]
350
+ executeCodeAction addSignature
351
+ contentAfterAction <- documentContents doc
352
+ let expectedContentAfterAction = T. unlines
353
+ [ " module Testing where"
354
+ , " func :: Int -> Int"
355
+ , " func x ="
356
+ , " let y :: (Int)"
357
+ , " y = x * 2"
358
+ , " in y"
359
+ ]
360
+ liftIO $ expectedContentAfterAction @=? contentAfterAction
361
+ ]
362
+
292
363
----------------------------------------------------------------------
293
364
-- Utils
294
365
0 commit comments