@sun-asterisk/sunlint
Version:
☀️ SunLint - Multi-language static analysis tool for code quality and security | Sun* Engineering Standards
391 lines (280 loc) • 13.4 kB
Markdown
# 🎮 SunLint Command Examples & Demos
## 📋 **Tổng hợp đầy đủ các chức năng CLI đã hỗ trợ**
### ✅ **1. Phạm vi kiểm tra (Input Scope)**
```bash
# Kiểm tra 1 file cụ thể
node cli.js --all --input=cli.js --format=summary --no-ai
# Kiểm tra 1 folder/directory
node cli.js --all --input=core --format=summary --no-ai
# Kiểm tra toàn bộ project/workspace
node cli.js --all --input=. --format=summary --no-ai
# Kiểm tra nhiều folders (comma-separated)
node cli.js --all --input=core,rules --format=summary --no-ai
# Kiểm tra chỉ files đã thay đổi (Git integration)
node cli.js --all --changed-files --format=summary --no-ai
# Kiểm tra chỉ files đã staged (Pre-commit)
node cli.js --all --staged-files --format=summary --no-ai
# Kiểm tra files thay đổi so với branch cụ thể
node cli.js --all --changed-files --diff-base=origin/main --format=summary
```
### ✅ **2. Lựa chọn Rules**
```bash
# Kiểm tra 1 rule cụ thể
node cli.js --rule=C019 --input=. --format=summary --no-ai
# Kiểm tra nhiều rules cụ thể
node cli.js --rules=C019,C006,C029 --input=. --format=summary --no-ai
# Kiểm tra tất cả rules
node cli.js --all --input=. --format=summary --no-ai
# Kiểm tra theo category (quality rules)
node cli.js --quality --input=. --format=summary --no-ai
# Kiểm tra theo category (security rules)
node cli.js --security --input=. --format=summary --no-ai
# Loại trừ một số rules cụ thể
node cli.js --all --exclude-rules=C031 --input=. --format=summary --no-ai
```
### ✅ **3. Phương pháp phân tích**
```bash
# Pattern-based analysis (free, fast)
node cli.js --all --input=. --format=summary --no-ai
# AI-powered analysis (cost, more accurate)
node cli.js --all --input=. --format=summary --ai
# Hybrid: AI cho rules cụ thể, pattern cho còn lại
node cli.js --rule=C019 --input=. --ai --format=summary
```
### ✅ **4. Output Formats**
```bash
# Human-readable summary
node cli.js --all --input=. --format=summary --no-ai
# ESLint-compatible JSON (for IDEs)
node cli.js --all --input=. --format=eslint --no-ai
# Structured JSON (for processing)
node cli.js --all --input=. --format=json --no-ai
# Table format (for reports)
node cli.js --all --input=. --format=table --no-ai
# GitHub Actions format (for CI)
node cli.js --all --input=. --format=github --no-ai
# Save to file
node cli.js --all --input=. --format=json --output=report.json --no-ai
```
### ✅ **5. CI/CD Features**
```bash
# PR Mode: Chỉ check violations mới
node cli.js --all --changed-files --fail-on-new-violations --format=summary
# Baseline comparison
node cli.js --all --input=. --save-baseline=baseline.json --format=json --no-ai
node cli.js --all --changed-files --baseline=baseline.json --fail-on-new-violations
# Severity filtering
node cli.js --all --input=. --severity=error --format=summary --no-ai
# Language filtering
node cli.js --all --input=. --languages=typescript,javascript --format=summary
```
### ✅ **6. Performance & Advanced Options**
```bash
# Control concurrent execution
node cli.js --all --input=. --max-concurrent=10 --format=summary --no-ai
# Set timeout for rules
node cli.js --all --input=. --timeout=60000 --format=summary --no-ai
# Disable caching
node cli.js --all --input=. --no-cache --format=summary --no-ai
# **Control semantic analysis for large projects**
# Default limit: 1000 files for performance balance
node cli.js --all --input=. --max-semantic-files=1000 --format=summary
# For small projects: Analyze all files
node cli.js --all --input=. --max-semantic-files=0 --format=summary
# For large projects: Conservative analysis
node cli.js --all --input=. --max-semantic-files=500 --format=summary
# For massive projects: Minimal semantic analysis
node cli.js --all --input=. --max-semantic-files=100 --format=summary
# Unlimited semantic analysis (use with caution!)
node cli.js --all --input=. --max-semantic-files=-1 --format=summary
# Verbose logging
node cli.js --all --input=. --verbose --format=summary --no-ai
# Quiet mode (errors only)
node cli.js --all --input=. --quiet --format=summary --no-ai
# Debug mode
node cli.js --all --input=. --debug --format=summary --no-ai
# Dry run (show what would be analyzed)
node cli.js --all --input=. --dry-run --format=summary --no-ai
```
## 🚀 **Use Cases & Scenarios**
### **Local Development** 🏠
```bash
# Quick check before commit
node cli.js --all --staged-files --format=summary --no-ai
# Check current work
node cli.js --all --changed-files --format=summary --no-ai
# Focus on specific issue type
node cli.js --rule=C019 --input=. --format=summary --no-ai
# Deep analysis with AI
node cli.js --quality --input=src --ai --format=detailed
```
### **Code Review** 👀
```bash
# Check PR changes
node cli.js --all --changed-files --diff-base=origin/main --format=github
# Focus on security for sensitive changes
node cli.js --security --changed-files --format=summary --no-ai
# New violations only
node cli.js --all --changed-files --baseline=baseline.json --fail-on-new-violations
```
### **CI/CD Pipeline** 🔄
```bash
# Fast PR check
node cli.js --all --changed-files --format=github --no-ai --timeout=30000
# Full scan for main branch
node cli.js --all --input=. --format=json --output=report.json --no-ai
# Security-critical check
node cli.js --security --input=. --severity=error --format=summary --no-ai
# Quality gate
node cli.js --quality --changed-files --max-new-violations=5 --format=summary
```
### **Project Health Monitoring** 📊
```bash
# Full project assessment
node cli.js --all --input=. --format=detailed --output=health-report.json --no-ai
# Trend analysis
node cli.js --all --input=. --baseline=last-month.json --format=trend --no-ai
# Focus areas
node cli.js --rules=C019,C029 --input=core --format=table --no-ai
```
## 🎯 **Practical Examples**
### **Example 1: New Feature Development**
```bash
# Day 1: Start development
node cli.js --all --staged-files --format=summary --no-ai
# Day 2: Check progress
node cli.js --all --changed-files --format=summary --no-ai
# Day 3: Pre-review check
node cli.js --all --changed-files --diff-base=origin/main --format=github --no-ai
# Day 4: Final validation
node cli.js --all --changed-files --ai --format=detailed
```
## 🏗️ **Large Project Strategies**
> **⚡ Performance Note**: SunLint uses semantic analysis for advanced rules (like C047). For projects with 1000+ files, you can control semantic analysis scope to balance accuracy vs performance.
### **Strategy 1: Incremental Analysis** 📈
```bash
# Start with changed files only (fastest)
node cli.js --all --changed-files --format=summary --no-ai
# Focus on specific directories
node cli.js --all --input=src/critical --max-semantic-files=2000 --format=summary
# Target important file patterns only
node cli.js --all --include="src/**/*.ts" --exclude="**/*.test.*,**/*.d.ts" --input=.
# Use directory-based analysis
node cli.js --all --input=src/auth --format=summary # Most critical module first
node cli.js --all --input=src/api --format=summary # Then API layer
node cli.js --all --input=src/utils --format=summary # Finally utilities
```
### **Strategy 2: Semantic Analysis Tuning** 🔧
```bash
# Conservative: 500 files for faster analysis
node cli.js --all --input=. --max-semantic-files=500 --format=summary
# Balanced: 1000 files (default) for medium projects
node cli.js --all --input=. --max-semantic-files=1000 --format=summary
# Comprehensive: 2000+ files for complete analysis
node cli.js --all --input=. --max-semantic-files=2000 --format=summary
# Unlimited: All files (use for final validation)
node cli.js --all --input=. --max-semantic-files=-1 --format=summary
# Disable semantic analysis completely (heuristic only)
node cli.js --all --input=. --max-semantic-files=0 --format=summary
```
### **Strategy 3: Rule-Based Prioritization** 🎯
```bash
# Phase 1: Critical security issues (fast heuristic rules)
node cli.js --security --input=. --max-semantic-files=0 --format=summary
# Phase 2: Code quality basics
node cli.js --rules=C006,C019,C029 --input=. --max-semantic-files=500 --format=summary
# Phase 3: Advanced semantic rules (targeted)
node cli.js --rules=C047 --input=src --max-semantic-files=1000 --format=summary
# Phase 4: Full comprehensive scan
node cli.js --all --input=. --max-semantic-files=-1 --format=detailed
```
### **Strategy 4: CI/CD Optimization** ⚡
```bash
# PR checks: Fast semantic analysis
node cli.js --all --changed-files --max-semantic-files=300 --format=github --no-ai
# Nightly builds: Medium semantic analysis
node cli.js --all --input=. --max-semantic-files=1000 --format=json --output=nightly.json
# Weekly reports: Full semantic analysis
node cli.js --all --input=. --max-semantic-files=-1 --format=detailed --output=weekly.json
# Release validation: Comprehensive with baselines
node cli.js --all --input=. --max-semantic-files=2000 --baseline=last-release.json
```
### **Strategy 5: Memory & Performance Monitoring** 📊
```bash
# Monitor file loading (debug mode)
node cli.js --all --input=. --max-semantic-files=1000 --verbose --debug
# Track performance with different limits
time node cli.js --all --input=. --max-semantic-files=500 --format=summary
time node cli.js --all --input=. --max-semantic-files=1000 --format=summary
time node cli.js --all --input=. --max-semantic-files=2000 --format=summary
# Memory-conscious analysis for CI
node cli.js --all --input=. --max-semantic-files=300 --max-concurrent=2 --format=summary
```
### **📋 Recommended Limits by Project Size**
| Project Size | Files Count | Recommended Limit | Use Case |
|-------------|-------------|-------------------|----------|
| Small | < 100 files | `--max-semantic-files=0` (all) | Complete analysis |
| Medium | 100-500 files | `--max-semantic-files=500` | Balanced |
| Large | 500-2000 files | `--max-semantic-files=1000` | Default recommended |
| Enterprise | 2000-5000 files | `--max-semantic-files=1500` | Conservative |
| Massive | 5000+ files | `--max-semantic-files=500` | Targeted analysis |
> **💡 Pro Tips for Large Projects:**
> 1. Use `--changed-files` for daily development
> 2. Use `--max-semantic-files=500` for CI/CD pipelines
> 3. Use `--max-semantic-files=-1` for release validation
> 4. Combine with `--include` patterns to focus on critical code
> 5. Monitor analysis time and adjust limits accordingly
### **Example 1: Monorepo with 5000+ Files**
```bash
# Daily development: Changed files only
node cli.js --all --changed-files --max-semantic-files=300 --format=summary
# Module-specific analysis
node cli.js --all --input=packages/core --max-semantic-files=1000 --format=summary
node cli.js --all --input=packages/api --max-semantic-files=1000 --format=summary
# CI pipeline: Conservative semantic analysis
node cli.js --all --changed-files --max-semantic-files=500 --format=github
# Release validation: Full analysis by modules
for dir in packages/*/; do
node cli.js --all --input="$dir" --max-semantic-files=2000 --format=json --output="${dir//\//-}-report.json"
done
```
### **Example 2: Legacy Code Improvement**
```bash
# Step 1: Baseline assessment
node cli.js --all --input=legacy-module --save-baseline=legacy-baseline.json --no-ai
# Step 2: Focus on critical issues
node cli.js --security --input=legacy-module --severity=error --format=summary
# Step 3: Incremental improvement
node cli.js --rule=C019 --input=legacy-module --format=summary --no-ai
# Step 4: Track progress
node cli.js --all --input=legacy-module --baseline=legacy-baseline.json --format=trend
```
### **Example 3: Team Onboarding**
```bash
# Level 1: Basic checks
node cli.js --rules=C006,C019 --input=. --format=summary --no-ai
# Level 2: Quality focus
node cli.js --quality --input=. --format=table --no-ai
# Level 3: Full analysis
node cli.js --all --input=. --format=detailed --no-ai
# Level 4: AI-assisted learning
node cli.js --all --input=. --ai --verbose --format=detailed
```
## 📝 **Command Cheat Sheet**
| Task | Command |
|------|---------|
| Quick pre-commit check | `node cli.js --all --staged-files --format=summary --no-ai` |
| PR review | `node cli.js --all --changed-files --diff-base=origin/main --format=github` |
| Full project scan | `node cli.js --all --input=. --format=json --output=report.json --no-ai` |
| Security audit | `node cli.js --security --input=. --severity=error --format=summary` |
| New violations only | `node cli.js --all --changed-files --baseline=baseline.json --fail-on-new-violations` |
| AI deep analysis | `node cli.js --quality --input=src --ai --format=detailed` |
| Performance test | `node cli.js --all --input=. --max-concurrent=1 --timeout=10000 --no-ai` |
| Debug issues | `node cli.js --rule=C019 --input=problematic-file.js --debug --verbose` |
## 💡 **Pro Tips**
1. **Start with `--no-ai`** for faster feedback, use `--ai` for complex issues
2. **Use `--changed-files`** in development, `--input=.` for comprehensive checks
3. **Save baselines** for large projects to track progress over time
4. **Combine `--severity=error`** with CI to focus on critical issues
5. **Use `--dry-run`** to understand what will be analyzed before running
6. **Set `--timeout`** appropriately based on project size and CI time limits