use regex::Regex;
pub struct KotlinPatterns {
external_patterns: Vec<Regex>,
cache_patterns: Vec<Regex>,
extensions: Vec<String>,
}
impl KotlinPatterns {
pub fn new() -> Self {
let external_patterns = vec![
Regex::new(r"\.class$").unwrap(),
Regex::new(r"\.jar$").unwrap(),
Regex::new(r"\.war$").unwrap(),
Regex::new(r"\.aar$").unwrap(),
Regex::new(r"\.kotlin_module$").unwrap(),
Regex::new(r"\.kotlin_metadata$").unwrap(),
Regex::new(r"build/").unwrap(),
Regex::new(r"target/").unwrap(),
Regex::new(r"out/").unwrap(),
Regex::new(r"bin/").unwrap(),
Regex::new(r"classes/").unwrap(),
Regex::new(r"\.gradle/").unwrap(),
Regex::new(r"gradle-app\.setting").unwrap(),
Regex::new(r"gradlew").unwrap(),
Regex::new(r"gradlew\.bat").unwrap(),
Regex::new(r"gradle\.properties").unwrap(),
Regex::new(r"\.m2/").unwrap(),
Regex::new(r"\.mvn/").unwrap(),
Regex::new(r"\.klib$").unwrap(),
Regex::new(r"\.knm$").unwrap(),
Regex::new(r"\.kmp/").unwrap(),
Regex::new(r"\.apk$").unwrap(),
Regex::new(r"\.aab$").unwrap(),
Regex::new(r"\.dex$").unwrap(),
Regex::new(r"\.ap_$").unwrap(),
Regex::new(r"\.idea/").unwrap(),
Regex::new(r"\.eclipse/").unwrap(),
Regex::new(r"\.metadata/").unwrap(),
Regex::new(r"\.settings/").unwrap(),
Regex::new(r"\.project$").unwrap(),
Regex::new(r"\.classpath$").unwrap(),
Regex::new(r"\.iml$").unwrap(),
Regex::new(r"\.ipr$").unwrap(),
Regex::new(r"\.iws$").unwrap(),
Regex::new(r"local\.properties").unwrap(),
Regex::new(r"\.externalNativeBuild/").unwrap(),
Regex::new(r"\.cxx/").unwrap(),
Regex::new(r"\.kotlin/").unwrap(),
Regex::new(r"dokka/").unwrap(),
Regex::new(r"\.kover/").unwrap(),
Regex::new(r"\.tmp/").unwrap(),
Regex::new(r"tmp/").unwrap(),
Regex::new(r"\.log$").unwrap(),
Regex::new(r"logs/").unwrap(),
Regex::new(r"\.DS_Store$").unwrap(),
Regex::new(r"Thumbs\.db$").unwrap(),
Regex::new(r"desktop\.ini$").unwrap(),
Regex::new(r"\.git/").unwrap(),
Regex::new(r"\.svn/").unwrap(),
Regex::new(r"\.hg/").unwrap(),
Regex::new(r"node_modules/").unwrap(), Regex::new(r"package-lock\.json").unwrap(),
Regex::new(r"\.js\.map$").unwrap(),
Regex::new(r"kotlin-js-store/").unwrap(),
];
let cache_patterns = vec![
Regex::new(r"\.gradle/caches/").unwrap(),
Regex::new(r"\.gradle/wrapper/").unwrap(),
Regex::new(r"\.m2/repository/").unwrap(),
Regex::new(r"\.kotlin/sessions/").unwrap(),
Regex::new(r"\.kotlin/incremental/").unwrap(),
Regex::new(r"\.idea/caches/").unwrap(),
Regex::new(r"\.idea/shelf/").unwrap(),
Regex::new(r"\.android/build-cache/").unwrap(),
Regex::new(r"\.konan/").unwrap(),
Regex::new(r"\.kover/cache/").unwrap(),
];
let extensions = vec![
"kt".to_string(),
"kts".to_string(), ];
Self {
external_patterns,
cache_patterns,
extensions,
}
}
pub fn get_external_patterns(&self) -> &[Regex] {
&self.external_patterns
}
pub fn get_cache_patterns(&self) -> &[Regex] {
&self.cache_patterns
}
pub fn get_extensions(&self) -> &[String] {
&self.extensions
}
pub fn is_external(&self, path: &str) -> bool {
self.external_patterns.iter().any(|pattern| pattern.is_match(path))
}
pub fn is_cache(&self, path: &str) -> bool {
self.cache_patterns.iter().any(|pattern| pattern.is_match(path))
}
pub fn is_supported_extension(&self, ext: &str) -> bool {
self.extensions.contains(&ext.to_lowercase())
}
pub fn get_script_names() -> Vec<&'static str> {
vec![
"build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts",
"gradle.properties", "gradlew", "gradlew.bat",
"pom.xml", "pom.properties", "settings.xml",
"mvnw", "mvnw.cmd",
"local.properties", "proguard-rules.pro",
"kotlin-js-store", "kotlin-native-store",
"package.json", "package-lock.json", ]
}
}
impl Default for KotlinPatterns {
fn default() -> Self {
Self::new()
}
}