fix(atlas): clippy + rustfmt — fix map_or and formatting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-25 14:53:57 +01:00
co-authored by Claude Opus 4.6
parent 595388cd6f
commit f8b44fb518
+179 -72
View File
@@ -475,7 +475,8 @@ fn query_bodies(
}
sql.push_str(" ORDER BY system_id, orbit_index");
let params_ref: Vec<&dyn rusqlite::types::ToSql> = param_values.iter().map(|p| p.as_ref()).collect();
let params_ref: Vec<&dyn rusqlite::types::ToSql> =
param_values.iter().map(|p| p.as_ref()).collect();
let mut stmt = conn.prepare(&sql).unwrap();
let rows = stmt
.query_map(params_ref.as_slice(), |row| {
@@ -527,7 +528,8 @@ fn query_stations(
}
sql.push_str(" ORDER BY system_id, station_id");
let params_ref: Vec<&dyn rusqlite::types::ToSql> = param_values.iter().map(|p| p.as_ref()).collect();
let params_ref: Vec<&dyn rusqlite::types::ToSql> =
param_values.iter().map(|p| p.as_ref()).collect();
let mut stmt = conn.prepare(&sql).unwrap();
stmt.query_map(params_ref.as_slice(), |row| {
Ok(StationRow {
@@ -596,10 +598,22 @@ fn cmd_list_stations(conn: &Connection, system: Option<&str>, station_type: Opti
fn cmd_add_body(conn: &Connection, args: &Commands) {
let Commands::AddBody {
id, system, r#type, orbit, name, parent,
mass_class, atmosphere, gravity, biome,
inhabited, population,
} = args else { unreachable!() };
id,
system,
r#type,
orbit,
name,
parent,
mass_class,
atmosphere,
gravity,
biome,
inhabited,
population,
} = args
else {
unreachable!()
};
conn.execute(
"INSERT INTO bodies (body_id, system_id, parent_body_id, body_type, orbit_index,
@@ -607,9 +621,18 @@ fn cmd_add_body(conn: &Connection, args: &Commands) {
biome_summary, inhabited, population)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12)",
params![
id, system, parent, r#type, orbit,
name, mass_class, atmosphere, gravity,
biome, *inhabited as i32, population.unwrap_or(0),
id,
system,
parent,
r#type,
orbit,
name,
mass_class,
atmosphere,
gravity,
biome,
*inhabited as i32,
population.unwrap_or(0),
],
)
.unwrap_or_else(|e| {
@@ -622,17 +645,32 @@ fn cmd_add_body(conn: &Connection, args: &Commands) {
fn cmd_add_station(conn: &Connection, args: &Commands) {
let Commands::AddStation {
id, system, orbits, r#type, name,
population, docking, gate,
} = args else { unreachable!() };
id,
system,
orbits,
r#type,
name,
population,
docking,
gate,
} = args
else {
unreachable!()
};
conn.execute(
"INSERT INTO stations (station_id, system_id, orbits_body_id, station_type,
proper_name, population, docking_class, has_gate_infrastructure)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8)",
params![
id, system, orbits, r#type, name,
population.unwrap_or(0), docking, *gate as i32,
id,
system,
orbits,
r#type,
name,
population.unwrap_or(0),
docking,
*gate as i32,
],
)
.unwrap_or_else(|e| {
@@ -651,17 +689,17 @@ fn cmd_stats(conn: &Connection) {
.query_row("SELECT COUNT(*) FROM bodies", [], |r| r.get(0))
.unwrap();
let inhabited_bodies: i64 = conn
.query_row("SELECT COUNT(*) FROM bodies WHERE inhabited = 1", [], |r| r.get(0))
.query_row("SELECT COUNT(*) FROM bodies WHERE inhabited = 1", [], |r| {
r.get(0)
})
.unwrap();
let stations: i64 = conn
.query_row("SELECT COUNT(*) FROM stations", [], |r| r.get(0))
.unwrap();
let systems_with_bodies: i64 = conn
.query_row(
"SELECT COUNT(DISTINCT system_id) FROM bodies",
[],
|r| r.get(0),
)
.query_row("SELECT COUNT(DISTINCT system_id) FROM bodies", [], |r| {
r.get(0)
})
.unwrap();
let mut bodies_by_type = Vec::new();
@@ -716,7 +754,9 @@ fn cmd_stats(conn: &Connection) {
fn parse_wiki_bodies_line(wiki_dir: &str, system_id: &str) -> (Option<String>, i32, i32) {
// Try to find the wiki page for this system
let sid_slug = system_id.replace(' ', "-");
let wiki_path = std::path::Path::new(wiki_dir).join(&sid_slug).join("index.md");
let wiki_path = std::path::Path::new(wiki_dir)
.join(&sid_slug)
.join("index.md");
if !wiki_path.exists() {
return (None, 0, 0);
}
@@ -765,9 +805,7 @@ fn generate_body_matrix(
let mut orbit = 1;
// Determine planet count from star type if wiki doesn't specify
let spectral_char = spectral
.and_then(|s| s.chars().next())
.unwrap_or('M');
let spectral_char = spectral.and_then(|s| s.chars().next()).unwrap_or('M');
// Base planet count by spectral type.
// Sol has 8. TRAPPIST-1 (M-dwarf) has 7. Minimum 6 for any star.
@@ -776,10 +814,10 @@ fn generate_body_matrix(
let known = wiki_hab.max(wiki_inh);
match spectral_char {
'O' | 'B' | 'A' => (known + 4).max(6), // hot stars — fewer but still 6+
'F' => (known + 5).max(8), // bright — wide system, 8+
'G' => (known + 5).max(8), // sol-like — 8 is baseline
'K' => (known + 4).max(7), // cooler — 7+ typical
'M' => (known + 4).max(6), // compact but TRAPPIST-1 has 7
'F' => (known + 5).max(8), // bright — wide system, 8+
'G' => (known + 5).max(8), // sol-like — 8 is baseline
'K' => (known + 4).max(7), // cooler — 7+ typical
'M' => (known + 4).max(6), // compact but TRAPPIST-1 has 7
_ => (known + 4).max(6),
}
} else {
@@ -795,7 +833,7 @@ fn generate_body_matrix(
};
// Determine if binary — affects naming
let is_binary = star_type.map_or(false, |t| t == "binary");
let is_binary = star_type == Some("binary");
// Place inner barren rocky planets
let inner_barren = if total_planets > wiki_inh + 1 { 1 } else { 0 };
@@ -820,7 +858,10 @@ fn generate_body_matrix(
rotation_period_hours: Some(1408.0),
atmosphere: Some("none".into()),
biome_summary: Some("barren".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: "inner rocky, uninhabited".into(),
});
orbit += 1;
@@ -848,7 +889,10 @@ fn generate_body_matrix(
rotation_period_hours: Some(24.0),
atmosphere: Some("breathable".into()),
biome_summary: Some("temperate".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: format!("inhabited planet {}/{}", i + 1, wiki_inh),
});
orbit += 1;
@@ -877,7 +921,10 @@ fn generate_body_matrix(
rotation_period_hours: Some(26.0),
atmosphere: Some("breathable".into()),
biome_summary: Some("temperate".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: "habitable, uninhabited".into(),
});
orbit += 1;
@@ -907,7 +954,10 @@ fn generate_body_matrix(
rotation_period_hours: Some(18.0),
atmosphere: Some("thin".into()),
biome_summary: Some("frozen".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: "outer rocky/ice, uninhabited".into(),
});
orbit += 1;
@@ -929,7 +979,10 @@ fn generate_body_matrix(
rotation_period_hours: None,
atmosphere: None,
biome_summary: None,
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: "asteroid belt".into(),
});
orbit += 1;
@@ -957,7 +1010,10 @@ fn generate_body_matrix(
rotation_period_hours: Some(10.0),
atmosphere: Some("dense".into()),
biome_summary: None,
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: "gas giant".into(),
});
// 2 default moons
@@ -976,7 +1032,10 @@ fn generate_body_matrix(
rotation_period_hours: Some(3.5 * 24.0 * m as f64),
atmosphere: Some("none".into()),
biome_summary: Some("barren".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: format!("moon {} of gas giant", m),
});
}
@@ -999,7 +1058,10 @@ fn generate_body_matrix(
rotation_period_hours: None,
atmosphere: None,
biome_summary: None,
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
hydrosphere: None,
economic_role: None,
settlement_pattern: None,
industrial_corridor: None,
notes: "oort cloud".into(),
});
@@ -1058,8 +1120,16 @@ fn cmd_author(conn: &Connection, system_id: &str, outdir: &str, wiki_dir: &str)
let (raw_line, wiki_hab, wiki_inh) = parse_wiki_bodies_line(wiki_dir, &sid);
// Use wiki data preferentially, fall back to DB
let hab = if wiki_hab > 0 { wiki_hab } else { db_hab.unwrap_or(0) };
let inh = if wiki_inh > 0 { wiki_inh } else { db_inh.unwrap_or(0) };
let hab = if wiki_hab > 0 {
wiki_hab
} else {
db_hab.unwrap_or(0)
};
let inh = if wiki_inh > 0 {
wiki_inh
} else {
db_inh.unwrap_or(0)
};
let has_belt = db_belt.unwrap_or(0) != 0;
let has_gg = db_gg.unwrap_or(0) != 0;
let has_horizon = db_horizon.unwrap_or(0) != 0;
@@ -1203,26 +1273,19 @@ fn cmd_commit_system(conn: &Connection, path: &str) {
})
.count() as i32;
let inhabited_count: i32 = proposal
.bodies
.iter()
.filter(|b| b.inhabited)
.count() as i32
+ proposal.stations.iter().filter(|s| {
s.population.unwrap_or(0) > 0 || s.station_type == "horizon"
}).count() as i32;
let inhabited_count: i32 = proposal.bodies.iter().filter(|b| b.inhabited).count() as i32
+ proposal
.stations
.iter()
.filter(|s| s.population.unwrap_or(0) > 0 || s.station_type == "horizon")
.count() as i32;
let has_gas_giant: i32 = proposal
.bodies
.iter()
.any(|b| b.body_type == "gas_giant")
as i32;
let has_gas_giant: i32 = proposal.bodies.iter().any(|b| b.body_type == "gas_giant") as i32;
let has_belt: i32 = proposal
.bodies
.iter()
.any(|b| b.body_type == "asteroid_belt")
as i32;
.any(|b| b.body_type == "asteroid_belt") as i32;
tx.execute(
"UPDATE star_systems SET habitable_planet_count = ?1, inhabited_planet_count = ?2,
@@ -1345,7 +1408,9 @@ fn cmd_next(conn: &Connection, hop: Option<i32>) {
};
if target_hop < 0 {
println!(r#"{{"hop": null, "count": 0, "systems": [], "message": "all systems have bodies"}}"#);
println!(
r#"{{"hop": null, "count": 0, "systems": [], "message": "all systems have bodies"}}"#
);
return;
}
@@ -1428,7 +1493,9 @@ fn cmd_sync_wiki(conn: &Connection, system_id: Option<&str>, wiki_dir: &str) {
for sid in &system_ids {
let sid_slug = sid.replace(' ', "-");
let wiki_path = std::path::Path::new(wiki_dir).join(&sid_slug).join("index.md");
let wiki_path = std::path::Path::new(wiki_dir)
.join(&sid_slug)
.join("index.md");
if !wiki_path.exists() {
eprintln!("skip: {} — no wiki page at {}", sid, wiki_path.display());
continue;
@@ -1543,7 +1610,8 @@ fn cmd_sync_wiki(conn: &Connection, system_id: Option<&str>, wiki_dir: &str) {
// Build the Celestial Bodies section
let mut section = String::new();
section.push_str("## Celestial Bodies\n");
section.push_str("<!-- READ-ONLY — generated from systems.db bodies/stations tables -->\n\n");
section
.push_str("<!-- READ-ONLY — generated from systems.db bodies/stations tables -->\n\n");
// Bodies table
if !bodies.is_empty() {
@@ -1561,9 +1629,18 @@ fn cmd_sync_wiki(conn: &Connection, system_id: Option<&str>, wiki_dir: &str) {
} else {
"".to_string()
};
let grav = b.gravity.map(|g| format!("{:.2}g", g)).unwrap_or_else(|| "".to_string());
let year = b.orbital_days.map(|d| format!("{:.0}", d)).unwrap_or_else(|| "".to_string());
let day = b.rotation_hours.map(|h| format!("{:.1}", h)).unwrap_or_else(|| "".to_string());
let grav = b
.gravity
.map(|g| format!("{:.2}g", g))
.unwrap_or_else(|| "".to_string());
let year = b
.orbital_days
.map(|d| format!("{:.0}", d))
.unwrap_or_else(|| "".to_string());
let day = b
.rotation_hours
.map(|h| format!("{:.1}", h))
.unwrap_or_else(|| "".to_string());
section.push_str(&format!(
"| {} | `{}` | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} |\n",
b.orbit,
@@ -1593,9 +1670,18 @@ fn cmd_sync_wiki(conn: &Connection, system_id: Option<&str>, wiki_dir: &str) {
} else {
"".to_string()
};
let mgrav = m.gravity.map(|g| format!("{:.2}g", g)).unwrap_or_else(|| "".to_string());
let myear = m.orbital_days.map(|d| format!("{:.0}", d)).unwrap_or_else(|| "".to_string());
let mday = m.rotation_hours.map(|h| format!("{:.1}", h)).unwrap_or_else(|| "".to_string());
let mgrav = m
.gravity
.map(|g| format!("{:.2}g", g))
.unwrap_or_else(|| "".to_string());
let myear = m
.orbital_days
.map(|d| format!("{:.0}", d))
.unwrap_or_else(|| "".to_string());
let mday = m
.rotation_hours
.map(|h| format!("{:.1}", h))
.unwrap_or_else(|| "".to_string());
section.push_str(&format!(
"| ↳ {}.{} | `{}` | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} |\n",
b.orbit,
@@ -1664,12 +1750,22 @@ fn cmd_sync_wiki(conn: &Connection, system_id: Option<&str>, wiki_dir: &str) {
.find("\n## ")
.map(|p| start_pos + marker_start.len() + p + 1)
.unwrap_or(content.len());
format!("{}{}\n{}", &content[..start_pos], section.trim_end(), &content[end_offset..])
format!(
"{}{}\n{}",
&content[..start_pos],
section.trim_end(),
&content[end_offset..]
)
} else {
// Insert before ## Topology if it exists, otherwise before end of file
if let Some(topo_pos) = content.find("\n## Topology") {
let insert_pos = topo_pos + 1; // after the newline
format!("{}{}\n\n{}", &content[..insert_pos], section.trim_end(), &content[insert_pos..])
format!(
"{}{}\n\n{}",
&content[..insert_pos],
section.trim_end(),
&content[insert_pos..]
)
} else {
// No topology section — append at end
format!("{}\n{}", content.trim_end(), section)
@@ -1721,22 +1817,33 @@ fn main() {
Commands::ShowSystem { system_id } => cmd_show_system(&conn, system_id),
Commands::ShowBody { body_id } => cmd_show_body(&conn, body_id),
Commands::ShowStation { station_id } => cmd_show_station(&conn, station_id),
Commands::ListBodies { system, r#type, inhabited, unnamed } => {
cmd_list_bodies(&conn, system.as_deref(), r#type.as_deref(), *inhabited, *unnamed)
}
Commands::ListBodies {
system,
r#type,
inhabited,
unnamed,
} => cmd_list_bodies(
&conn,
system.as_deref(),
r#type.as_deref(),
*inhabited,
*unnamed,
),
Commands::ListStations { system, r#type } => {
cmd_list_stations(&conn, system.as_deref(), r#type.as_deref())
}
cmd @ Commands::AddBody { .. } => cmd_add_body(&conn, cmd),
cmd @ Commands::AddStation { .. } => cmd_add_station(&conn, cmd),
Commands::Stats => cmd_stats(&conn),
Commands::Author { system_id, outdir, wiki } => cmd_author(&conn, system_id, outdir, wiki),
Commands::Author {
system_id,
outdir,
wiki,
} => cmd_author(&conn, system_id, outdir, wiki),
Commands::CommitSystem { path } => cmd_commit_system(&conn, path),
Commands::WipeSystem { system_id } => cmd_wipe_system(&conn, system_id),
Commands::Unfinished => cmd_unfinished(&conn),
Commands::Next { hop } => cmd_next(&conn, *hop),
Commands::SyncWiki { system_id, wiki } => {
cmd_sync_wiki(&conn, system_id.as_deref(), wiki)
}
Commands::SyncWiki { system_id, wiki } => cmd_sync_wiki(&conn, system_id.as_deref(), wiki),
}
}