jscpd
kucherenko/jscpdjscpd — инструмент для обнаружения дублированных блоков кода в проектах. Поддерживает 150+ языков программирования, реализует алгоритм Рабина–Карпа. Включает CLI, программный API, MCP-сервер и навык для AI-агентов (Claude, Copilot, Cursor и др.).
Подключение
npx skills add kucherenko/jscpdREADME
jscpd
Детектор копипаста в исходном коде, поддерживает 150+ форматов.
Копипаст — распространённый источник технического долга во многих проектах. jscpd позволяет находить дублированные блоки кода на более чем 150 языках программирования и в цифровых форматах документов. Инструмент реализует алгоритм Рабина–Карпа для поиска дублирований.
Пакеты jscpd
| Название | Версия | Описание |
|---|---|---|
| jscpd | Основной пакет jscpd (CLI и API для обнаружения дублирований) | |
| jscpd-server | Серверное приложение jscpd | |
| @jscpd/core | Основной алгоритм обнаружения, применим в различных средах; единственная зависимость — eventemitter3 | |
| @jscpd/finder | Детектор дублирований в файлах | |
| @jscpd/tokenizer | Инструмент токенизации исходного кода | |
| @jscpd/leveldb-store | Хранилище LevelDB для больших репозиториев; медленнее стандартного хранилища | |
| @jscpd/html-reporter | HTML-репортер для jscpd | |
| @jscpd/badge-reporter | Репортер значков для jscpd |
Навык для AI-агента
jscpd включает навык агента для обнаружения и устранения дублирований кода с помощью AI-ассистентов (Claude, Copilot, Gemini, Cursor и др.).
npx skills add kucherenko/jscpd
После установки навык обучает агента запускать jscpd с репортером ai и рефакторить обнаруженные дублирования.
Установка
$ npm install -g jscpd
Использование
$ npx jscpd /path/to/source
или
$ jscpd /path/to/code
или
$ jscpd --pattern "src/**/*.js"
Подробнее о CLI — здесь.
JSCPD Server
JSCPD Server — самостоятельное приложение, предоставляющее API для обнаружения дублирований кода. Может использоваться для интеграции обнаружения дублирований в ваши сервисы или инструменты.
Установка
$ npm install -g jscpd-server
Использование
Запуск сервера:
$ jscpd-server
Проверка кода на дублирования:
$ curl -X POST http://localhost:3000/api/check \
-H "Content-Type: application/json" \
-d '{
"code": "console.log(\"hello\");\nconsole.log(\"world\");",
"format": "javascript"
}'Подробнее о сервере — здесь.
Программный API
Для интеграции обнаружения копипаста в ваше приложение можно использовать программный API.
Promise API для jscpd:
import {IClone} from '@jscpd/core';
import {jscpd} from 'jscpd';
const clones: Promise<IClone[]> = jscpd(process.argv);async/await API для jscpd:
import {IClone} from '@jscpd/core';
import {jscpd} from 'jscpd';
(async () => {
const clones: IClone[] = await jscpd(['', '', __dirname + '/../fixtures', '-m', 'weak', '--silent']);
console.log(clones);
})();API detectClones:
import {detectClones} from "jscpd";
(async () => {
const clones = await detectClones({
path: [
__dirname + '/../fixtures'
],
silent: true
});
console.log(clones);
})()detectClones с персистентным хранилищем:
import {detectClones} from "jscpd";
import {IMapFrame, MemoryStore} from "@jscpd/core";
(async () => {
const store = new MemoryStore<IMapFrame>();
await detectClones({
path: [
__dirname + '/../fixtures'
],
}, store);
await detectClones({
path: [
__dirname + '/../fixtures'
],
silent: true
}, store);
})()Для глубокой кастомизации процесса обнаружения вы можете построить собственное решение на базе пакетов jscpd.