diff --git a/python/src/com/jetbrains/python/validation/AssignTargetAnnotator.java b/python/src/com/jetbrains/python/validation/AssignTargetAnnotator.java
index 7b80b5cdea16..b55fea30c1f2 100644
--- a/python/src/com/jetbrains/python/validation/AssignTargetAnnotator.java
+++ b/python/src/com/jetbrains/python/validation/AssignTargetAnnotator.java
@@ -16,7 +16,10 @@
package com.jetbrains.python.validation;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.python.PyNames;
+import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
+import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.sdk.PythonSdkType;
import org.jetbrains.annotations.NotNull;
@@ -104,6 +107,14 @@ public class AssignTargetAnnotator extends PyAnnotator {
errorOnUnparenthesizedAssignmentExpression(node.getValue(), "as annotations for arguments, return values and assignments");
}
+ @Override
+ public void visitPyAssignmentExpression(PyAssignmentExpression node) {
+ final PyComprehensionElement comprehensionElement = PsiTreeUtil.getParentOfType(node, PyComprehensionElement.class, true, ScopeOwner.class);
+ if (ScopeUtil.getScopeOwner(comprehensionElement) instanceof PyClass) {
+ getHolder().createErrorAnnotation(node, "Assignment expressions within a comprehension cannot be used in a class body");
+ }
+ }
+
private void errorOnUnparenthesizedAssignmentExpression(@Nullable PyExpression expression, @NotNull String suffix) {
if (expression instanceof PyAssignmentExpression) {
getHolder().createErrorAnnotation(expression, "Unparenthesized assignment expressions are prohibited " + suffix);
diff --git a/python/testData/highlighting/invalidAssignmentExpressions.py b/python/testData/highlighting/invalidAssignmentExpressions.py
index 403617f85532..1be4714b88d8 100644
--- a/python/testData/highlighting/invalidAssignmentExpressions.py
+++ b/python/testData/highlighting/invalidAssignmentExpressions.py
@@ -20,4 +20,7 @@ def foo(answer: (p := 42) = 5): # Valid, but probably never useful
(lambda: x := 1) # INVALID
lambda: (x := 1) # Valid, but unlikely to be useful
(x := lambda: 1) # Valid
-lambda line: (m := re.match(pattern, line)) and m.group(1) # Valid
\ No newline at end of file
+lambda line: (m := re.match(pattern, line)) and m.group(1) # Valid
+
+class A:
+ [y := i for i in range(2)]
\ No newline at end of file