Cluster ERP Python kodunu Ruff ile lint eder ve mypy ile katı kipte tip denetiminden geçirir. İki araç da pyproject.toml içinde yapılandırılır, tam sürümlere sabitlenir ve iki yerde çalışır: CI'ın lint işi ve pytest dosyası tests/test_static_quality.py. Bu sayfa ayarları ve komutları listeler. Web JavaScript kodunun CI'da lint kapısı yoktur; başka bir yerde çalıştırılıp çalıştırılmadığı koddan belirlenemedi.
Kapsam ve kaynak¶
- Tanımlandığı yer:
pyproject.toml([tool.mypy],[[tool.mypy.overrides]],[tool.ruff],[tool.ruff.lint],[tool.ruff.lint.per-file-ignores]bölümleri). - Çalıştıran:
.github/workflows/ci.yml(lintişi) vetests/test_static_quality.py. - Sayı: 9 seçili Ruff kural ailesi, 2 yok sayılan kural ve 9 dosya bazlı yok sayma girdisi;
pyproject.toml:123-149üzerinden sayıldı.
Araç sürümleri¶
dev eki iki aracı da sabitler. Bir yorum, sıfır bulgu durumunun bu sürümlere göre ölçüldüğünü ve bir sabitlemeyi yükseltmenin kendi yeniden çalıştırmasıyla bilinçli bir değişiklik olduğunu söyler (pyproject.toml:75-78).
| Araç | Sürüm | Kaynak |
|---|---|---|
| mypy | 1.20.2 |
pyproject.toml:80 |
| Ruff | 0.15.12 |
pyproject.toml:83 |
| pytest | >=8.0.0 |
pyproject.toml:81 |
| pytest-asyncio | >=0.24.0 |
pyproject.toml:82 |
mypy ayarları¶
| Ad | Değer | Anlam | Kaynak |
|---|---|---|---|
strict |
true |
Tüm katı denetimler açıktır | pyproject.toml:100 |
plugins |
pydantic.mypy |
Pydantic modelleri denetleyici tarafından anlaşılır | pyproject.toml:101 |
python_version |
3.12 |
Hedef dil sürümü | pyproject.toml:102 |
geçersiz kılma ignore_missing_imports |
boto3.*, botocore.*, reportlab.* için true |
Bu isteğe bağlı bağımlılıklar tip taslağı içermez; çağrı yerleri Any olarak tiplenir |
pyproject.toml:104-111 |
Ruff ayarları¶
| Ad | Değer | Anlam | Kaynak |
|---|---|---|---|
target-version |
py312 |
Hedef dil sürümü | pyproject.toml:114 |
line-length |
100 |
En fazla satır uzunluğu | pyproject.toml:115 |
select |
E, F, W, I, N, UP, B, A, SIM |
Çalışan kural aileleri | pyproject.toml:123 |
ignore B008 |
yok sayılır | FastAPI Depends(), Query() ve require_permission() çağrılarını argüman varsayılanlarına koyar |
pyproject.toml:125-127 |
ignore N802 |
yok sayılır | Qt geçersiz kılma yöntemleri C++ adlarını korur | pyproject.toml:128-130 |
TCH ailesi bilerek seçilmez. Yorum, kod tabanının açıklamaları çalışma zamanında çözdüğünü (Pydantic v2 modelleri, SQLAlchemy Mapped[], FastAPI rota imzaları) ve import'ları bir TYPE_CHECKING bloğuna taşımanın çözümlemeyi bozacağını açıklar (pyproject.toml:117-122).
Dosya bazlı yok saymalar¶
| Yol | Yok sayılan kural | Verilen gerekçe | Kaynak |
|---|---|---|---|
migrations/** |
E501 |
Göçler uzun satır içi SQL içeren dondurulmuş tarihsel kayıtlardır | pyproject.toml:134-136 |
src/cluster_erp/ai/intent_engine.py |
N806 |
İşlev kapsamında büyük harfli sabitler | pyproject.toml:137-141 |
src/cluster_erp/modules/procurement/mrp/services.py |
N806 |
Aynı gerekçe | pyproject.toml:142 |
src/cluster_erp/server/routes/chat.py |
N806 |
Aynı gerekçe | pyproject.toml:143 |
src/cluster_erp/desktop/modules/procurement/mrp/stock_requirements.py |
N806 |
Aynı gerekçe | pyproject.toml:144 |
src/cluster_erp/desktop/modules/procurement/mrp/time_phased.py |
N806 |
Aynı gerekçe | pyproject.toml:145 |
src/cluster_erp/desktop/widgets/chat/chat_widget.py |
N806 |
Aynı gerekçe | pyproject.toml:146 |
src/cluster_erp/desktop/widgets/generic/field_factory.py |
N815 |
Qt sinyal adları PySide yazımını korur | pyproject.toml:147-148 |
src/cluster_erp/desktop/core/api_worker.py |
N813 |
Aynı gerekçe | pyproject.toml:149 |
Araçların çalıştığı yerler¶
| Yer | Komut | Kapsam | Kaynak |
|---|---|---|---|
CI işi lint |
python -m ruff check src tests |
src, tests |
.github/workflows/ci.yml:51 |
CI işi lint |
python -m mypy src |
Qt istemcisi dahil src |
.github/workflows/ci.yml:52 |
| pytest | ruff check src/ tests/ scripts/ |
src, tests, scripts |
tests/test_static_quality.py:26-35 |
| pytest | mypy src/cluster_erp |
paket | tests/test_static_quality.py:21-23, tests/test_static_quality.py:38-46 |
CI, mypy'den önce masaüstü ekini PySide6==6.8.3 ile kurar; böylece Qt istemcisi bu sürüme göre tip denetiminden geçer (.github/workflows/ci.yml:48-50).
Aynı denetimleri bir iş istasyonunda çalıştırmak için CI komutlarını kullanın:
python -m ruff check src tests
python -m mypy src
Kısıtlar ve doğrulama¶
- Statik kalite testi yalnız yeni bulgularda değil, herhangi bir bulguda başarısız olur. Belge dizesi deponun 2026-08-17'de sıfır Ruff bulgusuna ve 2026-08-18'de sıfır katı mypy bulgusuna ulaştığını kaydeder (
tests/test_static_quality.py:3-10). - mypy alt sürecinin süre sınırı 600 saniye, Ruff alt sürecininki 300 saniyedir (
tests/test_static_quality.py:33,tests/test_static_quality.py:44).
Tutarsızlıklar¶
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.