Quick Start
Your First Analysis
Section titled “Your First Analysis”Let’s run your first similarity analysis on a Go project. We’ll use a simple example to demonstrate the basic functionality.
Step 1: Prepare a Test Project
Section titled “Step 1: Prepare a Test Project”Create a simple Go project with some duplicate code:
mkdir test-projectcd test-projectgo mod init test-projectCreate a file duplicate.go:
package main
import "fmt"
func processUserDataV1(name string, age int) { if name == "" { fmt.Println("Name is required") return } if age < 0 { fmt.Println("Age must be positive") return } fmt.Printf("Processing user: %s, age: %d\n", name, age)}
func processUserDataV2(username string, userAge int) { if username == "" { fmt.Println("Name is required") return } if userAge < 0 { fmt.Println("Age must be positive") return } fmt.Printf("Processing user: %s, age: %d\n", username, userAge)}
func main() { processUserDataV1("Alice", 25) processUserDataV2("Bob", 30)}Step 2: Run Basic Analysis
Section titled “Step 2: Run Basic Analysis”Run similarity-go on your test project:
./bin/similarity-go ./You should see output similar to:
🔍 Analyzing Go files in: ./📊 Found 2 similar functions with 85% similarity
Function Similarity Report==========================
📄 File: duplicate.go🔗 Similar Functions: • processUserDataV1 (lines 5-15) • processUserDataV2 (lines 17-27)
📈 Similarity Score: 85.7%📋 Differences: • Parameter names: name/username, age/userAge • Function names: processUserDataV1/processUserDataV2
💡 Suggestion: Consider refactoring to use a single functionStep 3: Adjust Similarity Threshold
Section titled “Step 3: Adjust Similarity Threshold”You can adjust the sensitivity by changing the similarity threshold:
# Only show similarities above 90%./bin/similarity-go --threshold 0.9 ./
# Show more similarities (above 70%)./bin/similarity-go --threshold 0.7 ./Step 4: Output Formats
Section titled “Step 4: Output Formats”similarity-go supports multiple output formats:
# JSON output for programmatic processing./bin/similarity-go --format json ./
# YAML output./bin/similarity-go --format yaml ./
# Detailed human-readable output (default)./bin/similarity-go ./Common Use Cases
Section titled “Common Use Cases”Analyzing Specific Directories
Section titled “Analyzing Specific Directories”# Analyze only the src directory./bin/similarity-go ./src
# Analyze multiple directories./bin/similarity-go ./cmd ./internal ./pkgExcluding Files and Directories
Section titled “Excluding Files and Directories”# Use with custom workers and verbose output./bin/similarity-go --workers 4 --verbose ./Integration with CI/CD
Section titled “Integration with CI/CD”Add similarity checking to your CI pipeline:
# GitHub Actions example- name: Check code similarity run: | ./bin/similarity-go --threshold 0.8 --format json ./ > similarity-report.json if [ -s similarity-report.json ]; then echo "High similarity detected, consider refactoring" exit 1 fiUnderstanding the Output
Section titled “Understanding the Output”similarity-go provides several key metrics:
- Similarity Score: Percentage indicating how similar two functions are
- Line Numbers: Exact location of similar code blocks
- Differences: What makes the functions different
- Suggestions: Recommendations for refactoring
Configuration File
Section titled “Configuration File”For complex projects, create a .similarity-go.yaml configuration file:
For more advanced configuration, you can create a configuration file, but the current version primarily uses command-line flags.
./bin/similarity-go --threshold 0.8 --format json --workers 8 ./Next Steps
Section titled “Next Steps”Now that you’re familiar with the basics:
- Explore CLI Commands for advanced options
- Learn about Configuration for complex projects
- Understand the AST Analysis algorithms
- Check out Integration Examples