check-similarity-rs

star 747

Detect duplicate Rust code using AST-based similarity analysis. Use when working with .rs files and looking for code duplication or refactoring opportunities.

mizchi By mizchi schedule Updated 4/16/2026

name: check-similarity-rs description: Detect duplicate Rust code using AST-based similarity analysis. Use when working with .rs files and looking for code duplication or refactoring opportunities. argument-hint: "[path] [--threshold 0.85] [--print]" allowed-tools: Bash(similarity-rs *) Bash(cargo run -p similarity-rs ) Read Grep Glob paths: "**/.rs"

Rust Code Similarity Detection

What to do

Run similarity-rs on the target Rust project to detect duplicate functions, struct/enum definitions, and impl methods, then analyze results and propose refactoring.

If similarity-rs is not installed:

cargo install similarity-rs

Step 1: Run similarity analysis

similarity-rs $ARGUMENTS

If no arguments given:

similarity-rs . --threshold 0.85 --min-lines 5

For struct/enum similarity:

similarity-rs . --threshold 0.85 --experimental-types

Step 2: Analyze results

High-priority

  • 100% similarity: Exact duplicates -> extract shared function or use generics
  • 95-100%: Same algorithm on different types -> generic function with trait bounds
  • Duplicate impl methods: Same logic across types -> trait with default implementation

Medium-priority

  • 85-95%: Similar match arms or error handling -> macro or shared helper
  • Parallel struct definitions: Identical fields -> shared base or generic struct

Acceptable

  • Short new() constructors with field initialization
  • Simple From/Into implementations
  • Derive-equivalent implementations

Step 3: Propose refactoring

For each high-priority pair, show before/after code with Rust idioms.

Key Options

Option Description
--threshold <0-1> Similarity threshold (default: 0.85)
--min-lines <n> Skip functions shorter than n lines (default: 3)
--min-tokens <n> Skip functions with fewer AST nodes
--print Show actual code snippets
--experimental-types Enable struct/enum similarity detection
--filter-function <name> Filter by function name
--fail-on-duplicates Exit code 1 if duplicates found

Common Rust refactoring patterns

  • Type-specific functions -> generic fn<T: Trait> with trait bounds
  • Duplicate impl blocks across types -> trait with default methods
  • Repeated match patterns -> macro_rules! or helper function
  • Parallel X/Y/Z functions -> enum parameter or tuple-based abstraction
  • Similar error handling -> shared Result combinator or ? chain
Install via CLI
npx skills add https://github.com/mizchi/similarity --skill check-similarity-rs
Repository Details
star Stars 747
call_split Forks 20
navigation Branch main
article Path SKILL.md
More from Creator