style: 格式化代码并优化导入顺序
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use crate::config::{CommitFormat, Language};
|
||||
use crate::config::manager::ConfigManager;
|
||||
use crate::config::{CommitFormat, Language};
|
||||
use crate::git::{CommitInfo, GitRepo};
|
||||
use crate::llm::{GeneratedCommit, LlmClient};
|
||||
use anyhow::{Context, Result};
|
||||
@@ -64,8 +64,10 @@ impl ContentGenerator {
|
||||
} else {
|
||||
diff.to_string()
|
||||
};
|
||||
|
||||
self.llm_client.generate_commit_message(&truncated_diff, format, language).await
|
||||
|
||||
self.llm_client
|
||||
.generate_commit_message(&truncated_diff, format, language)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Generate commit message from repository changes
|
||||
@@ -75,13 +77,14 @@ impl ContentGenerator {
|
||||
format: CommitFormat,
|
||||
language: Language,
|
||||
) -> Result<GeneratedCommit> {
|
||||
let diff = repo.get_staged_diff_sorted()
|
||||
let diff = repo
|
||||
.get_staged_diff_sorted()
|
||||
.context("Failed to get staged diff")?;
|
||||
|
||||
|
||||
if diff.is_empty() {
|
||||
anyhow::bail!("No staged changes to generate commit from");
|
||||
}
|
||||
|
||||
|
||||
self.generate_commit_message(&diff, format, language).await
|
||||
}
|
||||
|
||||
@@ -92,12 +95,12 @@ impl ContentGenerator {
|
||||
commits: &[CommitInfo],
|
||||
language: Language,
|
||||
) -> Result<String> {
|
||||
let commit_messages: Vec<String> = commits
|
||||
.iter()
|
||||
.map(|c| c.subject().to_string())
|
||||
.collect();
|
||||
|
||||
self.llm_client.generate_tag_message(version, &commit_messages, language).await
|
||||
let commit_messages: Vec<String> =
|
||||
commits.iter().map(|c| c.subject().to_string()).collect();
|
||||
|
||||
self.llm_client
|
||||
.generate_tag_message(version, &commit_messages, language)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Generate changelog entry
|
||||
@@ -114,8 +117,10 @@ impl ContentGenerator {
|
||||
(commit_type, c.subject().to_string())
|
||||
})
|
||||
.collect();
|
||||
|
||||
self.llm_client.generate_changelog_entry(version, &typed_commits, language).await
|
||||
|
||||
self.llm_client
|
||||
.generate_changelog_entry(version, &typed_commits, language)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Generate changelog from repository
|
||||
@@ -131,8 +136,9 @@ impl ContentGenerator {
|
||||
} else {
|
||||
repo.get_commits(50)?
|
||||
};
|
||||
|
||||
self.generate_changelog_entry(version, &commits, language).await
|
||||
|
||||
self.generate_changelog_entry(version, &commits, language)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Interactive commit generation with user feedback
|
||||
@@ -143,49 +149,53 @@ impl ContentGenerator {
|
||||
language: Language,
|
||||
) -> Result<GeneratedCommit> {
|
||||
use dialoguer::Select;
|
||||
|
||||
|
||||
let diff = repo.get_staged_diff_sorted()?;
|
||||
|
||||
|
||||
if diff.is_empty() {
|
||||
anyhow::bail!("No staged changes");
|
||||
}
|
||||
|
||||
|
||||
// Show diff summary
|
||||
let files = repo.get_staged_files()?;
|
||||
println!("\nStaged files ({}):", files.len());
|
||||
for file in &files {
|
||||
println!(" • {}", file);
|
||||
}
|
||||
|
||||
|
||||
// Generate initial commit
|
||||
println!("\nGenerating commit message...");
|
||||
let mut generated = self.generate_commit_message(&diff, format, language).await?;
|
||||
|
||||
let mut generated = self
|
||||
.generate_commit_message(&diff, format, language)
|
||||
.await?;
|
||||
|
||||
loop {
|
||||
println!("\n{}", "─".repeat(60));
|
||||
println!("Generated commit message:");
|
||||
println!("{}", "─".repeat(60));
|
||||
println!("{}", generated.to_conventional());
|
||||
println!("{}", "─".repeat(60));
|
||||
|
||||
|
||||
let options = vec![
|
||||
"✓ Accept and commit",
|
||||
"🔄 Regenerate",
|
||||
"✏️ Edit",
|
||||
"❌ Cancel",
|
||||
];
|
||||
|
||||
|
||||
let selection = Select::new()
|
||||
.with_prompt("What would you like to do?")
|
||||
.items(&options)
|
||||
.default(0)
|
||||
.interact()?;
|
||||
|
||||
|
||||
match selection {
|
||||
0 => return Ok(generated),
|
||||
1 => {
|
||||
println!("Regenerating...");
|
||||
generated = self.generate_commit_message(&diff, format, language).await?;
|
||||
generated = self
|
||||
.generate_commit_message(&diff, format, language)
|
||||
.await?;
|
||||
}
|
||||
2 => {
|
||||
let edited = crate::utils::editor::edit_content(&generated.to_conventional())?;
|
||||
@@ -199,7 +209,7 @@ impl ContentGenerator {
|
||||
|
||||
fn parse_edited_commit(&self, edited: &str, _format: CommitFormat) -> Result<GeneratedCommit> {
|
||||
let parsed = crate::git::commit::parse_commit_message(edited);
|
||||
|
||||
|
||||
Ok(GeneratedCommit {
|
||||
commit_type: parsed.commit_type.unwrap_or_else(|| "chore".to_string()),
|
||||
scope: parsed.scope,
|
||||
@@ -236,11 +246,15 @@ pub mod fallback {
|
||||
let has_code = files.iter().any(|f| {
|
||||
f.ends_with(".rs") || f.ends_with(".py") || f.ends_with(".js") || f.ends_with(".ts")
|
||||
});
|
||||
|
||||
let has_docs = files.iter().any(|f| f.ends_with(".md") || f.contains("README"));
|
||||
|
||||
let has_tests = files.iter().any(|f| f.contains("test") || f.contains("spec"));
|
||||
|
||||
|
||||
let has_docs = files
|
||||
.iter()
|
||||
.any(|f| f.ends_with(".md") || f.contains("README"));
|
||||
|
||||
let has_tests = files
|
||||
.iter()
|
||||
.any(|f| f.contains("test") || f.contains("spec"));
|
||||
|
||||
if has_tests {
|
||||
"test: update tests".to_string()
|
||||
} else if has_docs {
|
||||
|
||||
Reference in New Issue
Block a user