Как принудительно использовать синтаксис 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 вручную.

Вернуться на верх