Migrate AddFixtureToFuncParametersQuickFix and PyUnpackTypeVarTupleQuickFix to ModCommand

PY-65297

GitOrigin-RevId: 2695f20eb27475245fb48a93c5ee874041e54463
This commit is contained in:
Georgii Ustinov
2023-12-18 21:24:12 +00:00
committed by intellij-monorepo-bot
parent abed593937
commit 4d1b5b0bd0
2 changed files with 18 additions and 20 deletions
@@ -1,7 +1,7 @@
package com.jetbrains.python.inspections.quickfix;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -13,7 +13,7 @@ import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.PyExpressionStatement;
import org.jetbrains.annotations.NotNull;
public class PyUnpackTypeVarTupleQuickFix implements LocalQuickFix {
public class PyUnpackTypeVarTupleQuickFix extends PsiUpdateModCommandQuickFix {
@Override
@NotNull
public String getFamilyName() {
@@ -35,21 +35,18 @@ public class PyUnpackTypeVarTupleQuickFix implements LocalQuickFix {
}
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
PsiElement psiElement = descriptor.getPsiElement();
if (psiElement == null) return;
var languageLevel = LanguageLevel.forElement(psiElement);
public void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) {
var languageLevel = LanguageLevel.forElement(element);
PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
if (languageLevel.isAtLeast(LanguageLevel.PYTHON311)) {
String starred = "*" + psiElement.getText();
String starred = "*" + element.getText();
PyExpressionStatement expressionStatement = elementGenerator.createFromText(languageLevel, PyExpressionStatement.class, starred);
PyExpression newElement = expressionStatement.getExpression();
psiElement.replace(newElement);
element.replace(newElement);
}
else {
replaceToTypingExtensionsUnpack(psiElement, psiElement, psiElement.getContainingFile(), project);
replaceToTypingExtensionsUnpack(element, element, element.getContainingFile(), project);
}
}
}
@@ -1,18 +1,19 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.jetbrains.python.testing.pyTestFixtures
import com.intellij.codeInspection.*
import com.intellij.codeInspection.LocalInspectionToolSession
import com.intellij.codeInspection.ProblemHighlightType
import com.intellij.codeInspection.ProblemsHolder
import com.intellij.modcommand.ModPsiUpdater
import com.intellij.modcommand.PsiUpdateModCommandQuickFix
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.util.findParentOfType
import com.jetbrains.python.PyPsiBundle
import com.jetbrains.python.inspections.PyInspection
import com.jetbrains.python.inspections.PyInspectionVisitor
import com.jetbrains.python.psi.PyDecorator
import com.jetbrains.python.psi.PyElementGenerator
import com.jetbrains.python.psi.PyFunction
import com.jetbrains.python.psi.PyReferenceExpression
import com.jetbrains.python.psi.PyStringLiteralExpression
import com.jetbrains.python.psi.*
import com.jetbrains.python.psi.types.PyFunctionType
import com.jetbrains.python.psi.types.TypeEvalContext
@@ -86,11 +87,11 @@ class PyTestUnpassedFixtureInspection : PyInspection() {
}
}
private inner class AddFixtureToFuncParametersQuickFix : LocalQuickFix {
private inner class AddFixtureToFuncParametersQuickFix : PsiUpdateModCommandQuickFix() {
override fun getFamilyName() = PyPsiBundle.message("QFIX.add.fixture.to.test.function.parameters.list")
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
val element = descriptor.psiElement as? PyReferenceExpression ?: return
override fun applyFix(project: Project, element: PsiElement, updater: ModPsiUpdater) {
if (element !is PyReferenceExpression) return
val newParameter = PyElementGenerator.getInstance(project).createParameter(element.text)
findTestFunc(element)?.parameterList?.addParameter(newParameter)
}