Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Навигация по коду на GitHub

Вы можете проанализировать связи внутри репозиториев и между ними, переходя по коду непосредственно в GitHub.

Сведения о навигации по коду на GitHub

Навигация по коду помогает перемещаться по коду, читать и понимать его благодаря отображению связанных определений именованной сущности, соответствующих ссылке на эту сущность, а также ссылок, соответствующих определению сущности.

Отображение навигации по коду

Для навигации по коду используется библиотека tree-sitter с открытым кодом. Поддерживаются следующие языки и стратегии навигации:

ЯзыкНавигация по коду на основе поискаТочная навигация по коду
C#
CodeQL
Elixir
Go
Java
JavaScript
PHP
Python
Ruby
Rust
TypeScript

Для включения навигации по коду в репозитории не требуется ничего настраивать. Мы автоматически извлекаем сведения для навигации по коду на основе поиска и точной навигации для поддерживаемых языков во всех репозиториях. Вы можете переключаться между двумя поддерживаемыми подходами к навигации, если ваш язык программирования поддерживается ими обоими.

В GitHub были разработаны два подхода к навигации по коду на основе библиотек tree-sitter и stack-graphs с открытым кодом:

  • На основе поиска — в репозитории ищутся все определения и ссылки с целью найти сущности с заданным именем.
  • Точная — определения и ссылки разрешаются на основе набора классов, функций и импортированных определений в заданной точке кода.

Дополнительные сведения об этих подходах см. в разделе Точная навигация и навигация на основе поиска.

В будущих выпусках будет добавлена точная навигация по коду для дополнительных языков. Это подход к навигации по коду, который может дать более точные результаты.

Переход к определению функции или метода

Вы можете перейти к определению функции или метода в том же репозитории, щелкнув вызов функции или метода в файле.

Вкладка перехода к определению

Поиск всех ссылок на функцию или метод

Чтобы найти все ссылки на функцию или метод в одном репозитории, щелкните вызов функции или метода в файле, а затем перейдите на вкладку Ссылки.

Вкладка "Найти все ссылки"

Точная навигация и навигация на основе поиска

Для некоторых языков, поддерживаемых GitHub, доступна точная навигация по коду. Она использует алгоритм (на основе библиотеки stack-graphs с открытым кодом), который разрешает определения и ссылки на основе набора классов, функций и импортированных определений, видимых в любой точке кода. Другие языки используют навигацию по коду на основе поиска, которая ищет все определения и ссылки в репозитории с целью нахождения сущностей с заданным именем. Обе стратегии эффективны при поиске результатов, и обе они позволяют избежать неуместных результатов, таких как комментарии. Однако точная навигация по коду может давать более точные результаты, особенно если репозиторий содержит несколько методов или функций с одинаковым именем.

Если результаты, ожидаемые от запроса точной навигации по коду, не отображаются, можно щелкнуть ссылку "на основе поиска" в отображаемом всплывающем окне, чтобы выполнить навигацию на основе поиска.

Ссылка для навигации по коду на основе поиска

Если результаты точной навигации кажутся неточными, можно отправить запрос в службу поддержки.

Навигация по точному коду в разных репозиториях

Навигация по коду в нескольких репозиториях доступна для языков, поддерживаемых точной навигацией по коду и графом зависимостей. Дополнительные сведения см. в разделе Сведения о графе зависимостей. С помощью навигации по коду между репозиториями можно перейти к определению функций или переменных, определенных в зависимостях, импортированных проектом, если эта зависимость является репозиторием, размещенным в GitHub. В настоящее время навигация по коду между репозиториями не поддерживает запросы find-all-references.

Снимок экрана: навигация по коду между репозиторием

Устранение неполадок навигации по коду

Если навигация по коду включена, но ссылки на определения функций и методов не отображаются:

  • Навигация по коду работает только для активных ветвей. Выполните отправку в ветвь и повторите попытку.
  • Навигация по коду работает только для репозиториев с менее чем 100 000 файлов.

Дополнительные материалы