سؤال

لقد قمت بإنشاء ملحق Visual Studio الذي يتم تسليط الضوء على بناء جملة الموفر من خلال تنفيذه IClassifierProvider.أود إضافة ميزات إضافية مثل دعم المعيار Edit.CommentSelection و Edit.FormatDocument الأوامر، ولكن ليس لدي أي فكرة عن كيفية القيام بذلك.كل الوثائق التي يمكنني العثور عليها تتعلق بإضافة أوامر جديدة، لكن الأوامر التي أريد التعامل معها موجودة بالفعل.

كيف يمكنني التعامل مع هذه الأوامر؟

هل كانت مفيدة؟

المحلول

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

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

استخدام خدمة التعليق

مصدر: خدمة المعلقين (مكتبة الملحقات الأساسية لـ Tunnel Vision Labs لـ Visual Studio)

تتيح هذه الخدمات لمطوري الإضافات دعم أوامر التعليق وإلغاء التعليق بسهولة للغات الجديدة في Visual Studio.

توفير معلق قياسي

أسهل طريقة لتوفير ميزات التعليق هي استخدام المعيار Commenter تنفيذ ل ICommenter واجهه المستخدم.توضح الخطوات التالية كيفية إنشاء مثيل Commenter وتقديمها إلى خدمة التعليق عن طريق تصدير مثيل ICommenterProvider.

  1. إنشاء فئة جديدة مشتقة من ICommenterProvider.يتم تصدير هذه الفئة باستخدام MEF ExportAttribute لواحد أو أكثر من أنواع المحتوى المحددة باستخدام ContentTypeAttribute.يدعم المعلق في المثال سطر نمط C++ وتعليقات الحظر، لـ SimpleC نوع المحتوى.

    [Export(typeof(ICommenterProvider))]
    [ContentType("SimpleC")]
    public sealed class SimpleCCommenterProvider : ICommenterProvider
    {
      public ICommenter GetCommenter(ITextView textView)
      {
        // TODO: provide a commenter 
        throw new NotImplementedException();
      }
    }
    
  2. حدد تنسيق (تنسيقات) التعليق الذي سيدعمه المعلق.

    private static readonly LineCommentFormat LineCommentFormat =
      new LineCommentFormat("//");
    private static readonly BlockCommentFormat BlockCommentFormat =
      new BlockCommentFormat("/*", "*/");
    
  3. تنفيذ GetCommenter(ITextView) الطريقة عن طريق إرجاع مثيل Commenter.ال ITextUndoHistoryRegistry يتم استيراد الخدمة من أجل Commenter لدعم أوامر التراجع والإعادة بشكل صحيح.الكود التالي هو التنفيذ الكامل لـ ICommenterProvider مطلوب لدعم أوامر التعليق وإلغاء التعليق بلغة بسيطة.

    [Export(typeof(ICommenterProvider))]
    [ContentType("SimpleC")]
    public sealed class SimpleCCommenterProvider : ICommenterProvider
    {
      private static readonly LineCommentFormat LineCommentFormat =
        new LineCommentFormat("//");
      private static readonly BlockCommentFormat BlockCommentFormat =
        new BlockCommentFormat("/*", "*/");
    
      [Import]
      private ITextUndoHistoryRegistry TextUndoHistoryRegistry
      {
        get;
        set;
      }
    
      public ICommenter GetCommenter(ITextView textView)
      {
        Func<Commenter> factory =
          () => new Commenter(textView, TextUndoHistoryRegistry, LineCommentFormat, BlockCommentFormat);
        return textView.Properties.GetOrCreateSingletonProperty<Commenter>(factory);
      }
    }
    

التعامل مع الأوامر في Visual Studio

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

  1. قم بإنشاء فئة تنفذ IOleCommandTarget.ال QueryStatus يجب أن تتحقق الطريقة من الأوامر المحددة التي يعالجها هدف الأمر الخاص بك وتعيد إشارات الحالة المناسبة.ال Exec يجب تنفيذ الطريقة لتنفيذ الأوامر.
  2. سجل هدف الأمر بعرض نصي محدد عن طريق الاتصال IVsTextView.AddCommandFilter.إذا كنت تعمل باستخدام ملحق يستند إلى MEF، فيمكنك الحصول على ملف IVsTextView إما عن طريق تصدير مثيل IVsTextViewCreationListener, أو عن طريق استيراد IVsEditorAdaptersFactoryService المكون واستخدام GetViewAdapter طريقة الحصول على IVsTextView من مثال ITextView.

فيما يلي بعض التطبيقات المحددة للواجهات الموضحة هنا:

  1. CommandFilter:تطبق هذه الفئة المتطلبات الأساسية ل IOleCommandTarget
  2. TextViewCommandFilter:تطبق هذه الفئة وظائف إضافية لتبسيط عملية ربط مرشح الأوامر بعرض النص
  3. CommenterFilter:هذه الفئة عبارة عن تطبيق ملموس لمرشح الأوامر الذي يستخدمه تطبيق خدمة التعليق للتعامل مع اختيار التعليق و إلغاء التعليق على التحديد الأوامر
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top