Language-tools: توثيق المكونات بسلسلة docstring التي تظهر على وثائق التمرير

تم إنشاؤها على ٥ يوليو ٢٠٢٠  ·  16تعليقات  ·  مصدر: sveltejs/language-tools

مشكلة

باستخدام أدوات React ، يمكنك التعليق على مكون مثل هذا:

/** Documentation that will appear on hover in other places where this is imported */
function MyComponent() { return null }

ومع ذلك ، في Svelte ، لم أجد طريقة للقيام بذلك.

حل

أود أن أعرف أين يمكنني أن أضع تعليقًا سيتم تناوله من خلال التوثيق أثناء التحويم للمحررين مثل VSCode و Vim / Neovim (مع coc.nvim).

للتوضيح ، هنا أحوم فوق MyComponent لكني أرى فقط import MyComponent :

image

أود تضمين docstring Documentation that will appear on hover in other places where this is imported في تلميح الأداة.

لقد بحثت في Google عن هذا لفترة وجربت الإعداد المحلي الخاص بي باستخدام TypeScript ولا يمكنني العثور على طريقة للقيام بذلك. لقد وجدت مناقشة ذات صلة مثيرة للاهتمام حول البيانات الوصفية لمكونات Svelte ولكن المناقشة تدور حول أنواع الدعامة.

تحرير: نظرًا لأننا نناقش ما إذا كان من الأفضل إضافة هذا إلى المترجم ، فقد قمت بإنشاء مشكلة مماثلة هنا https://github.com/sveltejs/svelte/issues/5102

Fixed enhancement

ال 16 كومينتر

نظرًا لأن هذا قد يكون مفيدًا أيضًا للمكونات التي لا تحتوي على علامة البرنامج النصي ، أقترح استخدام تعليق HTML لذلك. سيبحث svelte2tsx بعد ذلك عن تعليقات HTML التي تبدأ بعلامة خاصة (مثل @doc ) ويضع المحتوى كملف jsdoc أعلى من التصدير الافتراضي.

آراء؟ أفكار أخرى؟

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

ما يتبادر إلى الذهن هو:

/**
 * <strong i="6">@file</strong> Here is my documentation for this component
 */

في بداية الملف. لكن أعتقد أن تعليقات HTML فقط هي التي تعمل هناك ، أليس كذلك؟

أيضًا ، ربما لجعلها أكثر تشابهًا مع العلامات الأخرى ، أشعر أن علامة <svelte:documentation> أقرب إلى <svelte:head> يمكن أن تكون لطيفة ، لكن هذا سيحتاج إلى أن يتم تنفيذه في المترجم.

ربما حتى <svelte:options documentation="blabla" /> ؟

سيحتاج ذلك أيضًا إلى بعض العمل في المترجم والموافقة على الريبو الرئيسي. تم التحقق من الخيارات من قبل المترجم.

لقد أنشأت مشكلة مماثلة في الريبو الرئيسي ، فلنرى ما إذا كان بإمكاننا الوصول إلى بعض الاستنتاجات: +1:

يتم تنفيذ نصفها بمجرد دمج https://github.com/sveltejs/language-tools/pull/282 . لم يكن LSP يُظهر سلاسل التوثيق عند المرور بالماوس.

الآن ما علي فعله هو الحصول على docstring من تعليق HTML @doc وإضافته إلى addComponentExport في svelte2tsx.

dummdidumm لا يمكن حاليًا إضافة

export default class {
    $$prop_def = __sveltets_partial(render().props)
    $$slot_def = render().slots
}

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

نعم لا ينبغي أن يكون ذلك مشكلة.

هل ينتهي الأمر بأي من هذه التعليمات البرمجية لتكون جزءًا من وقت تشغيل أحد التطبيقات ، أم أنها موجودة فقط لدعم الأدوات؟

فقط للأدوات.
حول هذا التصدير الافتراضي: نحتاج إلى التحقق من كيفية تأثير ذلك على الإكمال التلقائي للاستيراد.

حسنًا. لا أفهم كيف يعمل حاليًا. إذا حاولت محاكاته في بيئة TS فقط مثل هذا:

// Component.ts
export default class {}

لا أحصل على إكمالات تلقائية لـ Component على ملفات أخرى ، لكن على Svelte يعمل بطريقة ما. ربما ينبغي أن أقرأ الكود ذي الصلة في LSP.

على أي حال ، إذا فعلت هذا بدلاً من ذلك:

// Component.ts
export default class Component {}

ثم أحصل على الإكمالات التلقائية للتصدير الافتراضي كـ Component على الملفات الأخرى. لذلك أؤيد الرهان الآمن هو تسمية التصدير الافتراضي بنفس اسم الملف ، في الوقت الحالي ، ثم اختباره مباشرة.

حسنًا ، لقد جربت خيارين ، ولكن مع LSP الخاص بنا ، فإن الشيء الوحيد الذي يعمل من أجل الإكمال التلقائي لواردات المكونات هو:

export default class {
  // etc
}

الأشياء التي جربتها:

  • إعلان فئة ثم تصديرها كفئة افتراضية في سطر مختلف.
  • إضافة الاسم مباشرة في السطر export default class Name .

~ لا يعمل أي منهما. أنا الآن أبحث في موفر الإكمال (https://github.com/sveltejs/language-tools/blob/master/packages/language-server/src/plugins/typescript/features/CompletionProvider.ts) لمعرفة مكان الجاني هو أنني في بيئات TS فقط أحصل على إكمالات للتصدير الافتراضي للفئات المسماة ، بناءً على اسم الفئة.

تحديث: الإعلان عن فئة ثم تصديرها كفئة افتراضية في سطر مختلف يعمل طالما أن اسم التصدير هو نفسه اسم الملف. أنا ذاهب لهذا الخيار.

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات