Открыты исходные тексты Sourcegraph
Платформа Sourcegraph переведена в разряд открытых проектов. Sourcegraph предоставляет движок для навигации по исходным текстам и поиска определенных конструкций в коде. Проект состоит из серверной части и web-интерфейса, а также браузерного дополнения для интеграции с GitHub.com. Код написан на языках Go и JavaScript (Node.js). Для хранения данных используется PostgreSQL, а для хранения сеансов Redis. Код открыт под лицензией Apache 2.0.
Sourcegraph может применяться как самодостаточная платформа для рецензирования и навигации по исходным текстам, размещенным в Git-репозиториях. Например, имеется возможность для произвольного вызова функции перейти к месту ее определения, посмотреть другие вызовы этой функции в коде, историю изменений, связанные с функций обсуждения, документацию и сообщения об ошибках. Sourcegraph также предоставляет гибкие средства поиска ссылок и всплывающие подсказки по использованию различных объектов.
Поддерживается анализ кода на 19 языках и модули интеграции с GitHub.com, GitHub Enterprise, Bitbucket Server и Phabricator. Возможно подключение внешних серверных обработчиков для разбора семантики языка и статического анализа кода, поддерживающих протокол LSP (Language Server Protocol). Для интеграции со сторонними инструментами разработки предоставляется Sourcegraph Extension API.
В состав серверной части входят:
- Cервисы для обеспечения работы фронтэнда (web-интерфейса);
- Прокси для интеграции с GitHub;
- Git-сервер для зеркалирования репозиториев на своем хосте;
- Индексатор для построения поискового индекса содержимого репозитория с учетом семантики кода на разных языках;
- Lsp-proxy для взаимодействия с LSP-модулями для разбора кода на разных языках программирования (имеются собственные модули для Go, Java, TypeScript/JavaScript, Python и PHP);
- query-runner для выполнения проверочных поисковых запросов и отправки уведомлений;
- Repo-updater для отслеживания актуальности репозитория и его обновления при необходимости;
- searcher для поиска в git-архиве;
- indexed-search/zoekt для поиска с привлечением предварительно построенного индекса;
- symbols для индексации с учетом обработки в Ctags;
- Syntect для обеспечения подсветки синтаксиса.
Проект вместо пропритарного продукта теперь будет развиваться в соответствии с моделью OpenCore, которая подразумевает наличие открытой базовой части с поставкой дополнительной функциональности в виде платных редакций. Например, среди возможностей, доступных только в платной версии, упоминаются поддержка механизма единой аутентификации (SSO), кластеризация, навигация с охватом разных репозиториев, поддержка внешних СУБД и расширенная система логов.