![](https://habrastorage.org/webt/cf/u6/6h/cfu66hsbnbaysmvi6pajoiake44.png)
Любой разработчик использует те или иные вспомогательные инструменты. Какие-то из них позволяют ускорить процесс, какие-то — избавиться от ошибок, сделать код более понятным. Такие инструменты есть практически в любой сфере разработки.
Престон Бадир (Preston Badeer), Python-программист, поделился набором расширений которые, по его мнению, значительно упрощают и ускоряют кодинг. За 5 лет работы он перепробовал множество инструментов и выделил три наиболее полезных.
Kite: быстрый доступ к документации и автозаполнение на основе ИИ
У большинства IDE есть встроенная функция автозаполнения. Примерно так выглядит процесс работы с ними.
![](https://habrastorage.org/getpro/habr/post_images/cdd/a7f/361/cdda7f36152fa9442d489d1072a827e9.gif)
Эти инструменты используют внутреннюю документацию для автоматической подстановки параметров и имен функций. Но что если бы существовал инструмент, который способен помогать не только с именами функций, но и с часто используемыми кусками кода? А еще анализировал данные репозиториев GitHub и предлагал нужные подсказки. Такой инструмент есть. Kite умеет многое, но большинство важных функций можно разделить на три группы.
Smart-подсказки на основе ИИ
Kite изучает кодовую базу, запоминает название переменных, которые часто использует разработчик, имена параметров из интернета и документацию, чтобы выдавать контекстные рекомендации, например:
![](https://habrastorage.org/getpro/habr/post_images/699/29c/b2c/69929cb2c7deaf887102b537cd75ad84.png)
В примере показано, как Kite предсказывает какие переменные вы будете использовать в зависимости от контекста кода. Вот еще пример работы подсказок:
«Мы потратили большое количество времени на семантическую индексацию всего кода на GitHub, построение статистических выводов и обширных моделей, которые помогают использовать полученную информацию», — комментирует продукт CEO Kite Адам Смит.
Улучшенная работа с документацией
Если коллеги вам никогда не отправляли в рабочем чате «RTFM», значит, вы разработчик, который не допускает ошибок. Но, в любом случае, вы должны сначала ознакомиться с документацией, а затем уже спрашивать коллег о какой-то проблеме или искать ответы на вопросы на Stack Overflow. Чтение документации — важный этап создания программного кода. Более удобным его сделает Kite Copilot, который в режиме реального времени показывает описание подсвеченных курсором объектов и функций.
![](https://habrastorage.org/getpro/habr/post_images/485/d52/930/485d52930dab82ef88d9ec9750b51fe0.png)
Ваш код остается с вами на локальном ПК
Kite создан для локальной работы и не отправляет код в облако. Скорость работы подсказок достаточно высокая. Это важно для тех, у кого медленный интернет или работа связана с закрытым/проприетарным кодом.
Я работаю с этим инструментом несколько лет, и он становится только лучше. Опробовать его можно прямо сейчас.
Улучшаем код с Mypy
Python — динамически типизированный язык, что позволяет в любое время сделать любую переменную с любым типом данных. Одна и та же переменная может быть как строкой, так и целым числом или иным типом данных в зависимости от последнего присвоенного значения. Это ускоряет процесс написания кода, когда разработчику не нужно каждый раз вручную назначать тип данных для переменных.
# These two variable types are declared the exact same way
# Python figures out the data type on it's own, dynamically
# string
var_name = "string here"
# integer
var_name = 1234
А вот пример языка со статической типизацией, где каждой переменной задается конкретный тип данных, чего необходимо придерживаться в логике:
# Many languages require the data type to be declared too
# string
str var_name = "string here"
# integer
int var_name = 1234
В динамическом подходе есть и минусы:
- К концу процесса разработки повышается риск столкнуться с ошибками, так что придется переписывать какие-то части кода.
- Из-за постоянного вычисления типов код работает медленнее.
- Из-за динамической типизации код становится небезопасным, так как у функции на входе и выходе могут быть разные типы данных у одной и той же переменной.
- Читать динамический код сложнее, поскольку другой разработчик не может быть на 100% уверен в том, что объявленная ранее переменная не изменит тип.
Бесплатный инструмент Mypy внедряет статическую типизацию в код. Он позволяет находить ошибки несоответствия типов в коде. Если обнаружено несоответствие значение переменной присвоенному типу, выводится ошибка.
# Declaring a function using normal dynamic typing, without mypy
def iter_primes():
# code here#
Declaring the same function with mypy static typing
from typing import Iterator
def iter_primes() -> Iterator[int]:
# code here
Это самый простой пример из целого списка. Если вам нужно больше информации, переходите по ссылке. Кроме того, в документации Mypy есть обширный FAQ.
Быстрый поиск ошибок и написание простых функций с SonarLint
У большинства IDE есть линтеры, статические анализаторы ошибок. Линтер еще до запуска кода может найти ошибку. Это считается статистическим анализом кода.
![](https://habrastorage.org/getpro/habr/post_images/9ca/dc6/61f/9cadc661fc8205e05f11127affeba3f9.png)
Но есть еще и динамический анализ, который в фоновом режиме запускает/компилирует код, проверяя правильность его работы. И если что-то идет не так, сообщает о возможной ошибке. Как раз по такому принципу работает бесплатный проект SonarLint.
Закомментированный или неиспользуемый код
Каюсь, бывает, что я оставляю операторы вывода, закомментированный код и неиспользуемые функции по всей кодовой базе. SonarLint предупреждает об этих проблемах, показывая, где что находится. Без SonarLint поиск проблем и отладка может занять многие часы.
![](https://habrastorage.org/webt/ij/iq/us/ijiqusjqkahggtnkiv6yz59ejt8.png)
Проблемы с безопасностью
У SonarLint есть большая обновляемая база данных с перечнем уязвимостей, которая позволяет плагину вовремя предупреждать разработчика о найденных в коде проблемах.
Читаемость кода
SonarLint предупреждает о чрезмерном усложнении кода, объясняя суть проблемы. Это может быть, например, слишком большая вложенность операторов if.
В качестве вывода
Небольшое резюме, чтобы не забыть описанные в статье инструменты:
- Пишите код быстрее и гуглите меньше с Kite Copilot и Editor Plugin.
- Сделайте код стабильным с Mypy Python Module.
- Находите ошибки быстрее и пишите читаемый код с SonarLint Editor Plugin.
А какие полезные инструменты для работы с Python используете вы?
![](https://habrastorage.org/webt/1h/dq/mj/1hdqmj1bvguax5hnugdz0ci_jbw.jpeg)