https://github.com/vyahello/flake8-cls-attr-order
🔀 flake8 plugin to check class attributes order (flake8, ast)
https://github.com/vyahello/flake8-cls-attr-order
attribute-order class-order constants-order flake8-plugin
Last synced: about 1 year ago
JSON representation
🔀 flake8 plugin to check class attributes order (flake8, ast)
- Host: GitHub
- URL: https://github.com/vyahello/flake8-cls-attr-order
- Owner: vyahello
- License: mit
- Created: 2022-03-05T17:02:45.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-03-15T22:22:59.000Z (about 4 years ago)
- Last Synced: 2025-03-27T08:45:11.961Z (about 1 year ago)
- Topics: attribute-order, class-order, constants-order, flake8-plugin
- Language: Python
- Homepage: http://vyahello.com/flake8-cls-attr-order
- Size: 133 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README

[](https://www.python.org/)
[](https://coveralls.io/github/vyahello/flake8-cls-attr-order)
[](https://github.com/psf/black)
[](http://flake8.pycqa.org/)
[](https://pycqa.github.io/isort/)
[](LICENSE.md)
[](https://pypi.org/project/flake8-cls-attr-order/)
[](https://pypi.org/project/flake8-cls-attr-order/)
[](https://pypi.python.org/pypi/flake8-cls-attr-order)
[](https://pepy.tech/project/flake8-cls-attr-order)
[](https://www.elegantobjects.org)
# flake8-cls-attr-order
> A flake8 plugin that checks class attributes for the proper alphabetical order.
## Tools
### Production
- python 3.7+
- [flake8](http://flake8.pycqa.org/en/latest/)
### Development
- [black](https://black.readthedocs.io/en/stable/)
- [isort](https://pycqa.github.io/isort)
- [flake8](http://flake8.pycqa.org/en/latest/)
- [pytest](https://docs.pytest.org/en/7.0.x/)
- [bats](https://github.com/bats-core/bats-core)
## Installation
### PYPI
```bash
pip install flake8-cls-attr-order
✨ 🍰 ✨
```
### Source code
```bash
git clone git@github.com:vyahello/flake8-cls-attr-order.git
cd flake8-cls-attr-order
python3 -m venv venv
. venv/bin/activate
pip install -e .
```
## Errors
### Codes
- `CL100` - class name should start with upper case letter.
- `CL101` - wrong class constants order.
- `CL200` - @staticmethod is detected, should be converted to function.
- `CL201` - wrong class methods order. Order should be `@property`, `@classmethod`, `@staticmethod` and instance methods.
### Sample
```python
# cls.py
class foo:
BAR = ()
ABRA = {}
@staticmethod
def smethod(): ...
def bmethod(self): ...
def amethod(self): ...
@property
def pmethod(self): ...
@classmethod
def cmethod(cls): ...
```
```bash
flake8 cls.py
cls.py:1:1: CL100 "foo" class name should start with upper case letter
cls.py:1:1: CL101 wrong "foo" class constants order, should be "ABRA, BAR"
cls.py:1:1: CL201 wrong "foo" class methods order. Comply with @property, @classmethod, @staticmethod, instance methods. Should be "pmethod, cmethod, smethod, amethod, bmethod"
cls.py:6:5: CL200 "smethod" @staticmethod is detected, should be converted to function
```
**[⬆ back to top](#flake8-cls-attr-order)**
## Development notes
### Testing
#### Unit tests
Please run the following script to start plugin unit tests:
```bash
pytest
```
#### Package tests
Please run the following script to start plugin package tests:
```bash
bats test-package.bats
```
### CI
To be able to run code analysis, please execute command below:
```bash
./analyse-source-code.sh
```
### Meta
Author – _Vladimir Yahello_.
Distributed under the `MIT` license. See [license](LICENSE.md) for more information.
You can reach out me at:
* [vyahello@gmail.com](vyahello@gmail.com)
* [https://twitter.com/vyahello](https://twitter.com/vyahello)
* [https://www.linkedin.com/in/volodymyr-yahello-821746127](https://www.linkedin.com/in/volodymyr-yahello-821746127)
### Contributing
I would highly appreciate any contribution and support. If you are interested to add your ideas into project please follow next simple steps:
1. Clone the repository
2. Configure `git` for the first time after cloning with your `name` and `email`
3. `pip install -r requirements.txt` to install all project dependencies
4. `pip install -r requirements-dev.txt` to install all development project dependencies
5. Create your feature branch (git checkout -b feature/fooBar)
6. Commit your changes (git commit -am 'Add some fooBar')
7. Push to the branch (git push origin feature/fooBar)
8. Create a new Pull Request
### What's next
All recent activities and ideas are described at project [issues](https://github.com/vyahello/flake8-cls-attr-order/issues) page.
If you have ideas you want to change/implement please do not hesitate and create an issue.
**[⬆ back to top](#flake8-cls-attr-order)**