frs/cmds/rsl/output/format/
overqualified_call.rs1use super::super::ViolationOutputFormat;
2use super::FormattedRuleViolation;
3use super::format_violation;
4use crate::cmds::rsl::rules::TypedRule;
5use crate::cmds::rsl::rules::overqualified_call::OverqualifiedCallRule;
6use crate::cmds::rsl::rules::overqualified_call::OverqualifiedCallViolation;
7
8impl FormattedRuleViolation for OverqualifiedCallViolation {
9 fn format(&self, output_format: ViolationOutputFormat) -> String {
10 let details = format!(
11 "replace `{}` with `{}`{}",
12 self.details.actual_path,
13 self.details.replacement_path,
14 self.details
15 .add_import
16 .as_ref()
17 .map_or_else(String::new, |import| format!("; add `{import}`")),
18 );
19 format_violation(
20 &self.location,
21 <OverqualifiedCallRule as TypedRule>::code(),
22 &details,
23 output_format,
24 )
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use std::path::PathBuf;
31
32 use super::super::super::ViolationOutputFormat;
33 use super::super::FormattedRuleViolation;
34 use crate::cmds::rsl::rules::common::CallDetails;
35 use crate::cmds::rsl::rules::common::Location;
36 use crate::cmds::rsl::rules::overqualified_call::OverqualifiedCallViolation;
37
38 #[test]
39 fn test_overqualified_call_violation_when_details_are_present_formats_compact_output() {
40 let violation = OverqualifiedCallViolation {
41 location: Location::new(PathBuf::from("test.rs"), 2, 13),
42 details: CallDetails {
43 actual_path: "run()".to_owned(),
44 replacement_path: "external::run()".to_owned(),
45 add_import: Some("use crate::external;".to_owned()),
46 },
47 };
48
49 assert_eq!(
50 FormattedRuleViolation::format(&violation, ViolationOutputFormat::Compact),
51 "test.rs:2:13,replace `run()` with `external::run()`; add `use crate::external;`"
52 );
53 }
54}