alef_backend_php/
naming.rs1use alef_core::config::ResolvedCrateConfig;
4
5pub fn php_autoload_namespace(config: &ResolvedCrateConfig) -> String {
10 use heck::ToPascalCase;
11
12 if let Some(php_cfg) = &config.php {
14 if let Some(ns) = &php_cfg.namespace {
15 return ns.clone();
16 }
17 }
18
19 let ext = config.php_extension_name();
21 if ext.contains('_') {
22 ext.split('_')
23 .map(|p| p.to_pascal_case())
24 .collect::<Vec<_>>()
25 .join("\\")
26 } else {
27 ext.to_pascal_case()
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34 use alef_core::config::new_config::NewAlefConfig;
35
36 fn resolved_one(toml: &str) -> ResolvedCrateConfig {
37 let cfg: NewAlefConfig = toml::from_str(toml).unwrap();
38 cfg.resolve().unwrap().remove(0)
39 }
40
41 fn minimal() -> ResolvedCrateConfig {
42 resolved_one(
43 r#"
44[workspace]
45languages = ["php"]
46
47[[crates]]
48name = "test-lib"
49sources = ["src/lib.rs"]
50"#,
51 )
52 }
53
54 #[test]
55 fn php_autoload_namespace_converts_snake_to_pascal_parts() {
56 let r = minimal();
57 assert_eq!(php_autoload_namespace(&r), "Test\\Lib");
59 }
60
61 #[test]
62 fn php_autoload_namespace_no_underscore_returns_single_pascal() {
63 let r = resolved_one(
64 r#"
65[workspace]
66languages = ["php"]
67
68[[crates]]
69name = "mylib"
70sources = ["src/lib.rs"]
71"#,
72 );
73 assert_eq!(php_autoload_namespace(&r), "Mylib");
75 }
76
77 #[test]
78 fn php_autoload_namespace_explicit_extension_name() {
79 let r = resolved_one(
80 r#"
81[workspace]
82languages = ["php"]
83
84[[crates]]
85name = "test-lib"
86sources = ["src/lib.rs"]
87
88[crates.php]
89extension_name = "html_to_markdown_rs"
90"#,
91 );
92 assert_eq!(php_autoload_namespace(&r), "Html\\To\\Markdown\\Rs");
93 }
94
95 #[test]
96 fn php_autoload_namespace_explicit_namespace_override() {
97 let r = resolved_one(
98 r#"
99[workspace]
100languages = ["php"]
101
102[[crates]]
103name = "html-to-markdown"
104sources = ["src/lib.rs"]
105
106[crates.php]
107extension_name = "html_to_markdown_rs"
108namespace = "HtmlToMarkdown"
109"#,
110 );
111 assert_eq!(php_autoload_namespace(&r), "HtmlToMarkdown");
112 }
113}