@@ -3120,21 +3120,30 @@ def process_module_assignment(self, lvals: List[Lvalue], rval: Expression,
3120
3120
rnode = self .lookup_type_node (rval )
3121
3121
if rnode and isinstance (rnode .node , MypyFile ):
3122
3122
for lval in lvals :
3123
- if not isinstance (lval , NameExpr ):
3123
+ if not isinstance (lval , RefExpr ):
3124
3124
continue
3125
3125
# respect explicitly annotated type
3126
3126
if (isinstance (lval .node , Var ) and lval .node .type is not None ):
3127
3127
continue
3128
- lnode = self .current_symbol_table ().get (lval .name )
3128
+
3129
+ # We can handle these assignments to locals and to self
3130
+ if isinstance (lval , NameExpr ):
3131
+ lnode = self .current_symbol_table ().get (lval .name )
3132
+ elif isinstance (lval , MemberExpr ) and self .is_self_member_ref (lval ):
3133
+ assert self .type is not None
3134
+ lnode = self .type .names .get (lval .name )
3135
+ else :
3136
+ continue
3137
+
3129
3138
if lnode :
3130
3139
if isinstance (lnode .node , MypyFile ) and lnode .node is not rnode .node :
3140
+ assert isinstance (lval , (NameExpr , MemberExpr ))
3131
3141
self .fail (
3132
3142
"Cannot assign multiple modules to name '{}' "
3133
3143
"without explicit 'types.ModuleType' annotation" .format (lval .name ),
3134
3144
ctx )
3135
3145
# never create module alias except on initial var definition
3136
3146
elif lval .is_inferred_def :
3137
- lnode .kind = self .current_symbol_kind ()
3138
3147
assert rnode .node is not None
3139
3148
lnode .node = rnode .node
3140
3149
0 commit comments