mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-01 14:21:24 +00:00
Only include rules with diagnostics in SARIF metadata (#13268)
This commit is contained in:
parent
62c7d8f6ba
commit
5ef6979d9a
1 changed files with 23 additions and 5 deletions
|
@ -1,9 +1,9 @@
|
||||||
|
use std::collections::HashSet;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use serde::{Serialize, Serializer};
|
use serde::{Serialize, Serializer};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use strum::IntoEnumIterator;
|
|
||||||
|
|
||||||
use ruff_source_file::OneIndexed;
|
use ruff_source_file::OneIndexed;
|
||||||
|
|
||||||
|
@ -27,6 +27,10 @@ impl Emitter for SarifEmitter {
|
||||||
.map(SarifResult::from_message)
|
.map(SarifResult::from_message)
|
||||||
.collect::<Result<Vec<_>>>()?;
|
.collect::<Result<Vec<_>>>()?;
|
||||||
|
|
||||||
|
let unique_rules: HashSet<_> = results.iter().filter_map(|result| result.rule).collect();
|
||||||
|
let mut rules: Vec<SarifRule> = unique_rules.into_iter().map(SarifRule::from).collect();
|
||||||
|
rules.sort_by(|a, b| a.code.cmp(&b.code));
|
||||||
|
|
||||||
let output = json!({
|
let output = json!({
|
||||||
"$schema": "https://json.schemastore.org/sarif-2.1.0.json",
|
"$schema": "https://json.schemastore.org/sarif-2.1.0.json",
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
|
@ -35,7 +39,7 @@ impl Emitter for SarifEmitter {
|
||||||
"driver": {
|
"driver": {
|
||||||
"name": "ruff",
|
"name": "ruff",
|
||||||
"informationUri": "https://github.com/astral-sh/ruff",
|
"informationUri": "https://github.com/astral-sh/ruff",
|
||||||
"rules": Rule::iter().map(SarifRule::from).collect::<Vec<_>>(),
|
"rules": rules,
|
||||||
"version": VERSION.to_string(),
|
"version": VERSION.to_string(),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -216,9 +220,23 @@ mod tests {
|
||||||
let results = sarif["runs"][0]["results"].as_array().unwrap();
|
let results = sarif["runs"][0]["results"].as_array().unwrap();
|
||||||
assert_eq!(results.len(), 3);
|
assert_eq!(results.len(), 3);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
results[0]["message"]["text"].as_str().unwrap(),
|
results
|
||||||
"`os` imported but unused"
|
.iter()
|
||||||
|
.map(|r| r["message"]["text"].as_str().unwrap())
|
||||||
|
.collect::<Vec<_>>(),
|
||||||
|
vec![
|
||||||
|
"`os` imported but unused",
|
||||||
|
"Local variable `x` is assigned to but never used",
|
||||||
|
"Undefined name `a`",
|
||||||
|
]
|
||||||
|
);
|
||||||
|
assert_eq!(rules.len(), 3);
|
||||||
|
assert_eq!(
|
||||||
|
rules
|
||||||
|
.iter()
|
||||||
|
.map(|r| r["id"].as_str().unwrap())
|
||||||
|
.collect::<Vec<_>>(),
|
||||||
|
vec!["F401", "F821", "F841"],
|
||||||
);
|
);
|
||||||
assert!(rules.len() > 3);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue