@Override
    public void visitPyTargetExpression(@NotNull PyTargetExpression node) {
      // TODO: Check types in class-level assignments
      final ScopeOwner owner = ScopeUtil.getScopeOwner(node);
      if (owner instanceof PyClass) return;
      final PyExpression value = node.findAssignedValue();
      if (value == null) return;
      final PyType expected = myTypeEvalContext.getType(node);
      final PyType actual = tryPromotingType(value, expected);

      if (expected != null && actual instanceof PyTypedDictType) {
        if (reportTypedDictProblems(expected, (PyTypedDictType)actual, value)) return;
      }

      if (!PyTypeChecker.match(expected, actual, myTypeEvalContext)) {
        String expectedName = PythonDocumentationProvider.getVerboseTypeName(expected, myTypeEvalContext);
        String actualName = PythonDocumentationProvider.getTypeName(actual, myTypeEvalContext);
        registerProblem(value, PyPsiBundle.message("INSP.type.checker.expected.type.got.type.instead", expectedName, actualName));
      }
    }
@Override
    public void visitPyTargetExpression(@NotNull PyTargetExpression node)