mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
show binary modules in completion list for import reference
This commit is contained in:
@@ -3,6 +3,8 @@ package com.jetbrains.python.psi.types;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.SmartList;
|
||||
@@ -15,7 +17,10 @@ import com.jetbrains.python.psi.resolve.VariantsProcessor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.jetbrains.python.psi.resolve.ResolveImportUtil.ROLE_IN_IMPORT.NONE;
|
||||
// .impl looks impure
|
||||
@@ -59,7 +64,10 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
// file modules
|
||||
for (PsiFile f : mydir.getFiles()) {
|
||||
final String filename = f.getName();
|
||||
if (f instanceof PyFile && !filename.equals(PyNames.INIT_DOT_PY)) result.add(f);
|
||||
// if we have a binary module, we'll most likely also have a stub for it in site-packages
|
||||
if ((f instanceof PyFile && !filename.equals(PyNames.INIT_DOT_PY)) || isBinaryModule(filename)) {
|
||||
result.add(f);
|
||||
}
|
||||
}
|
||||
// dir modules
|
||||
for (PsiDirectory dir : mydir.getSubdirectories()) {
|
||||
@@ -70,6 +78,16 @@ public class PyModuleType implements PyType { // Modules don't descend from obje
|
||||
return result;
|
||||
}
|
||||
|
||||
private static boolean isBinaryModule(String filename) {
|
||||
final String ext = FileUtil.getExtension(filename);
|
||||
if (SystemInfo.isWindows) {
|
||||
return "pyd".equalsIgnoreCase(ext);
|
||||
}
|
||||
else {
|
||||
return "so".equals(ext);
|
||||
}
|
||||
}
|
||||
|
||||
public Object[] getCompletionVariants(String completionPrefix, PyExpression expressionHook, ProcessingContext context) {
|
||||
Set<String> names_already = context.get(CTX_NAMES);
|
||||
List<Object> result = new ArrayList<Object>();
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
from root import binary_mod
|
||||
@@ -0,0 +1 @@
|
||||
from root import b<caret>
|
||||
@@ -180,5 +180,13 @@ public class PythonCompletionTest extends PyLightFixtureTestCase {
|
||||
public void testChainedCall() { // PY-1565
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testFromImportBinary() {
|
||||
myFixture.copyFileToProject("completion/root/binary_mod.pyd");
|
||||
myFixture.copyFileToProject("completion/root/binary_mod.so");
|
||||
myFixture.configureByFiles("completion/fromImportBinary.py", "completion/root/__init__.py");
|
||||
myFixture.completeBasic();
|
||||
myFixture.checkResultByFile("completion/fromImportBinary.after.py");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user