Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 47 additions & 2 deletions kondo-lib/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,20 @@
const FILE_CSPROJ_SUFFIX: &str = ".csproj";
const FILE_FSPROJ_SUFFIX: &str = ".fsproj";
const FILE_PROJECT_TURBOREPO: &str = "turbo.json";
const FILE_PODFILE: &str = "Podfile";

const PROJECT_CARGO_DIRS: [&str; 2] = ["target", ".xwin-cache"];
const PROJECT_NODE_DIRS: [&str; 2] = ["node_modules", ".angular"];
const PROJECT_REACT_NATIVE_DIRS: [&str; 9] = [

Check failure on line 36 in kondo-lib/src/lib.rs

View workflow job for this annotation

GitHub Actions / Test using stable

mismatched types
"node_modules",
"android/build",
"android/.gradle",
"ios/build",
"ios/DerivedData",
"ios/Pods",
".expo",
".metro"
];
const PROJECT_UNITY_DIRS: [&str; 7] = [
"Library",
"Temp",
Expand Down Expand Up @@ -79,9 +90,11 @@
const PROJECT_GODOT_4_DIRS: [&str; 1] = [".godot"];
const PROJECT_DOTNET_DIRS: [&str; 2] = ["bin", "obj"];
const PROJECT_TURBOREPO_DIRS: [&str; 1] = [".turbo"];
const PROJECT_COCOAPODS_DIRS: [&str; 1] = ["Pods"];

const PROJECT_CARGO_NAME: &str = "Cargo";
const PROJECT_NODE_NAME: &str = "Node";
const PROJECT_NODE_REACT_NATIVE_NAME: &str = "Node (React Native)";
const PROJECT_UNITY_NAME: &str = "Unity";
const PROJECT_STACK_NAME: &str = "Stack";
const PROJECT_CABAL_NAME: &str = "Cabal";
Expand All @@ -101,6 +114,7 @@
const PROJECT_GODOT_4_NAME: &str = "Godot 4.x";
const PROJECT_DOTNET_NAME: &str = ".NET";
const PROJECT_TURBOREPO_NAME: &str = "Turborepo";
const PROJECT_COCOAPODS_NAME: &str = "CocoaPods";

#[derive(Debug, Clone)]
pub enum ProjectType {
Expand All @@ -126,6 +140,7 @@
Godot4,
Dotnet,
Turborepo,
Cocoapods,
}

#[derive(Debug, Clone)]
Expand All @@ -145,7 +160,13 @@
pub fn artifact_dirs(&self) -> &[&str] {
match self.project_type {
ProjectType::Cargo => &PROJECT_CARGO_DIRS,
ProjectType::Node => &PROJECT_NODE_DIRS,
ProjectType::Node => {
if is_react_native_project(&self.path) {
&PROJECT_REACT_NATIVE_DIRS
} else {
&PROJECT_NODE_DIRS
}
}
ProjectType::Unity => &PROJECT_UNITY_DIRS,
ProjectType::Stack => &PROJECT_STACK_DIRS,
ProjectType::Cabal => &PROJECT_CABAL_DIRS,
Expand All @@ -165,6 +186,7 @@
ProjectType::Godot4 => &PROJECT_GODOT_4_DIRS,
ProjectType::Dotnet => &PROJECT_DOTNET_DIRS,
ProjectType::Turborepo => &PROJECT_TURBOREPO_DIRS,
ProjectType::Cocoapods => &PROJECT_COCOAPODS_DIRS,
}
}

Expand Down Expand Up @@ -256,7 +278,13 @@
pub fn type_name(&self) -> &'static str {
match self.project_type {
ProjectType::Cargo => PROJECT_CARGO_NAME,
ProjectType::Node => PROJECT_NODE_NAME,
ProjectType::Node => {
if is_react_native_project(&self.path) {
PROJECT_NODE_REACT_NATIVE_NAME
} else {
PROJECT_NODE_NAME
}
}
ProjectType::Unity => PROJECT_UNITY_NAME,
ProjectType::Stack => PROJECT_STACK_NAME,
ProjectType::Cabal => PROJECT_CABAL_NAME,
Expand All @@ -276,6 +304,7 @@
ProjectType::Godot4 => PROJECT_GODOT_4_NAME,
ProjectType::Dotnet => PROJECT_DOTNET_NAME,
ProjectType::Turborepo => PROJECT_TURBOREPO_NAME,
ProjectType::Cocoapods => PROJECT_COCOAPODS_NAME,
}
}

Expand Down Expand Up @@ -384,6 +413,7 @@
FILE_BUILD_ZIG => Some(ProjectType::Zig),
FILE_GODOT_4_PROJECT => Some(ProjectType::Godot4),
FILE_PROJECT_TURBOREPO => Some(ProjectType::Turborepo),
FILE_PODFILE => Some(ProjectType::Cocoapods),
file_name if file_name.ends_with(FILE_UNREAL_SUFFIX) => {
Some(ProjectType::Unreal)
}
Expand Down Expand Up @@ -429,6 +459,20 @@
.unwrap_or(false)
}

fn dir_contains_subdir(path: &Path, subdir: &str) -> bool {
path.read_dir()
.map(|rd| {
rd.filter_map(|rd| rd.ok()).any(|de| {
de.file_type().is_ok_and(|t| t.is_dir()) && de.file_name().to_str() == Some(subdir)
})
})
.unwrap_or(false)
}

fn is_react_native_project(path: &Path) -> bool {
dir_contains_subdir(path, "ios") || dir_contains_subdir(path, "android")
}

#[derive(Clone, Debug)]
pub struct ScanOptions {
pub follow_symlinks: bool,
Expand Down Expand Up @@ -504,6 +548,7 @@
FILE_SWIFT_PACKAGE => Some(ProjectType::Swift),
FILE_BUILD_ZIG => Some(ProjectType::Zig),
FILE_GODOT_4_PROJECT => Some(ProjectType::Godot4),
FILE_PODFILE => Some(ProjectType::Cocoapods),
_ => None,
};
if let Some(project_type) = p_type {
Expand Down
Loading