21-го июня 2022 года Github Copilot, до этого около года находившийся в бете, стал доступен для разработчиков со всего мира. Напомню, что это система, работающая на алгоритме openAI Codex, призвана облегчить жизнь разработчиков, дописывая за них рутинный код. На момент выхода предлагается 60-ти дневный триал, а далее подписка за 10 долларов в месяц.
В день выхода я установил соответствующий плагин в VS Code и приступил к тестированию. Боевое крещение второй пилот прошёл на Flutter проекте. Разработчики заявляют, что лучше всего Copilot работает на C++, JS и Python. Однако, это не помешало тестированию, ведь он поддерживает великое множество других языков и фреймворков.
Тест №1. Проверка синтакиса
Первой задачей стало перенести из фигмы caption шрифт. В файле уже были заданы другие шрифты. Достаточно было написать «static const caption» и помощник предложил продолжение.

К сожалению, он не угадал шрифт (в приложении использовалось всего 2 шрифта). Однако код был синтаксически верным. Это важный момент, т. к. мне уже приходилось работать с помощником Tabnine и он работал по совсем другому принципу. Tabnine учится на коде именно вашего проекта и предлагает бойлерплейты, основываясь на самых частых повторениях, игнорируя синтаксис и контекст.
Тест №2. Примитивная архитектура
Второй задачей стало нписать кнопку повторной отправки смс кода для экрана авторизации. Требовалось сделать ей 2 состояния: "разрешена отправка", "ожидание таймера".
Руками был написан следующий код:
"""
abstract class ResendButtonState {
const ResendButtonState();
}
class ResendButtonStateWaiting
"""
Продолжение предложил ИИ:

Допишем оставшийся функционал. Мне в наследство досталась функция таймера для этой кнопки. Однако, она не знала о состояниях кнопки.
На 57-ой строке было достаточно написать "state = ResendButtonStateW", чтобы помощник развил идею. А на 62-ой потребовалось лишь лаконичное "state = ", и плагин доделал установку состояния готовности кнопки.

Тест 3. Понимание файловой структуры
В проекте используется пакет auto_route. Соответственно имеется файл с рутами и отдельно файл с их именами.
Я написал файл-болванку, где создал пустой виджет HomePage. Далее открыл файл с рутами и написал "Au", после чего Copilot предложил то, что указано на скриншоте ниже.


Тест 4. Продвинутая архитектура
Была реализована страница с анкетой (несколько текстовых полей для заполнения и отправки на сервер). Нужно было организовать архитекутуру, которая бы реализовала валидацию полей и привязала к ней стейт кнопки отправки, чтобы кнопка была неактивна, пока поля не прошли валидацию. В проекте используется стейт менеджер riverpod. Гайд риверпода предлагает combining providers в таких случаях.
Однако, если начав делать по гайду, я увидел, что Copilot молчит. Тогда в классе виджета submit кнопки я создал функцию checkInputs и предоставил поработать ИИ.


Тест 5. Работа с языками
Во 2-м примере мы рассмотрели работу с кнопкой повторной отправки смс.
Любопытно, что начав описывать build метод, я получил подсказку, которая прекрасно отражала результат, который мне был нужен. Удивительно, что текст кнопки был на русском!

Вывод
В течение одного рабочего дня я активно тестировал Github Copilot и уже готов сделать вывод.
Это совершенно новый уровень автокомплита. Конечно, нельзя сказать, что он обладает разумом и готов быть "вторым пилотом", как следует из его названия. Для примеров в этой статье были выбраны наиболее удачные случаи использования. Тем не менее, он может предсказать простейшую архитектуру, поработать с файловой структурой и ускорить работу с рутинным кодом. Следует также иметь ввиду, что мы рассмотрели его работу на Dart, а этот язык не входит в список рекомендуемых. Можно полагать, что на Python, JS или C++ он работает ещё лучше.
Когда он полезен?
Архитектурные подсказки не всегда появляются и не всегда полезны. Зато если вы написали класс с большим кол-вом переменных, он в один клик создаст большой конструктор. Если вы хотите подключить декоратор Serializable() он сам добавит part '...'. Наконец, он полезен, когда нужно указать какой-нибудь очевидный параметр из enum.
Буду ли я им пользоваться?
Во время бесплатного периода буду пользоваться и активно тестировать. Приятно получить дельную подсказку и избавить себя от описания рутины. Наверное, это технология будет развиваться и предлагать всё более осмысленные и длинные сниппеты кода. Но что дальше? Назревает вопрос: «а может вы ещё и конфеты за меня есть будете»?
