3 полезных Python-инструмента для упрощения работы с кодом
Любой разработчик использует те или иные вспомогательные инструменты. Какие-то из них позволяют ускорить процесс, какие-то — избавиться от ошибок, сделать код более понятным. Такие инструменты есть практически в любой сфере разработки.
Престон Бадир (Preston Badeer), Python-программист, поделился набором расширений которые, по его мнению, значительно упрощают и ускоряют кодинг. За 5 лет работы он перепробовал множество инструментов и выделил три наиболее полезных.
Kite: быстрый доступ к документации и автозаполнение на основе ИИ
У большинства IDE есть встроенная функция автозаполнения. Примерно так выглядит процесс работы с ними.
Эти инструменты используют внутреннюю документацию для автоматической подстановки параметров и имен функций. Но что если бы существовал инструмент, который способен помогать не только с именами функций, но и с часто используемыми кусками кода? А еще анализировал данные репозиториев GitHub и предлагал нужные подсказки. Такой инструмент есть. Kite умеет многое, но большинство важных функций можно разделить на три группы.
Smart-подсказки на основе ИИ
Kite изучает кодовую базу, запоминает название переменных, которые часто использует разработчик, имена параметров из интернета и документацию, чтобы выдавать контекстные рекомендации, например:
В примере показано, как Kite предсказывает какие переменные вы будете использовать в зависимости от контекста кода. Вот еще пример работы подсказок:
«Мы потратили большое количество времени на семантическую индексацию всего кода на GitHub, построение статистических выводов и обширных моделей, которые помогают использовать полученную информацию», — комментирует продукт CEO Kite Адам Смит.
Улучшенная работа с документацией
Если коллеги вам никогда не отправляли в рабочем чате «RTFM», значит, вы разработчик, который не допускает ошибок. Но, в любом случае, вы должны сначала ознакомиться с документацией, а затем уже спрашивать коллег о какой-то проблеме или искать ответы на вопросы на Stack Overflow. Чтение документации — важный этап создания программного кода. Более удобным его сделает Kite Copilot, который в режиме реального времени показывает описание подсвеченных курсором объектов и функций.
Ваш код остается с вами на локальном ПК
Kite создан для локальной работы и не отправляет код в облако. Скорость работы подсказок достаточно высокая. Это важно для тех, у кого медленный интернет или работа связана с закрытым/проприетарным кодом.
Я работаю с этим инструментом несколько лет, и он становится только лучше. Опробовать его можно прямо сейчас.
Улучшаем код с Mypy
Python — динамически типизированный язык, что позволяет в любое время сделать любую переменную с любым типом данных. Одна и та же переменная может быть как строкой, так и целым числом или иным типом данных в зависимости от последнего присвоенного значения. Это ускоряет процесс написания кода, когда разработчику не нужно каждый раз вручную назначать тип данных для переменных.
А вот пример языка со статической типизацией, где каждой переменной задается конкретный тип данных, чего необходимо придерживаться в логике:
В динамическом подходе есть и минусы:
Это самый простой пример из целого списка. Если вам нужно больше информации, переходите по ссылке. Кроме того, в документации Mypy есть обширный FAQ.
Быстрый поиск ошибок и написание простых функций с SonarLint
У большинства IDE есть линтеры, статические анализаторы ошибок. Линтер еще до запуска кода может найти ошибку. Это считается статистическим анализом кода.
Но есть еще и динамический анализ, который в фоновом режиме запускает/компилирует код, проверяя правильность его работы. И если что-то идет не так, сообщает о возможной ошибке. Как раз по такому принципу работает бесплатный проект SonarLint.
Закомментированный или неиспользуемый код
Каюсь, бывает, что я оставляю операторы вывода, закомментированный код и неиспользуемые функции по всей кодовой базе. SonarLint предупреждает об этих проблемах, показывая, где что находится. Без SonarLint поиск проблем и отладка может занять многие часы.
Проблемы с безопасностью
У SonarLint есть большая обновляемая база данных с перечнем уязвимостей, которая позволяет плагину вовремя предупреждать разработчика о найденных в коде проблемах.
SonarLint предупреждает о чрезмерном усложнении кода, объясняя суть проблемы. Это может быть, например, слишком большая вложенность операторов if.
В качестве вывода
Небольшое резюме, чтобы не забыть описанные в статье инструменты:
3 инструмента для Python, которые упростят работу с кодом
Авторизуйтесь
3 инструмента для Python, которые упростят работу с кодом
С опытом количество используемых в работе инструментов сокращается, поскольку многие из них вы просто перерастаете. Но такие, как эти, остаются в использовании надолго.
Инструмент 1: ИИ автодополнение и быстрый доступ к документации с Kite
У современных IDE есть встроенное автозаполнение, которое выглядит примерно так:

Встроенный инструмент обычно использует документацию для определения имён и типов возможных функций и параметров. Но что если редактор получит доступ к коду из всех публичных репозиториев GitHub и начнёт подтягивать не просто имена, а целые строки кода? И это реализовано в Kite.
Прим.ред. Такая функциональность доступна в планах Pro и Team. На момент написания материала для плана Pro действует бесплатная бета-версия.
Разберём подробнее особенности Kite — инструмента для Python с функциями умного автодополнения и быстрого доступа к документации.
Умные подсказки
Плагин Kite смотрит в комплексе ваш код, переменные, часто используемые имена параметров, документацию, и только после сбора всех данных рекомендует что-то вроде этого:
Copilot для документации
Прежде чем беспокоить более опытного коллегу или мчаться за ответами на Stack Overflow, почитайте документацию.
Kite Copilot упрощает поиск по документации. Он работает параллельно с IDE и показывает информацию о любых объектах или функциях, на которые наведён курсор.
Работает локально, приватно
Вдобавок ко всему, плагин создан для локальной работы, так что вы получаете быстрые советы, работа происходит в автономном режиме, и ваш код никогда не будет отправлен в облако.
Это крайне важно для людей с плохим интернет-соединением и тех, кто работает с закрытым исходным кодом.
Всё, что нужно сделать, это загрузить и установить плагин Kite для вашего редактора: есть бесплатная версия и Free Beta на Pro план с умным автозаполнением.
Инструмент 2: Статический анализ кода с Mypy
Python — динамически типизированный язык. Это значит, что переменная связывается с типом данных не в момент объявления, а в момент присваивания ей значения. То есть одна и та же переменная может быть и строкой, и целым числом, и каким-либо другим типом в зависимости от последнего присвоенного ей значения.
А вот примеры языков со статической типизацией, где для каждой переменной задан один конкретный тип данных, и в логике кода нужно придерживаться именно его:
Плюсы и минусы динамической типизации
Главное преимущество динамической типизации в том, что вам может быть лень постоянно прописывать типы, и такой язык, как Python, в этом поможет.
А вот недостатков больше:
Статическая типизация в Python
В Python нет статической типизации как таковой, но есть аннотации типов, которые проверяются статическими анализаторами с целью контроля типов переменных.
Обратите внимание на Mypy. Это статический анализатор типов для Python, который позволяет находить ошибки несоответствия типов в коде. Mypy выводит ошибку, если при работе с аннотациями типов значение переменной не соответствует присвоенному ей типу.
Если ваш код работает на проде, и вам важна его устойчивость к ошибкам, связанным с типизацией, используйте инструмент Mypy.
Инструмент 3: Быстрый поиск ошибок и чистый код с SonarLint
Сейчас почти во всех IDE есть линтер — статический анализатор возможных ошибок. Другими словами, он предугадывает ещё до запуска кода, что может пойти не так, и выделяет предполагаемые ошибки.
Python Linter по умолчанию в VS Code
В свою очередь, динамический анализ не предугадывает, а действительно запускает/компилирует части кода, чтобы определить, работает ли он, но делает это автоматически в фоновом режиме. То есть он на самом деле знает, что пойдёт не так в процессе выполнения программы.
SonarLint — это тот самый динамический анализатор кода, который поможет решить следующие проблемы.
Лишний код
Допустим, вы не удалили закомментированные части кода, оставили неиспользуемые функции и прочие рудименты. SonarLint предупредит об этом, и вы сможете своевременно очистить код от всего лишнего.
Уязвимости
Большая обновляемая база данных с перечнем уязвимостей позволяет плагину вовремя предупреждать о любых известных уязвимостях, которые встречаются в вашем коде.
Когнитивная сложность
Подробнее об этом можно прочесть в статье. Если говорить кратко, разработчики плагина создали математическую формулу, которая может оценить, насколько читабелен ваш код.
Это не только полезно, но и просто. Каждый раз, когда SonarLint предупреждает вас о чрезмерной сложности, это сопровождается объяснением правила, которое вы нарушили. Например, «слишком большая вложенность операторов if», более известная как спагетти-код. Удобно, правда?
Плагин SonarLint позволяет использовать лучшие практики и писать понятный чистый код.
Подытожим
Все перечисленные инструменты для Python бесплатны или же поставляются в нескольких вариантах, включающих бесплатный.
Я уже пишу на Python более 5 лет. Примечательно, что при этом мой арсенал инструментов с течением времени не увеличивался, а наоборот уменьшался. Многие из них оказывались необязательными или попросту ненужными, а из некоторых я просто вырастал.
В этой статье я осветил три главных инструмента, к которым привязался основательно. В отличие от остальных, ими я пользуюсь всё активнее.
Kite: пишите код быстрее и реже обращайтесь к Google
Большинство редакторов кода предлагают функцию автоподстановки, которая выглядит примерно так:
Она использует документацию (иногда библиотеку) языка, чтобы предложить вам, например, имена функций или параметров.
Конечно же, это хорошо! Но что, если бы ваш редактор мог просматривать многолетние данные на GitHub и предлагать автоподстановку не только для имён функций, но и для целых строк кода?
Это лишь первая из трёх причин начать использовать Kite.
Причина 1: Подстановка строк кода
Kite просматривает вашу базу кода и переменные, часто используемые в интернете имена параметров, документацию и затем формирует отличные контекстные рекомендации вроде следующей:
Вышеприведённый пример показывает, как Kite может предсказывать используемые переменные даже там, где они названы обобщённо (вроде b ) или в виде распространенных имён (вроде x или y ).
…мы затратили около нескольких лет на семантическое индексирование всего кода с GitHub, создавая статистический вывод типов и богатые статистические модели, углублённо использующие семантическую информацию. — Адам Смит, Основатель и гендиректор Kite.
Вот видео пример работы автоподстановки. При желании вы также можете поиграться с ней в песочнице.
Причина 2: Copilot для документации
Если вас ещё ни разу не посылали… читать документацию, то вы, вероятно, не совершали таких ошибок, как я.
Несмотря на это, вам всегда стоит знакомиться с ней прежде, чем донимать старшего разработчика или даже искать ответы на StackOverflow.
Kite Copilot до смешного упрощает работу с документацией. Он выполняется параллельно с редактором и в режиме реального времени показывает пояснения для любого объекта/функции/и т.д., выделяемых курсором.
Причина 3: выполняется локально и приватно
В добавок к вышесказанному этот инструмент разработан для выполнения локально, так что вы получаете невероятно быструю автоподстановку, возможность работать оффлайн и ваш код никогда не отправляется в облако.
Это особенно актуально для тех, у кого слабый интернет и тех, кто работает с базами закрытого исходного кода.
Всё, что требуется — это загрузить либо плагин Kite для редактора, либо copilot, который сможет установить этот плагин за вас. Доступно здесь.
Mypy: стабилизация кода
Противоположным образом выглядит ситуация в статически типизированных языках, где переменные должны иметь один конкретный тип данных и всегда соответствовать ему.
Плюсы и минусы динамической типизации
Преимущество динамической типизации в том, что она благоволит ленивым. Писать код приходится меньше, благодаря чему может уменьшиться его захламление.
Тем не менее недостатков при этом куда больше и они весьма существенны:
Статическая типизация в Python
Запустите Mypy — бесплатный модуль Python, который позволяет использовать в нём статическую типизацию.
После выполнения pip install mypy можете рассмотреть один пример его использования:
В этом примере мы указываем, что функция возвращает итератор целых чисел. Это простое изменение делает функцию более устойчивой в будущем, поскольку обеспечивает постоянный вывод.
Другим разработчикам достаточно будет взглянуть на объявление, чтобы увидеть, какой тип данных ожидать на выходе. И в отличие от простого использования документации, код выдаст ошибку, если это объявление будет нарушено.
Этот очень простой пример был взят отсюда. Воспользуйтесь приведённой ссылкой, чтобы лучше разобраться в теме.
Сложно перечислить все способы, которыми статическая типизация может избавить вас от мучений с кодом в будущем. Лучше понять это вам поможет документация к Mypy, которая содержит отличный раздел FAQ, где развёрнуто приведены все плюсы и минусы.
Если вы работаете в базе кода продакшена, где стабильность — это основа всего, то определённо стоит попробовать этот инструмент.
Sonarlint: быстрый перехват ошибок и упрощённые функции
На сегодняшний день каждый редактор обеспечивает определённый вид проверки ошибок или линтер. Он просматривает код, как правило, не выполняя его, и пытается угадать, что может пойти не так. Это называется статическим анализом кода.
Динамический анализ кода фактически пытается выполнить/скомпилировать части кода, чтобы увидеть, работает ли он как следует. Однако делает он это на заднем плане автоматически. Вместо угадывания он действительно узнаёт, будет ли код работать и какие конкретные ошибки в нём могут быть.
SonarLint является динамическим анализатором кода в его лучшем виде и даже больше. Вот те возможности, за которые я его обожаю:
Закомментированный или невызыванный код
Я признаю свою вину в неудалении инструкций вывода, закомментированного кода и неиспользуемых функций по всей базе кода. Всё это служит мне предупреждением или напоминанием, помогая также проще ориентироваться и находить то, что нужно.
Угрозы безопасности
Огромная база данных постоянно обновляемых угроз безопасности предоставляется вашей базе кода в реальном времени, предупреждая о любых возможных её уязвимостях.
Угрозы безопасности относятся к той области, которую невозможно заучить, поэтому каждому следует использовать какой-либо инструмент для их отслеживания. SonarLint может стать отличной отправной точкой для выбора такого инструмента.
Никогда не выполняемый код
Несколько отличающийся от невызываемого кода, он предупредит меня, если я создам любые вычисления, которые могут иметь недостижимый результат. Как правило, их очень сложно обнаружить и в итоге можно провести много часов за отладкой. Поэтому такие предупреждения я тоже очень ценю.
Когнитивная сложность
Это удивительная тема, которой я мог бы посвятить отдельную статью. На самом деле по этой теме есть целая книга, правда недоступная в русском варианте.
Её суть в том, что SonarSource разработали математическую формулу, которая может вычислять сложность чтения/понимания кода.
Это не только невероятно полезный, но и очень удобный инструмент. Каждый раз, когда SonarLint просит меня “reduce cognitive complexity” (снизить когнитивную сложность), эта просьба сопровождается пояснением нарушенного правила (например, “too many nested if statements” (слишком много вложенных операторов if)).
Я считаю, что SonarLint более полезный, чем основные методы блокировки и линтинга. Я также убеждён в том, что он помогает мне писать более человеко-ориентированный код (между прочим, на Python).
SonarLint бесплатный, поэтому нет никаких причин откладывать его использование.
Заключение
Если вы сразу промотали до сюда, то должен вас предупредить, что вам будет сложно правильно использовать перечисленные ниже инструменты без базового понимания описанных выше возможностей.
Три секретных оружия:
Надеюсь, эти инструменты сослужат вам добрую службу. Лично я к ним сильно привязался.
Kite: контекстные подсказки и автодополнение при написании кода
Во время написания кода часто приходится открывать Google, искать образцы кода, документацию и подсказки. Разработчики приложения Kite предлагают продвинутое решение — интерактивный «помощник», который в процессе набора кода в фоновом режиме вытягивает контекстную информацию из общедоступных образцов кода в интернете (и из кодовой базы текущего проекта) и показывает на экране в удобном виде.
Kite интегрируется в редактор кода и консоль.
На странице Privacy разработчики Kite объясняют, что весь набранный в программе код отправляется на серверы Kite по https, а компания обещает не использовать его никоим образом. Но всё равно кое у кого такая система вызывает некоторые опасения, ведь даже команды из консоли отправляются им на сервер в полном составе.
Но удобство Kite, наверное, перевешивает потенциальные угрозы безопасности.
Здесь и примеры кода, и документация, и ссылки на наиболее часто задаваемые вопросы.
Kite автоматически фиксирует и предлагает исправить опечатки в коде.
В качестве приятного бонуса — подсказки к командам в консоли.
Приложение Kite поддерживает редакторы Sublime Text, emacs, vim, PyCharm и Atom, а также интегрируется в Terminal.app и iTerm. Все плагины лежат в официальном репозитории.
Самый главный недостаток — пока что Kite поддерживает только Python и работает только под OS X. В ближайшее время разработчики обещают увеличить количество языков и добавить поддержку Linux и Windows. Это необходимо сделать как можно быстрее!
Welcome to the Future of Programming
Have you ever wished you could code without having to worry about memorizing function calls and other basic syntax?
We’re using the latest developments in machine learning to offload the repetitive parts of programming.
Kite’s powerful editor integrations allow you to work uninterrupted on the same screen. Need to see examples and documentation? All the information from Kite’s Python documentation is available right in the editor copilot — no web browser needed.
Everyone knows that programming is central to the future as every industry becomes transformed by software. We imagine a world where machine learning allows everyone to become a programmer — our smart completions are the first step to achieving that vision.
“Kite’s engineering team of MIT and Stanford alumni possesses the technical chops to pull off artificial intelligence in the cloud for the most critical of audiences: developers.”
Dan Scholnick General Partner, Trinity Ventures.
Product Values
Respectful
Respectful of your current workflow; integrates with your favorite coding environment
Efficient
Blazingly fast, flat learning curve, effective hardware resource utilization, small display footprint
Authoritative
Highly accurate completions and consistent UX mean users can depend on Kite
Thoughtful
Purposeful recommendations that keep the user in control of their dev environment











