Skip to main content

frs/cmds/rsl/output/format/
unqualified_call.rs

1use 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}