Arash Taher Fa En

گفتی NRefactory چی بود ؟

همانطور که در پست قبل هم به آن اشاره شد NRefactory یکی‌ از پروژه‌های جانبی SherpDevelop می‌باشد. SharpDevelop در کنار پروژه دیگری موسوم به MonoDevelop دو مورد از جایگزین‌های Open source برای Visual Studio محسوب میشوند که از پارسر Mono برای پارس و کامپایل کردن کد‌های سی‌ شارپ استفاده می‌کند.

استفاده از این کتابخانه در محیط این IDE بسیار متنوع بوده، برای مثال می‌توان از استفاده‌های این کتابخانه برای ایجاد قابلیت IntelliSense ( تشخیص و تکمیل و تصحیح سینتکس ) و یا PrettyPrint و Reformat کردن کد را نام برد.

NRefactory ، پارسری برای سی‌ شارپ :

****از نظر تکنیکی‌ کتابخانه NRefactory یک Front-end parser برای سی‌ شارپ محسوب میشود. این کتابخانه با پارس کردن کد‌های یک برنامه به زبان سی‌ شارپ و یا ویژوال بیسیک، Abstract Syntax Tree مرتبط با آن کد را در اختیار ما قرار میدهد. علاوه بر این NRefactory این قابلیت را داشت که گره‌های موجود در این درخت را Resolve کند و Semantic آنها را نیز در اختیار ما بگذرد.

NRefactory پروژه‌ای با تقریبا صد هزار خط کد برنامه سی‌ شارپ است. به رغم حجیم بودن کد اما، این پروژه هم همانند بسیاری از پروژه‌های اپن سورس دیگر، تقریبا مستندات خاصی‌ برای آن وجود ندارد. با این وجود سه هزار و اندی unit test که در سورس اصلی‌ برنامه وجود دارد، منبع بسیار مناسبی برای آشنایی با چند و چون کار با این کتابخانه وسیع است. هرچند در ابتدا ارتباط برقرار کردن با این نوع از مستند‌سازی و استفاده از آن کمی‌ مشکل مینماید، اما پس از چندی این منبع عظیم و به روز، مناسب‌ترین و مطمئن‌ترین مکان برای آشنایی با قابلیت‌های کتابخانه و کم و کیف طرز کار آن تبدیل خواهد شد.

چرا Roslyn نه ؟

Roslyn همانند NRefactory یک Front-end parser برای سی‌ شارپ است که طراحی و پیاده‌سازی آن توسط مایکروسافت در حال پیگیری است. از جمله مشکلاتی که این کتابخانه دارد یکی‌ Stable نبودن و نرسیدن به نسخه نهایی‌ آن است، دیگری اینکه درختی که این برنامه از پارس کردن کد در اختیار ما قرار میدهد برخلاف NRefactory درختی Immutable است و نمی‌توان توسط آن کد را دستخوش تغییر کرد. این کتابخانه بیشتر برای بررسی‌ آماری کد مناسب به نظر می‌آید.

برای آشنایی با چگونگی‌ کلیت کار، میتوانید این قطعه کد را دانلود و مورد برسی‌ قرار دهید. هرچند در ابتدا مطالعه این مقاله که به دست یکی‌ از نویسندگان کتابخانه NRefactory نوشت شده، و همچنین آشنایی ابتدائی با Visitor Pattern پیشنهاد میشود. ( در آینده چنانچه فرصت شده به توضیح Visitor Pattern خواهم پرداخت )

Fork me on GitHub