refactor(build): reformat code and add tonic health dependency

- Reformatted build script with proper indentation and line breaks
- Added tonic-health dependency to Cargo.toml and updated lock file
- Improved error handling in disk cache with concurrent deletion checks
- Refactored conditional chains using && and let expressions
- Reformatted struct initialization and function parameter lists
- Added proper spacing and alignment in language stats processing
- Improved assertion formatting in test cases
- Reorganized import statements and code layout in multiple files
- Updated metrics functions with better parameter handling and formatting
This commit is contained in:
zhenyi
2026-06-11 13:56:15 +08:00
parent c32a7cad2f
commit a40da90ef9
31 changed files with 696 additions and 417 deletions
+59 -33
View File
@@ -111,16 +111,19 @@ fn generate_linguist(
// Merge: primary wins over secondary, with explicit priority for known conflicts
// These are common extensions where linguist has multiple primary claims
let priority_overrides: HashMap<&str, &str> = [
(".rs", "Rust"), // RenderScript also claims .rs
(".md", "Markdown"), // GCC Machine Description also claims .md
(".r", "R"), // Rebol also claims .r
(".s", "Assembly"), // Multiple assemblers claim .s
(".ms", "MAXScript"), // Unix Assembly also claims .ms
(".g", "G-code"), // GAP also claims .g
(".m", "Objective-C"), // Mercury, MUF, etc. also claim .m
(".w", "CWeb"), // OpenSCAD also claims .w
(".q", "Q"), // KBD also claims .q
].iter().cloned().collect();
(".rs", "Rust"), // RenderScript also claims .rs
(".md", "Markdown"), // GCC Machine Description also claims .md
(".r", "R"), // Rebol also claims .r
(".s", "Assembly"), // Multiple assemblers claim .s
(".ms", "MAXScript"), // Unix Assembly also claims .ms
(".g", "G-code"), // GAP also claims .g
(".m", "Objective-C"), // Mercury, MUF, etc. also claim .m
(".w", "CWeb"), // OpenSCAD also claims .w
(".q", "Q"), // KBD also claims .q
]
.iter()
.cloned()
.collect();
for (ext, (lang, ltype)) in ext_primary {
if let Some(&preferred) = priority_overrides.get(ext.as_str()) {
@@ -140,7 +143,11 @@ fn generate_linguist(
if let Some(entry) = languages.get(preferred)
&& entry.extensions.iter().any(|e| e.to_lowercase() == ext)
{
ext_map.push((ext.to_string(), preferred.to_string(), entry.lang_type.clone()));
ext_map.push((
ext.to_string(),
preferred.to_string(),
entry.lang_type.clone(),
));
}
}
}
@@ -172,8 +179,12 @@ fn generate_linguist(
code.push_str("/// Key is lowercase extension including the dot, e.g. \".rs\".\n");
code.push_str("pub static EXTENSION_MAP: &[(&str, &str, &str)] = &[\n");
for (ext, lang, ltype) in &ext_map {
code.push_str(&format!(" (\"{}\", \"{}\", \"{}\"),\n",
escape_str(ext), escape_str(lang), escape_str(ltype)));
code.push_str(&format!(
" (\"{}\", \"{}\", \"{}\"),\n",
escape_str(ext),
escape_str(lang),
escape_str(ltype)
));
}
code.push_str("];\n\n");
@@ -182,8 +193,12 @@ fn generate_linguist(
code.push_str("/// Key is exact filename, e.g. \"Makefile\", \"Dockerfile\".\n");
code.push_str("pub static FILENAME_MAP: &[(&str, &str, &str)] = &[\n");
for (fname, lang, ltype) in &fname_map {
code.push_str(&format!(" (\"{}\", \"{}\", \"{}\"),\n",
escape_str(fname), escape_str(lang), escape_str(ltype)));
code.push_str(&format!(
" (\"{}\", \"{}\", \"{}\"),\n",
escape_str(fname),
escape_str(lang),
escape_str(ltype)
));
}
code.push_str("];\n\n");
@@ -191,8 +206,11 @@ fn generate_linguist(
code.push_str("/// Language name to type mapping.\n");
code.push_str("pub static LANG_TYPE_MAP: &[(&str, &str)] = &[\n");
for (lang, ltype) in &lang_type_map {
code.push_str(&format!(" (\"{}\", \"{}\"),\n",
escape_str(lang), escape_str(ltype)));
code.push_str(&format!(
" (\"{}\", \"{}\"),\n",
escape_str(lang),
escape_str(ltype)
));
}
code.push_str("];\n\n");
@@ -202,8 +220,11 @@ fn generate_linguist(
let mut group_vec: Vec<_> = lang_group_map.iter().collect();
group_vec.sort_by(|a, b| a.0.cmp(b.0));
for (lang, group) in group_vec {
code.push_str(&format!(" (\"{}\", \"{}\"),\n",
escape_str(lang), escape_str(group)));
code.push_str(&format!(
" (\"{}\", \"{}\"),\n",
escape_str(lang),
escape_str(group)
));
}
code.push_str("];\n\n");
@@ -213,23 +234,28 @@ fn generate_linguist(
code.push_str(" match ext {\n");
// Image extensions
let image_exts = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".svg",
".webp", ".tiff", ".tif", ".psd", ".raw", ".heic", ".heif", ".avif",
".apng", ".jfif", ".pjpeg", ".pjp"];
let image_exts = [
".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".svg", ".webp", ".tiff", ".tif", ".psd",
".raw", ".heic", ".heif", ".avif", ".apng", ".jfif", ".pjpeg", ".pjp",
];
for ext in &image_exts {
code.push_str(&format!(" \"{}\" => \"Image\",\n", ext));
}
// Video extensions
let video_exts = [".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv", ".webm",
".m4v", ".mpg", ".mpeg", ".3gp", ".3g2", ".ogv", ".vob"];
let video_exts = [
".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv", ".webm", ".m4v", ".mpg", ".mpeg", ".3gp",
".3g2", ".ogv", ".vob",
];
for ext in &video_exts {
code.push_str(&format!(" \"{}\" => \"Video\",\n", ext));
}
// Audio extensions
let audio_exts = [".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a",
".opus", ".aiff", ".ape", ".alac", ".mid", ".midi"];
let audio_exts = [
".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".opus", ".aiff", ".ape", ".alac",
".mid", ".midi",
];
for ext in &audio_exts {
code.push_str(&format!(" \"{}\" => \"Audio\",\n", ext));
}
@@ -241,11 +267,12 @@ fn generate_linguist(
}
// Other binary
let binary_exts = [".exe", ".dll", ".so", ".dylib", ".a", ".lib", ".o",
".obj", ".bin", ".dat", ".db", ".sqlite", ".sqlite3", ".pyc", ".pyo",
".class", ".jar", ".war", ".ear", ".zip", ".tar", ".gz",
".bz2", ".xz", ".7z", ".rar", ".pdf", ".doc", ".docx", ".xls",
".xlsx", ".ppt", ".pptx", ".odt", ".ods", ".odp", ".wasm", ".node"];
let binary_exts = [
".exe", ".dll", ".so", ".dylib", ".a", ".lib", ".o", ".obj", ".bin", ".dat", ".db",
".sqlite", ".sqlite3", ".pyc", ".pyo", ".class", ".jar", ".war", ".ear", ".zip", ".tar",
".gz", ".bz2", ".xz", ".7z", ".rar", ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt",
".pptx", ".odt", ".ods", ".odp", ".wasm", ".node",
];
for ext in &binary_exts {
code.push_str(&format!(" \"{}\" => \"Binary\",\n", ext));
}
@@ -259,8 +286,7 @@ fn generate_linguist(
}
fn escape_str(s: &str) -> String {
s.replace('\\', "\\\\")
.replace('"', "\\\"")
s.replace('\\', "\\\\").replace('"', "\\\"")
}
fn proto_files(proto_dir: &Path) -> Result<Vec<PathBuf>, Box<dyn std::error::Error>> {