81 lines
2.9 KiB
Markdown
81 lines
2.9 KiB
Markdown
# BSN Coding Standards — Fundament-Plan
|
|
|
|
> **Für Hermes:** Direkt umsetzen, keine Subagents nötig — kompaktes Setup.
|
|
|
|
**Ziel:** Verbindliche Coding-Standards für das BSN-Community-Projekt, automatisch durchgesetzt durch Tooling.
|
|
|
|
**Architektur:** Drei-Schichten-Modell:
|
|
1. **Regelwerk** (`CODING_STANDARDS.md`) — Deutsche Dokumentation, menschenlesbar
|
|
2. **Konfiguration** (`pyproject.toml`) — Ruff (Linter+Formatter), mypy, pytest
|
|
3. **Durchsetzung** (`.pre-commit-config.yaml`) — Automatische Prüfung vor jedem Commit
|
|
|
|
**Tech Stack:** Ruff 0.11+, mypy 1.15+, pytest 8+, pre-commit 4+
|
|
|
|
---
|
|
|
|
## Recherche-Ergebnisse (Stand Juni 2026)
|
|
|
|
### Konsens der Python-Community
|
|
- **Ruff** hat Black + isort + Flake8 + pyupgrade + Bandit nahezu vollständig abgelöst
|
|
- **mypy** bleibt der Standard für statische Typ-Prüfung
|
|
- **pyproject.toml** ist der zentrale Konfigurationspunkt (PEP 621)
|
|
- **pre-commit** ist der De-facto-Standard für Git-Hooks
|
|
- Line-Length: 88 (Black-Default) oder 100 (moderner Konsens für Web-Apps)
|
|
|
|
### Für Flask-Webprojekte spezifisch
|
|
- Routes schlank halten (nur Request-Handling, keine Business-Logik)
|
|
- `@app.route()` immer mit expliziten `methods=[...]`
|
|
- Niemals `request.args` für POST-Daten verwenden
|
|
- Immer `send_file()` mit korrektem mimetype
|
|
- Secrets nie im Code — immer über Environment Variables
|
|
|
|
---
|
|
|
|
## Aufgaben
|
|
|
|
### Task 1: CODING_STANDARDS.md schreiben
|
|
**Datei:** `CODING_STANDARDS.md` (Projekt-Root)
|
|
|
|
Deutsches Regelwerk mit folgenden Abschnitten:
|
|
1. Allgemeine Prinzipien (Lesbarkeit, Konsistenz, Zen of Python)
|
|
2. Code-Stil (PEP 8, Zeilenlänge 100, Quotes, Imports)
|
|
3. Typ-Annotationen (immer, strict, `Optional` statt `| None` für Python <3.10)
|
|
4. Namenskonventionen (snake_case, PascalCase, UPPER_CASE)
|
|
5. Kommentare & Docstrings (Deutsch, Google-Style)
|
|
6. Projektstruktur (keine God-Files, max 500 Zeilen/Modul)
|
|
7. Sicherheit (keine Secrets, Input-Validierung, SQL-Injection)
|
|
8. Testing (pytest, 80% Coverage, TDD)
|
|
9. Flask-spezifische Regeln
|
|
10. Git-Commit-Regeln (Conventional Commits)
|
|
|
|
### Task 2: pyproject.toml erstellen
|
|
**Datei:** `pyproject.toml` (Projekt-Root)
|
|
|
|
```toml
|
|
[build-system]
|
|
[tool.ruff] — line-length=100, target-version=py313
|
|
[tool.ruff.lint] — Alle kritischen Rules aktiv
|
|
[tool.ruff.format] — quote-style="double"
|
|
[tool.mypy] — strict=true
|
|
[tool.pytest.ini_options] — testpaths, coverage
|
|
[tool.bandit] — Sicherheits-Scans
|
|
```
|
|
|
|
### Task 3: .pre-commit-config.yaml erstellen
|
|
**Datei:** `.pre-commit-config.yaml` (Projekt-Root)
|
|
|
|
Hooks: ruff (lint+format), mypy, Bandit, check-added-large-files, check-merge-conflict, trailing-whitespace
|
|
|
|
### Task 4: Committen
|
|
```bash
|
|
git add CODING_STANDARDS.md pyproject.toml .pre-commit-config.yaml
|
|
git commit -m "feat: coding standards fundament — Ruff + mypy + pre-commit"
|
|
```
|
|
|
|
---
|
|
|
|
## Verifikation
|
|
- `ruff check .` findet keine unerwünschten Issues
|
|
- `mypy .` läuft ohne Fehler (auf neuem Code)
|
|
- `pre-commit run --all-files` läuft durch
|