diff --git a/python/helpers/pydev/pydevd_vars.py b/python/helpers/pydev/pydevd_vars.py index 166e517aa791..103f300eef20 100644 --- a/python/helpers/pydev/pydevd_vars.py +++ b/python/helpers/pydev/pydevd_vars.py @@ -7,6 +7,7 @@ from pydevd_constants import * #@UnusedWildImport from types import * #@UnusedWildImport from code import compile_command from code import InteractiveInterpreter +from console import pydevconsole try: from StringIO import StringIO @@ -464,6 +465,9 @@ def consoleExec(thread_id, frame_id, expression): updated_globals.update(frame.f_globals) updated_globals.update(frame.f_locals) #locals later because it has precedence over the actual globals + if pydevconsole.IPYTHON: + return pydevconsole.exec_expression(expression, updated_globals, frame.f_locals) + interpreter = ConsoleWriter() try: @@ -477,7 +481,8 @@ def consoleExec(thread_id, frame_id, expression): # Case 2 return True - # Case 3 + #Case 3 + try: Exec(code, updated_globals, frame.f_locals) diff --git a/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java b/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java index 6a17cd1ff54c..9eb494998f0a 100644 --- a/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java +++ b/python/src/com/jetbrains/python/console/PyConsoleProcessHandler.java @@ -29,7 +29,7 @@ public class PyConsoleProcessHandler extends PythonProcessHandler { protected void textAvailable(final String text, final Key attributes) { final String string = PyConsoleUtil.processPrompts(getConsole(), StringUtil.convertLineSeparators(text)); - myConsoleView.printText(string, attributes); + myConsoleView.print(string, attributes); } @Override diff --git a/python/src/com/jetbrains/python/console/ConsoleSourceHighlighter.java b/python/src/com/jetbrains/python/console/PyConsoleSourceHighlighter.java similarity index 90% rename from python/src/com/jetbrains/python/console/ConsoleSourceHighlighter.java rename to python/src/com/jetbrains/python/console/PyConsoleSourceHighlighter.java index 4d4adf0ce518..9be9edb8e49c 100644 --- a/python/src/com/jetbrains/python/console/ConsoleSourceHighlighter.java +++ b/python/src/com/jetbrains/python/console/PyConsoleSourceHighlighter.java @@ -12,7 +12,7 @@ import com.jetbrains.python.highlighting.PyHighlighter; /** * @author traff */ -class ConsoleSourceHighlighter { +class PyConsoleSourceHighlighter { private final Lexer myLexer; private final EditorColorsScheme myScheme; @@ -21,7 +21,7 @@ class ConsoleSourceHighlighter { private int myLexerState; private PythonConsoleView myPythonConsoleView; - ConsoleSourceHighlighter(PythonConsoleView pythonConsoleView, EditorColorsScheme scheme, PyHighlighter pyHighlighter) { + PyConsoleSourceHighlighter(PythonConsoleView pythonConsoleView, EditorColorsScheme scheme, PyHighlighter pyHighlighter) { myPythonConsoleView = pythonConsoleView; myScheme = scheme; myPyHighlighter = pyHighlighter; @@ -32,7 +32,7 @@ class ConsoleSourceHighlighter { myLexer.start(text, 0, text.length(), getLexerState()); while (hasNext()) { Pair pair = next(); - myPythonConsoleView.print(pair.first, pair.second); + myPythonConsoleView.printText(pair.first, pair.second); } } diff --git a/python/src/com/jetbrains/python/console/PyConsoleUtil.java b/python/src/com/jetbrains/python/console/PyConsoleUtil.java index 065bd997d310..8e43a7b410ac 100644 --- a/python/src/com/jetbrains/python/console/PyConsoleUtil.java +++ b/python/src/com/jetbrains/python/console/PyConsoleUtil.java @@ -1,8 +1,12 @@ package com.jetbrains.python.console; import com.intellij.execution.console.LanguageConsoleImpl; +import com.intellij.execution.process.ProcessOutputTypes; +import com.intellij.execution.ui.ConsoleViewContentType; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.util.Key; +import com.intellij.openapi.vfs.VirtualFile; import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; @@ -10,12 +14,12 @@ import org.jetbrains.annotations.NotNull; * @author traff */ public class PyConsoleUtil { - public static final String ORDINARY_PROMPT = ">>> "; - public static final String INPUT_PROMPT = ">? "; - public static final String INDENT_PROMPT = "... "; - static final String HELP_PROMPT = "help> "; - public static final String EXECUTING_PROMPT = ""; - + public static final String ORDINARY_PROMPT = ">>> "; + public static final String INPUT_PROMPT = ">? "; + public static final String INDENT_PROMPT = "... "; + static final String HELP_PROMPT = "help> "; + public static final String EXECUTING_PROMPT = ""; + private static final String IPYTHON_PAGING_PROMPT = "---Return to continue, q to quit---"; static final String[] PROMPTS = new String[]{ @@ -26,6 +30,7 @@ public class PyConsoleUtil { }; public static final String DOUBLE_QUOTE_MULTILINE = "\"\"\""; public static final String SINGLE_QUOTE_MULTILINE = "'''"; + static final Key IPYTHON = Key.create("ipython"); private PyConsoleUtil() { } @@ -89,16 +94,27 @@ public class PyConsoleUtil { return isMultilineStarts(line, DOUBLE_QUOTE_MULTILINE); } + public static boolean detectIPythonImported(@NotNull String text, final ConsoleViewContentType outputType) { + return text.contains("PyDev console: using IPython 0.1") && outputType == ConsoleViewContentType.ERROR_OUTPUT; + } + public static boolean detectSourcePrinting(@NotNull String text) { return text.contains("Source:"); } public static boolean detectIPythonStart(@NotNull String text) { - return text.contains("<---->"); + return text.contains("IPython-->"); } public static boolean detectIPythonEnd(@NotNull String text) { - return text.contains("<---->"); + return text.contains("<--IPython"); + } + + public static boolean isIPythonDetected(VirtualFile file) { + if (file == null) { + return false; + } + Boolean detected = file.getUserData(IPYTHON); + return detected != null && detected.booleanValue(); } - } diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java index 2a9de07e94d6..cdf33031ac89 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java @@ -33,7 +33,9 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.impl.source.tree.FileElement; +import com.intellij.testFramework.LightVirtualFile; import com.intellij.util.ArrayUtil; import com.intellij.util.IJSwingUtilities; import com.intellij.util.net.NetUtils; @@ -42,6 +44,7 @@ import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.console.completion.PydevConsoleElement; import com.jetbrains.python.console.pydev.ConsoleCommunication; import com.jetbrains.python.console.pydev.PydevConsoleCommunication; +import com.jetbrains.python.psi.resolve.ResolveImportUtil; import com.jetbrains.python.run.PythonCommandLineState; import com.jetbrains.python.run.PythonTracebackFilter; import com.jetbrains.python.sdk.PythonSdkFlavor; @@ -241,7 +244,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory { public ASTNode parseContents(ASTNode chameleon) { final FileElement node = (FileElement)chameleon; final LanguageLevel languageLevel = getLanguageLevel(node.getPsi()); - if (PydevConsoleRunner.isInPydevConsole(node)) { + if (PydevConsoleRunner.isIPythonConsole(node)) { return parseConsoleCode(node, languageLevel); } final PsiElement psi = node.getPsi(); @@ -85,7 +85,7 @@ public class PyFileElementType extends IStubFileElementType { final PyParser parser = new PyParser() { @Override protected ParsingContext createParsingContext(PsiBuilder builder, LanguageLevel languageLevel, StatementParsing.FUTURE futureFlag) { - return new PyConsoleParsingContext(builder, languageLevel, futureFlag); + return new PyConsoleParsingContext(builder, languageLevel, futureFlag, psi); } }; return parser.parse(this, builder).getFirstChildNode();