mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 18:05:27 +07:00
PY-15469 Delimiter "->" in Python is parsed as single token
Thanks to that, pressing enter no longer inserts backslash in the middle of "->" sequence (and such corrupted code is properly highlighted now on).
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -138,6 +138,7 @@ public class PyTokenTypes {
|
||||
public static final PyElementType LTLTEQ = new PyElementType("LTLTEQ");// <<=
|
||||
public static final PyElementType GTGTEQ = new PyElementType("GTGTEQ");// >>=
|
||||
public static final PyElementType EXPEQ = new PyElementType("EXPEQ");// **=
|
||||
public static final PyElementType RARROW = new PyElementType("RARROW");// ->
|
||||
|
||||
public static final TokenSet OPERATIONS = TokenSet.create(
|
||||
PLUS, MINUS, MULT, AT, EXP, DIV, FLOORDIV, PERC, LTLT, GTGT, AND, OR,
|
||||
|
||||
@@ -178,6 +178,7 @@ return PyTokenTypes.DOCSTRING; }
|
||||
"==" { return PyTokenTypes.EQEQ; }
|
||||
"!=" { return PyTokenTypes.NE; }
|
||||
"<>" { return PyTokenTypes.NE_OLD; }
|
||||
"->" { return PyTokenTypes.RARROW; }
|
||||
"+" { return PyTokenTypes.PLUS; }
|
||||
"-" { return PyTokenTypes.MINUS; }
|
||||
"*" { return PyTokenTypes.MULT; }
|
||||
|
||||
@@ -53,18 +53,13 @@ public class FunctionParsing extends Parsing {
|
||||
}
|
||||
|
||||
public void parseReturnTypeAnnotation() {
|
||||
if (myContext.getLanguageLevel().isPy3K() && myBuilder.getTokenType() == PyTokenTypes.MINUS) {
|
||||
if (myContext.getLanguageLevel().isPy3K() && myBuilder.getTokenType() == PyTokenTypes.RARROW) {
|
||||
PsiBuilder.Marker maybeReturnAnnotation = myBuilder.mark();
|
||||
nextToken();
|
||||
if (matchToken(PyTokenTypes.GT)) {
|
||||
if (!myContext.getExpressionParser().parseSingleExpression(false)) {
|
||||
myBuilder.error(message("PARSE.expected.expression"));
|
||||
}
|
||||
maybeReturnAnnotation.done(PyElementTypes.ANNOTATION);
|
||||
}
|
||||
else {
|
||||
maybeReturnAnnotation.rollbackTo();
|
||||
if (!myContext.getExpressionParser().parseSingleExpression(false)) {
|
||||
myBuilder.error(message("PARSE.expected.expression"));
|
||||
}
|
||||
maybeReturnAnnotation.done(PyElementTypes.ANNOTATION);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,8 +14,7 @@ PyFile:Annotations.py
|
||||
PsiElement(Py:RPAR)(')')
|
||||
PsiWhiteSpace(' ')
|
||||
PyAnnotation
|
||||
PsiElement(Py:MINUS)('-')
|
||||
PsiElement(Py:GT)('>')
|
||||
PsiElement(Py:RARROW)('->')
|
||||
PsiWhiteSpace(' ')
|
||||
PyReferenceExpression: list
|
||||
PsiElement(Py:IDENTIFIER)('list')
|
||||
|
||||
@@ -362,6 +362,20 @@ public class PyEditingTest extends PyTestCase {
|
||||
});
|
||||
}
|
||||
|
||||
// PY-15469
|
||||
public void testEnterDoesNotInsertSlashInsideArrow() {
|
||||
runWithLanguageLevel(LanguageLevel.PYTHON30, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
doTestEnter("def func() -<caret>> int:\n" +
|
||||
" pass",
|
||||
"def func() -\n" +
|
||||
"> int:\n" +
|
||||
" pass");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void doTestEnter(String before, final String after) {
|
||||
int pos = before.indexOf("<caret>");
|
||||
before = before.replace("<caret>", "");
|
||||
|
||||
Reference in New Issue
Block a user