diff --git a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java index 82295f3a2ec0..840ee50100ef 100644 --- a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java +++ b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java @@ -305,7 +305,8 @@ public class ExpressionParsing extends Parsing { else { final PsiBuilder.Marker err = myBuilder.mark(); boolean empty = true; - while (myBuilder.getTokenType() != PyTokenTypes.RPAR && + while (!myBuilder.eof() && + myBuilder.getTokenType() != PyTokenTypes.RPAR && myBuilder.getTokenType() != PyTokenTypes.LINE_BREAK && myBuilder.getTokenType() != PyTokenTypes.STATEMENT_BREAK) { myBuilder.advanceLexer(); diff --git a/python/testData/editing/incompleteFunctionTypeComment.after.py b/python/testData/editing/incompleteFunctionTypeComment.after.py new file mode 100644 index 000000000000..9a8b67f50f3b --- /dev/null +++ b/python/testData/editing/incompleteFunctionTypeComment.after.py @@ -0,0 +1,2 @@ +def foo(bar): + # type: (foo. \ No newline at end of file diff --git a/python/testData/editing/incompleteFunctionTypeComment.py b/python/testData/editing/incompleteFunctionTypeComment.py new file mode 100644 index 000000000000..61e719eda496 --- /dev/null +++ b/python/testData/editing/incompleteFunctionTypeComment.py @@ -0,0 +1,2 @@ +def foo(bar): + # type: (foo \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyEditingTest.java b/python/testSrc/com/jetbrains/python/PyEditingTest.java index 979e634efe2b..d7efb2165734 100644 --- a/python/testSrc/com/jetbrains/python/PyEditingTest.java +++ b/python/testSrc/com/jetbrains/python/PyEditingTest.java @@ -591,4 +591,9 @@ public class PyEditingTest extends PyTestCase { " return bar, 'so' \\\n" + " 'me'"); } + + // PY-27178 + public void testIncompleteFunctionTypeComment() { + doTypingTest('.'); + } }