Skip to main content

在 GitHub 上导航代码

您可以直接在 GitHub 中导航代码,来理解仓库内及仓库之间的关系。

关于在 GitHub 上导航代码

代码导航通过显示和链接该实体的引用对应的命名实体定义以及实体定义对应的引用,帮助您阅读、导航和理解代码。

屏幕截图显示了一个代码文件(其中突出显示了名为“request”的函数),以及一个弹出窗口(其中包含有关该函数的信息)。 弹出窗口有两个选项卡:“定义”和“引用”。

代码导航使用开放源代码 tree-sitter 库。 支持以下语言和导航策略。

语言基于搜索的代码导航精确的代码导航
Bash
C
C#
C++
CodeQL
Elixir
Go
JSX
Java
JavaScript
Lua
PHP
协议缓冲区
Python
R
Ruby
Rust
Scala
Starlark
Swift
TypeScript

您无需在存储库中配置任何内容即可启用代码导航。 我们将在所有存储库中自动提取这些受支持语言的基于搜索的精确代码导航信息,如果您的编程语言都支持这两种支持的语言,则可以在两种受支持的代码导航方法之间切换。

GitHub 基于开放源代码 tree-sitterstack-graphs 库开发了两种代码导航方法:

  • 基于搜索 - 搜索存储库中的所有定义和引用,以查找具有给定名称的实体
  • 精确 - 根据代码中给定点的类、函数和导入定义的集合解析定义和引用

若要了解有关这些方法的详细信息,请参阅“精确和基于搜索的导航”。

未来的版本将针对更多语言添加精确的代码导航,这种代码导航方法可以提供更准确的结果。

可以使用键盘快捷键在代码文件中导航。 有关详细信息,请参阅“键盘快捷方式”。

使用符号窗格

现在,可以使用符号窗格在代码中的函数或类等符号之间快速查看和导航。 可以在单个文件中、存储库中的所有文件中搜索符号,甚至可以在 GitHub 上的所有公共存储库中搜索符号。

符号搜索是代码搜索的一项功能。 有关详细信息,请参阅“了解 GitHub 代码搜索语法”。

  1. 选择存储库,然后导航到包含符号的文件。

  2. 若要打开符号窗格,请在文件内容上方单击

    或者,可以通过单击文件中的合格符号来打开符号窗格。 将鼠标悬停在可单击符号上时,它们会以黄色突出显示。

  3. 单击要从符号窗格或文件本身中查找的符号。

    • 若要在整个存储库中搜索符号,请在符号窗格单击“在此存储库中搜索此符号”。 若要在 GitHub 上的所有存储库中搜索符号,请单击“所有存储库”。
  4. 若要在对符号的引用之间导航,请单击

  5. 若要导航到对符号的特定引用,请单击 “此文件中”下的符号搜索结果。

  6. 若要退出对特定符号的搜索,请单击 “所有符号”。

跳至功能或方法的定义

您可以在文件中单击函数或方法调用,跳至同一仓库中该函数或方法的定义。

函数窗口的屏幕截图。 标题为“定义”的部分以深橙色轮廓显示。

查找函数或方法的所有引用

通过单击文件中的函数或方法调用,可以在同一存储库中找到函数或方法的所有引用。

函数窗口的屏幕截图。 标题为“3 个引用”的部分以深橙色轮廓显示。

精确和基于搜索的导航

GitHub 支持的某些语言可以使用精确的代码导航,它使用算法(基于开放源代码 stack-graphs 库)根据在代码中任何给定点可见的类、函数和导入定义集解析定义和引用。 其他语言使用基于搜索的代码导航,它在存储库中搜索所有定义和引用,以查找具有给定名称的实体。 这两种策略在查找结果方面都很有效,并且都确保避免不适当的结果(如注释),但精确的代码导航可以提供更准确的结果,特别是当存储库包含具有相同名称的多个方法或函数时。

如果看不到精确代码导航查询的预期结果,可以单击显示的弹出窗口中的“基于搜索”链接以执行基于搜索的导航。

函数窗口的屏幕截图。 标有“在此存储库中搜索此符号”和“所有存储库”的两个链接以深橙色框出。

如果精确结果显示不准确,您可以提交支持请求。

跨存储库精确代码导航

跨存储库代码导航适用于精确代码导航和依赖项关系图支持的语言。 有关详细信息,请参阅“关于依赖关系图”。 使用跨存储库代码导航,如果项目导入的依赖项是由 GitHub 托管的存储库,则可以跳转到该依赖项中定义的函数或变量的定义。 跨存储库代码导航目前不支持查找所有引用请求。

GitHub 上的代码文件的屏幕截图。 在“import o.s.”行中,模块名称“o.s.” 已突出显示,“定义”模式显示了标记有“跨存储库结果”的结果。

代码导航疑难解答

如果已为您启用代码导航,但您没有看到指向函数和方法定义的链接:

  • 代码导航仅适用于活动的分支。 推送到分支,然后重试。
  • 代码导航仅适用于文件少于 100,000 个的存储库。

其他阅读材料