github / github/codeql

Add AlertSuppression.ql for Rust (inline // codeql[...] suppression)

オープン 初心者向け
#21,637 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
CodeQL
スター
10.1k
フォーク
2.1k
平均マージ
2日 15時間
マージ済み PR(30日)
141

説明

**Description of the issue**

Rust is missing an `AlertSuppression.ql` query, which means `// codeql[...]` and `// lgtm[...]` inline suppression comments have no effect on Rust code scanning alerts. Every other supported language (C++, C#, Go, Java, JavaScript, Python, Ruby, Swift) has this query.

All the building blocks already exist in the Rust CodeQL library:

- **Shared suppression module**: [`shared/util/codeql/util/suppression/AlertSuppression.qll`](https://github.com/github/codeql/blob/main/shared/util/codeql/util/suppression/AlertSuppression.qll) — requires `AstNode` (with `hasLocationInfo`) and `SingleLineComment` (with `hasLocationInfo`, `getText`, `toString`)
- **Rust `Comment` class**: [`rust/ql/lib/codeql/rust/elements/Comment.qll`](https://github.com/github/codeql/blob/main/rust/ql/lib/codeql/rust/elements/Comment.qll) — already has `getText()` (raw text including `//`), `getCommentText()` (stripped), `hasLocationInfo` (inherited from `AstNode`/`Token`), and `toString`
- **Rust `AstNode`**: [`rust/ql/lib/codeql/rust/elements/AstNode.qll`](https://github.com/github/codeql/blob/main/rust/ql/lib/codeql/rust/elements/AstNode.qll)

### Proposed implementation

A new file at `rust/ql/src/AlertSuppression.ql`, following the same pattern as [`python/ql/src/AlertSuppression.ql`](https://github.com/github/codeql/blob/main/python/ql/src/AlertSuppression.ql):

```ql
/**
* @name Alert suppression
* @description Generates information about alert suppressions.
* @kind alert-suppression
* @id rust/alert-suppression
*/

private import codeql.util.suppression.AlertSuppression as AS
private import codeql.rust.elements.Comment as C
private import codeql.rust.elements.AstNode as A

class AstNode instanceof A::AstNode {
predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}

string toString() { result = super.toString() }
}

class SingleLineComment instanceof C::Comment {
SingleLineComment() {
// Only match single-line comments (// ...), not block comments (/* ... */)
super.getText().matches("//%")
}

predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}

string getText() { result = super.getText() }

string toString() { result = super.toString() }
}

import AS::Make
```

The `qlpack.yml` at `rust/ql/src/qlpack.yml` already depends on `codeql/util`, so no dependency changes are needed.

### Motivation

Without this, there is no way to suppress false positives inline for Rust. The only workaround is dismissing alerts via the GitHub API or UI, which doesn't persist reliably across code changes.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

Start with the proposed pattern in python/ql/src/AlertSuppression.ql, then read shared/util/codeql/util/suppression/AlertSuppression.qll and the Rust Comment.qll and AstNode.qll files. Add rust/ql/src/AlertSuppression.ql and confirm that // codeql[...] and // lgtm[...] comments produce Rust alert suppressions without changing rust/ql/src/qlpack.yml.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rust
領域
security
issue の種類
機能追加
難易度
2/5
見積もり時間
1〜3時間
活発さ
静か
明瞭さ
明確に書かれている
初心者へのやさしさ
78/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。