关于在 GitHub 上浏览代码
代码导航通过显示和链接与命名实体的引用相对应的定义以及与实体定义相对应的引用,帮助您阅读、浏览和理解代码。
代码导航使用开源库tree-sitter
。支持以下语言和导航策略。
语言 | 基于搜索的代码导航 | 精确代码导航 |
---|---|---|
Bash | ||
C | ||
C# | ||
C++ | ||
CodeQL | ||
Elixir | ||
Go | ||
JSX | ||
Java | ||
JavaScript | ||
Lua | ||
PHP | ||
Protocol Buffers | ||
Python | ||
R | ||
Ruby | ||
Rust | ||
Scala | ||
Starlark | ||
Swift | ||
TypeScript |
您无需在仓库中配置任何内容即可启用代码导航。我们将自动为所有仓库中这些受支持的语言提取基于搜索和精确的代码导航信息,如果您使用的编程语言同时支持这两种代码导航方法,则可以在两者之间切换。
GitHub 基于开源库 tree-sitter
和 stack-graphs
开发了两种代码导航方法。
- 基于搜索 - 搜索整个仓库中的所有定义和引用以查找具有给定名称的实体。
- 精确 - 基于代码中给定点处可见的类、函数和导入定义集来解析定义和引用。
要了解有关这些方法的更多信息,请参阅“精确和基于搜索的导航”。
未来的版本将为更多语言添加 *精确代码导航*,这是一种可以提供更准确结果的代码导航方法。
您可以使用键盘快捷键在代码文件中导航。有关更多信息,请参阅“键盘快捷键”。
使用符号面板
您现在可以使用符号面板快速查看和在代码中的符号(例如函数或类)之间导航。您可以在单个文件中、仓库中的所有文件中,甚至在 GitHub 上的所有公共仓库中搜索符号。
符号搜索是代码搜索的一项功能。有关更多信息,请参阅“理解 GitHub 代码搜索语法”。
-
选择一个仓库,然后导航到包含符号的文件。
-
要调出符号面板,请在文件内容上方单击.
或者,您可以通过单击文件中的合格符号来打开符号面板。当您将鼠标悬停在可点击的符号上时,它们会以黄色突出显示。
-
单击您想从符号面板或文件中本身查找的符号。
- 要在整个仓库中搜索符号,请在符号面板中单击**在此仓库中搜索此符号**。要在 GitHub 上的所有仓库中搜索符号,请单击**所有仓库**。
-
要在符号的引用之间导航,请单击或.
-
要导航到符号的特定引用,请单击“在文件中”下的符号搜索结果。 在此文件中.
-
要退出特定符号的搜索,请单击 所有符号.
跳转到函数或方法的定义
您可以通过单击文件中函数或方法调用来跳转到同一仓库中函数或方法的定义。
查找函数或方法的所有引用
您可以通过单击文件中函数或方法调用来查找同一仓库中函数或方法的所有引用。
精确和基于搜索的导航
GitHub 支持的某些语言可以使用 *精确代码导航*,它使用一种算法(基于开源库 stack-graphs
)根据代码中任何给定点可见的类、函数和导入定义集来解析定义和引用。其他语言使用 *基于搜索的代码导航*,它搜索整个仓库中的所有定义和引用以查找具有给定名称的实体。两种策略都能有效地查找结果并确保避免不合适的結果,例如注释,但精确代码导航可以提供更准确的结果,尤其是在仓库包含多个同名方法或函数时。
如果您没有看到精确代码导航查询的预期结果,您可以单击显示的弹出窗口中的“基于搜索”链接来执行基于搜索的导航。
如果您的精确结果显得不准确,您可以提交支持请求。
跨仓库精确代码导航
跨仓库代码导航适用于精确代码导航和依赖关系图支持的语言。有关更多信息,请参阅“关于依赖关系图”。使用跨仓库代码导航,如果您项目的依赖项是 GitHub 托管的仓库,则可以跳转到项目导入的依赖项中定义的函数或变量的定义。目前,跨仓库代码导航不支持查找所有引用的请求。
代码导航故障排除
如果已为您启用代码导航,但您没有看到指向函数和方法定义的链接
- 代码导航仅适用于活动分支。推送到分支并重试。
- 代码导航仅适用于文件少于 100,000 个的仓库。