From 2aaffb36dae9a3c2da228464a1d5ee85e88fa64c Mon Sep 17 00:00:00 2001 From: Oleg Shpynov Date: Thu, 15 Apr 2010 18:48:31 +0400 Subject: [PATCH] PY-842 Make Quick documentation lookup work in pydev console --- .../python/PythonDocumentationProvider.java | 6 +++++ .../python/console/PydevConsoleRunner.java | 7 +++++- .../console/PydevDocumentationProvider.java | 24 ++++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/PythonDocumentationProvider.java b/python/src/com/jetbrains/python/PythonDocumentationProvider.java index 8b30b79f8fbc..c49f46fbf453 100644 --- a/python/src/com/jetbrains/python/PythonDocumentationProvider.java +++ b/python/src/com/jetbrains/python/PythonDocumentationProvider.java @@ -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 cat = new ChainIterable(); // our main output sequence final ChainIterable prolog_cat = new ChainIterable(); // sequence for reassignment info, etc final ChainIterable doc_cat = new ChainIterable(); // sequence for doc string diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java index 2f6543121a6e..1bb13d69671f 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java @@ -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) { diff --git a/python/src/com/jetbrains/python/console/PydevDocumentationProvider.java b/python/src/com/jetbrains/python/console/PydevDocumentationProvider.java index af277cb72cac..850a3ecfa06c 100644 --- a/python/src/com/jetbrains/python/console/PydevDocumentationProvider.java +++ b/python/src/com/jetbrains/python/console/PydevDocumentationProvider.java @@ -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; + } + } }