پشتیبانی LSP Brakeman – انجمن DEV

اعلام پروژه ruby-lsp-brakeman!
این جواهر جدید به اسکن های Brakeman اجازه می دهد تا از طریق ruby-lsp در ویرایشگرهای کد یکپارچه شوند. اسکنها بهصورت ناهمزمان در پسزمینه اجرا میشوند و اخطارها را میتوان به صورت خطی در ویرایشگر نشان داد.
با استفاده از Ruby-LSP-Brakeman
اضافه کنید ruby-lsp-brakeman
به شما Gemfile
:
gem 'ruby-lsp-brakeman', require: false
در VS Code
اگر با VS Code استفاده می کنید، حتما پسوند Ruby LSP را نصب کنید.
bundle install
و سپس افزونه Ruby LSP را مجددا راه اندازی کنید تا افزونه فعال شود.
برای بررسی مجدد اینکه Brakeman در حال کار است، آن را بررسی کنید output
تب در پنل VS Code برای خروجی هایی مانند:
[info] (example-app) Finished initializing Ruby LSP!
[info] (example-app) [Brakeman] Activated Ruby LSP Brakeman, running initial scan
[info] (example-app) [Brakeman] Initial Brakeman scan complete - 0 warnings found
وقتی فایلها ذخیره میشوند، باید گزارشهایی مانند:
[info] (example-app) [Brakeman] Queued example-app/app/controllers/some_controller.rb
[info] (example-app) [Brakeman] Rescanning example-app/app/controllers/some_controller.rb
[info] (example-app) [Brakeman] Rescanned example-app/app/controllers/some_controller.rb
[info] (example-app) [Brakeman] Warnings: 0 new, 1 fixed, 2 total
یافتهها با زیرخطهای موزون نشان داده میشوند:
اطلاعات پس زمینه
فقط برای کسانی که علاقه مند به آنچه در پشت صحنه می گذرد!
پروتکل سرور زبان
پروتکل سرور زبان (LSP) استانداردی برای ارتباط بین ویرایشگرهای کد و ابزارهای مرتبط با کد است. این ابزارها را قادر می سازد تا به رویدادهای استاندارد برای بررسی کد، تکمیل کد، قالب بندی و غیره متصل شوند.
در دنیای روبی، Shopify's ruby-lsp
یک پیادهسازی راحت از LSP و توانایی ساخت «افزونهها» مانند را فراهم میکند ruby-lsp-brakeman
.
چگونه Brakeman یکپارچه شده است
افزونه Brakeman در درجه اول به نظارت بر تغییر فایل متصل می شود، که هنگام ذخیره یا حذف یک فایل فعال می شود. سپس فایل به یک صف برای اسکن مجدد اضافه می شود. تمام فایل های موجود در صف در اسکن بعدی مجدداً اسکن می شوند. این برای جلوگیری از شروع چندین اسکن همزمان یا از دست رفتن بهروزرسانی فایل است زیرا اسکن قبلاً در حال انجام بود.
هنگامی که اسکن کامل شد، هشدارها به عنوان “تشخیصی” گزارش می شوند تا در ویرایشگر نمایش داده شوند.
جالب است که بازگشت نیز ضروری است خالی مجموعهای از تشخیصها (در هر فایل تغییر یافته) برای پاک کردن هشدارهای ثابتی که قبلا گزارش شدهاند.
ترمز باز اسکن
برخلاف برخی دیگر از ابزارهای بررسی یا قالببندی کد، Brakeman در کل برنامه کار میکند، نه یک فایل در یک زمان. کد موجود در یک فایل می تواند در جای دیگری از برنامه تاثیر داشته باشد.
مدتها پیش، اسکنهای اسکن مجدد/افزایشی به Brakeman اضافه شد. برای رسیدن به این هدف، Brakeman باید کل وضعیت اسکن را در حافظه نگه دارد، سپس سعی کند تنها اطلاعات مربوطه را با تغییر فایل ها به روز کند. (این برخلاف اجرای اسکن فقط روی زیرمجموعه ای از فایل ها یا ذخیره کردن نتایج به صورت آفلاین در حافظه پنهان است. نکته جانبی: استفاده نکنید --only-files
سعی کنید این کار را انجام دهید!)
برای اینکه بداند چه چیزی باید بهروزرسانی داخلی شود، Brakeman سعی میکند بر اساس فایلی که تغییر کرده است (از جمله جلوههای آبشاری) حدس بزند. این همیشه از نظر اکتشافی بسیار سنگین بود و خیلی خوب آزمایش نشده بود. اما به نوعی بیشتر کار می کرد!
در تمام راه در Brakeman 5.0، پیاده سازی اسکن از استفاده از نام فایل ها و مسیرها برای تعیین نوع فایل (مثلاً، کنترلرها در مقابل مدل ها) به استفاده از محتویات فایل به جای آن تغییر کرد. با این حال، اسکن مجدد برای استفاده از این اطلاعات به روز نشد. از آنجایی که هنوز بر اساس مسیرهای فایل کار می کرد، دیگر با فایل هایی که به طور معمول توسط Brakeman اسکن می شدند هماهنگ نبود.
معنی همه اینها این است که اسکن مجدد از زمان Brakeman 5.0 در حالت شکسته و به آرامی رو به وخامت بوده است!
با Brakeman 7.0، اسکن مجدد اصلاح شده است. در حال حاضر، اسکن مجدد بر روی کش کردن فایل های تجزیه شده و فقط تجزیه مجدد فایل های تغییر یافته تمرکز دارد. بقیه اسکن از ابتدا شروع می شود. یافتن، خواندن و تجزیه فایلها اغلب یکی از کندترین بخشهای اسکن است، بنابراین همچنان باید در زمان بیشتر افراد صرفهجویی کند.
از آنجایی که کش کردن تمام فایلهای تجزیه شده مقداری از حافظه را به همراه دارد، عملکرد به طور پیشفرض خاموش است. برای فعال کردن، اسکن های اولیه باید با اجرا شوند support_rescanning: true
.
امیدواریم کارهای آینده بتواند دوباره بخش “افزاینده” اسکن مجدد را گسترش دهد.
بعد چه است
در حالی که این افزونه به طور کلی با VS Code کار می کند، من دوست دارم آن را کمی بیشتر اصلاح کنم و به نسخه 1.0 بروم.
من همچنین در نظر دارم اگر ruby-lsp-brakeman
باید به Brakeman بستگی داشته باشد، یا اگر واقعاً باید یک وابستگی Brakeman باشد تا همه آن را به طور پیش فرض در دسترس داشته باشند. اگر نظری در این مورد دارید به من اطلاع دهید.
لطفاً با آزمایش ruby-lsp-brakeman و به اشتراک گذاشتن هرگونه بازخورد/اشکال کمک کنید!