کدهای بدون استفاده، قاتل خاموش بهرهوری در توسعه نرمافزار هستند. مثلا import های استفاده نشده، متغیرهای فراموش شده و پارامترهای بلااستفاده در توابع، شاید در نگاه اول بیضرر به نظر برسند، اما به تدریج انباشته میشوند و باعث سردرگمی، کاهش خوانایی کد و دشوارتر شدن نگهداری آن میشوند. با بزرگتر شدن پروژهها، اهمیت تمیز و کارآمد نگه داشتن کدها نیز بیشتر میشود.
در این مقاله، افزونه CleanDeadCode را معرفی میکنم، یک افزونه تخصصی برای VSCode که به صورت خودکار کدهای بدون استفاده را شناسایی و حذف میکند، در حالی که ساختار و نظم کد شما حفظ میشود.
پروژههای جاوااسکریپت و تایپاسکریپت به طور خاص مستعد مشکلات کد بدون استفاده هستند. همانطور که کامپوننتها تکامل مییابند، وابستگیها تغییر میکنند و ویژگیها بازسازی میشوند، به راحتی میتوان رد پایی از کدهای بدون استفاده به جا گذاشت. این موارد را در نظر بگیرید:
قابلیت داخلی VSCode به نام "Organize Imports" میتواند به مدیریت import ها کمک کند، اما همچنین ترتیب import ها را تغییر میدهد که ممکن است نظم مورد نظر شما را به هم بریزد. همچنین هشدارهای ESLint درباره متغیرهای بدون استفاده نیاز به کد زدن دستی برای رفع مشکل دارند.
حالا CleanDeadCode این مشکلات را با دقت حل میکند و دو قابلیت قدرتمند ارائه میدهد:
بیایید ببینیم این قابلیتها چگونه کار میکنند و چه مشکلاتی را حل میکنند.
حفظ ترتیب import های باقیمانده
پشتیبانی انواع import:
`import` پیشفرض: import React from 'react'
با
نام: import { useState, useEffect } from 'react'
با نام و نام مستعار: import { useState as useStateHook } from 'react'
فضای نام: import * as ReactDOM from 'react-dom'
با اثر جانبی: import 'styles.css'
به یک مثال قبل و بعد نگاه کنیم:
قبل از پاکسازی:
import React, { useState, useEffect, useContext } from 'react'; import { useNavigate } from 'react-router-dom'; import * as utils from './utils'; function MyComponent() { const [count, setCount] = useState(0); // فقط useState استفاده شده، useEffect و useContext استفاده نشدهاند // همچنین useNavigate و utils استفاده نشدهاند return <div>{count}</div>; }
بعد از پاکسازی با CleanDeadCode:
import React, { useState } from 'react'; function MyComponent() { const [count, setCount] = useState(0); return <div>{count}</div>; }
برای متغیرهای بدون استفاده:
افزونه آنها را با یک برچسب TODO کامنت میکند تا به شما کمک کند تصمیم بگیرید آیا میخواهید آنها را کاملاً حذف کنید یا برای استفاده آینده نگه دارید:
قبل:
function processData() { const data = fetchData(); const config = getConfig(); // متغیر بدون استفاده console.log(data); return data; }
بعد:
function processData() { const data = fetchData(); // TODO: Unused variable // const config = getConfig(); console.log(data); return data; }
افزونه تغییرات متناسب با زمینه را اعمال میکند:
قبل:
function processUser(userId, userName, userRole, userAge) { console.log(`Processing ${userName}`); // فقط userName استفاده شده، سایر پارامترها استفاده نشدهاند }
بعد:
function processUser(_userId, userName) { console.log(`Processing ${userName}`); // فقط userName استفاده شده، سایر پارامترها استفاده نشدهاند }
توسعه CleanDeadCode چندین چالش فنی جالب را به همراه داشت:
تشخیص دقیق اینکه کدام import ها استفاده میشوند نیاز به تحلیل عمیق AST (درخت نحوی انتزاعی) با استفاده از API کامپایلر TypeScript داشت. استفاده ساده از الگوهای regex بسیاری از موارد خاص را از دست میداد، به ویژه با import های دارای نام مستعار و destructuring اشیاء.
مدیریت پارامترهای تابع نیاز به در نظر گرفتن موقعیت آنها نسبت به سایر پارامترها داشت. افزونه باید بین موارد زیر تمایز قائل شود:
اطمینان از اینکه افزونه فرمتبندی یا سازماندهی کد را مختل نمیکند، نیاز به دستکاری دقیق موقعیتهای منبع و محدودههای کاراکتر داشت.
این افزونه طوری طراحی شده است که به راحتی در روند کاری شما جای بگیرد، چه پاکسازی دستی را ترجیح دهید و چه پردازش خودکار.
میتوانید افزونه را از طریق موارد زیر فراخوانی کنید:
Ctrl+Shift+P
یا Cmd+Shift+P
)Ctrl+Alt+U
(ویندوز/لینوکس) یا Cmd+Alt+U
(مک) برای import های بدون استفادهCtrl+Alt+V
(ویندوز/لینوکس) یا Cmd+Alt+V
(مک) برای متغیرهای بدون استفادهCtrl+Alt+C
(ویندوز/لینوکس) یا Cmd+Alt+C
(مک) برای هر دو عملیاتبرای رویکردی بدون نیاز به دخالت دستی، پاکسازی خودکار را هنگام ذخیره فایل فعال کنید:
cleanCode.autoRemoveUnusedImports
cleanCode.autoHandleUnusedVariables
افزونه چندین گزینه پیکربندی ارائه میدهد:
یکپارچهسازی CleanDeadCode در روند کاری شما چندین مزیت دارد:
این افزونه تحت مجوز MIT منتشر شده و برای استفاده شخصی و تجاری رایگان است.