frs/cmds/rsl/output/format/
unqualified_call.rs1use super::super::ViolationOutputFormat;
2use super::FormattedRuleViolation;
3use super::format_violation;
4use crate::cmds::rsl::rules::TypedRule;
5use crate::cmds::rsl::rules::unqualified_call::UnqualifiedCallRule;
6use crate::cmds::rsl::rules::unqualified_call::UnqualifiedCallViolation;
7
8impl FormattedRuleViolation for UnqualifiedCallViolation {
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 <UnqualifiedCallRule 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::unqualified_call::UnqualifiedCallViolation;
37
38 #[test]
39 fn test_unqualified_call_violation_when_details_are_present_formats_compact_output() {
40 let violation = UnqualifiedCallViolation {
41 location: Location::new(PathBuf::from("test.rs"), 2, 13),
42 details: CallDetails {
43 actual_path: "run()".to_owned(),
44 replacement_path: "self::run()".to_owned(),
45 add_import: None,
46 },
47 };
48
49 assert_eq!(
50 FormattedRuleViolation::format(&violation, ViolationOutputFormat::Compact),
51 "test.rs:2:13,replace `run()` with `self::run()`"
52 );
53 }
54}