blob: ed807c0d7bd629e43fc3a17aa5bd697d48be3fe0 [file] [log] [blame]
"""Check possible unbalanced tuple unpacking """
from __future__ import absolute_import
from functional.u.unpacking import unpack
# pylint: disable=using-constant-test, useless-object-inheritance,import-outside-toplevel
def do_stuff():
"""This is not right."""
first, second = 1, 2, 3 # [unbalanced-tuple-unpacking]
return first + second
def do_stuff1():
"""This is not right."""
first, second = [1, 2, 3] # [unbalanced-tuple-unpacking]
return first + second
def do_stuff2():
"""This is not right."""
(first, second) = 1, 2, 3 # [unbalanced-tuple-unpacking]
return first + second
def do_stuff3():
"""This is not right."""
first, second = range(100)
return first + second
def do_stuff4():
""" This is right """
first, second = 1, 2
return first + second
def do_stuff5():
""" This is also right """
first, second = (1, 2)
return first + second
def do_stuff6():
""" This is right """
(first, second) = (1, 2)
return first + second
def temp():
""" This is not weird """
if True:
return [1, 2]
return [2, 3, 4]
def do_stuff7():
""" This is not right, but we're not sure """
first, second = temp()
return first + second
def temp2():
""" This is weird, but correct """
if True:
return (1, 2)
if True:
return (2, 3)
return (4, 5)
def do_stuff8():
""" This is correct """
first, second = temp2()
return first + second
def do_stuff9():
""" This is not correct """
first, second = unpack() # [unbalanced-tuple-unpacking]
return first + second
class UnbalancedUnpacking(object):
""" Test unbalanced tuple unpacking in instance attributes. """
# pylint: disable=attribute-defined-outside-init, invalid-name, too-few-public-methods
def test(self):
""" unpacking in instance attributes """
# we're not sure if temp() returns two or three values
# so we shouldn't emit an error
self.a, self.b = temp()
self.a, self.b = temp2()
self.a, self.b = unpack() # [unbalanced-tuple-unpacking]
def issue329(*args):
""" Don't emit unbalanced tuple unpacking if the
rhs of the assignment is a variable-length argument,
because we don't know the actual length of the tuple.
"""
first, second, third = args
return first, second, third
def test_decimal():
"""Test a false positive with decimal.Decimal.as_tuple
See astroid https://bitbucket.org/logilab/astroid/issues/92/
"""
from decimal import Decimal
dec = Decimal(2)
first, second, third = dec.as_tuple()
return first, second, third
def test_issue_559():
"""Test that we don't have a false positive wrt to issue #559."""
from ctypes import c_int
root_x, root_y, win_x, win_y = [c_int()] * 4
return root_x, root_y, win_x, win_y