mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
if no interpreter is configured for the project, show big warning and suppress auto imports (PY-5247)
This commit is contained in:
@@ -9,6 +9,8 @@ import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
@@ -28,6 +30,7 @@ import com.jetbrains.python.psi.resolve.ResolveImportUtil;
|
||||
import com.jetbrains.python.psi.stubs.PyClassNameIndex;
|
||||
import com.jetbrains.python.psi.stubs.PyFunctionNameIndex;
|
||||
import com.jetbrains.python.psi.stubs.PyVariableNameIndex;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -65,6 +68,11 @@ public class PythonReferenceImporter implements ReferenceImporter {
|
||||
|
||||
@Nullable
|
||||
public static AutoImportQuickFix proposeImportFix(final PyElement node, PsiReference reference, String ref_text) {
|
||||
// don't propose meaningless auto imports if no interpreter is configured
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(node);
|
||||
if (module != null && PythonSdkType.findPythonSdk(module) == null) {
|
||||
return null;
|
||||
}
|
||||
PsiFile existing_import_file = null; // if there's a matching existing import, this it the file it imports
|
||||
AutoImportQuickFix fix = new AutoImportQuickFix(node, reference, ref_text, !PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT);
|
||||
Set<String> seen_file_names = new HashSet<String>(); // true import names
|
||||
|
||||
@@ -6,7 +6,12 @@ import com.intellij.codeInspection.ex.LocalInspectionToolWrapper;
|
||||
import com.intellij.codeInspection.ui.ListEditForm;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.annotation.HighlightSeverity;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.JDOMExternalizableStringList;
|
||||
import com.intellij.openapi.util.Key;
|
||||
@@ -15,6 +20,7 @@ import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.PlatformUtils;
|
||||
import com.jetbrains.cython.CythonLanguageDialect;
|
||||
import com.jetbrains.cython.CythonNames;
|
||||
import com.jetbrains.cython.psi.CythonFile;
|
||||
@@ -40,6 +46,7 @@ import com.jetbrains.python.psi.resolve.ImportedResolveResult;
|
||||
import com.jetbrains.python.psi.resolve.PyResolveContext;
|
||||
import com.jetbrains.python.psi.resolve.ResolveImportUtil;
|
||||
import com.jetbrains.python.psi.types.*;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -110,6 +117,17 @@ public class PyUnresolvedReferencesInspection extends PyInspection {
|
||||
myIgnoredIdentifiers = ImmutableSet.copyOf(ignoredIdentifiers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitPyFile(PyFile node) {
|
||||
super.visitPyFile(node);
|
||||
if (PlatformUtils.isPyCharm()) {
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(node);
|
||||
if (module != null && PythonSdkType.findPythonSdk(module) == null && PlatformUtils.isPyCharm()) {
|
||||
registerProblem(node, "No Python interpreter configured for the project", new ConfigureInterpreterFix());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitPyTargetExpression(PyTargetExpression node) {
|
||||
checkSlots(node);
|
||||
@@ -630,4 +648,29 @@ public class PyUnresolvedReferencesInspection extends PyInspection {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class ConfigureInterpreterFix implements LocalQuickFix {
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Configure Python Interpreter";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getFamilyName() {
|
||||
return "Configure Python Interpreter";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyFix(@NotNull final Project project, @NotNull ProblemDescriptor descriptor) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// outside of read action
|
||||
ShowSettingsUtil.getInstance().showSettingsDialog(project, "Project Interpreter");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user