跳到主要内容

在 GitHub 上浏览代码

您可以在 GitHub 中直接浏览代码,了解存储库内和跨存储库之间的关系。

关于在 GitHub 上浏览代码

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

Screenshot showing a code file with a function called "request" highlighted and a pop-up window with information about the function underneath. The pop-up has two tabs: "Definition" and "Reference".

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

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

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

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

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

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

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

你可以使用键盘快捷键在代码文件中导航。有关更多信息,请参阅“键盘快捷键”。

使用符号窗格

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

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

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

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

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

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

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

  5. 要导航到符号的特定引用,请单击 在此文件中.

  6. 下的符号搜索结果 要退出对特定符号的搜索,请单击.

所有符号

跳转到函数或方法的定义

Screenshot of the function window. A section, titled "Definition," is outlined in dark orange.

您可以在文件中单击函数或方法调用,从而跳转到同一存储库中的函数或方法定义。

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

Screenshot of the function window. A section, titled "3 References," is outlined in dark orange.

您可以在文件中单击函数或方法调用,从而查找同一存储库中函数或方法的所有引用。

精确且基于搜索的导航

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

Screenshot of the function window. Two links, labeled, "Search for this symbol in this repository" and "all repositories," are outlined in dark orange.

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

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

跨存储库精确代码导航

Screenshot of a code file on GitHub. On the line "import o.s.", the module name "o.s." is highlighted, and a "Definitions" modal shows a result tagged with "cross-repo result".

代码导航故障排除

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

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

进一步阅读