勉強日記

チラ裏

【Emacs】intelephenseで変数名変更導入した


  • 若干詰まったのでメモ

TL;DR

  • 課金が必要
  • 古い場合はアップグレードが必要
  • NTEmacsだと若干調子悪い
    • Emacs on WSLを使おう

intelephense is 何

  • PHPのLanguage Server実装
    • Language ServerについてはLanguage Server Protocolなどで調べると良いと思います
    • 一言で言うと、エディタの機能を抽象化した感じのやつ
      • 各言語やりたいことは大体同じ
        • リネーム
        • 定義ジャンプ
        • 補完
        • etc.
  • npmでインストールできる
npm install --global intelephense

詳細

課金する

  • 公式
  • 2019/09/15現在、下記機能の利用には課金が必要
    • Rename
    • Code folding
    • Find all implementations
    • Go to declaration
    • Go to type definition
  • 課金せずに上記機能を利用しようとすると、下記のようなメッセージが出る
lsp-rename: Capability not supported by the language server: "renameProvider"
  • リネームにすら金とるのか!?と思いつつ課金する
    • PayPal利用可能
    • 2019年時点で、1000円で永久に複数端末で利用可能
    • 通常の社会人なら悩んでる時間の時給分のほうが無駄でしょう

ライセンス認証する

  • メールでライセンスキー文字列が届く
  • 使い方は公式FAQ
  • いくつかの有効化方法が提示されている
    • workspace/configurationcapabilityを使う方法
    • Language Server起動オプションに渡す方法
    • ホームディレクトリにlicence.txtを置く方法
  • 1つめ、2つめは下記理由につき避けた
    • init.el上での設定が面倒
    • emacs.d/をgit管理においているため、そもそもinit.elにライセンスキーを載せたくない
  • 3つめの方法をとった
    • windows
      • %USERPROFILE%/intelephense/licence.txt
    • linux
      • ~/intelephense/licence.txt

intelephenseをアップグレードする

  • これに気づかず若干ハマった
  • 1.1系だとまだrename機能が載っていなかったっぽい?
    • いつ載ったのかは調べてない
npm upgrade --global intelephense
/usr/local/bin/intelephense -> /usr/local/lib/node_modules/intelephense/lib/intelephense.js
- js-beautify@1.10.0 node_modules/intelephense/node_modules/js-beautify
- minimist@0.0.8 node_modules/intelephense/node_modules/mkdirp/node_modules/minimist
- vscode-uri@1.0.8 node_modules/intelephense/node_modules/vscode-languageserver/node_modules/vscode-uri
/usr/local/lib
└── intelephense@1.2.3 

LSP Serverを再起動する

M-x lsp-server-restart
  • ライセンス認証が通ると、~/intelephense/intelephense_licence_key_<ライセンスキー>ファイルが生成される
  • rename機能等が使える

f:id:wand_ta:20190916002554g:plain

使ってみて

  • NTEmacsだと変数名がブッ壊れたりしてちょっと調子悪い
  • ubuntuではいい感じだった
  • Emacs on WSLを使おう