About similarity-rs
similarity-rs is a skill for using a Rust code-duplication detection CLI during development and review. It covers search-before-write practices, CI setup, and tuning, while noting that beta findings require manual review.
Key features
- 01Detect similar Rust code
- 02Search-before-write workflow guidance
- 03Pre-commit and GitHub Actions recipes
- 04Threshold and line-count tuning
- 05Advice for reviewing false positives
Use cases
- 01Check for duplication before committing
- 02Find consolidation candidates during cleanup
- 03Add duplication checks to CI
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill similarity-rsAfter installing, type/similarity-rsin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/antipatterns.mdci-integration.mdfalse-positives.mdsearch-before-write.mdsibling-tools.mdtuning.mdDetails
From the project READMEsimilarity-rs 0.5 — Rust duplication detection
Tool status: Beta — not production-tested per the upstream README. Evaluate findings manually before acting.
When to use this skill
Antipattern triggers (act before writing code):
- About to write a utility function — grep the codebase first; it may already exist.
- Caught yourself thinking "I'll just inline this here."
- Planning to copy-paste-modify an existing function with small changes.
- Adding a new enum or struct that may overlap with an existing one.
- Two
Pluginsetups that share large blocks of boilerplate. - Similar Bevy systems that differ only in their
Queryfilter component. - Repeated
commands.spawn((Mesh3d(...), MeshMaterial3d(...), ...))patterns that belong in aBundle.
Tool-integration triggers (run the check):
- Before committing: verify you haven't introduced cross-file duplication.
- During a cleanup sprint: identify consolidation candidates.
- Setting up a pre-commit hook or GitHub Actions gate.
- Adjusting
-t/--thresholdor--min-linesfor a noisy or too-quiet run.
Canonical workflow
The pattern is: search first → write minimally → run the check.
# 1. Search before writing — check whether the helper already exists
rg "fn <verb>" # e.g., rg "fn normalize" to find existing helpers
cargo doc --open --package <dep> # inventory what your deps already provide
# 2. Write only what's missing.
# 3. Before committing, check for accidental duplication
cargo install similarity-rs # one-time install
similarity-rs ./src # scan the src tree
# 4. If --cross-file output is needed (catches LLM's most common antipattern)
similarity-rs --cross-file ./src
# 5. Tighten or loosen if needed (see references/tuning.md)
similarity-rs -t 0.85 -m 5 --cross-file --skip-test ./src
Consult cargo doc --open for every dependency before reaching for a one-off helper. LLMs reproduce functions from stdlib, itertools, or an already-declared crate dep more often than from thin air.
Topics
| Topic | Reference |
|---|---|
| LLM duplication patterns with before/after examples | references/antipatterns.md |
| Search-before-write workflow (rg, cargo doc, CLAUDE.md scan) | references/search-before-write.md |
| Pre-commit hook and GitHub Actions CI recipes | references/ci-integration.md |
-t, --min-lines, --cross-file, --no-size-penalty knobs | references/tuning.md |
| When similar code is intentional — don't act on these | references/false-positives.md |
similarity-ts, similarity-py, similarity-generic for polyglot repos | references/sibling-tools.md |
Gotchas
-
--cross-fileis off by default. Without it, only within-file pairs are reported. Most LLM-introduced duplication is across files. Always pass--cross-fileunless you specifically want within-file only. -
Beta tool. The upstream README marks
similarity-rsas not production-tested. Treat output as signal, not verdict. Review each flagged pair before refactoring. -
--skip-teston CI. Test files often contain structurally similar setup fixtures by design. Run with--skip-teston CI to suppress expected test-fixture symmetry; review test duplication locally. -
Threshold tuning is project-specific. The default
-t 0.85catches obvious copy-paste. Use 0.75–0.80 during a cleanup sprint (more hits), 0.90–0.95 for production gating (fewer false alarms). See references/tuning.md. -
No tester snippet for this skill.
similarity-rsis a CLI-only tool with no library API — there is nocargo checkexample to validate. This follows the same approach asbevy-cargo-featuresandbevy-migration-0-17-to-0-18, which also carry no tester examples.
See also
bevy-cargo-features— installingsimilarity-rsviacargo installsits alongside theCargo.tomlfeature story; also coversdefault-featuresdecisions that can hide accidental dep duplication.bevy-core-concepts— duplicatePluginsetup and schedule boilerplate is the most common Bevy-specific antipattern this tool catches.bevy-ecs-components— near-duplicate component structs and overlapping enums often surface when features are added without consolidation.