@@ -187,6 +187,7 @@ diagnosticTests = testGroup "diagnostics"
187
187
codeActionTests :: TestTree
188
188
codeActionTests = testGroup " code actions"
189
189
[ renameActionTests
190
+ , typeWildCardActionTests
190
191
]
191
192
192
193
renameActionTests :: TestTree
@@ -265,6 +266,76 @@ renameActionTests = testGroup "rename actions"
265
266
liftIO $ expectedContentAfterAction @=? contentAfterAction
266
267
]
267
268
269
+ typeWildCardActionTests :: TestTree
270
+ typeWildCardActionTests = testGroup " type wildcard actions"
271
+ [ testSession " global signature" $ do
272
+ let content = T. unlines
273
+ [ " module Testing where"
274
+ , " func :: _"
275
+ , " func x = x"
276
+ ]
277
+ doc <- openDoc' " Testing.hs" " haskell" content
278
+ _ <- waitForDiagnostics
279
+ actionsOrCommands <- getCodeActions doc (Range (Position 2 1 ) (Position 2 10 ))
280
+ let [addSignature] = [action | CACodeAction action@ CodeAction { _title = actionTitle } <- actionsOrCommands
281
+ , " Use type signature" `T.isInfixOf` actionTitle
282
+ ]
283
+ executeCodeAction addSignature
284
+ contentAfterAction <- documentContents doc
285
+ let expectedContentAfterAction = T. unlines
286
+ [ " module Testing where"
287
+ , " func :: (p -> p)"
288
+ , " func x = x"
289
+ ]
290
+ liftIO $ expectedContentAfterAction @=? contentAfterAction
291
+ , testSession " multi-line message" $ do
292
+ let content = T. unlines
293
+ [ " module Testing where"
294
+ , " func :: _"
295
+ , " func x y = x + y"
296
+ ]
297
+ doc <- openDoc' " Testing.hs" " haskell" content
298
+ _ <- waitForDiagnostics
299
+ actionsOrCommands <- getCodeActions doc (Range (Position 2 1 ) (Position 2 10 ))
300
+ let [addSignature] = [action | CACodeAction action@ CodeAction { _title = actionTitle } <- actionsOrCommands
301
+ , " Use type signature" `T.isInfixOf` actionTitle
302
+ ]
303
+ executeCodeAction addSignature
304
+ contentAfterAction <- documentContents doc
305
+ let expectedContentAfterAction = T. unlines
306
+ [ " module Testing where"
307
+ , " func :: (Integer -> Integer -> Integer)"
308
+ , " func x y = x + y"
309
+ ]
310
+ liftIO $ expectedContentAfterAction @=? contentAfterAction
311
+ , testSession " local signature" $ do
312
+ let content = T. unlines
313
+ [ " module Testing where"
314
+ , " func :: Int -> Int"
315
+ , " func x ="
316
+ , " let y :: _"
317
+ , " y = x * 2"
318
+ , " in y"
319
+ ]
320
+ doc <- openDoc' " Testing.hs" " haskell" content
321
+ _ <- waitForDiagnostics
322
+ actionsOrCommands <- getCodeActions doc (Range (Position 4 1 ) (Position 4 10 ))
323
+ let [addSignature] = [action | CACodeAction action@ CodeAction { _title = actionTitle } <- actionsOrCommands
324
+ , " Use type signature" `T.isInfixOf` actionTitle
325
+ ]
326
+ executeCodeAction addSignature
327
+ contentAfterAction <- documentContents doc
328
+ let expectedContentAfterAction = T. unlines
329
+ [ " module Testing where"
330
+ , " func :: Int -> Int"
331
+ , " func x ="
332
+ , " let y :: (Int)"
333
+ , " y = x * 2"
334
+ , " in y"
335
+ ]
336
+ liftIO $ expectedContentAfterAction @=? contentAfterAction
337
+ ]
338
+
268
339
----------------------------------------------------------------------
269
340
-- Utils
270
341
0 commit comments