From 99c6577bd7d3bead9dde310d7a53470e7bea822d Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Fri, 23 May 2014 20:46:56 +0400 Subject: [PATCH] Fixed false positive for 'yield' expressions in lambdas (PY-11663) --- .../src/com/jetbrains/python/validation/ReturnAnnotator.java | 2 +- python/testData/highlighting/yieldInLambda.py | 1 + .../testSrc/com/jetbrains/python/PythonHighlightingTest.java | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 python/testData/highlighting/yieldInLambda.py diff --git a/python/src/com/jetbrains/python/validation/ReturnAnnotator.java b/python/src/com/jetbrains/python/validation/ReturnAnnotator.java index 291051f58568..b23cb8c709ba 100644 --- a/python/src/com/jetbrains/python/validation/ReturnAnnotator.java +++ b/python/src/com/jetbrains/python/validation/ReturnAnnotator.java @@ -33,7 +33,7 @@ public class ReturnAnnotator extends PyAnnotator { public void visitPyYieldExpression(final PyYieldExpression node) { final ScopeOwner owner = ScopeUtil.getScopeOwner(node); - if (!(owner instanceof PyFunction)) { + if (!(owner instanceof PyFunction || owner instanceof PyLambdaExpression)) { getHolder().createErrorAnnotation(node, "'yield' outside of function"); } } diff --git a/python/testData/highlighting/yieldInLambda.py b/python/testData/highlighting/yieldInLambda.py new file mode 100644 index 000000000000..72ecd04afc2e --- /dev/null +++ b/python/testData/highlighting/yieldInLambda.py @@ -0,0 +1 @@ +g = lambda: (yield 10) diff --git a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java index 51fcd30dc896..e1fa67de63e4 100644 --- a/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonHighlightingTest.java @@ -114,6 +114,11 @@ public class PythonHighlightingTest extends PyTestCase { public void testYieldInDefaultValue() { doTest(LanguageLevel.PYTHON34, true, false); } + + // PY-11663 + public void testYieldInLambda() { + doTest(); + } public void testImportStarAtTopLevel() { doTest(true, false);