# gopls يضيف refactoring تفاعليًا يسأل المستخدم قبل التعديل، بعد تجاوز قيد في بروتوكول LSP

> **المغزى:** المغزى: ضعف عمليات الـ refactoring في المحررات المجانية لم يكن في المحرر بل في بروتوكول لا يسمح للخادم بطرح سؤال. وإصلاح القيد يفتح فئة كاملة من العمليات لا ميزة واحدة.

- المصدر: المغزى (https://almaghza.com/a/2026-10-18-gopls-interactive-refactoring-lsp/)
- التاريخ: 7 جمادى الأولى - 18 أكتوبر 2026 (2026-10-18)
- القسم: برمجيات
- الوسوم: Go، Refactoring، VS Code، أدوات المطورين

نشرت مدونة 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.

## المصادر

- [مقال مدونة Go الرسمية](https://go.dev/blog/interactive-refactoring)
- [إصدارات gopls](https://github.com/golang/tools/releases)
- [امتداد Go لـ VS Code](https://marketplace.visualstudio.com/items?itemName=golang.Go)
- [تذكرة تغيير الـ signature رقم 38028](https://github.com/golang/go/issues/38028)
