MCPcopy Create free account
hub / github.com/ccusage/ccusage / parse_project_name

Function parse_project_name

rust/crates/ccusage/src/project_names.rs:27–114  ·  view source on GitHub ↗
(project: &str)

Source from the content-addressed store, hash-verified

25}
26
27fn parse_project_name(project: &str) -> String {
28 if project.is_empty() || project == "unknown" {
29 return "Unknown Project".to_string();
30 }
31 let mut cleaned = project.to_string();
32 if is_windows_users_path(&cleaned) {
33 let segments = cleaned.split('\\').collect::<Vec<_>>();
34 if let Some(index) = segments.iter().position(|segment| *segment == "Users") {
35 if index + 3 < segments.len() {
36 cleaned = segments[index + 3..].join("-");
37 } else if index + 2 < segments.len() {
38 cleaned = segments[index + 2..].join("-");
39 }
40 }
41 } else if cleaned.starts_with("-Users-") || cleaned.starts_with("/Users/") {
42 let separator = if cleaned.starts_with("-Users-") {
43 '-'
44 } else {
45 '/'
46 };
47 let segments = cleaned
48 .split(separator)
49 .filter(|segment| !segment.is_empty())
50 .collect::<Vec<_>>();
51 if let Some(index) = segments.iter().position(|segment| *segment == "Users") {
52 if index + 3 < segments.len() {
53 cleaned = segments[index + 3..].join("-");
54 } else if index + 2 < segments.len() {
55 cleaned = segments[index + 2..].join("-");
56 }
57 }
58 } else {
59 cleaned = cleaned
60 .trim_matches(|ch| ch == '/' || ch == '\\' || ch == '-')
61 .to_string();
62 }
63 if cleaned.split('-').count() >= 5
64 && cleaned
65 .chars()
66 .all(|ch| ch.is_ascii_hexdigit() || ch == '-' || ch == '.')
67 {
68 let parts = cleaned.split('-').collect::<Vec<_>>();
69 cleaned = parts[parts.len().saturating_sub(2)..].join("-");
70 }
71 if let Some((main, _)) = cleaned.split_once("--") {
72 cleaned = main.to_string();
73 }
74 if cleaned.contains('-') && cleaned.len() > 20 {
75 let meaningful = cleaned
76 .split('-')
77 .filter(|segment| {
78 segment.len() > 2
79 && !matches!(
80 segment.to_ascii_lowercase().as_str(),
81 "dev"
82 | "development"
83 | "feat"
84 | "feature"

Callers 1

format_project_nameFunction · 0.85

Calls 3

is_windows_users_pathFunction · 0.85
lenMethod · 0.80
allMethod · 0.80

Tested by

no test coverage detected