Skip to main content

fallow_core/
results.rs

1// Re-export all result types from fallow-types
2pub use fallow_types::results::{
3    AnalysisResults, CircularDependency, DependencyLocation, DuplicateExport, ExportUsage,
4    ReferenceLocation, TypeOnlyDependency, UnlistedDependency, UnresolvedImport, UnusedDependency,
5    UnusedExport, UnusedFile, UnusedMember,
6};
7
8#[cfg(test)]
9mod tests {
10    use std::path::PathBuf;
11
12    use super::*;
13    use crate::extract::MemberKind;
14
15    #[test]
16    fn empty_results_no_issues() {
17        let results = AnalysisResults::default();
18        assert_eq!(results.total_issues(), 0);
19        assert!(!results.has_issues());
20    }
21
22    #[test]
23    fn results_with_unused_file() {
24        let mut results = AnalysisResults::default();
25        results.unused_files.push(UnusedFile {
26            path: PathBuf::from("test.ts"),
27        });
28        assert_eq!(results.total_issues(), 1);
29        assert!(results.has_issues());
30    }
31
32    #[test]
33    fn results_with_unused_export() {
34        let mut results = AnalysisResults::default();
35        results.unused_exports.push(UnusedExport {
36            path: PathBuf::from("test.ts"),
37            export_name: "foo".to_string(),
38            is_type_only: false,
39            line: 1,
40            col: 0,
41            span_start: 0,
42            is_re_export: false,
43        });
44        assert_eq!(results.total_issues(), 1);
45        assert!(results.has_issues());
46    }
47
48    #[test]
49    fn results_total_counts_all_types() {
50        let mut results = AnalysisResults::default();
51        results.unused_files.push(UnusedFile {
52            path: PathBuf::from("a.ts"),
53        });
54        results.unused_exports.push(UnusedExport {
55            path: PathBuf::from("b.ts"),
56            export_name: "x".to_string(),
57            is_type_only: false,
58            line: 1,
59            col: 0,
60            span_start: 0,
61            is_re_export: false,
62        });
63        results.unused_types.push(UnusedExport {
64            path: PathBuf::from("c.ts"),
65            export_name: "T".to_string(),
66            is_type_only: true,
67            line: 1,
68            col: 0,
69            span_start: 0,
70            is_re_export: false,
71        });
72        results.unused_dependencies.push(UnusedDependency {
73            package_name: "dep".to_string(),
74            location: DependencyLocation::Dependencies,
75            path: PathBuf::from("package.json"),
76        });
77        results.unused_dev_dependencies.push(UnusedDependency {
78            package_name: "dev".to_string(),
79            location: DependencyLocation::DevDependencies,
80            path: PathBuf::from("package.json"),
81        });
82        results.unused_enum_members.push(UnusedMember {
83            path: PathBuf::from("d.ts"),
84            parent_name: "E".to_string(),
85            member_name: "A".to_string(),
86            kind: MemberKind::EnumMember,
87            line: 1,
88            col: 0,
89        });
90        results.unused_class_members.push(UnusedMember {
91            path: PathBuf::from("e.ts"),
92            parent_name: "C".to_string(),
93            member_name: "m".to_string(),
94            kind: MemberKind::ClassMethod,
95            line: 1,
96            col: 0,
97        });
98        results.unresolved_imports.push(UnresolvedImport {
99            path: PathBuf::from("f.ts"),
100            specifier: "./missing".to_string(),
101            line: 1,
102            col: 0,
103        });
104        results.unlisted_dependencies.push(UnlistedDependency {
105            package_name: "unlisted".to_string(),
106            imported_from: vec![PathBuf::from("g.ts")],
107        });
108        results.duplicate_exports.push(DuplicateExport {
109            export_name: "dup".to_string(),
110            locations: vec![PathBuf::from("h.ts"), PathBuf::from("i.ts")],
111        });
112
113        assert_eq!(results.total_issues(), 10);
114        assert!(results.has_issues());
115    }
116}