Ранее в этом месяце мы объявили о выпуске нового анализатора формата, основанного на машинном обучении, в 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: