• 作成:

Emacsのlsp-modeでアクションが1つだけでも実行するか確認する

問題

Emacsのlsp-modeでlsp-execute-code-actionコマンドを実行すると、通常は利用できるActionたちがリストとして出てきて、選択して利用することが出来ます。自分の環境だとhelmインターフェイスで選択します。

しかし使えるActionが一つだけだと自動的にそれが実行されてしまい、実行するか悩むのも出来ないし、何が実行されたかも分かりません。

Actionが「良くする」ものばかりなら問題ないのですが、例えばJavaScriptでfunction定義をアロー関数に変えたり、余計なことをするアクションも多いので実行したくないものもたくさんあります。

解決策

なんとかならないかなと検索していたら以下の変数を見つけました。

(defcustom lsp-auto-execute-action t
  "Auto-execute single action."
  :type 'boolean
  :group 'lsp-mode)

これは、

(defun lsp--select-action (actions)
  "Select an action to execute from ACTIONS."
  (cond
   ((seq-empty-p actions) (signal 'lsp-no-code-actions nil))
   ((and (eq (seq-length actions) 1) lsp-auto-execute-action)
    (lsp-seq-first actions))
   (t (let ((completion-ignore-case t))
        (lsp--completing-read "Select code action: "
                              (seq-into actions 'list)
                              (-compose (lsp--create-unique-string-fn)
                                        #'lsp:code-action-title)
                              nil t)))))

で参照されているため、この変数をnilに設定することで自動実行されないようにすることが可能です。