Skip to content

Commit 01974d7

Browse files
committed
refactor: Move the code from the inferredMethodEdits method
1 parent e1a62bc commit 01974d7

File tree

5 files changed

+325
-324
lines changed

5 files changed

+325
-324
lines changed

metals/src/main/scala/scala/meta/internal/metals/codeactions/CodeActionProvider.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ final class CodeActionProvider(
2929
private val allActions: List[CodeAction] = List(
3030
new ImplementAbstractMembers(compilers),
3131
new ImportMissingSymbol(compilers, buildTargets),
32-
new CreateNewSymbol(compilers, buildTargets, languageClient),
32+
new CreateNewSymbol(compilers, languageClient),
3333
new ActionableDiagnostic(),
3434
new StringActions(buffers),
3535
extractMemberAction,

metals/src/main/scala/scala/meta/internal/metals/codeactions/CreateNewSymbol.scala

+18-23
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,20 @@ package scala.meta.internal.metals.codeactions
33
import scala.concurrent.ExecutionContext
44
import scala.concurrent.Future
55

6-
import scala.meta.internal.metals.BuildTargets
76
import scala.meta.internal.metals.Compilers
87
import scala.meta.internal.metals.MetalsEnrichments._
9-
import scala.meta.internal.metals.ScalaVersions
108
import scala.meta.internal.metals.ScalacDiagnostic
119
import scala.meta.internal.metals.ServerCommands
1210
import scala.meta.internal.metals.clients.language.MetalsLanguageClient
1311
import scala.meta.internal.metals.codeactions.CodeAction
1412
import scala.meta.internal.metals.logging
1513
import scala.meta.pc.CancelToken
14+
import scala.meta.pc.CodeActionId
1615

1716
import org.eclipse.{lsp4j => l}
18-
import scala.meta.pc.CodeActionId
1917

2018
class CreateNewSymbol(
2119
compilers: Compilers,
22-
buildTargets: BuildTargets,
2320
languageClient: MetalsLanguageClient,
2421
) extends CodeAction {
2522
override def kind: String = l.CodeActionKind.QuickFix
@@ -29,8 +26,6 @@ class CreateNewSymbol(
2926
ServerCommands.InsertInferredMethod
3027
)
3128

32-
override def maybeCodeActionId: Option[String] = Some(CodeActionId.InsertInferredMethod)
33-
3429
override def handleCommand(
3530
textDocumentParams: l.TextDocumentPositionParams,
3631
token: CancelToken,
@@ -40,13 +35,15 @@ class CreateNewSymbol(
4035
textDocumentParams,
4136
token,
4237
CodeActionId.InsertInferredMethod,
43-
None
38+
None,
4439
)
4540
_ = logging.logErrorWhen(
4641
edits.isEmpty(),
4742
s"Could not infer method at ${textDocumentParams}",
4843
)
49-
workspaceEdit = new l.WorkspaceEdit(Map(textDocumentParams.getTextDocument().getUri() -> edits).asJava)
44+
workspaceEdit = new l.WorkspaceEdit(
45+
Map(textDocumentParams.getTextDocument().getUri() -> edits).asJava
46+
)
5047
_ <- languageClient
5148
.applyEdit(new l.ApplyWorkspaceEditParams(workspaceEdit))
5249
.asScala
@@ -63,14 +60,9 @@ class CreateNewSymbol(
6360

6461
val uri = params.getTextDocument().getUri()
6562
val file = uri.toAbsolutePath
66-
lazy val isScala3 =
67-
(for {
68-
buildId <- buildTargets.inverseSources(file)
69-
target <- buildTargets.scalaTarget(buildId)
70-
isScala3 = ScalaVersions.isScala3Version(
71-
target.scalaVersion
72-
)
73-
} yield isScala3).getOrElse(false)
63+
lazy val isSupportedInferredType = compilers
64+
.supportedCodeActions(file)
65+
.contains(CodeActionId.InsertInferredMethod)
7466

7567
def createNewSymbol(
7668
diagnostic: l.Diagnostic,
@@ -107,26 +99,29 @@ class CreateNewSymbol(
10799
)
108100
}
109101

102+
def overalaps(diags: Seq[l.Diagnostic]) = {
103+
params.getRange().overlapsWith(diags.head.getRange())
104+
}
105+
110106
val codeActions = params
111107
.getContext()
112108
.getDiagnostics()
113109
.asScala
110+
.toSeq
114111
.groupBy {
115112
case ScalacDiagnostic.SymbolNotFound(name) if name.nonEmpty =>
116113
Some(name)
117-
case ScalacDiagnostic.NotAMember(name) if name.nonEmpty =>
114+
case ScalacDiagnostic.NotAMember(name)
115+
if name.nonEmpty && isSupportedInferredType =>
118116
Some(name)
119117
case _ => None
120118
}
121119
.collect {
122120
case (Some(name), diags)
123-
if !isScala3 // scala 3 not supported yet
124-
&& name.head.isLower && params
125-
.getRange()
126-
.overlapsWith(diags.head.getRange()) =>
121+
if overalaps(diags) && name.head.isLower &&
122+
isSupportedInferredType =>
127123
createNewMethod(diags.head, name)
128-
case (Some(name), diags)
129-
if params.getRange().overlapsWith(diags.head.getRange()) =>
124+
case (Some(name), diags) if overalaps(diags) =>
130125
createNewSymbol(diags.head, name)
131126
}
132127
.toSeq

0 commit comments

Comments
 (0)