Сьогодні - про внутрішню кухню роботи над open-source проектом.
⁉ Як зрозуміти, чого вартий твій продукт порівняно з іншими?
‼️ Запустити бенчмарк 🚀
Я взяв 7 copy-paste детекторів і прогнав усі на одній базі: 547 файлів, 223 формати, однакові умови для всіх.
Результати показав тут:
⚡️ Швидкість
🪙 Токени
🧩 Формати - сьогодні, фінальна 👇
👀 Дуже часто Copy-Paste Detector каже, що «дублікатів немає». Але він просто не зазирнув всередину ваших Vue- та Svelte-файлів. Сучасний файл - це не суцільний текст: один .vue, .svelte чи .astro містить кілька мов одразу - скрипт, стилі, шаблон. У markdown - YAML і блоки коду. І те, як інструмент це читає, вирішує все.
Існує 2 види інструментів:
🔴 Flat-text - порівнюють усе з усім: CSS зі скриптом, шаблон зі стилями. Або шум, або сліпота: звіт каже «чисто», а копіпаст лишається в коді.
🟢 Section-aware - спершу парсить файл, ділить на мови, і лише потім порівнює CSS із CSS, скрипт зі скриптом. Це вміє лише движок jscpd.
👨🏻💻Окремо про markdown: код усередині .md jscpd дістає з блоку й порівнює як код, а не як текст документації. Дубль, схований у прикладі коду, більше не проходить повз.
Результат: знайти дублікати між різними форматами (наприклад, однаковий CSS у .svelte та .astro) здатні лише три інструменти. І всі - на jscpd.
💡 Висновок.
У сучасних проектах дублікати ховаються не в тексті, а в структурі. Інструмент, який бачить лише текст, у найгіршому випадку звітує «чисто» - і ви вірите цьому звіту. Якщо інструмент не розуміє секцій усередині файлу - він не розуміє frontend.
🔗 Бенчмарк форматів: jscpd.dev/benchmarks/cross-format
💻 GitHub: github.com/kucherenko/jscpd
☕ Підтримати: opencollective.com/jscpd
А ваш CPD точно бачить дублікати у .vue і .svelte - чи просто каже «чисто»?
👍 Бачить, я перевіряв
👀 Не знаю - піду перевірю
😱 Тепер боюся дивитися
#jscpd #CopyPasteDetector
