nessa/algorithms/
formats.rs

1use colored::Colorize;
2
3// Basic formats
4
5fn check_camel_case(name: &str, instance: &str) -> Result<(), String> {
6    if name.chars().next().unwrap().is_lowercase() {
7        return Err(format!("{instance} name {} should begin with an uppercase letter", name.green()));
8    }
9
10    if name.contains("_") {
11        return Err(format!("{instance} name {} should not contain underscores", name.green()));
12    }
13
14    Ok(())
15}
16
17fn check_snake_case(name: &str, instance: &str) -> Result<(), String> {
18    if name.chars().next().unwrap().is_uppercase() {
19        return Err(format!("{instance} name {} should begin with a lowercase letter", name.green()));
20    }
21
22    let chars = name.chars().collect::<Vec<_>>();
23
24    if chars.windows(2).any(|a| a[0].is_lowercase() && a[1].is_uppercase()) {
25        return Err(format!("{instance} name {} should not use camel case", name.green()));
26    }
27
28    Ok(())
29}
30
31// Special cases
32
33pub fn check_class_name(name: &str) -> Result<(), String> {
34    check_camel_case(name, "Class")
35}
36
37pub fn check_interface_name(name: &str) -> Result<(), String> {
38    check_camel_case(name, "Interface")
39}
40
41pub fn check_template_name(name: &str) -> Result<(), String> {
42    check_camel_case(name, "Template")
43}
44
45pub fn check_fn_name(name: &str) -> Result<(), String> {
46    check_snake_case(name, "Function")
47}