use super::base::ReviewGuidelines;
pub fn add_elixir_guidelines(guidelines: ReviewGuidelines) -> ReviewGuidelines {
ReviewGuidelines {
quality_checks: guidelines
.quality_checks
.into_iter()
.chain([
"Use pattern matching effectively".to_string(),
"Follow pipe operator conventions".to_string(),
"Use dialyzer for type checking".to_string(),
])
.collect(),
performance_checks: guidelines
.performance_checks
.into_iter()
.chain([
"Use streams for large data processing".to_string(),
"Consider GenServer state design".to_string(),
])
.collect(),
idioms: guidelines
.idioms
.into_iter()
.chain([
"Let it crash - use supervisors".to_string(),
"Use with for happy path chaining".to_string(),
])
.collect(),
..guidelines
}
}
pub fn add_scala_guidelines(guidelines: ReviewGuidelines) -> ReviewGuidelines {
ReviewGuidelines {
quality_checks: guidelines
.quality_checks
.into_iter()
.chain([
"Use immutable collections".to_string(),
"Prefer Option over null".to_string(),
"Use pattern matching".to_string(),
"Follow functional programming principles".to_string(),
])
.collect(),
anti_patterns: guidelines
.anti_patterns
.into_iter()
.chain([
"Avoid mutable state".to_string(),
"Don't use return statements".to_string(),
"Avoid throwing exceptions".to_string(),
])
.collect(),
..guidelines
}
}
pub fn add_swift_guidelines(guidelines: ReviewGuidelines) -> ReviewGuidelines {
ReviewGuidelines {
quality_checks: guidelines
.quality_checks
.into_iter()
.chain([
"Use optionals correctly".to_string(),
"Follow Swift API design guidelines".to_string(),
"Use value types where appropriate".to_string(),
"Leverage Swift's type inference".to_string(),
])
.collect(),
security_checks: guidelines
.security_checks
.into_iter()
.chain([
"Use Keychain for sensitive data".to_string(),
"Validate URL schemes".to_string(),
])
.collect(),
anti_patterns: guidelines
.anti_patterns
.into_iter()
.chain([
"Avoid force unwrapping (!)".to_string(),
"Don't use implicitly unwrapped optionals unnecessarily".to_string(),
])
.collect(),
..guidelines
}
}
#[cfg(test)]
mod tests {
use super::{
add_elixir_guidelines, add_scala_guidelines, add_swift_guidelines, ReviewGuidelines,
};
#[test]
fn test_elixir_guidelines() {
let guidelines = add_elixir_guidelines(ReviewGuidelines::default());
assert!(guidelines
.quality_checks
.iter()
.any(|c| c.contains("pattern matching") || c.contains("pipe")));
assert!(guidelines
.idioms
.iter()
.any(|c| c.contains("crash") || c.contains("supervisor")));
}
#[test]
fn test_scala_guidelines() {
let guidelines = add_scala_guidelines(ReviewGuidelines::default());
assert!(guidelines
.quality_checks
.iter()
.any(|c| c.contains("immutable") || c.contains("Option")));
assert!(guidelines
.anti_patterns
.iter()
.any(|c| c.contains("mutable")));
}
#[test]
fn test_swift_guidelines() {
let guidelines = add_swift_guidelines(ReviewGuidelines::default());
assert!(guidelines
.quality_checks
.iter()
.any(|c| c.contains("optional")));
assert!(guidelines
.anti_patterns
.iter()
.any(|c| c.contains("force unwrapping") || c.contains('!')));
}
}