Как принудительно использовать синтаксис Python при предварительной фиксации?
Как принудительно присвоить имена переменным и функциям и следовать стилю Python PEP8 в git pre-commit?
Я работаю в проекте Django и хочу заставить разработчиков писать код в соответствии со стилем PEP 8 для переменных и функций, не допуская CamelCase
в имени переменной, подобном этому пример:
class MyModel(models.Model):
roomName = models.CharField()
roomNumber = models.CharField()
То есть, я бы хотел, чтобы git принудительно придал этому объявлению следующий синтаксис:
class MyModel(models.Model):
room_name = models.CharField()
room_number = models.CharField()
В случае функций, вместо:
def checkRules()...
это было бы что-то вроде:
def check_rules()...
У меня есть это .pre-commit-config.yaml
, но передается какой-то плохой код, и если мы сможем применить хорошую практику в предварительной фиксации, это было бы здорово.
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: check-added-large-files
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/psf/black
rev: 24.4.2
hooks:
- id: black
args: ["--line-length", "120"]
- repo: https://github.com/PyCQA/flake8
rev: 7.1.0
hooks:
- id: flake8
additional_dependencies: []
- repo: https://github.com/pycqa/isort
rev: 5.13.2
hooks:
- id: isort
args: ['--order-by-type', "--profile", "black", "--filter-files"]
name: isort (python)
- id: isort
name: isort (cython)
types: [cython]
- id: isort
name: isort (pyi)
types: [pyi]
Ниже приведена базовая конфигурация, которую я использую в нескольких своих репозиториях.
Вы можете запустить команду pre-commit run --all-files
, чтобы проверить форматирование файла внутри проекта. Чтобы автоматически запускать ее при каждой фиксации, установите ее как git-хук с pre-commit install
.
Пример для .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: check-added-large-files
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- id: check-json
- id: debug-statements
- id: detect-private-key
- id: requirements-txt-fixer
- repo: https://github.com/psf/black
rev: 24.4.2
hooks:
- id: black
args: ["--line-length", "120"]
- repo: https://github.com/pycqa/flake8
rev: 7.1.0
hooks:
- id: flake8
additional_dependencies:
- flake8-naming
- flake8-django
- repo: https://github.com/pycqa/isort
rev: 5.13.2
hooks:
- id: isort
Пример для .flake8
[flake8]
max-line-length = 120
exclude = migrations, .venv, .git, __pycache__
format = pylint
Пример для .github/workflows/pre-commit.yml
name: Run pre-commit checks
on:
push:
branches:
- main
pull_request:
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install dependencies
run: |
pip install pre-commit
pre-commit install
- name: Run pre-commit
run: pre-commit run --all-files
ПРИМЕЧАНИЕ: Вам нужно добавить pre-commit
библиотеку в соответствии с вашими требованиями.
ПРИМЕЧАНИЕ: Для HTML-шаблонов Django и форматирования CSS я использую djlint
вручную.