Doom-emacs: [طلب] استخدم "format-all-the-code" فقط إذا كان خادم اللغة لا يدعم التنسيق

تم إنشاؤها على ٨ أغسطس ٢٠١٩  ·  3تعليقات  ·  مصدر: hlissner/doom-emacs

صِف الميزة

تم تقديم الفكرة الأساسية إلى format-all-the-code في https://github.com/lassik/emacs-format-all-the-code/issues/47. الافتراض هو أن خادم اللغة ربما يكون لديه فكرة أفضل عن كيفية تنسيق الكود أكثر من أي مجموعة افتراضية في format-all-the-code . الاقتراح ، المقتبس من هناك ، يسير على النحو التالي:

  1. إذا لم يتم تمكين lsp-mode للمخزن المؤقت الحالي ، فقم بالرجوع إلى السلوك الحالي.
  2. بخلاف ذلك ، تحقق من قدرة textDocument/formatting لخادم اللغة الحالي (أو ربما الخوادم ، حيث يبدو أن هذا سير عمل مدعوم). إذا لم يكن متاحًا ، فارجع إلى السلوك الحالي.
  3. بخلاف ذلك ، استخدم textDocument/formatting (ربما عبر lsp-format-buffer ) بدلاً من الأداة المحددة مسبقًا.

ليس من الواضح ما إذا كان من الأفضل جعل غلاف التنسيق التلقائي format-all-the-things أو توسيع غلاف التنسيق التلقائي doom-emacs 'فكرة أفضل. في كلتا الحالتين ، سأكون سعيدًا بالحصول على الميزة.

معلومات النظام

  • نظام التشغيل: جنو / لينكس (x86_64-pc-linux-gnu)
  • الصدف: / بن / باش
  • Emacs: 26.2 (Apr 12، 2019)
  • الموت: 2.0.9 (رأس -> تطوير ، _ ترقية / تطوير f754d4ff 2019-07-23 18:23:17 +0200)
  • عرض الرسوم البيانية: لا شيء (خفي: لا شيء)
  • ميزات النظام: XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS GLIB NotIFY LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 XIM XDBE
  • تفاصيل:
    '' إليسب
    env bootstrapper: لا شيء
    عدد elc: 0
    uname -a: Linux 5.0.0-25-generic # 26 ~ 18.04.1-Ubuntu SMP الخميس 1 أغسطس 13:51:02 بالتوقيت العالمي المنسق 2019 x86_64
    الوحدات النمطية: (: شركة الإكمال (Ivy + Fuzzy + childframe): ui doom doom-dashboard hl-todo modeline nav-flash ophints (popup + all + default) treemacs unicode vc-gutter vi-tilde-fringe window-select مساحات العمل: محرر أضعاف (تنسيق + حفظ) مقتطفات نصية متعددة المؤشرات: emacs dired vc: أدوات ansible direnv docker editorconfig EVAL flycheck (lookup + docsets) lsp magit جعل pdf rgb terraform: lang data emacs-lisp (go + lsp) (haskell + intero) (java + lsp) (javascript + lsp) (kotlin + lsp) latex markdown (org + attach + babel + التقاط + تصدير + العادة + الحالية + البروتوكول) perl php plantuml (python + lsp) qt rest ruby ​​(sh + fish) (web + lsp): كتابة التطبيق: config default)
    الحزم: (full-ack visual-regexp nginx-mode company-qml persistent-scratch gitlab-ci-mode gitlab-ci-mode-flycheck rpm-spec-mode kotlin-mode flycheck-kotlin puppet-prettier-js add-node -modules-path solaire-mode comment-dwim-2 ag lsp-python-ms glsl-mode)
    مسار exec: (./node_modules/.bin ~ / .npm -pack / bin / ~ / .local / bin / / bin ~ / go / bin ~ / .npm -pack / bin ~ / .cargo / bin / ~ /.npm-packages/bin/ ~ / .local / bin / / bin ~ / go / bin / bin ~ / bin ~ / .local / bin / usr / local / sbin / usr / local / bin / usr / sbin / usr / bin / sbin / bin / usr / games / usr / local / games / snap / bin ~ / .dotnet / tools / usr / lib / maven3 / bin ~ / .fzf / bin / usr / lib / x86_64-linux- gnu / emacs / 26.2 / x86_64-linux-gnu)
:editor format :tools lsp new resolved

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

اسف على الجواب المتاخر؛ مجرد رنين لإعلامك بأنني على علم بهذه المشكلة. لقد تأخرت إعادة كتابة الوحدة النمطية :editor format بشكل مؤلم ، وذلك لجعلها على دراية بـ LSP ، وربما لاستبدال format-all-the-code بـ rematter.el لتسهيل عملية تنسيق خلفية أكثر قابلية للتخصيص.

ومع ذلك ، ليس لدي وقت للعمل على هذا ، لكنني لم أنس الأمر.

أيضًا ، أثارKaali في # 2516 عدم وعي LSP هذا في وضع go-mode. في الوقت الحالي ، الحل لهذا هو تعطيل المنسق الخاص بنا عن طريق إضافة go-mode إلى +format-on-save-enabled-modes (وهي قائمة مرفوضة ، افتراضيًا ، نظرًا لأن العنصر الأول هو not ) ، ثم أضف lsp-format-buffer إلى الوضع المحلي قبل ربط الحفظ. على سبيل المثال

(add-to-list '+format-on-save-enabled-modes 'go-mode t)

(add-hook! 'go-mode-hook
  (add-hook 'before-save-hook #'lsp-format-buffer nil 'local)
  (add-hook 'before-save-hook #'lsp-organize-imports nil 'local))

ال 3 كومينتر

اسف على الجواب المتاخر؛ مجرد رنين لإعلامك بأنني على علم بهذه المشكلة. لقد تأخرت إعادة كتابة الوحدة النمطية :editor format بشكل مؤلم ، وذلك لجعلها على دراية بـ LSP ، وربما لاستبدال format-all-the-code بـ rematter.el لتسهيل عملية تنسيق خلفية أكثر قابلية للتخصيص.

ومع ذلك ، ليس لدي وقت للعمل على هذا ، لكنني لم أنس الأمر.

أيضًا ، أثارKaali في # 2516 عدم وعي LSP هذا في وضع go-mode. في الوقت الحالي ، الحل لهذا هو تعطيل المنسق الخاص بنا عن طريق إضافة go-mode إلى +format-on-save-enabled-modes (وهي قائمة مرفوضة ، افتراضيًا ، نظرًا لأن العنصر الأول هو not ) ، ثم أضف lsp-format-buffer إلى الوضع المحلي قبل ربط الحفظ. على سبيل المثال

(add-to-list '+format-on-save-enabled-modes 'go-mode t)

(add-hook! 'go-mode-hook
  (add-hook 'before-save-hook #'lsp-format-buffer nil 'local)
  (add-hook 'before-save-hook #'lsp-organize-imports nil 'local))

hlissner شكرا على ردود الفعل! قبل أن تستبدل format-all-the-code ، قد تكون مهتمًا بالتطورات الأخيرة ، والتي تقدم منسقات قابلة للتكوين عالمية ومحلية. بخلاف ذلك: لا تهتم بي ، سأكون سعيدًا إذا ومتى انتهى ، لكنني أيضًا سعيد جدًا بـ Doom الآن حتى بدونه :)

اعتبارًا من 7472cff ، تدعم أوامر التنسيق الخاصة بنا LSP (إذا كان الخادم قيد التشغيل يدعم التنسيق).

يمكن تعطيل هذا بشكل عام مع

(setq +format-with-lsp nil)

أو على أساس كل وضع مع

(setq-hook! 'python-mode-hook +format-with-lsp nil)

على أي حال سأعتبر أن هذا قد تم حله. شكرا للفت إنتباهي!

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