كيفية تقييد استعلام أساليب ndepend على سمة النوع

StackOverflow https://stackoverflow.com/questions/2379045

  •  24-09-2019
  •  | 
  •  

سؤال

أحاول الحصول على ndepend لتحديد الطرق الطويلة باستخدام إصدار معدّل من استعلام "الطرق الكبيرة جدًا" القياسية.

لا أرغب في الإبلاغ عن طرق طويلة لم يكن للمطورين سيطرة ضئيلة على ذلك ، لذلك أقوم بتصفية التعليمات البرمجية التي تم إنشاؤها باستخدام DebuggerNonUserCode ميزة و InitializeComponent().

لسوء الحظ ، ما زلت أحصل على بعض الإيجابيات الخاطئة حيث يتم الإبلاغ عن الأساليب في الأنواع التي تم إنشاؤها أيضًا. المشكلة هي أنه في حين أن النوع نفسه لديه DebuggerNonUserCode السمة ، الأساليب لا ، لذلك يتم تضمينها في الإخراج على الرغم من حقيقة أنه تم إنشاؤها.

أبحث عن شيء مثل الانضمام بين الأنواع والأساليب: أعطني كل الأنواع التي لا تحتوي على DebuggerNonUserCode اعترض وتشغيل الاستعلام على هؤلاء ، لكن لا يمكنني معرفة كيفية التعبير عن هذا في CQL.

بالنسبة لبعض التجميعات ، يمكنني ببساطة التصفية على الاسم الكامل ، ولكن للأسف بعض التجميعات التي تم خلطها من قبل المطورين المصنوعة والأنواع التي تم إنشاؤها. لسوء الحظ، ال IsGeneratedByCompiler لا يمكن استخدامها إما في هذه الحالة.

استعلامي

WARN IF Count > 0 IN SELECT METHODS WHERE 
   NbLinesOfCode > 30 AND
   !HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
   !NameIs "InitializeComponent()"
   ORDER BY NbLinesOfCode DESC
هل كانت مفيدة؟

المحلول

براين ، بفضل قاعدة الكود على استعلام LINQ (CQLINQ) الكود المصدري لقاعدة الكود التي تطلبه هي:

warnif count > 0
from m in Application.Methods where
  m.NbLinesOfCode > 30 &&
 !m.ParentType.HasAttribute( "System.Diagnostics.DebuggerNonUserCodeAttribute") &&
  m.Name != "InitializeComponent()"
orderby m.NbLinesOfCode descending
select new { m, m.NbLinesOfCode }

يوفر بناء جملة CQLINQ أيضًا طريقة لتحديد ما هو فقط يا رمز. هذه الميزة تصف هنا. تحتاج أساسًا إلى تحديد المجموعة JustMyCode من خلال الاستعلامات بادئة مع Notmycode. ثم يمكن إعادة كتابة القاعدة التي تطلبها بسهولة:

warnif count > 0
from m in JustMyCode.Methods where
   m.NbLinesOfCode > 30
orderby m.NbLinesOfCode descending    
select new { m, m.NbLinesOfCode }

مجموعة JustMyCode يمكن إعادة استخدامها مرة واحدة للجميع على أي قاعدة رمز. الإضافة يمكنك إلقاء نظرة على Notmycode الاستعلام الافتراضي تجاهل الأساليب المولدة والمصمم من JustMyCode

نصائح أخرى

أنا أحب Ndepend تمامًا ، لكن لا يزال أكبر عيب واحد لا يمكن ربط مساحة الاسم/النوع/الطريقة في استعلام واحد. هذه الميزة ستجعل CQL أشياء قوية حقًا.

بصرف النظر عن ذلك الشيكاتisgeneratedbycompiler' و 'isinframeworkassemblyقد يكون مفيدًا. يمكنك أيضًا إزالة مساحات أسماء معينة من الاستعلام (خارج مساحات الأسماء "...")

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top