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="""
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)], ),
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="""
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="""
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="""
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="""
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="""
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="""