Don't pass future feature to parsing since it is either null or no more actual

GitOrigin-RevId: 23e266850c1b65facf135248be206387e8284c54
This commit is contained in:
Semyon Proshev
2020-10-16 12:24:41 +00:00
committed by intellij-monorepo-bot
parent 3a14be417f
commit 7ec52fb1e6
10 changed files with 26 additions and 56 deletions
@@ -26,19 +26,17 @@ import com.jetbrains.python.parsing.ExpressionParsing;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.PyParser;
import com.jetbrains.python.parsing.StatementParsing;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Mikhail Golubev
*/
public class PyFunctionTypeAnnotationParser extends PyParser {
@Override
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel, FutureFeature futureFlag) {
return new ParsingContext(builder, languageLevel, futureFlag) {
private final StatementParsing myStatementParsing = new AnnotationParser(this, futureFlag);
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
return new ParsingContext(builder, languageLevel) {
private final StatementParsing myStatementParsing = new AnnotationParser(this);
private final ExpressionParsing myExpressionParsing = new ExpressionParsing(this) {
@Override
protected IElementType getReferenceType() {
@@ -59,8 +57,8 @@ public class PyFunctionTypeAnnotationParser extends PyParser {
}
private static class AnnotationParser extends StatementParsing {
AnnotationParser(ParsingContext context, @Nullable FutureFeature futureFlag) {
super(context, futureFlag);
AnnotationParser(ParsingContext context) {
super(context);
}
@Override
@@ -8,22 +8,18 @@ import com.jetbrains.python.parsing.ExpressionParsing;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.PyParser;
import com.jetbrains.python.parsing.StatementParsing;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class PyTypeHintParser extends PyParser {
@Override
@NotNull
protected ParsingContext createParsingContext(@NotNull SyntaxTreeBuilder builder,
@NotNull LanguageLevel languageLevel,
@Nullable FutureFeature futureFlag) {
return new ParsingContext(builder, languageLevel, futureFlag) {
protected ParsingContext createParsingContext(@NotNull SyntaxTreeBuilder builder, @NotNull LanguageLevel languageLevel) {
return new ParsingContext(builder, languageLevel) {
@NotNull
private final StatementParsing myStatementParsing = new StatementParsing(this, futureFlag) {
private final StatementParsing myStatementParsing = new StatementParsing(this) {
@Override
@NotNull
protected IElementType getReferenceType() {
@@ -18,7 +18,6 @@ package com.jetbrains.python.documentation.doctest;
import com.intellij.lang.SyntaxTreeBuilder;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.PyParser;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
/**
@@ -26,7 +25,7 @@ import com.jetbrains.python.psi.LanguageLevel;
*/
public class PyDocstringParser extends PyParser {
@Override
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel, FutureFeature futureFlag) {
return new PyDocstringParsingContext(builder, languageLevel, futureFlag);
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
return new PyDocstringParsingContext(builder, languageLevel);
}
}
@@ -22,9 +22,7 @@ import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.parsing.ExpressionParsing;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.StatementParsing;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.Nullable;
/**
* User : ktisha
@@ -33,11 +31,9 @@ public class PyDocstringParsingContext extends ParsingContext {
private final StatementParsing myStatementParser;
private final ExpressionParsing myExpressionParser;
public PyDocstringParsingContext(final SyntaxTreeBuilder builder,
LanguageLevel languageLevel,
FutureFeature futureFlag) {
super(builder, languageLevel, futureFlag);
myStatementParser = new PyDocstringStatementParsing(this, futureFlag);
public PyDocstringParsingContext(final SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
super(builder, languageLevel);
myStatementParser = new PyDocstringStatementParsing(this);
myExpressionParser = new PyDocstringExpressionParsing(this);
}
@@ -64,9 +60,8 @@ public class PyDocstringParsingContext extends ParsingContext {
private static class PyDocstringStatementParsing extends StatementParsing {
protected PyDocstringStatementParsing(ParsingContext context,
@Nullable FutureFeature futureFlag) {
super(context, futureFlag);
protected PyDocstringStatementParsing(ParsingContext context) {
super(context);
}
@Override
@@ -16,7 +16,6 @@
package com.jetbrains.python.parsing;
import com.intellij.lang.SyntaxTreeBuilder;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.NotNull;
@@ -31,10 +30,10 @@ public class ParsingContext {
private final LanguageLevel myLanguageLevel;
private final Deque<ParsingScope> myScopes;
public ParsingContext(final SyntaxTreeBuilder builder, LanguageLevel languageLevel, FutureFeature futureFlag) {
public ParsingContext(final SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
myBuilder = builder;
myLanguageLevel = languageLevel;
stmtParser = new StatementParsing(this, futureFlag);
stmtParser = new StatementParsing(this);
expressionParser = new ExpressionParsing(this);
functionParser = new FunctionParsing(this);
myScopes = new ArrayDeque<>();
@@ -3,13 +3,11 @@ package com.jetbrains.python.parsing;
import com.intellij.lang.SyntaxTreeBuilder;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.tree.IElementType;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
public class PythonParser {
protected static final Logger LOGGER = Logger.getInstance(PyParser.class.getName());
protected LanguageLevel myLanguageLevel;
private FutureFeature myFutureFlag;
public PythonParser() {myLanguageLevel = LanguageLevel.getDefault();}
@@ -19,7 +17,7 @@ public class PythonParser {
public void parseRoot(IElementType root, SyntaxTreeBuilder builder) {
final SyntaxTreeBuilder.Marker rootMarker = builder.mark();
ParsingContext context = createParsingContext(builder, myLanguageLevel, myFutureFlag);
ParsingContext context = createParsingContext(builder, myLanguageLevel);
StatementParsing statementParser = context.getStatementParser();
builder.setTokenTypeRemapper(statementParser); // must be done before touching the caching lexer with eof() call.
boolean lastAfterSemicolon = false;
@@ -37,11 +35,7 @@ public class PythonParser {
rootMarker.done(root);
}
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel, FutureFeature futureFlag) {
return new ParsingContext(builder, languageLevel, futureFlag);
}
public void setFutureFlag(FutureFeature future) {
myFutureFlag = future;
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
return new ParsingContext(builder, languageLevel);
}
}
@@ -76,11 +76,8 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper {
}
}
public StatementParsing(ParsingContext context, @Nullable FutureFeature futureFlag) {
public StatementParsing(ParsingContext context) {
super(context);
if (futureFlag != null) {
myFutureFlags.add(futureFlag);
}
}
public void parseStatement() {
@@ -21,7 +21,6 @@ import com.intellij.psi.tree.IElementType;
import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.PyParser;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
public class PyConsoleParser extends PyParser {
@@ -48,8 +47,8 @@ public class PyConsoleParser extends PyParser {
}
@Override
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel, FutureFeature futureFlag) {
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
boolean iPythonStartSymbol = myPythonConsoleData.isIPythonEnabled() && startsWithIPythonSpecialSymbol(builder);
return new PyConsoleParsingContext(builder, languageLevel, futureFlag, myPythonConsoleData, iPythonStartSymbol);
return new PyConsoleParsingContext(builder, languageLevel, myPythonConsoleData, iPythonStartSymbol);
}
}
@@ -8,9 +8,7 @@ import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.parsing.ExpressionParsing;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.StatementParsing;
import com.jetbrains.python.psi.FutureFeature;
import com.jetbrains.python.psi.LanguageLevel;
import org.jetbrains.annotations.Nullable;
public class PyConsoleParsingContext extends ParsingContext {
private final StatementParsing stmtParser;
@@ -18,11 +16,10 @@ public class PyConsoleParsingContext extends ParsingContext {
public PyConsoleParsingContext(final SyntaxTreeBuilder builder,
LanguageLevel languageLevel,
FutureFeature futureFlag,
PythonConsoleData pythonConsoleData,
boolean startsWithIPythonSymbol) {
super(builder, languageLevel, futureFlag);
stmtParser = new ConsoleStatementParsing(this, futureFlag, startsWithIPythonSymbol, pythonConsoleData);
super(builder, languageLevel);
stmtParser = new ConsoleStatementParsing(this, startsWithIPythonSymbol, pythonConsoleData);
if (pythonConsoleData.isIPythonEnabled()) {
expressionParser = new ConsoleExpressionParsing(this);
}
@@ -47,10 +44,9 @@ public class PyConsoleParsingContext extends ParsingContext {
private final PythonConsoleData myPythonConsoleData;
protected ConsoleStatementParsing(ParsingContext context,
@Nullable FutureFeature futureFlag,
boolean startsWithIPythonSymbol,
PythonConsoleData pythonConsoleData) {
super(context, futureFlag);
super(context);
myStartsWithIPythonSymbol = startsWithIPythonSymbol;
myPythonConsoleData = pythonConsoleData;
}
@@ -91,9 +91,6 @@ public class PyFileElementType extends IStubFileElementType<PyFileStub> {
if (parser instanceof PyParser) {
final PythonParser pythonParser = (PythonParser)parser;
pythonParser.setLanguageLevel(languageLevel);
if (languageLevel == LanguageLevel.PYTHON26 && psi.getContainingFile().getName().equals("__builtin__.py")) {
pythonParser.setFutureFlag(FutureFeature.PRINT_FUNCTION);
}
}
return parser.parse(this, builder).getFirstChildNode();
}