跳至主要内容

解析查询

[深层内部] 展开查询目录和套件规范。

谁可以使用此功能?

CodeQL 可用于以下仓库类型

本文内容

注意

此内容描述了 CodeQL CLI 的最新发布版本。有关此版本的更多信息,请参阅 https://github.com/github/codeql-cli-binaries/releases

要查看早期版本中此命令可用的选项详情,请在终端中使用 --help 选项运行该命令。

概要

Shell
codeql resolve queries <options>... -- <query|dir|suite|pack>...

描述

[深层内部] 展开查询目录和套件规范。

此内部命令负责将能够运行多个查询的子命令的命令行参数展开为实际的、待执行的单个 .ql 文件列表。

如果在未提供任何参数的情况下运行,它会在标准错误流中显示帮助信息,包括在可用 QL 包中找到的 “知名” 查询套件定义列表,并成功返回空的查询列表。

选项

主要选项

<query|dir|suite|pack>...

[必需] 要执行的查询。每个参数的形式为 scope/name@range:path,其中

  • scope/name 是 CodeQL 包的限定名称。
  • range 是语义化版本范围。
  • path 是文件系统路径。

如果指定了 scope/name,则 rangepath 均为可选。缺失的 range 表示使用指定包的最新版本。缺失的 path 表示使用指定包的默认查询套件。

path 可以是一个 *.ql 查询文件、包含一个或多个查询的目录,或一个 .qls 查询套件文件。如果未指定包名,则必须提供 path,并且该路径相对于当前进程的工作目录进行解释。

若要指定包含字面量 @:path,请在参数前加上前缀 path:,例如:path:directory/with:and@/chars

如果同时指定了 scope/namepath,则 path 不能是绝对路径。它被视为相对于 CodeQL 包根目录的相对路径。

--format=<fmt>

选择输出格式。可选项包括

text (默认):按行组织的路径名列表。

json:字符串形式的路径名普通列表。

bylanguage:一种更丰富的 JSON 表示,按查询使用的提取器(根据其库依赖推断)对查询进行分组——计算成本略高。

installedpacks: [深层内部] 列出直接或在查询套件内部被引用且本地不可用的 CodeQL 查询包的 JSON 表示。

查找 QL 包的选项(可能需要用于解释查询套件)

--search-path=<dir>[:<dir>...]

一个目录列表,QL 包可能位于这些目录下。每个目录可以是一个 QL 包(或包含根目录下 .codeqlmanifest.json 文件的包集合),也可以是一个或多个此类目录的直接父目录。

如果路径中包含多个目录,它们的顺序决定了优先级:当需要解析的包名在多个目录树中匹配时,首先出现的目录中的包将被优先使用。

将其指向开源 CodeQL 仓库的检出版本时,查询其中的某种语言应当可行。

如果你已将 CodeQL 仓库签出为已解压的 CodeQL 工具链的同级目录,则无需提供此选项;此类同级目录始终会被搜索,以查找其他方式找不到的 QL 包。(如果默认行为无效,强烈建议在每用户配置文件中一次性设置 --search-path。)

(注意:在 Windows 上,路径分隔符是 ;)。

--additional-packs=<dir>[:<dir>...]

如果提供了此目录列表,它们将在 --search-path 中的目录之前被搜索。列表内部的顺序无关紧要;如果同一包名在该列表的两个不同位置出现,则会报错。

当你暂时在开发一个已出现在默认路径中的包的新版本时,这很有用。另一方面,不建议在配置文件中覆盖此选项;某些内部操作会动态添加此选项,从而覆盖任何已配置的值。

(注意:在 Windows 上,路径分隔符是 ;)。

用于配置 CodeQL 包管理器的选项

--registries-auth-stdin

通过传递以逗号分隔的 <registry_url>=<token> 对列表来对 GitHub Enterprise Server 容器注册表进行身份验证。

例如,您可以传入 https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 来对两个 GitHub Enterprise Server 实例进行身份验证。

这会覆盖 CODEQL_REGISTRIES_AUTH 和 GITHUB_TOKEN 环境变量。如果只需要对 github.com 容器注册表进行身份验证,则可以使用更简单的 --github-auth-stdin 选项进行身份验证。

--github-auth-stdin

通过标准输入传递 github.com 的 GitHub Apps 令牌或个人访问令牌,以对 github.com 容器注册表进行身份验证。

要对 GitHub Enterprise Server 容器注册表进行身份验证,请传入 --registries-auth-stdin 或使用 CODEQL_REGISTRIES_AUTH 环境变量。

这会覆盖 GITHUB_TOKEN 环境变量。

常用选项

-h, --help

显示此帮助文本。

-J=<opt>

[高级] 为运行该命令的 JVM 提供选项。

(请注意,包含空格的选项将无法正确处理。)

-v, --verbose

逐步增加打印的进度信息数量。

-q, --quiet

逐步减少打印的进度信息数量。

--verbosity=<level>

[高级] 将详细程度显式设置为以下之一:errors、warnings、progress、progress+、progress++、progress+++。会覆盖 -v-q

--logdir=<dir>

[高级] 将详细日志写入指定目录中的一个或多个文件,文件名会包含时间戳和运行的子命令名称。

(若希望自行完全控制日志文件名,请改用 --log-to-stderr 并按需重定向 stderr。)

--common-caches=<dir>

[高级] 控制磁盘上缓存数据的位置,这些数据会在 CLI 的多次运行之间保持,例如已下载的 QL 包和已编译的查询计划。如果未显式设置,则默认使用用户主目录下名为 .codeql 的目录;如该目录不存在,则会自动创建。

v2.15.2 起可用。

© . This site is unofficial and not affiliated with GitHub, Inc.