blob: 7d0c74f83e1abbf13b858e875b70e7be1e82fec8 [file] [log] [blame]
# pylint: disable=too-few-public-methods, no-absolute-import,missing-docstring,import-error,wrong-import-position
# pylint: disable=wrong-import-order, useless-object-inheritance,unnecessary-lambda
def decorator(fun):
"""Decorator"""
return fun
class DemoClass(object):
"""Test class for method invocations."""
@staticmethod
def static_method(arg):
"""static method."""
return arg + arg
@classmethod
def class_method(cls, arg):
"""class method"""
return arg + arg
def method(self, arg):
"""method."""
return (self, arg)
@decorator
def decorated_method(self, arg):
"""decorated method."""
return (self, arg)
def function_1_arg(first_argument):
"""one argument function"""
return first_argument
def function_3_args(first_argument, second_argument, third_argument):
"""three arguments function"""
return first_argument, second_argument, third_argument
def function_default_arg(one=1, two=2):
"""fonction with default value"""
return two, one
function_1_arg(420)
function_1_arg() # [no-value-for-parameter]
function_1_arg(1337, 347) # [too-many-function-args]
function_3_args(420, 789) # [no-value-for-parameter]
# +1:[no-value-for-parameter,no-value-for-parameter,no-value-for-parameter]
function_3_args()
function_3_args(1337, 347, 456)
function_3_args('bab', 'bebe', None, 5.6) # [too-many-function-args]
function_default_arg(1, two=5)
function_default_arg(two=5)
function_1_arg(bob=4) # [unexpected-keyword-arg,no-value-for-parameter]
function_default_arg(1, 4, coin="hello") # [unexpected-keyword-arg]
function_default_arg(1, one=5) # [redundant-keyword-arg]
# Remaining tests are for coverage of correct names in messages.
LAMBDA = lambda arg: 1
LAMBDA() # [no-value-for-parameter]
def method_tests():
"""Method invocations."""
demo = DemoClass()
demo.static_method() # [no-value-for-parameter]
DemoClass.static_method() # [no-value-for-parameter]
demo.class_method() # [no-value-for-parameter]
DemoClass.class_method() # [no-value-for-parameter]
demo.method() # [no-value-for-parameter]
DemoClass.method(demo) # [no-value-for-parameter]
demo.decorated_method() # [no-value-for-parameter]
DemoClass.decorated_method(demo) # [no-value-for-parameter]
# Test a regression (issue #234)
import sys
class Text(object):
""" Regression """
if sys.version_info > (3,):
def __new__(cls):
""" empty """
return object.__new__(cls)
else:
def __new__(cls):
""" empty """
return object.__new__(cls)
Text()
class TestStaticMethod(object):
@staticmethod
def test(first, second=None, **kwargs):
return first, second, kwargs
def func(self):
self.test(42)
self.test(42, second=34)
self.test(42, 42)
self.test() # [no-value-for-parameter]
self.test(42, 42, 42) # [too-many-function-args]
class TypeCheckConstructor(object):
def __init__(self, first, second):
self.first = first
self.second = second
def test(self):
type(self)(1, 2, 3) # [too-many-function-args]
# +1: [no-value-for-parameter,no-value-for-parameter]
type(self)()
type(self)(1, lala=2) # [no-value-for-parameter,unexpected-keyword-arg]
type(self)(1, 2)
type(self)(first=1, second=2)
class Test(object):
""" lambda needs Test instance as first argument """
lam = lambda self, icon: (self, icon)
def test(self):
self.lam(42)
self.lam() # [no-value-for-parameter]
self.lam(1, 2, 3) # [too-many-function-args]
Test().lam() # [no-value-for-parameter]
# Don't emit a redundant-keyword-arg for this example,
# it's perfectly valid
class Issue642(object):
attr = 0
def __str__(self):
return "{self.attr}".format(self=self)
# These should not emit anything regarding the number of arguments,
# since they have something invalid.
from ala_bala_portocola import unknown
# pylint: disable=not-a-mapping,not-an-iterable
function_1_arg(*unknown)
function_1_arg(1, *2)
function_1_arg(1, 2, 3, **unknown)
function_1_arg(4, 5, **1)
function_1_arg(5, 6, **{unknown: 1})
function_1_arg(**{object: 1})
function_1_arg(**{1: 2})
def no_context_but_redefined(*args):
args = [1]
#+1: [no-value-for-parameter, no-value-for-parameter]
expect_three(*list(args))
def no_context_one_elem(*args):
expect_three(args) # [no-value-for-parameter, no-value-for-parameter]
# Don't emit no-value-for-parameter for this, since we
# don't have the context at our disposal.
def expect_three(one, two, three):
return one + two + three
def no_context(*args):
expect_three(*args)
def no_context_two(*args):
expect_three(*list(args))
def no_context_three(*args):
expect_three(*set(args))
def compare_prices(arg):
return set((arg, ))
def find_problems2(prob_dates):
for fff in range(10):
prob_dates |= compare_prices(fff)
from collections import namedtuple
def namedtuple_replace_issue_1036():
cls = namedtuple('cls', 'a b c')
new_instance = cls(1, 2, 3)._replace(
a=24,
b=24,
c=42
)
# +1:[unexpected-keyword-arg,unexpected-keyword-arg]
new_bad_instance = cls(1, 2, 3)._replace(d=24, e=32)
return new_instance, new_bad_instance
from functools import partial
def some_func(first, second, third):
return first + second + third
partial(some_func, 1, 2)(3)
partial(some_func, third=1, second=2)(3)
partial(some_func, 1, third=2)(second=3)
partial(some_func, 1)(1) # [no-value-for-parameter]
partial(some_func, 1)(third=1) # [no-value-for-parameter]
partial(some_func, 1, 2)(third=1, fourth=4) # [unexpected-keyword-arg]
def mutation_decorator(fun):
"""Decorator that changes a function's signature."""
def wrapper(*args, do_something=True, **kwargs):
if do_something:
return fun(*args, **kwargs)
return None
return wrapper
def other_mutation_decorator(fun):
"""Another decorator that changes a function's signature"""
def wrapper(*args, do_something=True, **kwargs):
if do_something:
return fun(*args, **kwargs)
return None
return wrapper
@mutation_decorator
def mutated_function(arg):
return arg
@other_mutation_decorator
def mutated(arg):
return arg
mutated_function(do_something=False)
mutated_function()
mutated(do_something=True)
def func(one, two, three):
return one + two + three
CALL = lambda *args: func(*args)