Created
August 16, 2025 04:23
-
-
Save monarchmaisuriya/f7066705344ee386fb6cd77fa064cafe to your computer and use it in GitHub Desktop.
Qwen CLI Code Review Hook
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ============================================== | |
| # === Start of Qwen Diff-Based Code Review === | |
| # ============================================== | |
| # Detailed review prompt (multi-line, neatly formatted) | |
| __qwen_prompt_text=$( | |
| cat <<'EOF' | |
| Thoroughly review the changes, identifying potential issues including edge cases, syntax errors, | |
| logical flaws, unintended side effects, performance bottlenecks, and coding standards violations. | |
| Pay special attention to complex logic, input validation, and modifications affecting stability/scalability. | |
| Provide a clear, actionable, detailed report without modifying the code. | |
| Evaluate changes against: | |
| - SOLID Principles: | |
| * Single Responsibility: One reason to change per class/module. | |
| * Open/Closed: Open for extension, closed for modification. | |
| * Liskov Substitution: Subtypes must be substitutable without breaking correctness. | |
| * Interface Segregation: Prefer minimal, specific interfaces. | |
| * Dependency Inversion: Depend on abstractions, not concrete types. | |
| - KISS: Keep the design as simple as possible. | |
| - YAGNI: Avoid features/abstractions without proven need. | |
| - DRY: Eliminate duplication without premature abstractions. | |
| - Separation of Concerns: Clear boundaries, high cohesion, low coupling. | |
| - Law of Demeter: Limit method chaining; call only immediate collaborators. | |
| - Composition over Inheritance. | |
| - Principle of Least Astonishment. | |
| Also check: | |
| - Input validation & error handling (clear errors, fail-fast where needed). | |
| - Performance & scalability (complexity, memory, concurrency). | |
| - Security (injection, secrets, data exposure). | |
| - Testing (coverage, structure, assertions). | |
| - Observability (logging, metrics, tracing without leaking sensitive data). | |
| - Language/framework coding standards compliance. | |
| - Backward compatibility & migration strategy. | |
| - Feature flags & rollback safety. | |
| Deliverables: | |
| - Findings by severity (Critical, High, Medium, Low) with code references. | |
| - Specific remediation steps (no code edits). | |
| - Risk assessment for stability & scalability, covering edge cases/failures. | |
| - Summary of adherence to principles with examples. | |
| EOF | |
| ) | |
| # Track last git action and its exit code | |
| LAST_GIT_CMD="" | |
| LAST_GIT_EXIT_CODE="" | |
| # Wrapper for git to detect commits | |
| git() { | |
| if [[ "$1" == "commit" ]]; then | |
| LAST_GIT_CMD="commit" | |
| else | |
| LAST_GIT_CMD="" | |
| fi | |
| command git "$@" | |
| LAST_GIT_EXIT_CODE=$? | |
| return $LAST_GIT_EXIT_CODE | |
| } | |
| # Hook runs before prompt display | |
| precmd() { | |
| if [[ "${LAST_GIT_CMD:-}" == "commit" ]] && [[ "${LAST_GIT_EXIT_CODE:-1}" -eq 0 ]]; then | |
| LAST_GIT_CMD="" | |
| LAST_GIT_EXIT_CODE="" | |
| echo | |
| read -r "REPLY?Do you want a code review (performed by Qwen CLI) on the committed changes? [y/n] " | |
| if [[ "$REPLY" =~ ^[Yy]$ ]]; then | |
| echo "Running Qwen CLI code review..." | |
| # Get changed files (handles initial commit too) | |
| if git rev-parse --verify HEAD~1 >/dev/null 2>&1; then | |
| files=$(git diff --name-only HEAD~1 HEAD) | |
| else | |
| files=$(git show --name-only --pretty="" HEAD) | |
| fi | |
| if [[ -z "${files//[[:space:]]/}" ]]; then | |
| echo "No files changed in the last commit." | |
| return | |
| fi | |
| for file in $files; do | |
| if [[ -f "$file" ]]; then | |
| echo "Reviewing changes in: $file" | |
| git diff HEAD~1 HEAD -- "$file" | \ | |
| qwen -p "$__qwen_prompt_text" | |
| fi | |
| done | |
| fi | |
| fi | |
| } | |
| # ============================================ | |
| # === End of Qwen Diff-Based Code Review === | |
| # ============================================ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment