CodeQL 文档

查询帮助文件

查询帮助文件告诉用户查询的用途,并建议如何解决查询发现的潜在问题。

本主题提供了有关查询帮助文件结构的详细信息。有关如何以与标准 CodeQL 查询一致的风格编写有用的查询帮助的更多信息,请参阅 GitHub 上的 查询帮助风格指南

注意

您可以通过访问 CodeQL 查询帮助来访问 CodeQL 查询的查询帮助。您还可以访问 GitHub 存储库中的原始查询帮助文件。例如,请参阅 JavaScript/TypeScript 安全查询C/C++ 关键查询

概述

每个查询帮助文件都提供有关查询的用途和用法的详细信息。在编写自己的查询时,我们建议您也编写查询帮助文件,以便其他用户了解查询的功能和工作原理。

结构

查询帮助文件使用自定义 XML 格式编写,并存储在扩展名为 .qhelp 的文件中。查询帮助文件必须与它们描述的查询具有相同的基名称,并且必须位于同一个目录中。基本结构如下

<!DOCTYPE qhelp SYSTEM "qhelp.dtd">
<qhelp>
    CONTAINS one or more section-level elements
</qhelp>

标头和单个顶层 qhelp 元素都是必需的。以下部分将解释您可以在查询帮助文件中包含的其他元素。

代码扫描不会处理自定义 CodeQL 查询的 .qhelp 文件,因此要在代码扫描 UI 中显示自定义查询的查询帮助,您必须将 .qhelp 文件转换为 Markdown,然后将 Markdown 渲染的查询帮助包含在分析期间生成的 SARIF 文件中。有关更多信息,请参阅“使用 CodeQL CLI 分析数据库”。

节级元素

节级元素用于将帮助文件中的信息分组到节中。许多节都有标题,可以通过 title 属性或默认值来定义。以下节级元素是 qhelp 元素的可选子元素。

元素 属性 子元素 节的用途
example 任何块元素 演示违反查询实现的规则的代码示例,并提供有关如何修复它的指导。默认标题。
fragment 任何块元素 请参阅以下“查询帮助包含”。无标题。
hr 水平线。无标题。
include src 要包含的查询帮助文件。 在该元素的位置包含一个查询帮助文件。请参阅以下“查询帮助包含”。无标题。
overview 任何块元素 查询目的的概述。通常这是查询文档中的第一个节。无标题。
recommendation 任何块元素 建议如何解决此查询标识的任何警报。默认标题。
references li 元素 参考列表。通常这是查询文档中的最后一个节。默认标题。
section title 节的标题 任何块元素 带有由 title 属性定义的标题的通用节。
semmleNotes 任何块元素 有关查询的实现说明。此节仅用于实现第三方定义的规则的查询。默认标题。

块元素

以下元素是 sectionexamplefragmentrecommendationoverviewsemmleNotes 元素的可选子元素。

元素 属性 子元素 块的用途
blockquote 任何块元素 显示带引号的段落。
img
src 要包含的图像文件。
alt 图像的替代文本。
height 可选,图像的高度。
width 可选,图像的宽度。
显示图像。图像的内容在单独的图像文件中。
include src 要包含的查询帮助文件。 在该元素的位置包含一个查询帮助文件。请参阅以下 查询帮助包含 了解详细信息。
ol li 显示有序列表。请参阅以下列表元素。
p 任何内联内容 显示段落,用作 HTML 文件中的段落。
pre 文本 以等宽字体显示文本,并使用预格式化的空白。
sample
language 内联代码示例的语言。
src 可选,包含示例代码的文件。
文本 显示示例代码,示例代码可以定义为 sample 元素中的嵌套文本,也可以定义为指定的 src 文件中。指定 src 时,将从文件扩展名推断语言。如果省略 src,则必须提供语言,并且示例代码应作为嵌套文本提供。
table tbody 显示表格。请参阅以下表格。
ul li 显示无序列表。请参阅以下列表元素。
warning 文本 显示一个警告,该警告将在结果页面上非常显眼地显示。此类警告有时用于已知在许多代码库中精度较低的查询;此类查询通常默认情况下处于禁用状态。

列表元素

查询帮助文件支持两种类型的用于列表的块元素:ulol。这两种块元素都只支持类型为 li 的一个子元素。每个 li 元素都包含内联内容或块元素。

表格元素

table 块元素用于在查询帮助文件中包含表格。每个表格都包含若干行,每行都包含若干个单元格。单元格中的数据将呈现为网格。

元素 属性 子元素 用途
tbody tr 定义表格的顶层元素。
tr
th
td
定义表格的一行。
td 任何内联内容 定义表格行的一个单元格。
th 任何内联内容 定义表格行的一个标题单元格。

内联内容

内联内容用于定义段落、列表项、表格单元格等元素的内容。内联内容包括文本以及以下定义的内联元素

元素 属性 子元素 用途
a href 链接的 URL。 text 定义超链接。当用户选择子文本时,他们将被重定向到给定的 URL。
b 内联内容 定义应以粗体显示的内容。
code 内联内容 定义代表代码的内容。它通常显示在等宽字体中。
em 内联内容 定义应加重的内容,通常通过将其设置为斜体。
i 内联内容 定义应以斜体显示的内容。
img
src
alt
height
width
显示图像。请参阅上面的块元素中的描述。
strong 内联内容 定义应以更强的样式呈现的内容,通常使用粗体。
sub 内联内容 定义应以下标形式呈现的内容。
sup 内联内容 定义应以上标形式呈现的内容。
tt 内联内容 定义应以等宽字体显示的内容。

查询帮助包含

要在不同的帮助主题之间重复使用内容,您可以将共享内容存储在一个查询帮助文件中,然后使用 include 元素将其包含在多个其他查询帮助文件中。共享内容可以存储在与包含文件相同的目录中,也可以存储在 SEMMLE_DIST/docs/include 中。当查询帮助文件仅被其他帮助文件包含,但不属于特定查询时,它应具有文件扩展名 .inc.qhelp

include 元素可以用作节级或块级元素。由 src 属性定义的查询帮助文件的内容必须包含适合 include 元素位置的元素。

节级 include 元素

节级 include 元素可以位于顶层 qhelp 元素下方。例如,在 StoredXSS.qhelp 中,一个完整的查询帮助文件被重复使用

<qhelp>
    <include src="XSS.qhelp" />
</qhelp>

在此示例中,XSS.qhelp 文件必须符合上面描述的完整查询帮助文件的标准。也就是说,qhelp 元素只能包含非 fragment 的节级元素。

块级 include 元素

块级 include 元素可以包含在节级元素之下。例如,include 元素在 ThreadUnsafeICryptoTransform.qhelp 中的 overview 部分下使用。

<qhelp>
    <overview>
        <include src="ThreadUnsafeICryptoTransformOverview.inc.qhelp" />
    </overview>
    ...
</qhelp>

包含的文件,ThreadUnsafeICryptoTransformOverview.inc.qhelp,可能只包含一个或多个 fragment 部分。例如

<!DOCTYPE qhelp SYSTEM "qhelp.dtd">
<qhelp>
   <fragment>
      <p>
         ...
      </p>
   </fragment>
</qhelp>
  • ©GitHub, Inc.
  • 条款
  • 隐私