Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Problems of static analysis in Python
Search
Sobolev Nikita
June 13, 2021
Programming
0
150
Problems of static analysis in Python
Sobolev Nikita
June 13, 2021
Tweet
Share
More Decks by Sobolev Nikita
See All by Sobolev Nikita
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
170
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
150
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
57
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
48
Дотянуться до кремния. HighLoad Python: SIMD, GPU – Пётр Андреев, PythoNN
sobolevn
0
57
Проектирование — это когда чувствуешь, а не какие-то там циферки, Николай Хитров, PythoNN
sobolevn
0
77
Continuous profiling, Давид Джалаев, PythoNN
sobolevn
0
75
Михаил Гурбанов – Are you NATS? @ PythoNN
sobolevn
0
75
Дмитрий Бровкин – Почему исправление опечаток сложнее, чем кажется, и как мы с этим српавляемся @ PythoNN
sobolevn
0
44
Other Decks in Programming
See All in Programming
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
14
46k
Google Opalで使える37のライブラリ
mickey_kubo
3
150
スマホから Youtube Shortsを見られないようにする
lemolatoon
27
34k
Devoxx BE - Local Development in the AI Era
kdubois
0
140
CSC509 Lecture 06
javiergs
PRO
0
270
AI Agent 時代的開發者生存指南
eddie
4
2.1k
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
650
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
490
One Enishi After Another
snoozer05
PRO
0
160
オープンソースソフトウェアへの解像度🔬
utam0k
17
3.1k
Ktorで簡単AIアプリケーション
tsukakei
0
110
Developer Joy - The New Paradigm
hollycummins
1
370
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
620
Git: the NoSQL Database
bkeepers
PRO
431
66k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Site-Speed That Sticks
csswizardry
13
930
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
A designer walks into a library…
pauljervisheath
209
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Transcript
Никита Соболев github.com/sobolevn
>_ X Проблемы статических анализаторов в Python
Мы живем в уникальное время
Проблемы накопились!
Цель: мотивировать вас присоединиться к разработке инструментов будущего
Важно! Пользоваться текущими инструментами все равно полезно
>_ X Карта текущих решений
Flake8 Плагины
Flake8 Плагины pylint Плагины
Flake8 Плагины pylint Плагины mypy Плагины
Flake8 Плагины pylint Плагины mypy Плагины pylance
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
autopep8
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
autopep8 fixit
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
autopep8 fixit yapf
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
autopep8 fixit yapf pyupgrade
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
autopep8 fixit yapf pyupgrade Линтеры
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
autopep8 fixit yapf pyupgrade Тайпчекеры Линтеры
Flake8 Плагины pylint Плагины mypy Плагины pylance pytype pyre-check black
autopep8 fixit yapf pyupgrade Тайпчекеры Линтеры Авто-форматеры
>_ X Что лежит в основе?
ast = abstract syntax tree
print(name_with_meaning, second_name_with_meaning, third) 24
<_ast.Module> ┗━ body ┣━ [0] <_ast.Expr> ┃ ┗━ value: <_ast.Call>
┃ ┣━ args ┃ ┃ ┣━ [0] <_ast.Name> ┃ ┃ ┃ ┗━ id: first_long_name_with_meaning ┃ ┃ ┣━ [1] <_ast.Name> ┃ ┃ ┃ ┗━ id: second_very_long_name_with_meaning ┃ ┃ ┗━ [2] <_ast.Name> ┃ ┃ ┗━ id: third ┃ ┗━ func: <_ast.Name> ┃ ┗━ id: print 25
Используется > Почти во всех линтерах для анализа кода
Проблемы
Проблемы > Неконсистентность между версиями Python
Проблемы > Неконсистентность между версиями Python > Нет информации о
типах
Проблемы > Неконсистентность между версиями Python > Нет информации о
типах > Нет нюансов синтаксиса
Проблемы > Неконсистентность между версиями Python > Нет информации о
типах > Нет нюансов синтаксиса > Нет комментариев
tokenize
29 print("test", a, b)
None
Используется
Используется > Для проверки нюансов синтаксиса
Используется > Для проверки нюансов синтаксиса > Для авто-форматирования в
некоторых инструментах
Проблемы
Проблемы > Представляет собой не "структуру", а простой список
Проблемы > Представляет собой не "структуру", а простой список >
Вообще ничего не знает / не умеет
Проблемы > Представляет собой не "структуру", а простой список >
Вообще ничего не знает / не умеет > Очень сложен в работе для правил с хоть какой-то логикой
libcst = Concrete Syntax Tree
Используется
Используется > В инфраструктуре Инстаграма
Используется > В инфраструктуре Инстаграма > Во многих новых библиотеках
для авто-форматирования
Используется > В инфраструктуре Инстаграма > Во многих новых библиотеках
для авто-форматирования > Для проверки нюансов синтаксиса
Используется > В инфраструктуре Инстаграма > Во многих новых библиотеках
для авто-форматирования > Для проверки нюансов синтаксиса > Для анализа кода
Проблемы
Проблемы > Сбоит на некоторых синтаксических конструкциях Python3.9
Проблемы > Сбоит на некоторых синтаксических конструкциях Python3.9 > Не
работает с Python3.10+
typed-tree* *(такого нет)
Используется
Используется > В любом тайпчекере для представления нашего кода с
типами
Используется > В любом тайпчекере для представления нашего кода с
типами > Для каждого тайпчекера - оно свое
Проблемы
Проблемы > У каждой реализации они свои!
Проблемы > У каждой реализации они свои! > Нет единого
стандарта
Проблемы > У каждой реализации они свои! > Нет единого
стандарта > В каждом тайпчекере поддерживается далеко не все возможности
Проблемы > У каждой реализации они свои! > Нет единого
стандарта > В каждом тайпчекере поддерживается далеко не все возможности > Нигде (кроме mypy) нет возможности подключать плагины
>_ X Пару слов про устаревшие инструменты
Flake8
Flake8 > Примитивная конфигурация
Flake8 > Примитивная конфигурация > Нет типов
Flake8 > Примитивная конфигурация > Нет типов > Невозможно нормально
внедрить
Pylint
Pylint > Примитивная конфигурация
Pylint > Примитивная конфигурация > Нет типов
Pylint > Примитивная конфигурация > Нет типов > Но лучше
бы их совсем не было
Pylint > Примитивная конфигурация > Нет типов > Но лучше
бы их совсем не было > Невозможно нормально внедрить
Black
Black > Супер примитивный
Black > Супер примитивный > Использует lib2to3
>_ X Новые проблемы
Новый парсер / новая грамматика
Аннотации
Pattern Matching
>_ X Так что делать?
typed-linter > Нормальная конфигурация в духе eslint > Провайдеры типов
> Авто-форматирование на токенах > Нормальное внедрение
Есть одно "но" github.com/sobolevn
А пока
Самый строгий линтер в мире github.com/wemake-services/wemake-python-styleguide
sobolevn.me/2019/10/complexity-waterfall 52
Подключайтесь к работе!
sobolevn.me Вопросы? github.com/sobolevn