Ранее в этом месяце мы объявили о выпуске нового анализатора формата, основанного на машинном обучении, в source{d} Lookout, нашей совершенно новой системе автоматизированной проверки кода. source{d} Lookout — это наш первый шаг к полному набору приложений для машинного обучения в коде. Это платформа для разработки и развертывания новых анализаторов кода для вспомогательной проверки кода по запросам на вытягивание GitHub. Анализаторы извлекают выгоду из независимых от языка представлений исходного кода с универсальными абстрактными синтаксическими деревьями (UAST), доступными в source{d} Engine, что позволяет избежать необходимости отдельных шагов синтаксического анализа.
Для получения дополнительной информации об source{d} Lookout и базовой архитектуре вы можете посмотреть видеозапись ниже с нашей последней онлайн-встречи source{d}.
Доступные анализаторы
Это список известных реализованных анализаторов для source{d} Lookout:
Хотя на данный момент доступно лишь несколько анализаторов, мы активно работаем над добавлением новых и приглашаем разработчиков создавать свои собственные анализаторы на основе их собственных сценариев использования. Вот краткое руководство по созданию собственного анализатора source{d} Lookout.
Реализация собственного анализатора
Краткое описание того, что такое анализатор, можно найти в документации source{d} Lookout Analyzers. Пожалуйста, обратитесь к официальной документации Protocol Buffers, чтобы узнать, как начать работу с Protocol Buffers. Для реализации собственного анализатора с нуля необходимо создать службу gRPC, реализующую интерфейс Служба анализатора:
service Analyzer { rpc NotifyReviewEvent (ReviewEvent) returns (EventResponse); rpc NotifyPushEvent (PushEvent) returns (EventResponse); }
Вы можете создать новый анализатор на любом языке, который поддерживает буферы протоколов, генерируя код из определений .proto. Полученный код предоставит классы доступа к данным с аксессорами для каждого поля, а также методы для сериализации/анализа структур сообщения в/из байтов.
Предостережения
Все анализаторы должны учитывать предостережения, описанные SDK.
Получение изменений, UAST или языков из DataService
source{d} Lookout возьмет на себя работу с репозиториями Git, извлечение UAST, определение языка программирования и т. д. Ваш анализатор сможет использовать DataService для запроса всех этих данных.
Подробнее об этом можно прочитать в разделе source{d} Lookout Server.
Как протестировать анализатор локально
Пожалуйста, обратитесь к документации lookout-sdk, чтобы узнать, как локально протестировать анализатор без доступа к GitHub.
Использование предварительно сгенерированного кода из SDK
Если вы создаете свой анализатор на Golang или Python, вы найдете предварительно сгенерированные библиотеки в репозитории lookout-sdk. Библиотеки SDK также поставляются с помощниками для работы с предостережениями gRPC.
Репозиторий lookout-sdk содержит краткий пример — реализованный на Go и Python — анализатора, который определяет язык и количество функций для каждого файла.
Анализаторы машинного обучения (Python)
Существует более простая альтернатива описанному способу создания новых анализаторов, заточенных под питонистов. Разница заключается в использовании абстракций более высокого уровня из пакета Python lookout-SDK-ml. Вам не придется возиться с внутренними компонентами gRPC, и вы получите дополнительный доступ к богатой исследовательской экосистеме MLonCode, разработанной source{d}. Короче говоря, вам нужно реализовать два метода, и вы готовы к работе:
class MyAnalyzer(Analyzer): @with_changed_uasts_and_contents def analyze(self, ptr_from, ptr_to, Data_service, changes): # TODO @classmethod @with_uasts_and_contents def train(cls, ptr, config, data_service, files): # TODO
Тогда посмотрите, как это работает прямо на GitHub:
analyzer package my_analyzer -u your_user -t your_token -r your/repo -y
Полные инструкции см. в Руководстве по началу работы. Вот так мы собственно и разрабатываем анонсированный анализатор формата.
Узнайте больше об source{d} Lookout и MLonCode:
- Подпишитесь на нашу двухнедельную рассылку
- Присоединяйтесь к клубу чтения исходных текстов
- Подпишитесь на нашу предстоящую онлайн-встречу
- Присоединяйтесь к source{d} Community Slack