SuperAPI AI 工具集

gh-search-code

编程与开发

查看项目

更新于 10-15 08:07

技能介绍

用途

gh-search-code 用于在 GitHub 上跨仓库搜索代码,围绕 GitHub CLI 的 gh search code 命令提供语法参考。当需要跨多个仓库查找代码模式、在仓库或组织内定位特定文件类型或文件名、按语言或文件大小检索代码、排除某些结果,或需要正则搜索时,可使用该技能。

主要能力

基础语法为:

gh search code <query> [flags]

常用的过滤标志包括:

  • --extension <string>:按文件扩展名过滤,例如 --extension js
  • --filename <string>:定位特定文件名,例如 --filename package.json
  • --language <string>:按编程语言过滤,例如 --language python
  • --owner <strings>:限定到特定所有者,例如 --owner microsoft
  • -R, --repo <strings>:在指定仓库内搜索,例如 --repo cli/cli
  • --size <string>:按文件大小(KB)过滤,例如 --size ">100"
  • --match <strings>:在文件或路径中搜索,例如 --match file 或 --match path
  • -L, --limit <int>:最大结果数,默认 30
  • -w, --web:在浏览器中打开
  • --json <fields>:以 JSON 输出,可选字段为 path、repository、sha、textMatches、url

使用方式

排除语法

使用内联查询排除(用 - 取反)时,必须使用 -- 分隔符:

正确:gh search code -- "search-terms -qualifier:value"

错误示例包括:gh search code "search-terms" --flag=-value、gh search code "search-terms" --flag=!value、gh search code "search-terms" --filename="!test"。

实际例子:

  • gh search code -- "function -filename:test"(排除名为 test 的文件)
  • gh search code -- "import -language:javascript"(排除某语言)
  • gh search code -- "config -path:vendor"(排除 vendor 目录)
  • gh search code -- "TODO -extension:md"(排除某扩展名)

-- 的作用是让 shell 停止解析标志,把其后的内容都当作参数;否则引号内的 -qualifier:value 可能被误解析。

-filename: 与 -path: 的区别

  • -filename: 只匹配文件名(如 test.js、utils_test.py),适合按文件名模式排除文件。
  • -path: 匹配完整文件路径(如 src/test/file.js、lib/testing/util.js),适合排除目录路径或路径片段。

匹配示例:-filename:test 会匹配 test.js、utils_test.py、test_helper.rb,但不匹配 src/file.js(文件名不含 test)、tests/utils.js(文件名是 utils.js);-path:test 会匹配 tests/utils.js、src/test/file.js、lib/testing/helper.py、test.js,但不匹配 src/utils.js。

语法选择

决策原则:如果搜索包含排除(NOT、减号、without、except)或复杂布尔逻辑(OR、AND),使用带 -- 的查询语法;否则使用标志语法。

标志语法(正向过滤):

gh search code "import" --language python --extension py

查询语法(排除时必需):

gh search code -- "function -filename:test.js -language:javascript"

不要在同一条命令中混用两种语法,例如 gh search code "function" --language python -filename:test 是错误的,应写成 gh search code -- "function language:python -filename:test"。

PowerShell 下排除需使用 --% 防止解析,例如 gh --% search code -- "function -filename:test.js"。

常见排除模式示例:gh search code -- "config -path:vendor -path:node_modules"、gh search code -- "function -filename:test -filename:spec"、gh search code -- "class -size:>500"、gh search code -- "TODO -extension:md -extension:txt"、gh search code -- "api -path:examples -path:docs"。

引用与大小比较

多词搜索需要加引号,如 gh search code "error handling"。大小比较运算符需要加引号,如 gh search code "import" --size ">50" --language python,范围写法如 --size "100..500"。

适用场景与示例

  • 搜索函数模式:gh search code "async function" --language typescript
  • 查找配置文件:gh search code "database" --filename config.json --owner myorg
  • 在指定仓库搜索:gh search code "TODO" --repo owner/repo --language go
  • 按文件大小搜索:gh search code "import" --size "100..500" --language python

网络标志与限制

-w/--web 会在 GitHub 网页界面中打开搜索,网页端支持 CLI API 不具备的功能,例如正则搜索。示例:gh search code "function.*test" --language javascript -w,随后可在网页中改用 /function.*test/ language:javascript。当需要正则模式、更新的搜索特性、更直观地浏览结果,或希望获得更好结果时使用 -w。也可以先用 CLI 构建查询再在网页中补充正则,例如 gh search code --language python --repo myorg/myrepo -w。

CLI API 的限制:使用旧版 GitHub 搜索引擎,结果可能与 github.com 不同,不支持正则搜索(改用 -w),部分高级功能可能不可用。

安装与认证

若 gh 命令未找到,可先检查:

which gh

如未安装,参见 https://cli.github.com/manual/installation 。如未认证,执行:

gh auth login

常见错误

  • --extension="NOT js" 或 --language=-python:标志语法不支持否定,应改用 -- "-extension:js" 或 -- "-language:python"。
  • gh search code import -language:js:-language 被当作标志,应使用 --。
  • "function NOT language:js":不支持 NOT 关键字,应使用 -。
  • 混用标志与查询限定符:排除时应全部使用查询语法。
  • 多词查询未加引号:会被分开搜索。
  • 比较运算符未加引号:shell 会解释 >。
  • 内联使用 -filename 却未加 --:会被解析为标志。
  • 试图在 CLI 使用正则:CLI API 不支持,改用 -w。
  • PowerShell 未使用 --%:排他时会出错。

其他资源的搜索可参考 gh-search-issues、gh-search-prs、gh-search-repos、gh-search-commits。GitHub 搜索语法参见 https://docs.github.com/search-github/searching-on-github/searching-code 。