Skip to main content

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

1use super::super::ViolationOutputFormat;
2use super::FormattedRuleViolation;
3use super::format_violation;
4use crate::cmds::rsl::rules::TypedRule;
5use crate::cmds::rsl::rules::qualified_item::QualifiedItemRule;
6use crate::cmds::rsl::rules::qualified_item::QualifiedItemViolation;
7
8impl FormattedRuleViolation for QualifiedItemViolation {
9    fn format(&self, output_format: ViolationOutputFormat) -> String {
10        let imported_name = self
11            .details
12            .actual_path
13            .rsplit("::")
14            .next()
15            .unwrap_or(self.details.actual_path.as_str());
16        format_violation(
17            &self.location,
18            <QualifiedItemRule as TypedRule>::code(),
19            &format!(
20                "replace `{}` with `{}`; add `{}`",
21                self.details.actual_path, imported_name, self.details.expected_import
22            ),
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::Location;
35    use crate::cmds::rsl::rules::qualified_item::QualifiedItemDetails;
36    use crate::cmds::rsl::rules::qualified_item::QualifiedItemViolation;
37
38    #[test]
39    fn test_qualified_item_violation_when_details_are_present_formats_compact_output() {
40        let violation = QualifiedItemViolation {
41            location: Location::new(PathBuf::from("test.rs"), 3, 13),
42            details: QualifiedItemDetails {
43                actual_path: "external::Thing".to_owned(),
44                expected_import: "use external::Thing;".to_owned(),
45            },
46        };
47
48        assert_eq!(
49            FormattedRuleViolation::format(&violation, ViolationOutputFormat::Compact),
50            "test.rs:3:13,replace `external::Thing` with `Thing`; add `use external::Thing;`"
51        );
52    }
53}