style: Apply cargo fmt and clippy fixes across codebase
Automated formatting and lint corrections from parallel agent work: - cargo fmt: import reordering (alphabetical), line wrapping to respect max width, trailing comma normalization, destructuring alignment, function signature reformatting, match arm formatting - clippy (pedantic): Range::contains() instead of manual comparisons, i64::from() instead of `as i64` casts, .clamp() instead of .max().min() chains, let-chain refactors (if-let with &&), #[allow(clippy::too_many_arguments)] and #[allow(clippy::field_reassign_with_default)] where warranted - Removed trailing blank lines and extra whitespace No behavioral changes. All existing tests pass unmodified. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -33,7 +33,7 @@ pub fn resolve_project(conn: &Connection, project_str: &str) -> Result<i64> {
|
||||
let mut suffix_stmt = conn.prepare(
|
||||
"SELECT id, path_with_namespace FROM projects
|
||||
WHERE path_with_namespace LIKE '%/' || ?1
|
||||
OR path_with_namespace = ?1"
|
||||
OR path_with_namespace = ?1",
|
||||
)?;
|
||||
let suffix_matches: Vec<(i64, String)> = suffix_stmt
|
||||
.query_map(rusqlite::params![project_str], |row| {
|
||||
@@ -48,7 +48,11 @@ pub fn resolve_project(conn: &Connection, project_str: &str) -> Result<i64> {
|
||||
return Err(LoreError::Ambiguous(format!(
|
||||
"Project '{}' is ambiguous. Matching projects:\n{}\n\nHint: Use the full path, e.g., --project={}",
|
||||
project_str,
|
||||
matching.iter().map(|p| format!(" {}", p)).collect::<Vec<_>>().join("\n"),
|
||||
matching
|
||||
.iter()
|
||||
.map(|p| format!(" {}", p))
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n"),
|
||||
matching[0]
|
||||
)));
|
||||
}
|
||||
@@ -58,7 +62,7 @@ pub fn resolve_project(conn: &Connection, project_str: &str) -> Result<i64> {
|
||||
// Step 4: Case-insensitive substring match (unambiguous)
|
||||
let mut substr_stmt = conn.prepare(
|
||||
"SELECT id, path_with_namespace FROM projects
|
||||
WHERE LOWER(path_with_namespace) LIKE '%' || LOWER(?1) || '%'"
|
||||
WHERE LOWER(path_with_namespace) LIKE '%' || LOWER(?1) || '%'",
|
||||
)?;
|
||||
let substr_matches: Vec<(i64, String)> = substr_stmt
|
||||
.query_map(rusqlite::params![project_str], |row| {
|
||||
@@ -73,7 +77,11 @@ pub fn resolve_project(conn: &Connection, project_str: &str) -> Result<i64> {
|
||||
return Err(LoreError::Ambiguous(format!(
|
||||
"Project '{}' is ambiguous. Matching projects:\n{}\n\nHint: Use the full path, e.g., --project={}",
|
||||
project_str,
|
||||
matching.iter().map(|p| format!(" {}", p)).collect::<Vec<_>>().join("\n"),
|
||||
matching
|
||||
.iter()
|
||||
.map(|p| format!(" {}", p))
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n"),
|
||||
matching[0]
|
||||
)));
|
||||
}
|
||||
@@ -81,9 +89,8 @@ pub fn resolve_project(conn: &Connection, project_str: &str) -> Result<i64> {
|
||||
}
|
||||
|
||||
// Step 5: No match — list available projects
|
||||
let mut all_stmt = conn.prepare(
|
||||
"SELECT path_with_namespace FROM projects ORDER BY path_with_namespace"
|
||||
)?;
|
||||
let mut all_stmt =
|
||||
conn.prepare("SELECT path_with_namespace FROM projects ORDER BY path_with_namespace")?;
|
||||
let all_projects: Vec<String> = all_stmt
|
||||
.query_map([], |row| row.get(0))?
|
||||
.collect::<std::result::Result<Vec<_>, _>>()?;
|
||||
@@ -98,7 +105,11 @@ pub fn resolve_project(conn: &Connection, project_str: &str) -> Result<i64> {
|
||||
Err(LoreError::Other(format!(
|
||||
"Project '{}' not found.\n\nAvailable projects:\n{}\n\nHint: Use the full path, e.g., --project={}",
|
||||
project_str,
|
||||
all_projects.iter().map(|p| format!(" {}", p)).collect::<Vec<_>>().join("\n"),
|
||||
all_projects
|
||||
.iter()
|
||||
.map(|p| format!(" {}", p))
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n"),
|
||||
all_projects[0]
|
||||
)))
|
||||
}
|
||||
@@ -109,7 +120,8 @@ mod tests {
|
||||
|
||||
fn setup_db() -> Connection {
|
||||
let conn = Connection::open_in_memory().unwrap();
|
||||
conn.execute_batch("
|
||||
conn.execute_batch(
|
||||
"
|
||||
CREATE TABLE projects (
|
||||
id INTEGER PRIMARY KEY,
|
||||
gitlab_project_id INTEGER UNIQUE NOT NULL,
|
||||
@@ -121,7 +133,9 @@ mod tests {
|
||||
raw_payload_id INTEGER
|
||||
);
|
||||
CREATE INDEX idx_projects_path ON projects(path_with_namespace);
|
||||
").unwrap();
|
||||
",
|
||||
)
|
||||
.unwrap();
|
||||
conn
|
||||
}
|
||||
|
||||
@@ -129,7 +143,8 @@ mod tests {
|
||||
conn.execute(
|
||||
"INSERT INTO projects (id, gitlab_project_id, path_with_namespace) VALUES (?1, ?2, ?3)",
|
||||
rusqlite::params![id, id * 100, path],
|
||||
).unwrap();
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -164,7 +179,11 @@ mod tests {
|
||||
insert_project(&conn, 2, "frontend/auth-service");
|
||||
let err = resolve_project(&conn, "auth-service").unwrap_err();
|
||||
let msg = err.to_string();
|
||||
assert!(msg.contains("ambiguous"), "Expected ambiguous error, got: {}", msg);
|
||||
assert!(
|
||||
msg.contains("ambiguous"),
|
||||
"Expected ambiguous error, got: {}",
|
||||
msg
|
||||
);
|
||||
assert!(msg.contains("backend/auth-service"));
|
||||
assert!(msg.contains("frontend/auth-service"));
|
||||
}
|
||||
@@ -195,7 +214,11 @@ mod tests {
|
||||
// "code" matches both projects
|
||||
let err = resolve_project(&conn, "code").unwrap_err();
|
||||
let msg = err.to_string();
|
||||
assert!(msg.contains("ambiguous"), "Expected ambiguous error, got: {}", msg);
|
||||
assert!(
|
||||
msg.contains("ambiguous"),
|
||||
"Expected ambiguous error, got: {}",
|
||||
msg
|
||||
);
|
||||
assert!(msg.contains("vs/python-code"));
|
||||
assert!(msg.contains("vs/typescript-code"));
|
||||
}
|
||||
@@ -217,7 +240,11 @@ mod tests {
|
||||
insert_project(&conn, 1, "backend/auth-service");
|
||||
let err = resolve_project(&conn, "nonexistent").unwrap_err();
|
||||
let msg = err.to_string();
|
||||
assert!(msg.contains("not found"), "Expected not found error, got: {}", msg);
|
||||
assert!(
|
||||
msg.contains("not found"),
|
||||
"Expected not found error, got: {}",
|
||||
msg
|
||||
);
|
||||
assert!(msg.contains("backend/auth-service"));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user