Make Quick documentation lookup work in pydev console
This commit is contained in:
Oleg Shpynov
2010-04-15 18:48:31 +04:00
parent 333f9c8191
commit 2aaffb36da
3 changed files with 35 additions and 2 deletions
@@ -6,6 +6,8 @@ import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.xml.util.XmlStringUtil;
import com.jetbrains.python.console.PydevConsoleRunner;
import com.jetbrains.python.console.PydevDocumentationProvider;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.psi.impl.PyCallExpressionHelper;
@@ -165,6 +167,10 @@ public class PythonDocumentationProvider extends QuickDocumentationProvider {
// provides ctrl+Q doc
public String generateDoc(PsiElement element, final PsiElement originalElement) {
if (element != null && PydevConsoleRunner.isInPydevConsole(element) ||
originalElement != null && PydevConsoleRunner.isInPydevConsole(originalElement)){
return PydevDocumentationProvider.createDoc(element, originalElement);
}
ChainIterable<String> cat = new ChainIterable<String>(); // our main output sequence
final ChainIterable<String> prolog_cat = new ChainIterable<String>(); // sequence for reassignment info, etc
final ChainIterable<String> doc_cat = new ChainIterable<String>(); // sequence for doc string
@@ -224,7 +224,12 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory {
}
public static boolean isInPydevConsole(final PsiElement element){
return element.getContainingFile().getCopyableUserData(CONSOLE_KEY) != null;
return getConsoleCommunication(element) != null;
}
@Nullable
public static PydevConsoleCommunication getConsoleCommunication(final PsiElement element) {
return element.getContainingFile().getCopyableUserData(CONSOLE_KEY);
}
public static String createExtendPathCommand(Module module) {
@@ -3,6 +3,10 @@ package com.jetbrains.python.console;
import com.intellij.lang.documentation.QuickDocumentationProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.python.console.pydev.PydevConsoleCommunication;
import com.jetbrains.python.psi.PyExpression;
import org.jetbrains.annotations.Nullable;
/**
* @author oleg
@@ -21,11 +25,29 @@ public class PydevDocumentationProvider extends QuickDocumentationProvider {
}
@Override
public String generateDoc(PsiElement element, PsiElement originalElement) {
public String generateDoc(final PsiElement element, final PsiElement originalElement) {
// Process PydevConsoleElement case
if (element instanceof PydevConsoleElement){
return PydevConsoleElement.generateDoc((PydevConsoleElement)element);
}
return null;
}
@Nullable
public static String createDoc(final PsiElement element, final PsiElement originalElement) {
final PyExpression expression = PsiTreeUtil.getParentOfType(originalElement, PyExpression.class);
if (expression == null){
return null;
}
final PydevConsoleCommunication communication = PydevConsoleRunner.getConsoleCommunication(originalElement);
if (communication == null){
return null;
}
try {
return communication.getDescription(expression.getText());
}
catch (Exception e) {
return null;
}
}
}