چند سال پیش، وقتی اولین شغلام را شروع کردم، تنها از ReSharper برای تحلیل گسترده راهحل (Solution-Wide Analysis) استفاده میکردم. این ویژگی به من هشدار میداد هر زمان که کدهای نامرتب و پیچیدهای که به ارث برده بودم را خراب میکردم. هنوز از refactorings آن آگاهی نداشتم. در شغل دومم بود که مدیر تیم فوقالعادهام مرا با تمام ظرافتهای ReSharper آشنا کرد. در نهایت، حتی آن را با ماکروهای قالب زنده سفارشی (Custom Live Template Macros) گسترش دادیم. چه دوران بهیادماندنیای! 🥹 تا امروز، ReSharper را یک افزونه Visual Studio ضروری میدانم که به توسعهدهندگان کمک میکند تا بهرهوری بیشتری داشته باشند. اجازه دهید شما را در سفری از میان ۹ ویژگی برتر ReSharper ببرم!
۱. جستجوی حرف اولیه (Initial Letter Search)
ناوبری در ReSharper نه تنها به یک میانبر و جستجوی متن با wildcard محدود نمیشود. جستجوی حرف اولیه (Initial Letter Search) به شما کمک میکند تا از تایپ بخشهای طولانی عناصر جستجو شده اجتناب کنید، با استفاده از camel-humps؛ تایپ یک . نگاهی سریع به اعضای نوع میدهد. این ویژگی حتی کمی فازی عمل میکند، برای مثال، TupleNames هنگام جستجوی NT (نه TN) نمایش داده میشود. این امکان را فراهم میکند تا آنچه به دنبالش هستید را پیدا کنید، حتی اگر ورودیتان دقیق نباشد، چه خطای تایپی باشد یا حافظهای مبهم.
۲. ناوبری زمینهای (Contextual Navigation)
علاوه بر ناوبری مبتنی بر اصطلاحات جستجو، ReSharper تعداد رو به رشدی از اقدامات ناوبری زمینهای ارائه میدهد. پس از قرار دادن نشانگر (caret) روی یک عنصر، میتوانید
Navigate To را فراخوانی کنید و اقلام خاصتری را کاوش کنید.
یکی از اضافات اخیر،
Related Tests/Subject است، اما میتوانید دوستان قدیمی و آشنا مانند Consuming/Exposing APIs، Extension Methods، Show Usages یا Decompiled Sources را نیز پیدا کنید.
۳. مکانها و تغییرات اخیر (Recent Locations and Changes)
از نظر آماری، بخش بزرگی از کار ما به خواندن و ناوبری در کد مربوط میشود. تنها پس از درک بخشهای اطراف، میتوانیم با اطمینان ویژگیهای جدیدی پیادهسازی کنیم. تعویض بین خواندن و نوشتن ضروری میشود و ReSharper آن را آسان و هدفمند میکند.
وقتی شروع به تایپ در این پاپآپها میکنید، میتوانید نتایج را بیشتر فیلتر کنید. برای بسیاری از توسعهدهندگان، این اقدامات جستجو در تبهای ویرایشگر را منسوخ کرده است. آیا کسی افزونهای میشناسد تا آنها را کاملاً پنهان کند؟
۴. گسترش انتخاب (Extend Selection)
به عنوان یک توسعهدهنده، اغلب همکارانم را میبینم که برای انتخاب متن به ماوس وابستهاند، که ناکارآمد و اغلب نادقیق است. با اقدام
Extend Selection، میتوانید به طور متوالی بلوک منطقی بالاتر از موقعیت نشانگر اصلیتان را انتخاب کنید. Shrink Selection پشته انتخاب را به عقب برمیگرداند. این ویژگی – مشابه
Structural Navigation – بر مفهوم درختهای سینتکس انتزاعی (Abstract Syntax Trees) با تغییرات کوچک برای مفیدتر و قابل پیشبینیتر کردن تکیه دارد. هر دو پایه و اساس refactorings بعدی مانند
Introduce Variable یا
Extract Method را فراهم میکنند، با اجازه دادن به انتخاب دقیق. همچنین، ویژگی حذف ساختاری (Structural Remove) را فعال میکنند که فضاهای خالی و کاراکترهای کمکی اطراف انتخاب را حذف میکند. برای مثال، برای تبدیل
Type به
Type فقط با حذف
TOutput.
۵. جابجایی کد به بالا/پایین/چپ/راست (Move Code Up/Down/Left/Right)
مرتبسازی مجدد کد یک عمل رایج است، اما برش و چسباندن راهحل موقتی است که اغلب نیاز به اصلاحات دستی دارد. ReSharper به شما اجازه میدهد کد را در سطح ساختاری جابجا کنید و منطق و زمینه را حفظ کنید. برای مثال، میتوانید دستورات را به طور طبیعی مرتب کنید، حتی در چندین خط. Greedy brace روی دستورات ترکیبی مانند
if یا
using statements، راه سریع دیگری برای تنظیم دامنه بلوکهاست. من عمدتاً از Move Left/Right برای مرتب کردن عملوندهای عبارت، عناصر مجموعه یا پارامترها/آرگومانها استفاده میکنم. لیست جامع
موارد قابل اعمال حتی چند سورپرایز برای من داشت.
۶. مهاجرت به آخرین نسخه C# (Migrating to the Latest C#)
هر سال، جعبهای پر از ویژگیهای زبانی C# ارزشمند دریافت میکنیم – ممنون، Mads Torgersen و تیم زبان C#! به عنوان توسعهدهندگان، میخواهیم آنها را به طور کارآمد در سراسر کدبیس ادغام کنیم. با
inspections،
quick-fixes و
context actions ReSharper، میتوانید کد را نه تنها در یک نقطه، بلکه در
دامنه راهحل/پروژه/فایل با اطمینان مدرن کنید.
بسیاری از توسعهدهندگان به پیشنهادهای ReSharper برای کشف و اتخاذ ویژگیهای جدید C# وابستهاند. شخصاً، ممکن است همیشه به آن وابسته باشم، چون به ندرت pattern matching را از اولین بار درست میگیرم. 😉
۷. قالبهای پسوندی (Postfix Templates)
این ویژگی سبب میشود تا حتی به کاربران باتجربه ReSharper نیز چیزی جدید یاد بدهم. قالبهای پسوندی به شما اجازه میدهند تحولات پیچیدهای را از طریق اقلام تکمیل ویژه انجام دهید که مانند متدهای نمونه به نظر میرسند.
حتماً لیست رو به رشد
قالبهای پسوندی را بررسی کنید. مورد علاقههای شخصی من
collection.foreach،
Type.new و
expression.var هستند. با
آخرین اضافهشده ما –
service.inject – کمی مرزهای تصور را جابجا کردیم!
۸. پیکربندی سبک کد و فرمتبندی (Configuration of Code Style and Formatting)
۹. refactorings در سطح پروژه و فایل (Project- and File-Level Refactorings)
منوی زمینه Visual Studio در کاوشگر راهحل کمی شلوغ است. کی میخواهد در حین پروتوتایپینگ با ایجاد فایلها دست و پنجه نرم کند؟ کی میخواهد تمام namespaceها را وقتی ساختار پروژه را با جابجایی فایلها به پوشههای مختلف تمیز میکند، تنظیم کند؟ درست، ReSharper میخواهد آن را برای شما انجام دهد! 😆 و، به هر حال، حتماً
Convert Usings to Global refactoring اخیراً معرفیشده را بررسی کنید.