Example #1
0
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie805_prefer_literal import PIE805
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
"foo".encode()
""",
        errors=[PIE805(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
"foo".encode("utf-8")
""",
        errors=[PIE805(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
"foo".encode("utf8")
""",
        errors=[PIE805(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
Example #2
0
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.base import Error
from flake8_pie.pie794_dupe_class_field_definitions import PIE794
from flake8_pie.tests.utils import ex, to_errors

NO_DUPE_FIELD_EXAMPLES = [
    ex(
        code="""
class Foo(BaseModel):
    name = StringField()
    # ....
    name = StringField()
    def remove(self) -> None: ...
""",
        errors=[PIE794(lineno=5, col_offset=4)],
    ),
    ex(
        code="""
class Foo(BaseModel):
    name: str = StringField()
    # ....
    name = StringField()
    def foo(self) -> None: ...
""",
        errors=[PIE794(lineno=5, col_offset=4)],
    ),
    ex(
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.base import Error
from flake8_pie.pie791_no_pointless_statements import PIE791
from flake8_pie.tests.utils import ex, to_errors


@pytest.mark.parametrize(
    "code,errors",
    [
        ex(
            code="""
user.is_authenticated() is True
""",
            errors=[PIE791(lineno=2, col_offset=0)],
        ),
        ex(
            code="""
"foobar" in data
""",
            errors=[PIE791(lineno=2, col_offset=0)],
        ),
        ex(
            code="""
def test_data() -> None:
    "foobar" in data
""",
            errors=[PIE791(lineno=3, col_offset=4)],
        ),
Example #4
0
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie788_no_bool_condition import PIE788
from flake8_pie.tests.utils import Error, ex, to_errors


@pytest.mark.parametrize(
    "code,errors",
    [
        ex(
            code="""
if bool(foo): ...
""",
            errors=[PIE788(lineno=2, col_offset=3)],
        ),
        ex(
            code="""
if not bool(foo): ...
""",
            errors=[PIE788(lineno=2, col_offset=3)],
        ),
        ex(
            code="""
x = "foo" if bool(foo) else "bar"
""",
            errors=[PIE788(lineno=2, col_offset=13)],
        ),
        ex(
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie797_no_unnecessary_if_expr import PIE797
from flake8_pie.tests.utils import Error, ex, to_errors

NO_UNNECSSARY_IF_EXPR = [
    ex(
        code="""
foo(is_valid=True if buzz() else False)
""",
        errors=[PIE797(lineno=2, col_offset=13)],
    ),
    ex(
        code="""
foo(is_valid=False if buzz() else True)
""",
        errors=[PIE797(lineno=2, col_offset=13)],
    ),
    ex(
        code="""
bar(is_valid=None if buzz() else True)
""",
        errors=[],
    ),
    ex(
        code="""
Example #6
0
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie807_pefer_list_builtin import err
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
@dataclass
class Foo:
    foo: List[str] = field(default_factory=lambda: [])
""",
        errors=[err(lineno=4, col_offset=43)],
    ),
    ex(
        code="""
class FooTable(BaseTable):
    bar = fields.ListField(default=lambda: [])
""",
        errors=[err(lineno=3, col_offset=35)],
    ),
    ex(
        code="""
class FooTable(BaseTable):
    bar = fields.ListField(lambda: [])
""",
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.base import Error
from flake8_pie.pie795_prefer_stdlib_enums import PIE795
from flake8_pie.tests.utils import ex, to_errors

PREFER_STDLIB_ENUM_EXAMPLES = [
    ex(
        code="""
class FakeEnum:
    A = "A"
    B = "B"
    C = "C"
""",
        errors=[PIE795(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
class FakeEnum:
    A = 1
    B = 2
    C = 3
""",
        errors=[PIE795(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie802_prefer_simple_any_all import PIE802
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
all((x.id for x in bar))
all(x.id for x in bar)
    """,
        # parentheses aren't in the AST so we cannot reliably differentiate
        # these two.
        errors=[],
    ),
    ex(
        code="""
any([x.id for x in bar])
""",
        errors=[PIE802(lineno=2, col_offset=5)],
    ),
    ex(
        code="""
all([x.id for x in bar])
""",
        errors=[PIE802(lineno=2, col_offset=5)],
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie799_prefer_col_init import PIE799
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
bar = []
foo = Foo()
bar.append(foo)
""",
        errors=[PIE799(lineno=4, col_offset=0)],
    ),
    ex(
        code="""
bar = []
bar.append(Foo())
""",
        errors=[PIE799(lineno=3, col_offset=0)],
    ),
    ex(
        code="""
def fn() -> list[Foo]:
    foos = []
    foo = Foo()
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.base import Error
from flake8_pie.pie793_prefer_dataclass import PIE793
from flake8_pie.tests.utils import ex, to_errors

PREFER_DATACLASS_EXAMPLES = [
    ex(
        code="""
class Foo:
    x: list[str] = []
    z: dict[int, int] = dict()
    def __init__(self) -> None: ...
""",
        errors=[PIE793(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
class Foo:
    def __init__(self) -> None: ...
    x: list[str] = []
    z: dict[int, int] = dict()
""",
        errors=[PIE793(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie804_no_unnecessary_dict_kwargs import PIE804
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
foo(**{"bar": True})
""",
        errors=[PIE804(lineno=2, col_offset=6)],
    ),
    ex(
        code="""
foo(**{"r2d2": True})
""",
        errors=[PIE804(lineno=2, col_offset=6)],
    ),
    ex(
        code="""
Foo.objects.create(**{"bar": True})
""",
        errors=[PIE804(lineno=2, col_offset=21)],
    ),
    ex(
        code="""
Example #12
0
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie808_prefer_simple_range import err
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
range(0, 10)
""",
        errors=[err(lineno=2, col_offset=6)],
    ),
    ex(
        code="""
range(x, 10)
range(-15, 10)
range(10)
range(0, 10, x)
""",
        errors=[],
    ),
]


@pytest.mark.parametrize("code,errors", EXAMPLES)
def test_examples(code: str, errors: list[Error]) -> None:
import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.base import Error
from flake8_pie.pie792_no_inherit_object import PIE792
from flake8_pie.tests.utils import ex, to_errors


@pytest.mark.parametrize(
    "code,errors",
    [
        ex(
            code="""
class Foo(object):
    pass
""",
            errors=[PIE792(lineno=2, col_offset=10)],
        ),
        ex(
            code="""
class object:
    pass

class Foo(object):
    pass
""",
            errors=[PIE792(lineno=5, col_offset=10)],
        ),
        ex(
            code="""
Example #14
0
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie790_no_unnecessary_pass import PIE790
from flake8_pie.tests.utils import Error, ex, to_errors


@pytest.mark.parametrize(
    "code,errors",
    [
        ex(
            code='''
class Foo:
    """buzz"""
    pass
''',
            errors=[PIE790(lineno=4, col_offset=4)],
        ),
        ex(
            code="""
if foo:
    '''foo'''
    pass
""",
            errors=[PIE790(lineno=4, col_offset=4)],
        ),
        ex(
            code="""
if foo:
    pass
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie800_no_unnecessary_spread import PIE800
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
foo({**foo, **{"bar": True}})
""",
        errors=[PIE800(lineno=2, col_offset=14)],
    ),
    ex(
        code="""
{**foo, **{bar: 10}}
""",
        errors=[PIE800(lineno=2, col_offset=10)],
    ),
    ex(
        code="""
{**foo, **buzz, **{bar: 10}}
""",
        errors=[PIE800(lineno=2, col_offset=18)],
    ),
    ex(
        code="""
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie789_prefer_isinstance_type_compare import PIE789
from flake8_pie.tests.utils import Error, ex, to_errors


@pytest.mark.parametrize(
    "code,errors",
    [
        ex(
            code="""
if type(foo) == str: ...
""",
            errors=[PIE789(lineno=2, col_offset=3)],
        ),
        ex(
            code="""
if type(foo) is bool: ...
""",
            errors=[PIE789(lineno=2, col_offset=3)],
        ),
        ex(
            code="""
if type(foo) is not dict: ...
""",
            errors=[PIE789(lineno=2, col_offset=3)],
        ),
        ex(
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.base import Error
from flake8_pie.pie787_no_len_condition import PIE787
from flake8_pie.tests.utils import ex, to_errors


@pytest.mark.parametrize(
    "code,errors",
    [
        ex(
            code="""
if len(foo): ...
""",
            errors=[PIE787(lineno=2, col_offset=3)],
        ),
        ex(
            code="""
if not len(foo): ...
""",
            errors=[PIE787(lineno=2, col_offset=3)],
        ),
        ex(
            code="""
x = "foo" if len(foo) else "bar"
""",
            errors=[PIE787(lineno=2, col_offset=13)],
        ),
        ex(
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie809_django_prefer_bulk import err
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
[Item.objects.create(item) for item in items]
""",
        errors=[err(lineno=2, col_offset=1)],
    ),
    ex(
        code="""
[Item.objects.create(item) for item in [bar for bar in buzz]]
""",
        errors=[err(lineno=2, col_offset=1)],
    ),
    ex(
        code="""
(Item.objects.create(item) for item in items)
""",
        errors=[err(lineno=2, col_offset=1)],
    ),
    ex(
        code="""
Example #19
0
from flake8_pie import Flake8PieCheck
from flake8_pie.pie798_no_unnecessary_class import PIE798
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
class UserManager:
    '''
    some class
    '''

    class User(NamedTuple):
        name: str

    @classmethod
    def update_user(cls, user: User) -> None:
        ...

    @staticmethod
    def sync_users() -> None:
        ...
""",
        errors=[PIE798(lineno=2, col_offset=0)],
    ),
    ex(
        # ignore any classes inheriting from something
        code="""
class UserManager(Foo):
    '''
    some class
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie803_prefer_logging_interpolation import PIE803
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code=r"""
logger.info("Login error for %s" % user)
    """,
        errors=[PIE803(lineno=2, col_offset=12)],
    ),
    ex(
        code=r"""
log.warn("Login error for %s, %s" % (user_id, name))
    """,
        errors=[PIE803(lineno=2, col_offset=9)],
    ),
    ex(
        code=r"""
logging.log("Login error for {}".format(user))
    """,
        errors=[PIE803(lineno=2, col_offset=12)],
    ),
    ex(
        code=r"""
import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.base import Error
from flake8_pie.pie796_prefer_unique_enums import PIE796
from flake8_pie.tests.utils import ex, to_errors

PREFER_UNIQUE_ENUM_EXAMPLES = [
    ex(
        code="""
class FakeEnum(enum.Enum):
    A = "A"
    B = "B"
    C = "B"
""",
        errors=[PIE796(lineno=5, col_offset=4)],
    ),
    ex(
        code="""
class FakeEnum(Enum):
    A = 1
    B = 2
    C = 2
""",
        errors=[PIE796(lineno=5, col_offset=4)],
    ),
    ex(
        code="""
Example #22
0
from __future__ import annotations

import ast

import pytest

from flake8_pie import Flake8PieCheck
from flake8_pie.pie806_no_assert_except import PIE806
from flake8_pie.tests.utils import Error, ex, to_errors

EXAMPLES = [
    ex(
        code="""
try:
    assert "@" in bar
except AssertionError:
    ...
""",
        errors=[PIE806(lineno=2, col_offset=0)],
    ),
    ex(
        code="""
try:
    assert len(foo) == bar
except AssertionError:
    ...
""",
        errors=[PIE806(lineno=2, col_offset=0)],
    ),
    ex(
        code="""