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
170
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
200
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
180
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
73
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
68
Дотянуться до кремния. HighLoad Python: SIMD, GPU – Пётр Андреев, PythoNN
sobolevn
0
75
Проектирование — это когда чувствуешь, а не какие-то там циферки, Николай Хитров, PythoNN
sobolevn
0
110
Continuous profiling, Давид Джалаев, PythoNN
sobolevn
0
120
Михаил Гурбанов – Are you NATS? @ PythoNN
sobolevn
0
150
Дмитрий Бровкин – Почему исправление опечаток сложнее, чем кажется, и как мы с этим српавляемся @ PythoNN
sobolevn
0
55
Other Decks in Programming
See All in Programming
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
6k
Fluid Templating in TYPO3 14
s2b
0
130
今から始めるClaude Code超入門
448jp
7
8.5k
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
640
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
0
910
CSC307 Lecture 01
javiergs
PRO
0
690
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
970
Architectural Extensions
denyspoltorak
0
270
CSC307 Lecture 08
javiergs
PRO
0
670
CSC307 Lecture 09
javiergs
PRO
1
830
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
CSC307 Lecture 06
javiergs
PRO
0
680
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
54
Testing 201, or: Great Expectations
jmmastey
46
8k
The Pragmatic Product Professional
lauravandoore
37
7.1k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
96
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
290
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
430
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Skip the Path - Find Your Career Trail
mkilby
0
53
Context Engineering - Making Every Token Count
addyosmani
9
650
The Invisible Side of Design
smashingmag
302
51k
Making Projects Easy
brettharned
120
6.6k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
110
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