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:
@@ -86,7 +86,10 @@ mod tests {
|
||||
let result = compute_next_attempt_at(now, 1);
|
||||
let delay = result - now;
|
||||
// attempt 1: base = 2000ms, with jitter: 1800-2200ms
|
||||
assert!(delay >= 1800 && delay <= 2200, "first retry delay: {delay}ms");
|
||||
assert!(
|
||||
(1800..=2200).contains(&delay),
|
||||
"first retry delay: {delay}ms"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -31,22 +31,10 @@ const MIGRATIONS: &[(&str, &str)] = &[
|
||||
"006",
|
||||
include_str!("../../migrations/006_merge_requests.sql"),
|
||||
),
|
||||
(
|
||||
"007",
|
||||
include_str!("../../migrations/007_documents.sql"),
|
||||
),
|
||||
(
|
||||
"008",
|
||||
include_str!("../../migrations/008_fts5.sql"),
|
||||
),
|
||||
(
|
||||
"009",
|
||||
include_str!("../../migrations/009_embeddings.sql"),
|
||||
),
|
||||
(
|
||||
"010",
|
||||
include_str!("../../migrations/010_chunk_config.sql"),
|
||||
),
|
||||
("007", include_str!("../../migrations/007_documents.sql")),
|
||||
("008", include_str!("../../migrations/008_fts5.sql")),
|
||||
("009", include_str!("../../migrations/009_embeddings.sql")),
|
||||
("010", include_str!("../../migrations/010_chunk_config.sql")),
|
||||
(
|
||||
"011",
|
||||
include_str!("../../migrations/011_resource_events.sql"),
|
||||
|
||||
@@ -40,7 +40,15 @@ pub fn enqueue_job(
|
||||
"INSERT OR IGNORE INTO pending_dependent_fetches
|
||||
(project_id, entity_type, entity_iid, entity_local_id, job_type, payload_json, enqueued_at)
|
||||
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)",
|
||||
rusqlite::params![project_id, entity_type, entity_iid, entity_local_id, job_type, payload_json, now],
|
||||
rusqlite::params![
|
||||
project_id,
|
||||
entity_type,
|
||||
entity_iid,
|
||||
entity_local_id,
|
||||
job_type,
|
||||
payload_json,
|
||||
now
|
||||
],
|
||||
)?;
|
||||
|
||||
Ok(changes > 0)
|
||||
@@ -69,21 +77,18 @@ pub fn claim_jobs(conn: &Connection, job_type: &str, batch_size: usize) -> Resul
|
||||
)?;
|
||||
|
||||
let jobs: Vec<PendingJob> = select_stmt
|
||||
.query_map(
|
||||
rusqlite::params![job_type, now, batch_size as i64],
|
||||
|row| {
|
||||
Ok(PendingJob {
|
||||
id: row.get(0)?,
|
||||
project_id: row.get(1)?,
|
||||
entity_type: row.get(2)?,
|
||||
entity_iid: row.get(3)?,
|
||||
entity_local_id: row.get(4)?,
|
||||
job_type: row.get(5)?,
|
||||
payload_json: row.get(6)?,
|
||||
attempts: row.get(7)?,
|
||||
})
|
||||
},
|
||||
)?
|
||||
.query_map(rusqlite::params![job_type, now, batch_size as i64], |row| {
|
||||
Ok(PendingJob {
|
||||
id: row.get(0)?,
|
||||
project_id: row.get(1)?,
|
||||
entity_type: row.get(2)?,
|
||||
entity_iid: row.get(3)?,
|
||||
entity_local_id: row.get(4)?,
|
||||
job_type: row.get(5)?,
|
||||
payload_json: row.get(6)?,
|
||||
attempts: row.get(7)?,
|
||||
})
|
||||
})?
|
||||
.collect::<std::result::Result<Vec<_>, _>>()?;
|
||||
|
||||
// Lock the claimed jobs
|
||||
|
||||
@@ -222,9 +222,9 @@ impl LoreError {
|
||||
"Check database file permissions or reset with 'lore reset'.\n\n Example:\n lore doctor\n lore reset --yes",
|
||||
),
|
||||
Self::Http(_) => Some("Check network connection"),
|
||||
Self::NotFound(_) => Some(
|
||||
"Verify the entity exists.\n\n Example:\n lore issues\n lore mrs",
|
||||
),
|
||||
Self::NotFound(_) => {
|
||||
Some("Verify the entity exists.\n\n Example:\n lore issues\n lore mrs")
|
||||
}
|
||||
Self::Ambiguous(_) => Some(
|
||||
"Use -p to choose a specific project.\n\n Example:\n lore issues 42 -p group/project-a\n lore mrs 99 -p group/project-b",
|
||||
),
|
||||
|
||||
@@ -150,7 +150,10 @@ pub fn upsert_milestone_events(
|
||||
|
||||
/// Resolve entity type string to (issue_id, merge_request_id) pair.
|
||||
/// Exactly one is Some, the other is None.
|
||||
fn resolve_entity_ids(entity_type: &str, entity_local_id: i64) -> Result<(Option<i64>, Option<i64>)> {
|
||||
fn resolve_entity_ids(
|
||||
entity_type: &str,
|
||||
entity_local_id: i64,
|
||||
) -> Result<(Option<i64>, Option<i64>)> {
|
||||
match entity_type {
|
||||
"issue" => Ok((Some(entity_local_id), None)),
|
||||
"merge_request" => Ok((None, Some(entity_local_id))),
|
||||
|
||||
@@ -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