ابحث عن methods غير مستخدمة ، Classes ، CONSTANTS ، @instance_variables ، @@class_variables ، و $global_variables في مشاريع روبي الخاصة بك.
الكود الذي لا يتم تنفيذه أبدًا هو رمز لا تحتاج إلى الحفاظ عليه
سوف تستخدم بقايا الطعام تحليلًا ثابتًا للعثور على أجزاء الكود هذه لك.
إنه يدرك كيفية استدعاء بعض الطرق للأحجار الكريمة لك ، بما في ذلك دعم الكثير من القضبان.
أضف هذا السطر إلى Gemfile في التطبيق الخاص بك:
gem 'leftovers' , require : falseثم تنفذ:
$ bundle
أو تثبيته بنفسك على النحو التالي:
$ gem install leftovers
قم بتشغيل leftovers في سطر الأوامر الخاص بك في جذر مشروعك. سيؤدي ذلك إلى إخراج التقدم لأنه يجمع المكالمات/المراجع والتعاريف في مشروعك. بعد ذلك سوف يخرج أي طرق محددة (أو فئات وما إلى ذلك) والتي لا تسمى.
$ leftovers
checked 25 files, collected 2473 calls, 262 definitions
Only directly called in tests:
lib/hello_world.rb:10:6 tested_unused_method def tested_unused_method
lib/hello_world.rb:18:6 another_tested_unused_method def another_tested_unused_method
Not directly called at all:
lib/hello_world.rb:6:6 generated_method= attr_accessor :generated_method
lib/hello_world.rb:6:6 generated_method attr_accessor :generated_method
how to resolve: https://github.com/robotdana/leftovers/tree/main/Readme.md#how-to-resolve
إذا كان هناك عدد هائل من النتائج ، فحاول استخدام- --write-todo
عند تشغيل leftovers ، سيتم إعطاؤك قائمة بالأسلوب والتعريفات الثابتة والمتغيرة التي تعتقد أنها غير مستخدمة. الآن ماذا؟
لقد تركوا عن غير قصد عند إزالة مكالماتهم:
يطلق عليهم ديناميكيا:
# leftovers:call my_unused_method ؛ أو# leftovers:keepيتم تعريفها عن قصد لاستخدامها فقط من خلال الاختبارات:
# leftovers:test_onlyإنهم من ملف لا ينبغي فحصه بواسطة بقايا الطعام:
exclude_paths: قائمة في ملف .leftovers.yml إذا كان هناك الكثير مما يجب معالجته عند إضافة بقايا الطعام أولاً إلى مشروعك ، فحاول تشغيل leftovers --write-todo ،
تشغيل leftovers --write-todo بإنشاء ملف تكوين إضافي يسمح لجميع التعريفات غير الممكنة حاليًا ، والتي سيتم قراءتها على المدى اللاحق من leftovers دون تنبيه أي من العناصر المذكورة فيه.
ارتكب هذا الملف حتى تتمكن أنت/فريقك من معالجة هذه العناصر تدريجياً مع الاستمرار في تنبيهك إلى أي عناصر غير مستخدمة حديثًا.
# leftovers:keep leftovers:keeps ، leftovers:skip ، leftovers:skips ، leftovers:skipped ، leftovers:allow ، leftovers:allows ، leftovers:allowed لتمييز تعريف الطريقة على أنه غير مستخدم ، أضف التعليق # leftovers:keep على نفس الخط مثل التعريف
class MyClass
def my_method # leftovers:keep
true
end
end من شأن هذا الإبلاغ عن أن MyClass غير مستخدم ، ولكن ليس my_method للقيام بذلك لجميع تعريفات هذا الاسم ، بدلاً من إضافة تعليق ، أضف الاسم إلى keep: قائمة في ملف التكوين.
# leftovers:test_only leftovers:for_test ، leftovers:for_tests ، leftovers:test ، leftovers:tests ، leftovers:testing
للاحتفال بتعريف من DIR غير الاختبار ، كما هو عن قصد يستخدم فقط من خلال الاختبارات ، استخدم leftovers:test_only
# app/my_class.rb
class MyClass
def my_method # leftovers:test_only
true
end
end # spec/my_class_spec.rb
describe MyClass do
it { expect ( subject . my_method ) . to be true }
end هذا من شأنه أن يعتبر my_method لاستخدامه ، على الرغم من أنه يطلق عليه الاختبارات فقط.
للقيام بذلك لجميع تعريفات هذا الاسم ، بدلاً من إضافة تعليق ، أضف الاسم إلى test_only: قائمة في ملف التكوين.
# leftovers:call leftovers:calls لتمييز مكالمة لا تستخدم القيم الحرفية ، استخدم leftovers:call باسم الطريقة المدرجة
method = [ :puts , :warn ] . sample # leftovers:call puts, warn
send ( method , 'text' ) هذا من شأنه أن ينظر في puts warn كلاهما تم استدعاؤه
# leftovers:dynamic:* لتمييز دعوة ديناميكية للتجزئة الحرفية والقيم المصفوفة دون تعداد كل شيء في التعليق مرة أخرى ، استخدم leftovers:dynamic: على نفس السطر مثل بداية الصفيف أو التجزئة
[ # leftovers:dynamic:call_attributes
:user ,
:admin
] . map { | method | send ( " #{ method } _attributes" ) } مع التكوين التالي مطابقة name: value إلى leftovers:dynamic:process_name
dynamic :
name : call_attributes
arguments : ' * '
add_suffix : ' _attributes ' هذا من شأنه أن ينظر في user_attributes و admin_attributes لكليهما.
تتم قراءة التكوين من .leftovers.yml في جذر مشروعك. وجودها اختياري وكل هذه الإعدادات اختيارية.
include_paths:exclude_paths:test_paths:requires:precompile:gems:keep:test_only:dynamic:راجع وثائق التكوين الكاملة للحصول على التفاصيل. راجع ملفات التكوين المدمجة أو تكوين هذا الريبو لأمثلة.
سوف يخلف بقايا الطعام عن الأساليب/الثوابت التي تحددها والتي تسمى خارج الكود (ربما بواسطة الأحجار الكريمة) على أنها غير مستخدمة
أضف هذه الأسماء إلى keep: قائمة في .leftovers.yml أو أضف تعليقًا مضمّنًا مع # leftovers:allow my_method_name
لا يقوم بقايا الطعام بتنفيذ الكود الخاص بك ، لذا فهو غير مدرك للمتغيرات EG في المكالمات التي يجب send (على سبيل المثال send(variable_method_name) ). (إنه على دراية بالمكالمات الثابتة (على سبيل المثال send(:my_method_name) ) ، لذا فإن استخدام خصوصية SEND to Bypass "غرامة")
أضف الطريقة/النمط إلى dynamic: قائمة باستخدام skip: true in .leftovers.yml ، أو إضافة تعليق مضمّن مع قائمة الاحتمالات # leftovers:call my_method_1, my_method_2 .
تقارن بقايا الطعام بالاسم فقط ، لذلك سيتم احتساب تعريفات متعددة مع نفس الاسم كما هو مستخدم حتى لو كان واحد فقط.
ستكون أرقام Haml و Slim & Erb وأرقام الأعمدة خاطئة حيث يجب أن يتم تجميع الملفات قبل التحقق.
لا يتم التقاط المكالمات والتعريفات الديناميكية على أساس القيم التي يتم نسخها بواسطة طريقة Rails with_options بواسطة بقايا الطعام.
بعد التحقق من الريبو ، قم بتشغيل bin/setup لتثبيت التبعيات. ثم ، قم بتشغيل rake spec لتشغيل الاختبارات.
لتثبيت هذه الأحجار الكريمة على جهازك المحلي ، قم بتشغيل bundle exec rake install .
يتم الترحيب بتقارير الأخطاء وطلبات السحب على Github على https://github.com/robotdana/leftovers.
أنا أشجع بشكل خاص المشكلات والتحسينات على التكوين الافتراضي ، سواء أكان توسيع التكوين الحالي/*. YML أو إضافة الأحجار الكريمة الجديدة. يجب [rubygems name].yml الملف
الجوهرة متوفرة كمصدر مفتوح بموجب شروط ترخيص معهد ماساتشوستس للتكنولوجيا.