if no interpreter is configured for the project, show big warning and suppress auto imports (PY-5247)

This commit is contained in:
Dmitry Jemerov
2011-12-09 20:18:56 +01:00
parent 0e4a38a54c
commit c9dc1a2b46
2 changed files with 51 additions and 0 deletions
@@ -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");
}
});
}
}
}