Repository navigation
Expand file tree
/
Copy pathphpstan.neon
More file actions
128 lines (121 loc) · 4.96 KB
/
Copy pathphpstan.neon
File metadata and controls
128 lines (121 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# =====================================================================
# RiskOps - Statik çözümleme (PHPStan)
#
# Çalıştırma:
# composer stan
#
# NEDEN ÇERÇEVESİZ BİR PROJEDE DAHA DEĞERLİ
# -----------------------------------------
# Laravel ya da Symfony kullanan bir projede tip güvencesinin bir
# kısmını çerçeve verir: container tipli nesne döndürür, ORM entity
# sınıfı üretir. Burada öyle bir güvence yok - db() düz PDO döndürüyor,
# fetch() dizi döndürüyor, ne içerdiğini yalnızca sorguya bakarak
# bilebiliyorsunuz. PHPStan bu boşluğun bir kısmını dolduruyor.
#
# İLK KOŞUSUNDA BULDUĞU GERÇEK HATA
# ---------------------------------
# due_date_cell() iki parametre alıyordu, dört risk ekranı ise ÜÇ
# argümanla çağırıyordu. PHP fazla argümanı sessizce atar; termini
# geçmiş "Under Review" bir risk dört ekranda da gecikmiş
# görünmüyordu. Gözle fark edilmemişti.
# Bkz. tests/Unit/DueDateCellTest.php
#
# SEVİYE 5 VE TEMEL ÇİZGİ OLMAMASI
# --------------------------------
# Kod tabanı PHPStan olmadan yazıldı; ilk koşuda seviye 5'te 110 bulgu
# çıktı. Alışılmış çözüm bir TEMEL ÇİZGİ (baseline) üretip hepsini
# dondurmaktır. Burada gerek kalmadı:
#
# 110 -> 37 dynamicConstantNames (aşağıda): bulguların çoğu
# sahteydi, ön yükleyici sabitleri değişmez sanıyordu
# 37 -> 12 parçalara @var sözleşmesi yazıldı, üç gerçek hata
# düzeltildi (biri gerçek bir kusurdu: due_date_cell)
# 12 -> 0 tools/ altındaki doğrulama betiklerinde "her zaman
# doğru" uyarıları gerekçeli olarak yok sayıldı
#
# Yani BORÇ YOK: her bulgu ya düzeltildi ya da neden yok sayıldığı
# yazıldı. Seviye buradan kademeli yükseltilecek - her yükseltme kendi
# commit'inde, kendi düzeltmeleriyle.
#
# Seviye 8'de duruldu. Seviye 9 mixed kullanımını tamamen yasaklıyor
# (830 bulgu): veritabanı satırları mixed taşıyor ve her erişimi
# is_string/is_int ile sarmalamak, okunurluğu kazandırdığı güvenceden
# fazla götürürdü. Gerekçe ADR-0012'de.
# =====================================================================
parameters:
level: 8
paths:
- includes
- admin
- auth
- actions
- api
- assessments
- dashboard
- discussion
- profile
- reports
- risks
- tools
- tests
excludePaths:
analyse:
- vendor
- storage
- assets/vendor
# Docker açılış betikleri tek başına çalışır, uygulama
# sabitlerini görmez; statik çözümleme burada anlamsız.
- docker
# Uygulama PROSEDÜREL ve bootstrap ile açılıyor. PHPStan'in
# sabitleri ve global fonksiyonları görebilmesi için aynı dosyayı
# yüklemesi gerekiyor - testlerin kullandığı VERİTABANISIZ
# ön yükleyiciyi kullanıyoruz ki çözümleme sırasında bağlantı
# kurulmasın.
bootstrapFiles:
- tests/bootstrap-unit.php
# ÖN YÜKLEYİCİNİN YAN ETKİSİ VE ÇÖZÜMÜ
# ------------------------------------
# bootstrapFiles config.php'yi GERÇEKTEN çalıştırıyor. Sonuç:
# PHPStan APP_ENV'i 'development' sabit değeri olarak görüyor ve
# `APP_ENV === 'production'` karşılaştırmalarını "her zaman false"
# diye işaretliyordu - 60'tan fazla sahte bulgu.
#
# Bu sabitler çalışma zamanında ORTAM DEĞİŞKENİNDEN geliyor; değeri
# çözümleme anındaki değer değil. dynamicConstantNames bunu söyler.
dynamicConstantNames:
- APP_ENV
- APP_DEBUG
- APP_DEBUG_FROM_ENV
- APP_DEBUG_FROM_PANEL
- APP_DEMO
- DEBUG_LOG_ONLY_SLOW
- BASE_PATH
treatPhpDocTypesAsCertain: false
# -----------------------------------------------------------------
# TEST BETİKLERİNDEKİ "HER ZAMAN DOĞRU" UYARILARI
#
# tools/ altındaki betikler birer doğrulama koşucusu:
# ck('tablo sayısı', count($tables) === 14);
# exit($fail === 0 ? 0 : 1);
#
# PHPStan bu karşılaştırmaların sonucunu sabit olarak çıkarabiliyor
# ve "her zaman doğru" diyor. Teknik olarak haklı - ama bir testin
# iddiası tam da böyle görünür. Bu uyarıları düzeltmek, testi
# PHPStan'i memnun etmek için bozmak olurdu.
#
# YALNIZCA tools/ İÇİN geçerli. Uygulama kodunda aynı uyarı gerçek
# bir mantık hatasına işaret eder ve orada açık kalır.
# -----------------------------------------------------------------
ignoreErrors:
-
identifier: identical.alwaysTrue
path: tools/*
-
identifier: greater.alwaysFalse
path: tools/*
-
identifier: greaterOrEqual.alwaysTrue
path: tools/*
-
identifier: instanceof.alwaysTrue
path: tools/*