mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
DS-4558 Quick fix to split a cell for statement has no effect inspection
Added a new Extension Point for corresponding quick fixes for "Statement without effect inspection." Added QF for Jupyter notebook case and Python file with cells. This QF splits cell just right after the statement without effect ^DS-4558 Fixed Merge-request: IJ-MR-104455 Merged-by: Natalia Murycheva <natalia.murycheva@jetbrains.com> GitOrigin-RevId: 7773895cf1ebd6d4e8d56b41e335ec8b97ca5d78
This commit is contained in:
committed by
intellij-monorepo-bot
parent
adffe9f185
commit
10f22bb2e2
@@ -36,6 +36,9 @@
|
||||
<extensionPoint qualifiedName="Pythonid.inspectionExtension"
|
||||
interface="com.jetbrains.python.inspections.PyInspectionExtension"
|
||||
dynamic="true"/>
|
||||
<extensionPoint qualifiedName="Pythonid.statementEffectQuickFixProvider"
|
||||
interface="com.jetbrains.python.inspections.PyStatementEffectQuickFixProvider"
|
||||
dynamic="true"/>
|
||||
<extensionPoint qualifiedName="Pythonid.pyClassInheritorsSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="Pythonid.pyOverridingMethodsSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="Pythonid.pythonDocumentationQuickInfoProvider"
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// 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.inspections;
|
||||
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.jetbrains.python.psi.PyExpressionStatement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
||||
public interface PyStatementEffectQuickFixProvider {
|
||||
ExtensionPointName<PyStatementEffectQuickFixProvider> EP_NAME = ExtensionPointName.create("Pythonid.statementEffectQuickFixProvider");
|
||||
|
||||
|
||||
@Nullable
|
||||
LocalQuickFix getQuickFix(@NotNull PyExpressionStatement expressionStatement);
|
||||
}
|
||||
@@ -1147,7 +1147,7 @@ INSP.typeddict.required.notrequired.must.have.exactly.one.type.argument=''{0}''
|
||||
# PyTypeHintsInspection
|
||||
INSP.NAME.type.hints=Invalid type hints definitions and usages
|
||||
INSP.type.hints.builtin.cannot.be.parameterized.directly=Builtin ''{0}'' cannot be parameterized directly
|
||||
INSP.type.hints.typing.self.cannot.be.parameterized='Self' cannot be parameterized
|
||||
INSP.type.hints.typing.self.cannot.be.parameterized='Self' cannot be parameterized
|
||||
INSP.type.hints.invalid.type.self=Invalid type 'self'
|
||||
INSP.type.hints.literal.must.have.at.least.one.parameter='Literal' must have at least one parameter
|
||||
INSP.type.hints.annotated.must.be.called.with.at.least.two.arguments='Annotated' must be called with at least two arguments
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
package com.jetbrains.python.inspections;
|
||||
|
||||
import com.intellij.codeInspection.LocalInspectionToolSession;
|
||||
import com.intellij.codeInspection.LocalQuickFix;
|
||||
import com.intellij.codeInspection.ProblemsHolder;
|
||||
import com.intellij.psi.PsiElementVisitor;
|
||||
import com.intellij.psi.ResolveResult;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyPsiBundle;
|
||||
import com.jetbrains.python.PyTokenTypes;
|
||||
@@ -31,6 +33,8 @@ import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PyStatementEffectInspection extends PyInspection {
|
||||
|
||||
@NotNull
|
||||
@@ -73,13 +77,13 @@ public class PyStatementEffectInspection extends PyInspection {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (expression instanceof PyReferenceExpression && !((PyReferenceExpression)expression).isQualified()) {
|
||||
registerProblem(expression, PyPsiBundle.message("INSP.statement.effect.statement.seems.to.have.no.effect"));
|
||||
}
|
||||
else {
|
||||
registerProblem(expression, PyPsiBundle.message("INSP.statement.effect.statement.seems.to.have.no.effect"),
|
||||
new StatementEffectIntroduceVariableQuickFix());
|
||||
List<LocalQuickFix> quickFixes = new SmartList<>(getQuickFixesFromExtensions(node));
|
||||
if (!(expression instanceof PyReferenceExpression reference) || reference.isQualified()) {
|
||||
quickFixes.add(new StatementEffectIntroduceVariableQuickFix());
|
||||
}
|
||||
registerProblem(expression,
|
||||
PyPsiBundle.message("INSP.statement.effect.statement.seems.to.have.no.effect"),
|
||||
quickFixes.toArray(LocalQuickFix.EMPTY_ARRAY));
|
||||
}
|
||||
|
||||
private boolean hasEffect(@Nullable PyExpression expression) {
|
||||
@@ -157,4 +161,10 @@ public class PyStatementEffectInspection extends PyInspection {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<LocalQuickFix> getQuickFixesFromExtensions(@NotNull PyExpressionStatement expressionStatement) {
|
||||
return ContainerUtil.mapNotNull(PyStatementEffectQuickFixProvider.EP_NAME.getExtensionList(),
|
||||
extension -> extension.getQuickFix(expressionStatement));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user