pub fn format_rust_code(code: String) -> String {
code.replace(" ; ", ";\n ")
.replace(" { ", " {\n ")
.replace(" } ", "\n}\n")
.replace("} ;", "};")
.replace(
"use std :: collections :: HashMap ;",
"use std::collections::HashMap;",
)
.replace(" . ", ".")
.replace(" (", "(")
.replace(" )", ")")
.replace(".len ()", ".len()")
.replace(".push (", ".push(")
.replace(".insert (", ".insert(")
.replace(".get (", ".get(")
.replace(".contains_key (", ".contains_key(")
.replace(".to_string ()", ".to_string()")
.replace(" ::", "::")
.replace(":: ", "::")
.replace("# [", "#[")
.replace(" : ", ": ")
.replace(" , ", ", ")
.replace("=(", " = (")
.replace("= (", " = (")
.replace(" =", " =") .replace(" =", " =") .replace("Vec < ", "Vec<")
.replace(" < ", "<")
.replace(" > ", ">")
.replace("> ", ">")
.replace("< ", "<")
.replace(" >", ">") .replace("->", " -> ")
.replace(" -> ", " -> ")
.replace(" -> ", " -> ")
.replace(" .. ", "..")
.replace(" ..", "..")
.replace(".. ", "..")
.replace("in(", "in (")
.replace(";\n }", "\n}")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_format_semicolon_spacing() {
let input = "let x = 5 ; ".to_string();
let result = format_rust_code(input);
assert!(result.contains(";\n"));
}
#[test]
fn test_format_method_call_spacing() {
let input = "vec . len ( )".to_string();
let result = format_rust_code(input);
assert!(result.contains("vec.len()"));
}
#[test]
fn test_format_generic_spacing() {
let input = "Vec < i32 >".to_string();
let result = format_rust_code(input);
assert!(result.contains("Vec<i32>"));
}
#[test]
fn test_format_return_type_spacing() {
let input = "fn foo()->i32".to_string();
let result = format_rust_code(input);
assert!(result.contains(" -> "));
}
}