Skip to content

Commit 2d6afac

Browse files
robertoaloifacebook-github-bot
authored andcommitted
Allowing specifying a custom cli_severity/override
Summary: The property will be later used by some of the linters (e.g `debugging_functions`). Reviewed By: TD5 Differential Revision: D81481377 fbshipit-source-id: d1cf925f63dea74a2ef42b1bed8b13de27b32e97
1 parent 4361433 commit 2d6afac

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

crates/ide/src/diagnostics.rs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,11 @@ pub(crate) trait Linter {
506506
Severity::Warning
507507
}
508508

509+
// For CLI, when using the --use-cli-severity flag. It defaults to `severity()`
510+
fn cli_severity(&self) -> Severity {
511+
self.severity()
512+
}
513+
509514
// Specify if the linter issues can be suppressed via a `% elp:ignore` comment.
510515
fn can_be_suppressed(&self) -> bool {
511516
true
@@ -640,11 +645,23 @@ pub(crate) trait SsrPatternsLinter: Linter {
640645
// we define a blanket implementation for all the methods using the `Context``,
641646
// to keep the code generic while allowing individual linters to specify their own context type.
642647
pub(crate) trait SsrCheckPatterns: Linter {
643-
fn diagnostics(&self, sema: &Semantic, file_id: FileId, severity: Severity) -> Vec<Diagnostic>;
648+
fn diagnostics(
649+
&self,
650+
sema: &Semantic,
651+
file_id: FileId,
652+
severity: Severity,
653+
cli_severity: Severity,
654+
) -> Vec<Diagnostic>;
644655
}
645656

646657
impl<T: SsrPatternsLinter> SsrCheckPatterns for T {
647-
fn diagnostics(&self, sema: &Semantic, file_id: FileId, severity: Severity) -> Vec<Diagnostic> {
658+
fn diagnostics(
659+
&self,
660+
sema: &Semantic,
661+
file_id: FileId,
662+
severity: Severity,
663+
cli_severity: Severity,
664+
) -> Vec<Diagnostic> {
648665
let mut res = Vec::new();
649666
for (pattern, context) in self.patterns() {
650667
let matches = match_pattern_in_file_functions(sema, self.strategy(), file_id, &pattern);
@@ -656,7 +673,8 @@ impl<T: SsrPatternsLinter> SsrCheckPatterns for T {
656673
let mut d = Diagnostic::new(self.id(), message, matched.range.range)
657674
.with_fixes(fixes)
658675
.add_categories(categories)
659-
.with_severity(severity);
676+
.with_severity(severity)
677+
.with_cli_severity(cli_severity);
660678
if self.can_be_suppressed() {
661679
d = d.with_ignore_fix(sema, file_id);
662680
}
@@ -1286,12 +1304,20 @@ fn diagnostics_from_linters(
12861304
} else {
12871305
linter.severity()
12881306
};
1307+
let cli_severity = if let Some(lint_config) = config.lint_config.as_ref() {
1308+
lint_config
1309+
.get_severity_override(&linter.id())
1310+
.unwrap_or_else(|| linter.cli_severity())
1311+
} else {
1312+
linter.cli_severity()
1313+
};
12891314
match l {
12901315
DiagnosticLinter::FunctionCall(function_linter) => {
12911316
let diagnostic_template = DiagnosticTemplate {
12921317
code,
12931318
message: linter.description(),
12941319
severity,
1320+
cli_severity,
12951321
with_ignore_fix: linter.can_be_suppressed(),
12961322
use_range: UseRange::NameOnly,
12971323
};
@@ -1302,7 +1328,7 @@ fn diagnostics_from_linters(
13021328
specs.extend(spec);
13031329
}
13041330
DiagnosticLinter::SsrPatterns(ssr_linter) => {
1305-
let diagnostics = ssr_linter.diagnostics(sema, file_id, severity);
1331+
let diagnostics = ssr_linter.diagnostics(sema, file_id, severity, cli_severity);
13061332
res.extend(diagnostics);
13071333
}
13081334
}

crates/ide/src/diagnostics/helpers.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ pub(crate) struct DiagnosticTemplate {
2929
pub(crate) code: DiagnosticCode,
3030
pub(crate) message: String,
3131
pub(crate) severity: Severity,
32+
pub(crate) cli_severity: Severity,
3233
pub(crate) with_ignore_fix: bool,
3334
pub(crate) use_range: UseRange,
3435
}
@@ -77,7 +78,8 @@ pub(crate) fn check_function_with_diagnostic_template(
7778
let range = ctx.range(&extra.use_range);
7879
if range.file_id == def.file.file_id {
7980
let diag = Diagnostic::new(extra.code.clone(), extra.message.clone(), range.range)
80-
.with_severity(extra.severity);
81+
.with_severity(extra.severity)
82+
.with_cli_severity(extra.cli_severity);
8183
let diag = if extra.with_ignore_fix {
8284
diag.with_ignore_fix(sema, def_fb.file_id())
8385
} else {
@@ -130,6 +132,7 @@ mod tests {
130132
code: DiagnosticCode::AdHoc("a code".to_string()),
131133
message: "diagnostic message".to_string(),
132134
severity: Severity::Warning,
135+
cli_severity: Severity::Warning,
133136
with_ignore_fix: true,
134137
use_range: UseRange::WithArgs,
135138
},

0 commit comments

Comments
 (0)