Light Table の Tern JS が使えるようになった
◆ ただし修正必要
前に動かなかった Light Table の Tern JS
そろそろ直ってないかな と github を除いてみると 最近更新があったみたい
期待して最新の Light Table 0.8.1 を入れてプラグインで Tern JS をインストール!
さて 結果は……
動かない!!
相変わらず動かない
エラーは pipe broken とか spawn とか
なんか前と変わってる気はする
ぐぐってみるとこんなページがありました
https://github.com/mortalapeman/LT-TernJS/issues/26
最近の投稿ですし それっぽいです
JavaScript 修正する
原因は node のパスがおかしくて起動できてないことみたいですLight Table 0.8.0 で nw.js から electron に変わって それに合わせて変更しないといけないのにしていなかったみたい
0.8.0 って開発中のだと去年の中頃の話だよね……
なぜこんな対応が遅いんだろ
やっぱ需要無いの?
元のパスは
app/plugins/node/node
ここに設置するか electron 用にコードを修正するかです
修正版は github にはすでに公開されています
diff
変更点はこんなの
[src/lt/plugins/tern.cljs]
(defn node-exe []
(if (platform/win?)
"/plugins/node/node.exe"
"/plugins/node/node"))
を削除(if (platform/win?)
"/plugins/node/node.exe"
"/plugins/node/node"))
#js {:execPath (files/lt-home (node-exe))
↓#js {:execPath (.-executable js/process)
これはまだ プラグインマネージャでインストールできるバージョンでは対応されていないので 自分でプラグインを書き換えればいいんですね
…
……
…………
…………… コンパイルされてる!!!!
Light Table ですから? コードは Clojure で書かれています
electron で動かすために JavaScript 化が必要なので JavaScript にコンパイルされています
ファイルの場所はここです
AppData\LightTable\plugins\TernJS\ternjs_compiled.js
Windows 以外なら appdata より上の階層は 違いますがたいていホームディレクトリ内のどこかだと思います
とりあえず コンパイル済みの JavaScript の方を書き換えます
結果的には
"execPath": lt.objs.files.lt_home.call(null,lt.plugins.tern.node_exe.call(null))
を"execPath": process.executable
にすれば 動きました
node-exe 関数は もうひとつの変更のところで使ってるだけなので 消さなくて放置でも問題なしです
なので (files/lt-home (node-exe)) を (.-executable js/process) に変更するだけです
とはいっても Clojure の知識がほぼないので 関数呼び出してるくらいにしか読めないです
同じ Clojure のファイル内で似たことしているところを色々見て それと対応する JavaScript と比べていると
- js/xxxx は JavaScript の関数 xxxx のことで xxxx だけになる
- .-yyyy zzzz は zzzz.yyyy というプロパティを参照してる
らしい というのがわかりました
なので "execPath": のバリュー部分を process.executable に置き換えます
これで完了
Tern JS
動くようになった TernJS です補完ができてますね
TernJS がなくても Light Table は補完してくれますけど スコープなどをみないで そのファイルの中にある文字列から補完になるので ↓ の画像みたいに xyz が候補にあります
TernJS を入れると
その場所で見えない変数名は出てきません
プロパティもちゃんと判断してくれます
TernJS なしでは プロパティ判断はせずに補完します
特にこういうのが補完されるってすごいですよね
一般的に補完といえば Ctrl+Space ですが Light Table だと Ctrl+Space を押すとエディタのコマンド入力するところがでてきます
なので TernJS では Tab キーで補完項目を表示します
使い方書いていないので 見つけるまでに苦労しました
TernJS の機能は readme によると
- Auto-completion
- In-line documentation
- Jump to definition
の 3 つがあるようです
Auto-completion はできたのですが 残りの 2 つは?
補完のリストでビルトイン関数にカーソル合わせても特に何も出てきません
ジャンプも方法がわからないのでできるのか不明です
使えるようになっても まだ完成してないところも多いのかな
brackets くらい使えるようになってくれると嬉しいのですけど