@@ -5,9 +5,9 @@ import scala.concurrent.Future
55
66import scala .meta .Term
77import scala .meta .internal .metals .Compilers
8+ import scala .meta .internal .metals .JsonParser
9+ import scala .meta .internal .metals .JsonParser .XtensionSerializableToJson
810import scala .meta .internal .metals .MetalsEnrichments ._
9- import scala .meta .internal .metals .ServerCommands
10- import scala .meta .internal .metals .clients .language .MetalsLanguageClient
1111import scala .meta .internal .metals .codeactions .CodeAction
1212import scala .meta .internal .metals .codeactions .CodeActionBuilder
1313import scala .meta .internal .metals .logging
@@ -26,39 +26,42 @@ import org.eclipse.{lsp4j => l}
2626class ConvertToNamedLambdaParameters (
2727 trees : Trees ,
2828 compilers : Compilers ,
29- languageClient : MetalsLanguageClient ,
3029) extends CodeAction {
3130
3231 override val kind : String = l.CodeActionKind .RefactorRewrite
3332
34- override type CommandData =
35- ServerCommands .ConvertToNamedLambdaParametersRequest
33+ private val parser = new JsonParser .Of [ConvertToNamedLambdaParametersParams ]
3634
37- override def command : Option [ ActionCommand ] = Some (
38- ServerCommands . ConvertToNamedLambdaParameters
35+ private case class ConvertToNamedLambdaParametersParams (
36+ position : l. TextDocumentPositionParams
3937 )
4038
41- override def handleCommand (
42- data : ServerCommands . ConvertToNamedLambdaParametersRequest ,
39+ override def resolveCodeAction (
40+ codeAction : l. CodeAction ,
4341 token : CancelToken ,
44- )(implicit ec : ExecutionContext ): Future [Unit ] = {
45- val uri = data.position.getTextDocument().getUri()
46- for {
47- edits <- compilers.codeAction(
48- data.position,
49- token,
50- CodeActionId .ConvertToNamedLambdaParameters ,
51- None ,
52- )
53- _ = logging.logErrorWhen(
54- edits.isEmpty(),
55- s " Could not convert lambda at position ${data.position} to named lambda " ,
56- )
57- workspaceEdit = new l.WorkspaceEdit (Map (uri -> edits).asJava)
58- _ <- languageClient
59- .applyEdit(new l.ApplyWorkspaceEditParams (workspaceEdit))
60- .asScala
61- } yield ()
42+ )(implicit ec : ExecutionContext ): Option [Future [l.CodeAction ]] = {
43+ val data = codeAction.getData()
44+ data match {
45+ case parser.Jsonized (data) =>
46+ Some {
47+ val uri = data.position.getTextDocument().getUri()
48+ for {
49+ edits <- compilers.codeAction(
50+ data.position,
51+ token,
52+ CodeActionId .ConvertToNamedLambdaParameters ,
53+ None ,
54+ )
55+ _ = logging.logErrorWhen(
56+ edits.isEmpty(),
57+ s " Could not convert lambda at position ${data.position} to named lambda " ,
58+ )
59+ workspaceEdit = new l.WorkspaceEdit (Map (uri -> edits).asJava)
60+ _ = codeAction.setEdit(workspaceEdit)
61+ } yield codeAction
62+ }
63+ case _ => None
64+ }
6265 }
6366
6467 override def contribute (
@@ -75,14 +78,14 @@ class ConvertToNamedLambdaParameters(
7578 params.getTextDocument(),
7679 new l.Position (lambda.pos.startLine, lambda.pos.startColumn),
7780 )
78- val command =
79- ServerCommands . ConvertToNamedLambdaParameters .toLsp (
80- ServerCommands . ConvertToNamedLambdaParametersRequest ( position)
81+ val data =
82+ ConvertToNamedLambdaParametersParams (
83+ position = position
8184 )
8285 val codeAction = CodeActionBuilder .build(
8386 title = ConvertToNamedLambdaParameters .title,
8487 kind = kind,
85- command = Some (command ),
88+ data = Some (data.toJsonObject ),
8689 )
8790 Future .successful(Seq (codeAction))
8891 }
0 commit comments