Skip to content

Commit d5f7668

Browse files
committed
Adds class checks
Changes: 1. Forbids old-style classes, closes #35 2. Forbids `staticmethod`, closes #38 3. Forbids `__del__` magic method, closes #44 4. Forbids `async` and `await` variable names, closes #49 5. Forbids `__future__` import, closes #48
1 parent 520c95f commit d5f7668

File tree

16 files changed

+434
-144
lines changed

16 files changed

+434
-144
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@
22

33
We follow Semantic Versions.
44

5+
## Version 0.0.4
6+
7+
### Features
8+
9+
- We now check `class`es to match our styleguide
10+
- Classes have their own error group `Z3`
11+
- Using `@staticmethod` is now forbidden
12+
- Declaring `object` as a base class is now required
13+
- Now we check that `__del__` magic method is not used
14+
- Variable names `async` and `await` are forbidden
15+
- We now forbid to use `__future__` imports
16+
- We now have a whitelist for `__future__` imports
17+
- Imports are now have its own subgroup `Z10`
18+
- General rules now start from `Z11`
19+
20+
521
## Version 0.0.3
622

723
### Features

pyproject.lock

Lines changed: 3 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,6 @@ platform = "*"
8585
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4"
8686
version = "4.5.1"
8787

88-
[[package]]
89-
category = "dev"
90-
description = "Better living through Python with decorators"
91-
name = "decorator"
92-
optional = false
93-
platform = "All"
94-
python-versions = "*"
95-
version = "4.3.0"
96-
9788
[[package]]
9889
category = "dev"
9990
description = "Style checker for Sphinx (or other) RST documentation"
@@ -131,32 +122,6 @@ version = "1.5.0"
131122
[package.dependencies]
132123
apipkg = ">=1.4"
133124

134-
[[package]]
135-
category = "dev"
136-
description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby."
137-
name = "factory-boy"
138-
optional = false
139-
platform = "*"
140-
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
141-
version = "2.11.1"
142-
143-
[package.dependencies]
144-
Faker = ">=0.7.0"
145-
146-
[[package]]
147-
category = "dev"
148-
description = "Faker is a Python package that generates fake data for you."
149-
name = "faker"
150-
optional = false
151-
platform = "any"
152-
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
153-
version = "0.8.17"
154-
155-
[package.dependencies]
156-
python-dateutil = ">=2.4"
157-
six = ">=1.10"
158-
text-unidecode = "1.2"
159-
160125
[[package]]
161126
category = "main"
162127
description = "the modular source code checker: pep8, pyflakes and co"
@@ -333,15 +298,6 @@ platform = "*"
333298
python-versions = "*"
334299
version = "1.0.0"
335300

336-
[[package]]
337-
category = "dev"
338-
description = "A port of Ruby on Rails inflector to Python"
339-
name = "inflection"
340-
optional = false
341-
platform = "UNKNOWN"
342-
python-versions = "*"
343-
version = "0.3.1"
344-
345301
[[package]]
346302
category = "dev"
347303
description = "A Python utility / library to sort Python imports."
@@ -588,20 +544,6 @@ version = "2.5.1"
588544
coverage = ">=3.7.1"
589545
pytest = ">=2.6.0"
590546

591-
[[package]]
592-
category = "dev"
593-
description = "Factory Boy support for pytest."
594-
name = "pytest-factoryboy"
595-
optional = false
596-
platform = "*"
597-
python-versions = "*"
598-
version = "2.0.1"
599-
600-
[package.dependencies]
601-
factory_boy = ">=2.10.0"
602-
inflection = "*"
603-
pytest = ">=3.3.2"
604-
605547
[[package]]
606548
category = "dev"
607549
description = "pytest plugin to check FLAKE8 requirements"
@@ -641,18 +583,6 @@ version = "1.2.3"
641583
[package.dependencies]
642584
pytest = "*"
643585

644-
[[package]]
645-
category = "dev"
646-
description = "Extensions to the standard Python datetime module"
647-
name = "python-dateutil"
648-
optional = false
649-
platform = "*"
650-
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
651-
version = "2.7.3"
652-
653-
[package.dependencies]
654-
six = ">=1.5"
655-
656586
[[package]]
657587
category = "dev"
658588
description = "World timezone definitions, modern and historical"
@@ -714,7 +644,7 @@ name = "sphinx"
714644
optional = false
715645
platform = "any"
716646
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
717-
version = "1.7.5"
647+
version = "1.7.6"
718648

719649
[package.dependencies]
720650
Jinja2 = ">=2.3"
@@ -790,15 +720,6 @@ version = "1.28.0"
790720
pbr = ">=2.0.0,<2.1.0 || >2.1.0"
791721
six = ">=1.10.0"
792722

793-
[[package]]
794-
category = "dev"
795-
description = "The most basic Text::Unidecode port"
796-
name = "text-unidecode"
797-
optional = false
798-
platform = "*"
799-
python-versions = "*"
800-
version = "1.2"
801-
802723
[[package]]
803724
category = "dev"
804725
description = "a fork of Python 2 and 3 ast modules with type comment support"
@@ -817,21 +738,8 @@ platform = "*"
817738
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4"
818739
version = "1.23"
819740

820-
[[package]]
821-
category = "dev"
822-
description = "Python Data Validation for Humans™."
823-
name = "validators"
824-
optional = false
825-
platform = "any"
826-
python-versions = "*"
827-
version = "0.12.2"
828-
829-
[package.dependencies]
830-
decorator = ">=3.4.0"
831-
six = ">=1.4.0"
832-
833741
[metadata]
834-
content-hash = "a0faf8b61fa9bced3a5790d46797f49ca6fa01b58339270dd5d96e3bce484623"
742+
content-hash = "127dd2b3e98b6c05e552dfdba57053620e8437754070b81fda5acad68b190fff"
835743
platform = "*"
836744
python-versions = "^3.6"
837745

@@ -845,12 +753,9 @@ certifi = ["13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7", "
845753
chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"]
846754
colorama = ["463f8483208e921368c9f306094eb6f725c6ca42b0f97e313cb5d5512459feda", "48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1"]
847755
coverage = ["03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", "0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", "104ab3934abaf5be871a583541e8829d6c19ce7bde2923b2751e0d3ca44db60a", "15b111b6a0f46ee1a485414a52a7ad1d703bdf984e9ed3c288a4414d3871dcbd", "198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", "1c383d2ef13ade2acc636556fd544dba6e14fa30755f26812f54300e401f98f2", "28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", "2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", "337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", "3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", "3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", "3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", "3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", "4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", "56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", "5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", "69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", "6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", "701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", "7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", "76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", "7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", "7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", "7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", "8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", "9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", "9e112fcbe0148a6fa4f0a02e8d58e94470fc6cb82a5481618fea901699bf34c4", "ac4fef68da01116a5c117eba4dd46f2e06847a497de5ed1d64bb99a5fda1ef91", "b8815995e050764c8610dbc82641807d196927c3dbed207f0a079833ffcf588d", "be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", "c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", "de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", "e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", "e4d96c07229f58cb686120f168276e434660e4358cc9cf3b0464210b04913e77", "f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80", "f8a923a85cb099422ad5a2e345fe877bbc89a8a8b23235824a93488150e45f6e"]
848-
decorator = ["2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82", "c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c"]
849756
doc8 = ["2df89f9c1a5abfb98ab55d0175fed633cae0cf45025b8b1e0ee5ea772be28543", "d12f08aa77a4a65eb28752f4bc78f41f611f9412c4155e2b03f1f5d4a45efe04"]
850757
docutils = ["02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", "51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", "7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6"]
851758
execnet = ["a7a84d5fa07a089186a329528f127c9d73b9de57f1a1131b82bb5320ee651f6a", "fc155a6b553c66c838d1a22dba1dc9f5f505c43285a878c6f74a79c024750b83"]
852-
factory-boy = ["6f25cc4761ac109efd503f096e2ad99421b1159f01a29dbb917359dcd68e08ca", "d552cb872b310ae78bd7429bf318e42e1e903b1a109e899a523293dfa762ea4f"]
853-
faker = ["0e9a1227a3a0f3297a485715e72ee6eb77081b17b629367042b586e38c03c867", "b4840807a94a3bad0217d6ed3f9b65a1cc6e1db1c99e1184673056ae2c0a4c4d"]
854759
flake8 = ["7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0", "c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37"]
855760
flake8-blind-except = ["0d7d1adb4cabf2268d6eebb815a7a5014bcb7e8419f7a74339c46d0b8847b858", "aca3356633825544cec51997260fe31a8f24a1a2795ce8e81696b9916745e599"]
856761
flake8-bugbear = ["541746f0f3b2f1a8d7278e1d2d218df298996b60b02677708560db7c7e620e3b", "5f14a99d458e29cb92be9079c970030e0dd398b2decb179d76d39a5266ea1578"]
@@ -866,7 +771,6 @@ flake8-quotes = ["fd9127ad8bbcf3b546fa7871a5266fd8623ce765ebe3d5aa5eabb80c01212b
866771
flake8-string-format = ["68ea72a1a5b75e7018cae44d14f32473c798cf73d75cbaed86c6a9a907b770b2", "774d56103d9242ed968897455ef49b7d6de272000cfa83de5814273a868832f1"]
867772
idna = ["156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", "684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"]
868773
imagesize = ["3620cc0cadba3f7475f9940d22431fc4d407269f1be59ec9b8edcca26440cf18", "5b326e4678b6925158ccc66a9fa3122b6106d7c876ee32d7de6ce59385b96315"]
869-
inflection = ["18ea7fb7a7d152853386523def08736aa8c32636b047ade55f7578c4edeb16ca"]
870774
isort = ["1153601da39a25b14ddc54955dbbacbb6b2d19135386699e2ad58517953b34af", "b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8", "ec9ef8f4a9bc6f71eec99e1806bfa2de401650d996c59330782b89a5555c1497"]
871775
jinja2 = ["74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", "f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"]
872776
m2r = ["1c358d8bf21ff70e569968d604a0e3c9b05fe01b5f362389235e97bc7c0cd542"]
@@ -889,23 +793,19 @@ pyparsing = ["0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04",
889793
pytest = ["0453c8676c2bee6feb0434748b068d5510273a916295fd61d306c4f22fbfd752", "4b208614ae6d98195430ad6bde03641c78553acee7c83cec2e85d613c0cd383d"]
890794
pytest-cache = ["be7468edd4d3d83f1e844959fd6e3fd28e77a481440a7118d430130ea31b07a9"]
891795
pytest-cov = ["03aa752cf11db41d281ea1d807d954c4eda35cfa1b21d6971966cc041bbf6e2d", "890fe5565400902b0c78b5357004aab1c814115894f4f21370e2433256a3eeec"]
892-
pytest-factoryboy = ["ad438d191d2b2a0f26956d437c1963875db573147a84ffd85d7bbeaefae22458"]
893796
pytest-flake8 = ["e5cdc4f459c9436ac6c649e428a014bb5988605858549397374ec29a776cae68", "ec248d4a215d6c7cd9d3ca48f365ece0e3892b46d626c22a95ccc80188ff35ed"]
894797
pytest-isort = ["ce36b62ca1108e16a8b8fc0d5a82302ba0796a3c352b093e13ccbb18e772edc6", "d4d195ecfe33d81e258d251b2679b32216bad84131fb41984da22d9d0328a6fe"]
895798
pytest-randomly = ["6db5e03d72b54052b9b379dc3cfa4749c19bfe4de161cf3eb24762049f4ce9be", "92ec6745d3ebdd690ecb598648748c9601f16f5afacf83ccef2b50d23e6edb7f"]
896-
python-dateutil = ["1adb80e7a782c12e52ef9a8182bebeb73f1d7e24e374397af06fb4956c8dc5c0", "e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8"]
897799
pytz = ["a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053", "ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277"]
898800
requests = ["63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", "ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a"]
899801
restructuredtext-lint = ["c48ca9a84c312b262809f041fe47dcfaedc9ee4879b3e1f9532f745c182b4037"]
900802
six = ["70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", "832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"]
901803
snowballstemmer = ["919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", "9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89"]
902-
sphinx = ["85f7e32c8ef07f4ba5aeca728e0f7717bef0789fba8458b8d9c5c294cad134f3", "d45480a229edf70d84ca9fae3784162b1bc75ee47e480ffe04a4b7f21a95d76d"]
804+
sphinx = ["217ad9ece2156ed9f8af12b5d2c82a499ddf2c70a33c5f81864a08d8c67b9efc", "a765c6db1e5b62aae857697cd4402a5c1a315a7b0854bbcd0fc8cdc524da5896"]
903805
sphinx-autodoc-typehints = ["1a9df6cb3ba72453ea4bfbe96ea887abc0d796b2ce9508c2189217a1bb69b366", "46cc9e985ee6d8bbbd07fffd95b815c39a72df6afb600f59671f85f7340e7d0d"]
904806
sphinx-readable-theme = ["f5fe65a2e112cb956b366df41e0fc894ff6b6f0e4a4814fcbff692566db47fc0"]
905807
sphinxcontrib-napoleon = ["614b779888629f14dfdfad6c17bffbb6d3813a0a0917a9541651d85384d4d6bd", "cbb31953b15d2102c18f16f02591f92e2614a08ef0218c9e514e2dc4c4f9daf9"]
906808
sphinxcontrib-websupport = ["68ca7ff70785cbe1e7bccc71a48b5b6d965d79ca50629606c7861a21b206d9dd", "9de47f375baf1ea07cdb3436ff39d7a9c76042c10a769c52353ec46e4e8fc3b9"]
907809
stevedore = ["e3d96b2c4e882ec0c1ff95eaebf7b575a779fd0ccb4c741b9832bed410d58b3d", "f1c7518e7b160336040fee272174f1f7b29a46febb3632502a8f2055f973d60b"]
908-
text-unidecode = ["5a1375bb2ba7968740508ae38d92e1f889a0832913cb1c447d5e2046061a396d", "801e38bd550b943563660a91de8d4b6fa5df60a542be9093f7abf819f86050cc"]
909810
typed-ast = ["0948004fa228ae071054f5208840a1e88747a357ec1101c17217bfe99b299d58", "25d8feefe27eb0303b73545416b13d108c6067b846b543738a25ff304824ed9a", "29464a177d56e4e055b5f7b629935af7f49c196be47528cc94e0a7bf83fbc2b9", "2e214b72168ea0275efd6c884b114ab42e316de3ffa125b267e732ed2abda892", "3e0d5e48e3a23e9a4d1a9f698e32a542a4a288c871d33ed8df1b092a40f3a0f9", "519425deca5c2b2bdac49f77b2c5625781abbaf9a809d727d3a5596b30bb4ded", "57fe287f0cdd9ceaf69e7b71a2e94a24b5d268b35df251a88fef5cc241bf73aa", "668d0cec391d9aed1c6a388b0d5b97cd22e6073eaa5fbaa6d2946603b4871efe", "68ba70684990f59497680ff90d18e756a47bf4863c604098f10de9716b2c0bdd", "6de012d2b166fe7a4cdf505eee3aaa12192f7ba365beeefaca4ec10e31241a85", "79b91ebe5a28d349b6d0d323023350133e927b4de5b651a8aa2db69c761420c6", "8550177fa5d4c1f09b5e5f524411c44633c80ec69b24e0e98906dd761941ca46", "a8034021801bc0440f2e027c354b4eafd95891b573e12ff0418dec385c76785c", "bc978ac17468fe868ee589c795d06777f75496b1ed576d308002c8a5756fb9ea", "c05b41bc1deade9f90ddc5d988fe506208019ebba9f2578c622516fd201f5863", "c9b060bd1e5a26ab6e8267fd46fc9e02b54eb15fffb16d112d4c7b1c12987559", "edb04bdd45bfd76c8292c4d9654568efaedf76fe78eb246dde69bdb13b2dad87", "f19f2a4f547505fe9072e15f6f4ae714af51b5a681a97f187971f50c283193b6"]
910811
urllib3 = ["a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", "b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"]
911-
validators = ["172ac45f7d1944ce4beca3c5c53ca7c83e9759e39fd3fedc1cf28e2130268706"]

pyproject.toml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "wemake-python-styleguide"
3-
version = "0.0.3"
3+
version = "0.0.4"
44
description = "Opinionated styleguide that we use in wemake.services"
55

66
license = "MIT"
@@ -47,6 +47,7 @@ flake8 = "^3.5"
4747
pytest-cov = "^2.5"
4848
pytest-isort = "^0.2.0"
4949
pytest-flake8 = "^1.0"
50+
pytest-randomly = "^1.2"
5051
pytest = "^3.6"
5152
flake8-builtins = "^1.4"
5253
flake8-commas = "^2.0"
@@ -60,9 +61,6 @@ flake8-module-name = "^0.1.5"
6061
flake8-bugbear = "^18.2"
6162
flake8-pytest = "^1.3"
6263
pep8-naming = "^0.7.0"
63-
validators = "^0.12.2"
64-
pytest_factoryboy = "^2.0"
65-
pytest-randomly = "^1.2"
6664
mypy = "^0.610.0"
6765
sphinx = "^1.7"
6866
sphinx-autodoc-typehints = "^1.3"

tests/fixtures/noqa.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,24 @@
44
This file contains all possible errors.
55
"""
66

7+
from __future__ import print_function # noqa: Z102
78
from .version import get_version # noqa: Z100
89
def some():
910
from my_module import some_function # noqa: Z101
1011

1112

12-
del {'a': 1}['a'] # noqa: Z102
13-
raise # noqa: Z103
14-
raise NotImplemented # noqa: Z104
15-
hasattr(object, 'some') # noqa: Z105
16-
value = 1 # noqa: Z106
17-
x = 2 # noqa: Z107
18-
__private = 3 # noqa: Z108
19-
__author__ = 'Nikita Sobolev' # noqa: Z109
13+
del {'a': 1}['a'] # noqa: Z110
14+
raise # noqa: Z111
15+
raise NotImplemented # noqa: Z112
16+
hasattr(object, 'some') # noqa: Z113
17+
value = 1 # noqa: Z114
18+
x = 2 # noqa: Z115
19+
__private = 3 # noqa: Z116
20+
__author__ = 'Nikita Sobolev' # noqa: Z117
2021

22+
23+
class BadClass: # noqa: Z302
24+
@staticmethod # noqa: Z300
25+
def some_static(): ...
26+
27+
def __del__(self, *args, **kwargs): ... # noqa: Z301

tests/test_checkers/test_noqa.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ def test_noqa_fixture(absolute_path):
2626
)
2727
stdout, _ = process.communicate()
2828

29+
print(stdout)
2930
assert stdout.count(b'Z') == 0

tests/test_checkers/test_wrong_variable.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def test_wrong_variables_in_fixture(absolute_path):
1313
)
1414
stdout, _ = process.communicate()
1515

16-
assert stdout.count(b'Z106') == 12
17-
assert stdout.count(b'Z107') == 6
18-
assert stdout.count(b'Z108') == 1
19-
assert stdout.count(b'Z109') == 1
16+
assert stdout.count(b'Z114') == 12
17+
assert stdout.count(b'Z115') == 6
18+
assert stdout.count(b'Z116') == 1
19+
assert stdout.count(b'Z117') == 1
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import pytest
4+
5+
from wemake_python_styleguide.visitors.wrong_class import (
6+
RequiredBaseClassViolation,
7+
WrongClassVisitor,
8+
)
9+
10+
11+
def test_wrong_base_class(assert_errors, parse_ast_tree):
12+
"""Testing that not using explicit base class with forbiden."""
13+
tree = parse_ast_tree("""
14+
class WithoutBase: ...
15+
""")
16+
17+
visiter = WrongClassVisitor()
18+
visiter.visit(tree)
19+
20+
assert_errors(visiter, [RequiredBaseClassViolation])
21+
22+
23+
@pytest.mark.parametrize('base', [
24+
'object',
25+
'dict',
26+
'CustomClass',
27+
'Multiple, Classes, Mixins',
28+
'Custom, keyword=1',
29+
])
30+
def test_regular_base_classes(assert_errors, parse_ast_tree, base):
31+
"""Testing that regular base classes work."""
32+
tree = parse_ast_tree("""
33+
class Example({0}): ...
34+
""".format(base))
35+
36+
visiter = WrongClassVisitor()
37+
visiter.visit(tree)
38+
39+
assert_errors(visiter, [])
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import pytest
4+
5+
from wemake_python_styleguide.constants import BAD_MAGIC_METHODS
6+
from wemake_python_styleguide.visitors.wrong_class import (
7+
BadMagicMethodViolation,
8+
WrongClassVisitor,
9+
)
10+
11+
magic_method = """
12+
class Example(object):
13+
def {0}(): ...
14+
"""
15+
16+
17+
@pytest.mark.parametrize('method', BAD_MAGIC_METHODS)
18+
def test_wrong_magic_used(assert_errors, parse_ast_tree, method):
19+
"""Testing that some magic methods are restricted."""
20+
tree = parse_ast_tree(magic_method.format(method))
21+
22+
visiter = WrongClassVisitor()
23+
visiter.visit(tree)
24+
25+
assert_errors(visiter, [BadMagicMethodViolation])
26+
27+
28+
@pytest.mark.parametrize('method', [
29+
'__add__',
30+
'__init__',
31+
'next',
32+
'regular',
33+
])
34+
def test_regular_method_used(assert_errors, parse_ast_tree, method):
35+
"""Testing that other methods are working fine."""
36+
tree = parse_ast_tree(magic_method.format(method))
37+
38+
visiter = WrongClassVisitor()
39+
visiter.visit(tree)
40+
41+
assert_errors(visiter, [])

0 commit comments

Comments
 (0)