mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-17635 Complete parameter names in ":type" declaration of reST docstrings
This commit is contained in:
+14
-1
@@ -24,6 +24,7 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiNamedElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.jetbrains.python.documentation.docstrings.DocStringParameterReference;
|
||||
@@ -78,7 +79,19 @@ public class PyDocstringCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (reference instanceof DocStringParameterReference) {
|
||||
// For reST declaration like ":param foo: int" "foo" is PsiMultiReference that combines DocStringParameterReference and DocStringTypeReference
|
||||
else if (reference instanceof PsiMultiReference) {
|
||||
for (PsiReference innerReference : ((PsiMultiReference)reference).getReferences()) {
|
||||
addVariantsFromDocstringReference(innerReference, result);
|
||||
}
|
||||
}
|
||||
else {
|
||||
addVariantsFromDocstringReference(reference, result);
|
||||
}
|
||||
}
|
||||
|
||||
private static void addVariantsFromDocstringReference(@NotNull PsiReference reference, @NotNull CompletionResultSet result) {
|
||||
if (reference instanceof DocStringParameterReference) {
|
||||
for (PyNamedParameter param : ((DocStringParameterReference)reference).collectParameterVariants()) {
|
||||
result.addElement(LookupElementBuilder.createWithIcon(param));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
def f(foo, bar):
|
||||
"""
|
||||
:type f<caret>
|
||||
"""
|
||||
@@ -509,6 +509,18 @@ public class PythonCompletionTest extends PyTestCase {
|
||||
});
|
||||
}
|
||||
|
||||
// PY-17635
|
||||
public void testParamNameInTypeDeclarationInRestDocstring() {
|
||||
runWithDocStringFormat(DocStringFormat.REST, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final List<String> variants = doTestByFile();
|
||||
assertNotNull(variants);
|
||||
assertContainsElements(variants, "foo");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void testPep328Completion() { // PY-3409
|
||||
myFixture.copyDirectoryToProject("pep328", "pep328");
|
||||
myFixture.configureByFile("pep328/package/subpackage1/moduleX.py");
|
||||
|
||||
Reference in New Issue
Block a user