#typescript #detect #javascript #duplicates

bin+lib similarity-ts

CLI tool for detecting code duplication in TypeScript/JavaScript projects

12 unstable releases (4 breaking)

0.5.0 Apr 11, 2026
0.4.1 Aug 13, 2025
0.3.1 Jul 1, 2025
0.3.0 Jun 30, 2025
0.1.2 Jun 27, 2025

#1045 in Development tools

Download history 85/week @ 2026-01-22 80/week @ 2026-01-29 39/week @ 2026-02-05 107/week @ 2026-02-12 139/week @ 2026-02-19 210/week @ 2026-02-26 172/week @ 2026-03-05 165/week @ 2026-03-12 497/week @ 2026-03-19 164/week @ 2026-03-26 117/week @ 2026-04-02 122/week @ 2026-04-09 83/week @ 2026-04-16 45/week @ 2026-04-23 41/week @ 2026-04-30 48/week @ 2026-05-07

244 downloads per month

MIT license

480KB
11K SLoC

similarity-ts

CLI tool for detecting code duplication in TypeScript/JavaScript projects.

Installation

cargo install similarity-ts

Usage

# Check for duplicate functions in current directory
similarity-ts

# Check specific files or directories
similarity-ts src/ lib/

# Set similarity threshold (0.0 to 1.0)
similarity-ts --threshold 0.8

# Filter by minimum tokens (recommended: 20-30)
similarity-ts --min-tokens 25

# Show actual code snippets
similarity-ts --print

Subcommands

check - Check Directory for Duplicates (Default)

Recursively checks a directory for duplicate functions across all files, respecting .gitignore files.

Options:

  • -t, --threshold (default: 0.8) - Similarity threshold (0.0-1.0)
  • --rename-cost (default: 0.3) - Cost for renaming nodes
  • --within-file - Only check for duplicates within individual files (default: check across files)
  • --extensions - Comma-separated list of file extensions (default: ts,tsx,js,jsx)

Example Output:

Checking 25 files for duplicates...

Duplicates in src/utils/array.ts:
------------------------------------------------------------
  function sortArray (lines 5-12) <-> function orderArray (lines 15-22)
  Similarity: 85.50%

Total duplicate pairs found: 3

compare - Compare Entire Files

Calculates the similarity between two complete TypeScript files.

Options:

  • --rename-cost (default: 0.3) - Cost for renaming nodes
  • --delete-cost (default: 1.0) - Cost for deleting nodes
  • --insert-cost (default: 1.0) - Cost for inserting nodes

Example Output:

TSED Similarity: 85.50%
Distance: 0.1450

functions - Find Similar Functions in a Single File

Detects similar functions within a single file.

Options:

  • -t, --threshold (default: 0.7) - Similarity threshold (0.0-1.0)
  • --rename-cost (default: 0.3) - Cost for renaming nodes

Example Output:

Similar functions in src/utils.ts:
============================================================

function calculateTotal (lines 3-9) <-> function computeSum (lines 11-17)
Similarity: 88.00%

arrow getTotalPrice (lines 25-27) <-> function calculateOrderTotal (lines 29-35)
Similarity: 90.00%

cross-file - Find Similar Functions Across Files

Detects similar functions across multiple files.

Options:

  • -t, --threshold (default: 0.7) - Similarity threshold (0.0-1.0)
  • --rename-cost (default: 0.3) - Cost for renaming nodes

Example Output:

Similar functions across files:
============================================================

file1.ts:processUser (lines 5-10) <-> file2.ts:handleUser (lines 3-8)
Similarity: 92.00%

file1.ts:validateInput (lines 15-20) <-> file3.ts:checkInput (lines 7-12)
Similarity: 85.00%

Algorithms

This tool uses the following algorithms:

  • APTED (All Path Tree Edit Distance): Calculates structural similarity
  • TSED (Tree Similarity of Edit Distance): Normalized similarity score (0-1 range)

Performance

Compared to the TypeScript implementation:

  • Medium files: ~16x faster
  • Large files: Better memory efficiency, can handle cases where TypeScript version runs out of memory

Notes

  • Supports both TypeScript and JavaScript files
  • Uses oxc-parser for fast parsing
  • Focuses on structural similarity of functions

Examples

Code Duplication Detection

# Detect duplicate code in your project
./target/release/similarity-ts functions src/main.ts -t 0.9

Compare Before and After Refactoring

# Check code similarity before and after refactoring
./target/release/similarity-ts compare old_version.ts new_version.ts

Check for Duplicate Functions Across Multiple Files

# Check all files in utils directory for duplicate functions
./target/release/similarity-ts cross-file src/utils/*.ts -t 0.85

Dependencies

~92MB
~2.5M SLoC