gopls يضيف refactoring تفاعليًا يسأل المستخدم قبل التعديل، بعد تجاوز قيد في بروتوكول LSP
نشرت مدونة Go الرسمية يوم 16 أكتوبر 2026 مقالًا بعنوان “Interactive refactoring in gopls”، يشرح كيف صار gopls، وهو الـ language server الخاص بلغة Go، قادرًا على طرح أسئلة على المستخدم قبل تنفيذ عمليات الـ refactoring.
وكثير من المطورين لاحظوا أن عمليات الـ refactoring في VS Code أضعف منها في بيئات التطوير المدفوعة، وافترضوا أن المحرر نفسه هو السبب. لكن المقال يشير إلى سبب آخر في البروتوكول. فالمحرر يتواصل مع الـ language server عبر بروتوكول اسمه LSP، وفيه مفهوم يُسمى code action، أي طلب تنفيذ عملية معينة. وكان هذا الطلب يتم دفعة واحدة: المحرر يطلب التنفيذ، والخادم يعيد التعديلات فورًا. ولم يكن في البروتوكول أي مكان يتيح للخادم أن يسأل المستخدم شيئًا.
ويفسّر ذلك سلوكًا مألوفًا. فأمر إضافة struct tags كان يضيف دائمًا مفاتيح json بنمط camelCase دون سؤال. لم يكن ذلك تصميمًا متعمدًا، بل لأن الخادم لا يملك وسيلة للسؤال، فيخمّن ويمضي.
والتعديل الجديد يتيح للخادم فتح حوار من عدة خطوات قبل حساب التعديل. ونتج عنه حتى الآن ثلاث عمليات: إضافة struct tags مع اختيار المفاتيح ونمط التسمية، وحذف tags محددة بدل حذفها كلها، وتوليد دوال interface بالبحث عن اسمه. ولأن الذي تغيّر هو قيد في البروتوكول لا عملية بعينها، فإن الباب مفتوح لنوع كامل من العمليات.
ويعمل الدعم في gopls v0.24.0 مع امتداد Go لـ VS Code v0.56.0، بينما نزلت العمليات الجاهزة في v0.23.0. أما في Neovim وEmacs فالدعم ما زال تجربة أولية. ولم يصدر بعد نقل التعريف إلى ملف آخر، وهو في مرحلة معاينة لإصدار قادم، ولا تغيير الـ signature، الذي ما زال على خريطة الطريق في التذكرة رقم 38028.