fixed PY-14311 IPython Notebook: Statement expected false positive for magic functions entered in just created cells

This commit is contained in:
Ekaterina Tuzova
2014-12-27 17:45:57 +03:00
parent 9067e17343
commit 671e76a25f
5 changed files with 30 additions and 18 deletions
@@ -72,12 +72,7 @@ public class IpnbCodeSourcePanel extends IpnbPanel<JComponent, IpnbCodeCell> imp
final JPanel panel = new JPanel(new BorderLayout());
panel.setBackground(UIUtil.isUnderDarcula() ? IpnbEditorUtil.getBackground() : Gray._247);
if (mySource.startsWith("%")) {
myEditor = IpnbEditorUtil.createPlainCodeEditor(myProject, mySource);
}
else {
myEditor = IpnbEditorUtil.createPythonCodeEditor(myProject, this);
}
myEditor = IpnbEditorUtil.createPythonCodeEditor(myProject, this);
Disposer.register(myParent.getFileEditor(), new Disposable() {
@Override
public void dispose() {
@@ -1,14 +1,28 @@
package org.jetbrains.plugins.ipnb.psi;
import com.intellij.lang.ASTNode;
import com.intellij.lang.PsiBuilder;
import com.intellij.psi.tree.IElementType;
import com.jetbrains.python.console.parsing.PyConsoleParser;
import com.jetbrains.python.console.parsing.PythonConsoleData;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.PyParser;
import com.jetbrains.python.parsing.StatementParsing;
import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.NotNull;
public class IpnbPyParser extends PyParser {
private boolean myIPythonStartSymbol;
@Override
protected ParsingContext createParsingContext(PsiBuilder builder, LanguageLevel languageLevel, StatementParsing.FUTURE futureFlag) {
return new IpnbPyParsingContext(builder, languageLevel, futureFlag);
return new IpnbPyParsingContext(builder, languageLevel, futureFlag, myIPythonStartSymbol, new PythonConsoleData());
}
@NotNull
@Override
public ASTNode parse(IElementType root, PsiBuilder builder) {
myIPythonStartSymbol = PyConsoleParser.startsWithIPythonSpecialSymbol(builder);
return super.parse(root, builder);
}
}
@@ -3,6 +3,8 @@ package org.jetbrains.plugins.ipnb.psi;
import com.intellij.lang.PsiBuilder;
import com.intellij.psi.tree.IElementType;
import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.console.parsing.PyConsoleParsingContext;
import com.jetbrains.python.console.parsing.PythonConsoleData;
import com.jetbrains.python.parsing.ExpressionParsing;
import com.jetbrains.python.parsing.FunctionParsing;
import com.jetbrains.python.parsing.ParsingContext;
@@ -10,16 +12,16 @@ import com.jetbrains.python.parsing.StatementParsing;
import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.Nullable;
public class IpnbPyParsingContext extends ParsingContext {
public class IpnbPyParsingContext extends PyConsoleParsingContext {
private final StatementParsing myStatementParser;
private final ExpressionParsing myExpressionParser;
private final FunctionParsing myFunctionParser;
public IpnbPyParsingContext(final PsiBuilder builder,
LanguageLevel languageLevel,
StatementParsing.FUTURE futureFlag) {
super(builder, languageLevel, futureFlag);
myStatementParser = new IpnbPyStatementParsing(this, futureFlag);
StatementParsing.FUTURE futureFlag, boolean startSymbol, PythonConsoleData data) {
super(builder, languageLevel, futureFlag, data, startSymbol);
myStatementParser = new IpnbPyStatementParsing(this, futureFlag, startSymbol, data);
myExpressionParser = new IpnbPyExpressionParsing(this);
myFunctionParser = new IpnbPyFunctionParsing(this);
}
@@ -39,7 +41,7 @@ public class IpnbPyParsingContext extends ParsingContext {
return myFunctionParser;
}
private static class IpnbPyExpressionParsing extends ExpressionParsing {
private static class IpnbPyExpressionParsing extends ConsoleExpressionParsing {
public IpnbPyExpressionParsing(ParsingContext context) {
super(context);
}
@@ -64,10 +66,10 @@ public class IpnbPyParsingContext extends ParsingContext {
}
}
private static class IpnbPyStatementParsing extends StatementParsing {
private static class IpnbPyStatementParsing extends ConsoleStatementParsing {
protected IpnbPyStatementParsing(ParsingContext context, @Nullable FUTURE futureFlag) {
super(context, futureFlag);
protected IpnbPyStatementParsing(ParsingContext context, @Nullable FUTURE futureFlag, boolean startSymbol, PythonConsoleData data) {
super(context, futureFlag, startSymbol, data);
}
@Override
@@ -76,6 +78,7 @@ public class IpnbPyParsingContext extends ParsingContext {
}
}
private static class IpnbPyFunctionParsing extends FunctionParsing {
public IpnbPyFunctionParsing(ParsingContext context) {
@@ -63,7 +63,7 @@ public class PyConsoleParser extends PyParser{
return builder.getTreeBuilt();
}
private static boolean startsWithIPythonSpecialSymbol(PsiBuilder builder) {
public static boolean startsWithIPythonSpecialSymbol(PsiBuilder builder) {
IElementType tokenType = builder.getTokenType();
return builder.getTokenType() == PyConsoleTokenTypes.QUESTION_MARK || tokenType == PyTokenTypes.PERC || tokenType == PyTokenTypes.COMMA || tokenType == PyTokenTypes.SEMICOLON ||
"/".equals(builder.getTokenText());
@@ -56,7 +56,7 @@ public class PyConsoleParsingContext extends ParsingContext {
return expressionParser;
}
private static class ConsoleStatementParsing extends StatementParsing {
public static class ConsoleStatementParsing extends StatementParsing {
private boolean myStartsWithIPythonSymbol;
private PythonConsoleData myPythonConsoleData;
@@ -136,7 +136,7 @@ public class PyConsoleParsingContext extends ParsingContext {
}
}
private static class ConsoleExpressionParsing extends ExpressionParsing {
public static class ConsoleExpressionParsing extends ExpressionParsing {
public ConsoleExpressionParsing(ParsingContext context) {
super(context);
}