Skip to content

Commit ee86fbe

Browse files
committed
fix server rule
1 parent c2c7f62 commit ee86fbe

File tree

7 files changed

+71
-4
lines changed

7 files changed

+71
-4
lines changed

crates/cli/src/model/cli_configuration.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ mod tests {
176176
arguments: vec![],
177177
tests: vec![],
178178
is_testing: false,
179+
documentation_url: None,
179180
}],
180181
rule_config_provider: RuleConfigProvider::default(),
181182
max_file_size_kb: 1,

crates/cli/src/model/datadog_api.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ pub struct ApiResponseRule {
169169
pub severity: RuleSeverity,
170170
pub category: RuleCategory,
171171
pub tests: Vec<ApiResponseRuleTest>,
172+
pub documentation_url: Option<String>,
172173
pub is_testing: bool,
173174
}
174175

@@ -230,6 +231,7 @@ impl APIResponseRuleset {
230231
})
231232
.collect(),
232233
is_testing: rule_from_api.is_testing,
234+
documentation_url: rule_from_api.documentation_url,
233235
})
234236
.collect(),
235237
None => Vec::new(),

crates/cli/src/sarif/sarif_utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,6 +1069,7 @@ mod tests {
10691069
arguments: vec![],
10701070
tests: vec![],
10711071
is_testing: false,
1072+
documentation_url: None,
10721073
};
10731074
let region0 = Region {
10741075
start: Position { line: 50, col: 5 },

crates/static-analysis-kernel/src/analysis/analyze.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,10 @@ where
215215
console_lines,
216216
timing,
217217
} = execution;
218+
218219
let console_output = (!console_lines.is_empty() && analysis_option.log_output)
219220
.then_some(console_lines.join("\n"));
221+
220222
violations.retain(|v| {
221223
let base_ignored =
222224
lines_to_ignore.should_filter_rule(rule.name.as_str(), v.start.line);

crates/static-analysis-kernel/src/model/rule.rs

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ pub struct Rule {
155155
pub tests: Vec<RuleTest>,
156156
#[serde(default)]
157157
pub is_testing: bool,
158+
#[serde(default)]
159+
pub documentation_url: Option<String>,
158160
}
159161

160162
#[derive(Clone, Deserialize, Debug, Serialize, Builder, Eq, PartialEq)]
@@ -208,10 +210,14 @@ impl DiffAware for Rule {
208210

209211
impl Rule {
210212
pub fn get_url(&self) -> String {
211-
format!(
212-
"https://docs.datadoghq.com/static_analysis/rules/{}",
213-
self.name
214-
)
213+
if let Some(url) = &self.documentation_url {
214+
url.clone()
215+
} else {
216+
format!(
217+
"https://docs.datadoghq.com/static_analysis/rules/{}",
218+
self.name
219+
)
220+
}
215221
}
216222

217223
// Sometimes, the API returns an empty CWE as an empty string. If we have an empty
@@ -341,6 +347,54 @@ mod tests {
341347
use super::*;
342348
use crate::utils::encode_base64_string;
343349

350+
#[test]
351+
fn test_get_url() {
352+
let rule_without_url = Rule {
353+
name: "myrule".to_string(),
354+
short_description_base64: Some("bla".to_string()),
355+
description_base64: Some("bli".to_string()),
356+
category: RuleCategory::BestPractices,
357+
severity: RuleSeverity::Warning,
358+
language: Language::Python,
359+
rule_type: RuleType::TreeSitterQuery,
360+
entity_checked: None,
361+
code_base64: "mycode".to_string(),
362+
checksum: "foobar".to_string(),
363+
pattern: None,
364+
cwe: None,
365+
tree_sitter_query_base64: None,
366+
arguments: vec![],
367+
tests: vec![],
368+
is_testing: false,
369+
documentation_url: None,
370+
};
371+
assert_eq!(
372+
rule_without_url.get_url(),
373+
"https://docs.datadoghq.com/static_analysis/rules/myrule"
374+
);
375+
376+
let rule_with_url = Rule {
377+
name: "myrule".to_string(),
378+
short_description_base64: Some("bla".to_string()),
379+
description_base64: Some("bli".to_string()),
380+
category: RuleCategory::BestPractices,
381+
severity: RuleSeverity::Warning,
382+
language: Language::Python,
383+
rule_type: RuleType::TreeSitterQuery,
384+
entity_checked: None,
385+
code_base64: "mycode".to_string(),
386+
checksum: "foobar".to_string(),
387+
pattern: None,
388+
cwe: None,
389+
tree_sitter_query_base64: None,
390+
arguments: vec![],
391+
tests: vec![],
392+
is_testing: false,
393+
documentation_url: Some("https://my-rule-url".to_string()),
394+
};
395+
assert_eq!(rule_with_url.get_url(), "https://my-rule-url");
396+
}
397+
344398
#[test]
345399
fn test_checksum_valid() {
346400
let rule_invalid_checksum = Rule {
@@ -360,6 +414,7 @@ mod tests {
360414
arguments: vec![],
361415
tests: vec![],
362416
is_testing: false,
417+
documentation_url: None,
363418
};
364419
let rule_valid_checksum = Rule {
365420
name: "myrule".to_string(),
@@ -379,6 +434,7 @@ mod tests {
379434
arguments: vec![],
380435
tests: vec![],
381436
is_testing: false,
437+
documentation_url: None,
382438
};
383439
assert!(!rule_invalid_checksum.verify_checksum());
384440
assert!(rule_valid_checksum.verify_checksum());
@@ -403,6 +459,7 @@ mod tests {
403459
arguments: vec![],
404460
tests: vec![],
405461
is_testing: false,
462+
documentation_url: None,
406463
};
407464
let fixed_ruled = rule.fix_cwe();
408465
assert!(fixed_ruled.cwe.is_none());
@@ -427,6 +484,7 @@ mod tests {
427484
arguments: vec![],
428485
tests: vec![],
429486
is_testing: false,
487+
documentation_url: None,
430488
};
431489
let fixed_ruled = rule.fix_cwe();
432490
assert!(fixed_ruled.cwe.is_none());
@@ -451,6 +509,7 @@ mod tests {
451509
arguments: vec![],
452510
tests: vec![],
453511
is_testing: false,
512+
documentation_url: None,
454513
};
455514
let fixed_ruled = rule.fix_cwe();
456515
assert!(fixed_ruled.cwe.is_some());

crates/static-analysis-kernel/src/model/ruleset.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ mod tests {
8989
arguments: vec![],
9090
tests: vec![],
9191
is_testing: false,
92+
documentation_url: None,
9293
}
9394
}
9495

crates/static-analysis-server/src/model/analysis_request.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ impl From<ServerRule> for kernel::model::rule::Rule {
6161
arguments: value.arguments,
6262
tests: vec![],
6363
is_testing: false,
64+
documentation_url: None, // no need to have documentation for executing the rule
6465
}
6566
}
6667
}

0 commit comments

Comments
 (0)