Dart-code: التحقيق في LSP

تم إنشاؤها على ٢٧ يناير ٢٠١٨  ·  4تعليقات  ·  مصدر: Dart-Code/Dart-Code

يحتوي Dart Code حاليًا على الكثير من التعليمات البرمجية التي يتم تعيينها من API لخادم التحليل إلى VS Code API. نظرًا لأن واجهات برمجة التطبيقات الخاصة بـ VS Code خاصة بالكود ، فإن هذا الرمز محدد جدًا ولا يمكن إعادة استخدامه. إذا دفعنا هذا الرمز إلى تطبيق LSP ، فيمكن مشاركته من قبل المحررين الآخرين الذين يطبقون LSP (على سبيل المثال ، يحتوي Visual Studio على دعم معاينة له).

تستهلك LSP

كود VS

لاستهلاك LSP في VS Code ، يمكنك إنشاء امتداد كالمعتاد ثم استخدام الحزمة vscode-languageclient لإنشاء محول لـ VS Code لاستخدامه للتواصل مع الخادم الخاص بك. يمكن للعميل إنتاج العملية أو تزويده بوظيفة تقوم بإرجاع عملية أو مجموعة أو تدفقات إدخال / إخراج ( انظر هنا ).

بالنسبة إلى Dart Code ، سنحتاج إلى أن نكون قادرين على التواصل مع الخادم للحصول على طلبات مخصصة إضافية لما يدعمه LSP والذي يمكن القيام به باستخدام الرسائل المخصصة .

استوديو مرئي

ملاحظة: "لا يمكن تثبيت ملحق Visual Studio LSP إلا على قناة معاينة Visual Studio. يجب عدم استخدام المعاينة لأغراض الإنتاج."

لاستهلاك LSP في Visual Studio ، يجب إنشاء امتداد كالمعتاد (والذي يحتوي حاليًا على امتداد معاينة LSP كاعتماد) ثم استخدام حزمة Microsoft.VisualStudio.LanguageServer.Client NuGet لإنشاء محول لبرنامج Visual Studio للتواصل مع الخادم الخاص بك.

التنفيذ

بناءً على ما سبق ، يجب أن يكون هناك مقدار صغير من TypeScript للحصول على رمز VS (وكمية صغيرة من C # إذا كنت تفعل الشيء نفسه في Visual Studio) للاتصال بتطبيق LSP. هذا الرمز صغير نسبيًا وهو فقط لتوليد الخادم وتسليمه إلى IDE. يجب على IDEs أن يعلنوا عن قدراتهم للخادم وأن يتواصلوا بشكل مباشر.

هناك عدد من الطرق الممكنة للقيام بذلك:

  1. شحن بروتوكول LSP داخل خادم التحليل في SDK
    قد يعني هذا وضع منطق اكتشاف SDK في الامتدادات (الامتدادات) بدلاً من خادم LSP والربط بجداول إصدار SDK
  2. اكتب خادم LSP كخادم وكيل يولد خادم التحليل ويتواصل عبر STDIO
    هذا يعني أننا نضيف عملية إضافة في المنتصف ، لكننا ما زلنا نتحدث إلى خادم التحليل بنفس الطريقة التي نتحدث بها اليوم (بالقيام بذلك بهذه الطريقة ، يمكن كتابة الخادم بتقنية أخرى إذا أردنا ذلك - يبدو Dart مرشحًا جيدًا ولكننا سنحتاج إلى واجهات برمجة التطبيقات لبروتوكول التشفير من المواصفات)
  3. اشحن خادم التحليل داخل الامتدادات (الامتدادات) واستضافها مباشرة داخل خادم LSP
    يؤدي هذا إلى التخلص من العملية الإضافية ولكنه يؤدي إلى تضخيم التوزيع ويربط الأشخاص بإصدار SDK معين
  4. لا تشحن خادم التحليل في الامتدادات (الامتدادات) ولكن قم بتحميله من SDK قيد المعالجة مباشرةً
    لا أعرف ما إذا كان هذا سيعمل - هل يمكنك تحميل الوحدات ديناميكيًا من مسارات غير معروفة؟
    نحتاج إلى التأكد من أن واجهة برمجة التطبيقات التي نستخدمها لإنشاء الخادم قيد المعالجة هنا مستقرة نظرًا لأن الإصدار في وقت التشغيل قد يكون أحدث مما كان لدينا عندما قمنا بشحن خادم LSP داخل الامتدادات (الامتدادات)

روابط ذات علاقة

كود VS

استوديو مرئي

التعليق الأكثر فائدة

أيضًا ، تدعم IDEs الأخرى مثل Atom أو Eclipse LSP.

إذا كنت ستقدم دعمًا قياسيًا لـ LSP ، فيمكن لفريقي محاولة دمج Flutter في Eclipse IDE. أعتقد أن دعم الأدوات المتنوعة سيكون مفيدًا جدًا لتكييف Flutter.

ال 4 كومينتر

أيضًا ، تدعم IDEs الأخرى مثل Atom أو Eclipse LSP.

إذا كنت ستقدم دعمًا قياسيًا لـ LSP ، فيمكن لفريقي محاولة دمج Flutter في Eclipse IDE. أعتقد أن دعم الأدوات المتنوعة سيكون مفيدًا جدًا لتكييف Flutter.

بالمناسبة ، هناك مستودع natebosch / dart_language_server على GitHub تحتفظ بهnatebosch. يبدو نشطًا بشكل معقول.

rcjsuen نعم ، هذا ما كنت أستخدمه في تجاربي (لقد أرسلت بعض العلاقات العامة هذا الأسبوع) :-)

تم التحقيق ، وبدأت في إضافة LSP إلى خادم تحليل Dart. يتم تتبع التقدم هنا:

https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/tool/lsp_spec/README.md

لا أعتقد أننا بحاجة إلى هذه القضية بعد الآن. قد ينتقل المكون الإضافي VS Code إلى بروتوكول LSP في المستقبل بمجرد أن يدعم كل ما نحتاجه (إما من خلال الطلبات الرسمية أو الطلبات المخصصة) لتجنب تدوير نسختين من الخادم.

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