Skip to content

Commit fbbb2d6

Browse files
committed
mypy change
1 parent b7cfa72 commit fbbb2d6

1 file changed

Lines changed: 8 additions & 9 deletions

File tree

_posts/2026-02-05-mypy-vs-phpstan-ru.markdown

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
---
22
layout: post
33
title: "Mypy vs Phpstan: битва стат анализаторов"
4-
date: 2026-02-05
4+
date: 2026-02-18
55
categories: ru
66
tags: "python php mypy phpstan"
77
---
88

99
## Дисклеймер
10-
Все сказанное ниже валидно для mypy 1.19.1 и phpstan 2.1.37.
10+
Все сказанное ниже валидно для mypy 1.19.1 (дефолтный конфиг) и phpstan 2.1.37 (level: 10).
1111

1212
## Что происходит?
1313
Я собираюсь сравнить два статических анализатора, mypy и phpstan, с точки зрения качества выполнения
@@ -18,7 +18,7 @@ tags: "python php mypy phpstan"
1818
Однако беда этого сравнения в том, что оно
1919
априори некорректно, потому что эти два инструмента используются в двух разных языках
2020
программирования: mypy в python, а phpstan в php. И, получается, они даже не конкуренты.
21-
Но давайте я все же попробую оправдаться, и пояснить за эту дерзость.
21+
Но давайте я все же попробую оправдаться, и пояснить за этот наброс.
2222

2323
Во-первых, это оба си-подобные языки, у которых схожая система примитивных типов. И они даже оба
2424
null-safety.
@@ -34,7 +34,7 @@ len(a)
3434
a = 5
3535
pow(a, 4)
3636
```
37-
валидный, хоть тип переменной и меняется в рантайме.
37+
валидный. Хотя тип переменной меняется в рантайме.
3838

3939
В-третьих, оба языка используют специальные синтаксические конструкции для уточнения типов переменных,
4040
которые исчезают в рантайме. Они позволяют статическому анализатору и IDE разобраться, в чем
@@ -61,8 +61,7 @@ php и python. И я бы даже не взялся писать подобно
6161
или еще где-то.
6262
Здесь же у меня опыт использования двух самых популярных стат анализаторов (по звездочкам на гитхабе) для каждого из языков.
6363

64-
Теперь, когда сова полностью на глобусе, можно переходить к сути. И я буду двигаться от менее
65-
важных, на мой взгляд, кейсов к более фундаментальным.
64+
Теперь, когда сова полностью на глобусе, можно переходить к сути.
6665

6766
## Енумы и литералы
6867

@@ -137,7 +136,7 @@ def accept_enum_return_foo_bar(enum: FooBarBaz) -> FooBarValue:
137136

138137
Таким образом, для каждого подмножества значений енумов нам придется отдельно прописывать новый
139138
тип с литералами, что не улучшает настроение. Конечно я не один такой страдающий тут.
140-
Фича [реквест](https://github.com/python/typing/issues/781) висит уже 5 лет. Но увы.
139+
[Фича-реквест](https://github.com/python/typing/issues/781) висит уже 5 лет. Но увы.
141140

142141
## Literal Widening
143142

@@ -423,10 +422,10 @@ function returnOptInt(): ?int
423422
поведение аналогичное mypy.
424423

425424
В отличие от phpstan разработчики mypy на просьбу добавить возможность маркировать функции чистыми ответили, что
426-
это [сложно](https://github.com/python/mypy/issues/4468). Может и так. Но разработчикам от этого не легче.
425+
это [сложно](https://github.com/python/mypy/issues/4468). Может и так. Но от этого не легче.
427426

428427
## Вывод
429-
Невозможно переоценить значимость статического анализатора для языков вроде php и python. В наши написать
428+
Невозможно переоценить значимость статического анализатора для языков вроде php и python. В наши дни написать
430429
код, лишенный ошибок, без строгой типизации --- что-то из разряда чудес. По крайней мере, в относительно крупных
431430
проектах. Поэтому за последние
432431
10 лет статические анализаторы так прочно вошли в тулсет всех разработчиков.

0 commit comments

Comments
 (0)