Claude Info
Dev-инструменты

jscpd

kucherenko/jscpd

jscpd — инструмент для обнаружения дублированных блоков кода в проектах. Поддерживает 150+ языков программирования, реализует алгоритм Рабина–Карпа. Включает CLI, программный API, MCP-сервер и навык для AI-агентов (Claude, Copilot, Cursor и др.).

Подключение

terminal
bash
npx skills add kucherenko/jscpd

README

jscpd

stand with Ukraine

npm jscpd license npm

jscpd CI codecov FOSSA Status Backers on Open Collective Sponsors on Open Collective

NPM

Детектор копипаста в исходном коде, поддерживает 150+ форматов.

Копипаст — распространённый источник технического долга во многих проектах. jscpd позволяет находить дублированные блоки кода на более чем 150 языках программирования и в цифровых форматах документов. Инструмент реализует алгоритм Рабина–Карпа для поиска дублирований.

Пакеты jscpd

НазваниеВерсияОписание
jscpdnpmОсновной пакет jscpd (CLI и API для обнаружения дублирований)
jscpd-servernpmСерверное приложение jscpd
@jscpd/corenpmОсновной алгоритм обнаружения, применим в различных средах; единственная зависимость — eventemitter3
@jscpd/findernpmДетектор дублирований в файлах
@jscpd/tokenizernpmИнструмент токенизации исходного кода
@jscpd/leveldb-storenpmХранилище LevelDB для больших репозиториев; медленнее стандартного хранилища
@jscpd/html-reporternpmHTML-репортер для jscpd
@jscpd/badge-reporternpmРепортер значков для 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

Проверка кода на дублирования:

bash
$ 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:

ts
import {IClone} from '@jscpd/core';
import {jscpd} from 'jscpd';

const clones: Promise<IClone[]> = jscpd(process.argv);

async/await API для jscpd:

ts
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:

ts
import {detectClones} from "jscpd";

(async () => {
  const clones = await detectClones({
    path: [
      __dirname + '/../fixtures'
    ],
    silent: true
  });
  console.log(clones);
})()

detectClones с персистентным хранилищем:

ts
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.

Похожие MCP-серверы